mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-08-24 07:23:01 +08:00
🐛 #858 修复批量添加卡券接口后推送事件被误判为重复消息的问题
This commit is contained in:
parent
50cfb1f16d
commit
ccbbf8c01a
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user