zhongrj
2023-08-08 2132e02e0d1a06b7e71be2a3aa92dbcc856783d9
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/push/service/impl/PushServiceImpl.java
@@ -1,60 +1,70 @@
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.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@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 static final String UNI_CLOUD_PUSH_URL = "https://fc-mp-ff11cc4d-ca8e-4b47-a57f-e26804379530.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);
   public Boolean saveCId(String userId, String cId) {
      bladeRedis.set(PUSH_CLIENT_ID + userId, cId);
      return Boolean.TRUE;
   }
   @Override
   public UniCloudReturnRes pushMessage(PushVO pushVO) {
   public Boolean pushMessageList(List<MessageRecord> messageRecordList) {
      // 加入测试人员
      addSendMsgTest(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());
      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;
      return pushMessage(pushVO);
   }
   @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;
   /**
    * 新增测试信息
    * @param messageRecordList
    */
   private void addSendMsgTest(List<MessageRecord> messageRecordList) {
      MessageRecord messageRecord = new MessageRecord();
      messageRecord.setRecipient("1654164141753593858");
      messageRecord.setContent(messageRecordList.get(0).getContent());
      messageRecord.setTheme(messageRecordList.get(0).getTheme());
      messageRecord.setSender(AuthUtil.getUserId().toString());
      messageRecord.setSource("智能告警");
      messageRecord.setStatus(0);
      // 加入集合
      messageRecordList.add(messageRecord);
   }
   @Override
@@ -69,10 +79,11 @@
      List<MessageRecord> notReadList = messageClient.getNotReadList(userId);
      PushVO pushVO = new PushVO();
      List<String> cIdList = new ArrayList<>();
      //设置cId
      pushVO.getCIds().add(getClientIdByUserId(userId));
      cIdList.add(getClientIdByUserId(userId));
      pushVO.setCIds(cIdList);
      //设置标题和内容
      notReadList.forEach(messageRecord -> {
         pushVO.setTitle(messageRecord.getTheme());
@@ -84,12 +95,62 @@
      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());
      return geTuiUtils.myPushMessage(cIdList, pushVO.getTitle(), pushVO.getContent());
   }
   /**
    * 根据用户id从redis中获取cid
    *
    * @param userId
    * @return
    */
   public String getClientIdByUserId(String userId){
      return bladeRedis.get(PUSH_CLIENT_ID+userId);
   public String getClientIdByUserId(String userId) {
      if (Func.isEmpty(userId)) {
         throw new ServiceException("请填写用户id!");
      }
      return bladeRedis.get(PUSH_CLIENT_ID + userId);
   }
   /**
    * 2.0云函数消息推送
    *
    * @param pushVO
    * @return
    */
   public Boolean pushMessage(PushVO pushVO) {
      RestTemplate template = new RestTemplate();
      Map<String, Object> params = new LinkedHashMap<>();
      //用户cId,可数组,可字符串
      params.put("pushClientid", pushVO.getCIds());
      //标题
      params.put("title", pushVO.getTitle());
      //内容
      params.put("content", pushVO.getContent());
      params.put("requestId", UUID.randomUUID());
//      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;
   }
}