Browse Source

增加发送消息重试

xueyiming 5 months ago
parent
commit
30e01fa3e8

+ 42 - 17
we-com-server/src/main/java/com/tzld/piaoquan/wecom/job/WeComMessageDataJob.java

@@ -427,27 +427,51 @@ public class WeComMessageDataJob {
             return ReturnT.SUCCESS;
             return ReturnT.SUCCESS;
         }
         }
         for (SendMessage sendMessage : groupList) {
         for (SendMessage sendMessage : groupList) {
-            sendMessage.setIsSend(0);
+            pushAndUpdateMessage(sendMessage);
-            sendMessage.setCreateTime(DateUtil.getThatDayDate());
+        }
-            List<String> sendUserList = sendMessageMapper.selectExternalUserId(sendMessage);
+        Map<Long, List<SendMessage>> groupedByStaffId = groupList.stream().collect(Collectors.groupingBy(SendMessage::getStaffId));
-            boolean flag = pushMessage(sendUserList, sendMessage);
+        for (Map.Entry<Long, List<SendMessage>> entry : groupedByStaffId.entrySet()) {
-            if (flag) {
+            SendMessageExample example = new SendMessageExample();
-                SendMessage updateSendMessage = new SendMessage();
+            example.createCriteria().andStaffIdEqualTo(entry.getKey()).andIsSendEqualTo(0)
-                updateSendMessage.setIsSend(1);
+                    .andCreateTimeGreaterThan(DateUtil.getThatDayDate());
-                SendMessageExample example = new SendMessageExample();
+            long l = sendMessageMapper.countByExample(example);
-                example.createCriteria()
+            //增加重试
-                        .andVideoId1EqualTo(sendMessage.getVideoId1())
+            if (l > 0) {
-                        .andVideoId2EqualTo(sendMessage.getVideoId2())
+                List<SendMessage> retryGroupList = sendMessageMapper.getGroupList(DateUtil.getThatDayDate(), 0);
-                        .andVideoId3EqualTo(sendMessage.getVideoId3())
+                retryGroupList = retryGroupList.stream().filter(e -> Objects.equals(e.getStaffId(), entry.getKey()))
-                        .andStaffIdEqualTo(sendMessage.getStaffId())
+                        .collect(Collectors.toList());
-                        .andCreateTimeGreaterThan(DateUtil.getThatDayDate());
+                for (SendMessage sendMessage : retryGroupList) {
-                sendMessageMapper.updateByExampleSelective(updateSendMessage, example);
+                    pushAndUpdateMessage(sendMessage);
+                }
             }
             }
-
+        }
+        SendMessageExample example = new SendMessageExample();
+        example.createCriteria().andIsSendEqualTo(0).andCreateTimeGreaterThan(DateUtil.getThatDayDate());
+        long l = sendMessageMapper.countByExample(example);
+        if (l > 0) {
+            LarkRobotUtil.sendMessage("存在发送失败消息,请检查@薛一鸣");
         }
         }
         return ReturnT.SUCCESS;
         return ReturnT.SUCCESS;
     }
     }
 
 
+    private void pushAndUpdateMessage(SendMessage sendMessage) {
+        sendMessage.setIsSend(0);
+        sendMessage.setCreateTime(DateUtil.getThatDayDate());
+        List<String> sendUserList = sendMessageMapper.selectExternalUserId(sendMessage);
+        boolean flag = pushMessage(sendUserList, sendMessage);
+        if (flag) {
+            SendMessage updateSendMessage = new SendMessage();
+            updateSendMessage.setIsSend(1);
+            SendMessageExample example = new SendMessageExample();
+            example.createCriteria()
+                    .andVideoId1EqualTo(sendMessage.getVideoId1())
+                    .andVideoId2EqualTo(sendMessage.getVideoId2())
+                    .andVideoId3EqualTo(sendMessage.getVideoId3())
+                    .andStaffIdEqualTo(sendMessage.getStaffId())
+                    .andCreateTimeGreaterThan(DateUtil.getThatDayDate());
+            sendMessageMapper.updateByExampleSelective(updateSendMessage, example);
+        }
+    }
 
 
     private boolean pushMessage(List<String> sendUserList, SendMessage sendMessage) {
     private boolean pushMessage(List<String> sendUserList, SendMessage sendMessage) {
         List<JSONObject> pushList = new ArrayList<>();
         List<JSONObject> pushList = new ArrayList<>();
@@ -474,7 +498,8 @@ public class WeComMessageDataJob {
             example.createCriteria().andMiniprogramVideoIdEqualTo(videoId);
             example.createCriteria().andMiniprogramVideoIdEqualTo(videoId);
             List<MessageAttachment> messageAttachmentList = messageAttachmentMapper.selectByExample(example);
             List<MessageAttachment> messageAttachmentList = messageAttachmentMapper.selectByExample(example);
             if (CollectionUtils.isEmpty(messageAttachmentList)) {
             if (CollectionUtils.isEmpty(messageAttachmentList)) {
-                throw new RuntimeException("附件信息查询异常");
+                log.error("附件信息查询异常");
+                return false;
             }
             }
             MessageAttachment messageAttachment = messageAttachmentList.get(0);
             MessageAttachment messageAttachment = messageAttachmentList.get(0);
             JSONObject miniprogram = new JSONObject();
             JSONObject miniprogram = new JSONObject();