🐛 #858 修复批量添加卡券接口后推送事件被误判为重复消息的问题

This commit is contained in:
Binary Wang 2019-08-29 16:10:49 +08:00
parent 50cfb1f16d
commit ccbbf8c01a

View File

@ -53,7 +53,6 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
* @author Daniel Qian * @author Daniel Qian
*/ */
public class WxMpMessageRouter { public class WxMpMessageRouter {
private static final int DEFAULT_THREAD_POOL_SIZE = 100; private static final int DEFAULT_THREAD_POOL_SIZE = 100;
protected final Logger log = LoggerFactory.getLogger(WxMpMessageRouter.class); protected final Logger log = LoggerFactory.getLogger(WxMpMessageRouter.class);
private final List<WxMpMessageRouterRule> rules = new ArrayList<>(); private final List<WxMpMessageRouterRule> rules = new ArrayList<>();
@ -77,9 +76,7 @@ public class WxMpMessageRouter {
} }
/** /**
* <pre> * 使用自定义的 {@link ExecutorService}.
* 使用自定义的 {@link ExecutorService}
* </pre>
*/ */
public WxMpMessageRouter(WxMpService wxMpService, ExecutorService executorService) { public WxMpMessageRouter(WxMpService wxMpService, ExecutorService executorService) {
this.wxMpService = wxMpService; this.wxMpService = wxMpService;
@ -90,9 +87,7 @@ public class WxMpMessageRouter {
} }
/** /**
* <pre> * 如果使用默认的 {@link ExecutorService}则系统退出前应该调用该方法.
* 如果使用默认的 {@link ExecutorService}则系统退出前应该调用该方法
* </pre>
*/ */
public void shutDownExecutorService() { public void shutDownExecutorService() {
this.executorService.shutdown(); this.executorService.shutdown();
@ -230,23 +225,26 @@ public class WxMpMessageRouter {
} }
public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) { public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) {
return this.route(wxMessage, new HashMap<String, Object>()); return this.route(wxMessage, new HashMap<String, Object>(2));
} }
protected boolean isMsgDuplicated(WxMpXmlMessage wxMessage) { private boolean isMsgDuplicated(WxMpXmlMessage wxMessage) {
StringBuilder messageId = new StringBuilder(); StringBuilder messageId = new StringBuilder();
if (wxMessage.getMsgId() == null) { if (wxMessage.getMsgId() == null) {
messageId.append(wxMessage.getCreateTime()) messageId.append(wxMessage.getCreateTime())
.append("-").append(wxMessage.getFromUser()) .append("-").append(wxMessage.getFromUser())
.append("-").append(StringUtils.trimToEmpty(wxMessage.getEventKey())) .append("-").append(StringUtils.trimToEmpty(wxMessage.getEventKey()))
.append("-").append(StringUtils.trimToEmpty(wxMessage.getEvent())) .append("-").append(StringUtils.trimToEmpty(wxMessage.getEvent()));
;
} else { } else {
messageId.append(wxMessage.getMsgId()) messageId.append(wxMessage.getMsgId())
.append("-").append(wxMessage.getCreateTime()) .append("-").append(wxMessage.getCreateTime())
.append("-").append(wxMessage.getFromUser()); .append("-").append(wxMessage.getFromUser());
} }
if (StringUtils.isNotEmpty(wxMessage.getUserCardCode())) {
messageId.append("-").append(wxMessage.getUserCardCode());
}
return this.messageDuplicateChecker.isDuplicate(messageId.toString()); return this.messageDuplicateChecker.isDuplicate(messageId.toString());
} }
@ -254,12 +252,10 @@ public class WxMpMessageRouter {
/** /**
* 对session的访问结束. * 对session的访问结束.
*/ */
protected void sessionEndAccess(WxMpXmlMessage wxMessage) { private void sessionEndAccess(WxMpXmlMessage wxMessage) {
InternalSession session = ((InternalSessionManager) this.sessionManager).findSession(wxMessage.getFromUser()); InternalSession session = ((InternalSessionManager) this.sessionManager).findSession(wxMessage.getFromUser());
if (session != null) { if (session != null) {
session.endAccess(); session.endAccess();
} }
} }
} }