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);
|
}
|
}
|