| @@ -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)) { | |||