Procházet zdrojové kódy

增加发送消息重试

xueyiming před 4 měsíci
rodič
revize
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;
         }
         for (SendMessage sendMessage : groupList) {
-            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);
+            pushAndUpdateMessage(sendMessage);
+        }
+        Map<Long, List<SendMessage>> groupedByStaffId = groupList.stream().collect(Collectors.groupingBy(SendMessage::getStaffId));
+        for (Map.Entry<Long, List<SendMessage>> entry : groupedByStaffId.entrySet()) {
+            SendMessageExample example = new SendMessageExample();
+            example.createCriteria().andStaffIdEqualTo(entry.getKey()).andIsSendEqualTo(0)
+                    .andCreateTimeGreaterThan(DateUtil.getThatDayDate());
+            long l = sendMessageMapper.countByExample(example);
+            //增加重试
+            if (l > 0) {
+                List<SendMessage> retryGroupList = sendMessageMapper.getGroupList(DateUtil.getThatDayDate(), 0);
+                retryGroupList = retryGroupList.stream().filter(e -> Objects.equals(e.getStaffId(), entry.getKey()))
+                        .collect(Collectors.toList());
+                for (SendMessage sendMessage : retryGroupList) {
+                    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;
     }
 
+    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) {
         List<JSONObject> pushList = new ArrayList<>();
@@ -474,7 +498,8 @@ public class WeComMessageDataJob {
             example.createCriteria().andMiniprogramVideoIdEqualTo(videoId);
             List<MessageAttachment> messageAttachmentList = messageAttachmentMapper.selectByExample(example);
             if (CollectionUtils.isEmpty(messageAttachmentList)) {
-                throw new RuntimeException("附件信息查询异常");
+                log.error("附件信息查询异常");
+                return false;
             }
             MessageAttachment messageAttachment = messageAttachmentList.get(0);
             JSONObject miniprogram = new JSONObject();