guoshilong
2023-07-18 e80e2d475c294d5b0f9c0ad06a0b06af92eefe59
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
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.redis.cache.BladeRedis;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
 
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 UniCloudReturnRes pushMessage(PushVO pushVO) {
 
        RestTemplate template = new RestTemplate();
        Map<String, Object> params = new LinkedHashMap<>();
 
        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);
        return uniCloudReturnRes;
    }
 
    @Override
    public Boolean pushMessageList(List<MessageRecord> messageRecordList) {
        PushVO pushVO = new PushVO();
        messageRecordList.forEach(messageRecord -> {
            String clientId = getClientIdByUserId(messageRecord.getRecipient());
 
            pushVO.getCIds().add(clientId);
            pushVO.setTitle(messageRecord.getTheme());
            pushVO.setContent(messageRecord.getContent());
 
        });
        UniCloudReturnRes uniCloudReturnRes = pushMessage(pushVO);
        return uniCloudReturnRes.getErrCode().equals(0)?true:false;
    }
 
    @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();
 
        //设置cId
        pushVO.getCIds().add(getClientIdByUserId(userId));
 
        //设置标题和内容
        notReadList.forEach(messageRecord -> {
            pushVO.setTitle(messageRecord.getTheme());
            pushVO.setContent(messageRecord.getContent());
            //推送消息
            pushMessage(pushVO);
        });
 
        return true;
    }
 
    /**
     * 根据用户id从redis中获取cid
     * @param userId
     * @return
     */
    public String getClientIdByUserId(String userId){
        return bladeRedis.get(PUSH_CLIENT_ID+userId);
    }
}