guoshilong
2023-07-18 6aa1ef804ab91c4d9d6b069fb22f8f0ca81e13c7
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
package cn.gistack.alerts.push.service.impl;
 
import cn.gistack.alerts.push.service.IPushService;
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;
 
    @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 pushMessage(pushVO);
    }
 
    @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);
    }
 
    /**
     * 根据用户id从redis中获取cid
     * @param userId
     * @return
     */
    public String getClientIdByUserId(String userId){
        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;
 
    }
}