Skip to content

[企业微信] 批量审批回调时去重异常 #3088

Closed
@nadirvishun

Description

@nadirvishun

简要描述

当审批人批量审批时,同一个提交人提交了两个审批,由于时间也一致,导致其中一条消息被排重了。

模块版本情况

  • WxJava 模块名: weixin-java-cp
  • WxJava 版本号: 4.4.4.B (最新版本没有改动)

可能的解决方法

  • WxCpMessageRouter类中的isMsgDuplicated方法,增加审批编号的判定:
    private boolean isMsgDuplicated(WxCpXmlMessage wxMessage) {
          StringBuilder messageId = new StringBuilder();
          if (wxMessage.getMsgId() == null) {
              messageId.append(wxMessage.getCreateTime())
                      .append("-").append(StringUtils.trimToEmpty(String.valueOf(wxMessage.getAgentId())))
                      .append("-").append(wxMessage.getFromUserName())
                      .append("-").append(StringUtils.trimToEmpty(wxMessage.getEventKey()))
                      .append("-").append(StringUtils.trimToEmpty(wxMessage.getEvent()));
          } else {
              messageId.append(wxMessage.getMsgId())
                      .append("-").append(wxMessage.getCreateTime())
                      .append("-").append(wxMessage.getFromUserName());
          }
          append(messageId, wxMessage.getUserId());
          append(messageId, wxMessage.getChangeType());
          append(messageId, wxMessage.getTagId());
          append(messageId, wxMessage.getId());
          append(messageId, wxMessage.getChatId());
          append(messageId, wxMessage.getExternalUserId());
    
         //这里,增加审批编号
          if(StringUtils.isNotBlank(wxMessage.getApprovalInfo().getSpNo())){
              append(messageId, wxMessage.getApprovalInfo().getSpNo());
          }
    
          return this.messageDuplicateChecker.isDuplicate(messageId.toString());
      }
  • 或者是此类中是否可以增加个类似setMessageId的相关方法,方便后续开发者自己来定义自己的规则来生成messageId

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions