guoshilong
2023-07-19 1dbee9d9692e797ec96227de5fe7ace139ad63b7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package cn.gistack.alerts.push.service.impl;
 
import cn.gistack.alerts.push.service.IPushService;
import cn.gistack.alerts.push.utils.GeTuiUtils;
import cn.gistack.alerts.push.vo.PushVO;
import cn.gistack.alerts.push.vo.UniCloudReturnRes;
import cn.gistack.sm.message.entity.MessageRecord;
import cn.gistack.sm.message.feign.IMessageClient;
import lombok.AllArgsConstructor;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.utils.Func;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
 
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
 
@Service
@AllArgsConstructor
public class PushServiceImpl implements IPushService {
    private static final String PUSH_CLIENT_ID = "push:client:id:";
    private static final String UNI_CLOUD_PUSH_URL = "https://fc-mp-ad1ed7e3-700e-4fca-abae-0d097cc222b5.next.bspapp.com/push";
 
    private BladeRedis bladeRedis;
    private IMessageClient messageClient;
    private GeTuiUtils geTuiUtils;
 
    @Override
    public Boolean saveCId(String userId, String cId) {
        bladeRedis.set(PUSH_CLIENT_ID + userId, cId);
        return Boolean.TRUE;
    }
 
    @Override
    public Boolean pushMessageList(List<MessageRecord> messageRecordList) {
        PushVO pushVO = new PushVO();
        List<String> cIdList = new ArrayList<>();
        //相同的消息推送给多用户
        messageRecordList.forEach(messageRecord -> {
            //获取用户cId
            String clientId = getClientIdByUserId(messageRecord.getRecipient());
            cIdList.add(clientId);
        });
        pushVO.setCIds(cIdList);
        pushVO.setTitle(messageRecordList.get(0).getTheme());
        pushVO.setContent(messageRecordList.get(0).getContent());
 
        return geTuiUtils.pushMsg(pushVO.getCIds(),pushVO.getTitle(),pushVO.getContent());
    }
 
    @Override
    public Boolean clearCId(String userId) {
        Boolean del = bladeRedis.del(PUSH_CLIENT_ID + userId);
        return del;
    }
 
    @Override
    public Boolean pushMessageOnLaunch(String userId) {
        //获取未读的消息列表
        List<MessageRecord> notReadList = messageClient.getNotReadList(userId);
 
        PushVO pushVO = new PushVO();
        List<String> cIdList = new ArrayList<>();
 
        //设置cId
        cIdList.add(getClientIdByUserId(userId));
        pushVO.setCIds(cIdList);
        //设置标题和内容
        notReadList.forEach(messageRecord -> {
            pushVO.setTitle(messageRecord.getTheme());
            pushVO.setContent(messageRecord.getContent());
            //推送消息
            pushMessage(pushVO);
        });
 
        return true;
    }
 
    @Override
    public Boolean pushMessageByUserId(PushVO pushVO) {
 
        if (Func.isEmpty(pushVO.getUserId())) {
            throw new ServiceException("请填写用户id!");
        }
 
        String clientIdByUserId = getClientIdByUserId(pushVO.getUserId());
        List<String> cIdList = new ArrayList<>();
        cIdList.add(clientIdByUserId);
        pushVO.setCIds(cIdList);
 
        return pushMessage(pushVO);
    }
 
    @Override
    public Boolean geTuiPushMessage(PushVO pushVO) {
 
        List<String> cIdList = new ArrayList<>();
        cIdList.add(getClientIdByUserId(pushVO.getUserId()));
        return geTuiUtils.pushMsg(cIdList, pushVO.getTitle(), pushVO.getContent());
    }
 
    /**
     * 根据用户id从redis中获取cid
     *
     * @param userId
     * @return
     */
    public String getClientIdByUserId(String userId) {
 
        if (Func.isEmpty(userId)) {
            throw new ServiceException("请填写用户id!");
        }
 
 
        return bladeRedis.get(PUSH_CLIENT_ID + userId);
    }
 
    /**
     * 消息推送
     *
     * @param pushVO
     * @return
     */
    public Boolean pushMessage(PushVO pushVO) {
 
        RestTemplate template = new RestTemplate();
        Map<String, Object> params = new LinkedHashMap<>();
        //用户cId,可数组,可字符串
        params.put("push_clientid", pushVO.getCIds());
        //标题
        params.put("title", pushVO.getTitle());
        //内容
        params.put("content", pushVO.getContent());
//        UniCloudReturnRes uniCloudReturnRes = template.getForObject(UNI_CLOUD_PUSH_URL,UniCloudReturnRes.class,params);
        UniCloudReturnRes uniCloudReturnRes = template.postForObject(UNI_CLOUD_PUSH_URL, params, UniCloudReturnRes.class);
        return uniCloudReturnRes.getErrCode().equals(0) ? true : false;
 
    }
}