@@ -14,7 +14,9 @@ import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import java.util.ArrayList; | |||
import java.util.HashMap; | |||
import java.util.List; | |||
import java.util.Map; | |||
import java.util.concurrent.ExecutionException; | |||
import java.util.concurrent.ExecutorService; | |||
import java.util.concurrent.Executors; | |||
@@ -135,8 +137,9 @@ public class WxCpMessageRouter { | |||
* 处理微信消息 | |||
* | |||
* @param wxMessage | |||
* @param context | |||
*/ | |||
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage) { | |||
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage, final Map<String, Object> context) { | |||
if (isDuplicateMessage(wxMessage)) { | |||
// 如果是重复消息,那么就不做处理 | |||
return null; | |||
@@ -166,12 +169,12 @@ public class WxCpMessageRouter { | |||
this.executorService.submit(new Runnable() { | |||
@Override | |||
public void run() { | |||
rule.service(wxMessage, WxCpMessageRouter.this.wxCpService, WxCpMessageRouter.this.sessionManager, WxCpMessageRouter.this.exceptionHandler); | |||
rule.service(wxMessage, context, WxCpMessageRouter.this.wxCpService, WxCpMessageRouter.this.sessionManager, WxCpMessageRouter.this.exceptionHandler); | |||
} | |||
}) | |||
); | |||
} else { | |||
res = rule.service(wxMessage, this.wxCpService, this.sessionManager, this.exceptionHandler); | |||
res = rule.service(wxMessage, context, this.wxCpService, this.sessionManager, this.exceptionHandler); | |||
// 在同步操作结束,session访问结束 | |||
this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUserName()); | |||
sessionEndAccess(wxMessage); | |||
@@ -200,6 +203,16 @@ public class WxCpMessageRouter { | |||
return res; | |||
} | |||
/** | |||
* 处理微信消息 | |||
* | |||
* @param wxMessage | |||
*/ | |||
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage) { | |||
return this.route(wxMessage, new HashMap<String, Object>()); | |||
} | |||
protected boolean isDuplicateMessage(WxCpXmlMessage wxMessage) { | |||
String messageId = ""; | |||
@@ -229,13 +229,16 @@ public class WxCpMessageRouterRule { | |||
* @return true 代表继续执行别的router,false 代表停止执行别的router | |||
*/ | |||
protected WxCpXmlOutMessage service(WxCpXmlMessage wxMessage, | |||
Map<String, Object> context, | |||
WxCpService wxCpService, | |||
WxSessionManager sessionManager, | |||
WxErrorExceptionHandler exceptionHandler) { | |||
try { | |||
if (context == null) { | |||
context = new HashMap<>(); | |||
} | |||
Map<String, Object> context = new HashMap<>(); | |||
try { | |||
// 如果拦截器不通过 | |||
for (WxCpMessageInterceptor interceptor : this.interceptors) { | |||
if (!interceptor.intercept(wxMessage, context, wxCpService, sessionManager)) { | |||
@@ -14,7 +14,9 @@ import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import java.util.ArrayList; | |||
import java.util.HashMap; | |||
import java.util.List; | |||
import java.util.Map; | |||
import java.util.concurrent.ExecutionException; | |||
import java.util.concurrent.ExecutorService; | |||
import java.util.concurrent.Executors; | |||
@@ -126,7 +128,7 @@ public class WxMpMessageRouter { | |||
/** | |||
* 处理微信消息 | |||
*/ | |||
public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) { | |||
public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage, final Map<String, Object> context) { | |||
if (isMsgDuplicated(wxMessage)) { | |||
// 如果是重复消息,那么就不做处理 | |||
return null; | |||
@@ -156,12 +158,12 @@ public class WxMpMessageRouter { | |||
this.executorService.submit(new Runnable() { | |||
@Override | |||
public void run() { | |||
rule.service(wxMessage, WxMpMessageRouter.this.wxMpService, WxMpMessageRouter.this.sessionManager, WxMpMessageRouter.this.exceptionHandler); | |||
rule.service(wxMessage, context, WxMpMessageRouter.this.wxMpService, WxMpMessageRouter.this.sessionManager, WxMpMessageRouter.this.exceptionHandler); | |||
} | |||
}) | |||
); | |||
} else { | |||
res = rule.service(wxMessage, this.wxMpService, this.sessionManager, this.exceptionHandler); | |||
res = rule.service(wxMessage, context, this.wxMpService, this.sessionManager, this.exceptionHandler); | |||
// 在同步操作结束,session访问结束 | |||
this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUser()); | |||
sessionEndAccess(wxMessage); | |||
@@ -188,6 +190,10 @@ public class WxMpMessageRouter { | |||
return res; | |||
} | |||
public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) { | |||
return this.route(wxMessage, new HashMap<String, Object>()); | |||
} | |||
protected boolean isMsgDuplicated(WxMpXmlMessage wxMessage) { | |||
StringBuilder messageId = new StringBuilder(); | |||
@@ -193,13 +193,16 @@ public class WxMpMessageRouterRule { | |||
* @return true 代表继续执行别的router,false 代表停止执行别的router | |||
*/ | |||
protected WxMpXmlOutMessage service(WxMpXmlMessage wxMessage, | |||
Map<String, Object> context, | |||
WxMpService wxMpService, | |||
WxSessionManager sessionManager, | |||
WxErrorExceptionHandler exceptionHandler) { | |||
try { | |||
if (context == null) { | |||
context = new HashMap<>(); | |||
} | |||
Map<String, Object> context = new HashMap<>(); | |||
try { | |||
// 如果拦截器不通过 | |||
for (WxMpMessageInterceptor interceptor : this.interceptors) { | |||
if (!interceptor.intercept(wxMessage, context, wxMpService, sessionManager)) { | |||