Browse Source

消息路由器路由时可以传入context (#245)

master
Hyseen 8 years ago
committed by Binary Wang
parent
commit
563302eef6
4 changed files with 35 additions and 10 deletions
  1. +16
    -3
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouter.java
  2. +5
    -2
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouterRule.java
  3. +9
    -3
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java
  4. +5
    -2
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouterRule.java

+ 16
- 3
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouter.java View File

@@ -14,7 +14,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;


import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
@@ -135,8 +137,9 @@ public class WxCpMessageRouter {
* 处理微信消息 * 处理微信消息
* *
* @param wxMessage * @param wxMessage
* @param context
*/ */
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage) {
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage, final Map<String, Object> context) {
if (isDuplicateMessage(wxMessage)) { if (isDuplicateMessage(wxMessage)) {
// 如果是重复消息,那么就不做处理 // 如果是重复消息,那么就不做处理
return null; return null;
@@ -166,12 +169,12 @@ public class WxCpMessageRouter {
this.executorService.submit(new Runnable() { this.executorService.submit(new Runnable() {
@Override @Override
public void run() { 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 { } else {
res = rule.service(wxMessage, this.wxCpService, this.sessionManager, this.exceptionHandler);
res = rule.service(wxMessage, context, this.wxCpService, this.sessionManager, this.exceptionHandler);
// 在同步操作结束,session访问结束 // 在同步操作结束,session访问结束
this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUserName()); this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUserName());
sessionEndAccess(wxMessage); sessionEndAccess(wxMessage);
@@ -200,6 +203,16 @@ public class WxCpMessageRouter {
return res; return res;
} }



/**
* 处理微信消息
*
* @param wxMessage
*/
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage) {
return this.route(wxMessage, new HashMap<String, Object>());
}

protected boolean isDuplicateMessage(WxCpXmlMessage wxMessage) { protected boolean isDuplicateMessage(WxCpXmlMessage wxMessage) {


String messageId = ""; String messageId = "";


+ 5
- 2
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouterRule.java View File

@@ -229,13 +229,16 @@ public class WxCpMessageRouterRule {
* @return true 代表继续执行别的router,false 代表停止执行别的router * @return true 代表继续执行别的router,false 代表停止执行别的router
*/ */
protected WxCpXmlOutMessage service(WxCpXmlMessage wxMessage, protected WxCpXmlOutMessage service(WxCpXmlMessage wxMessage,
Map<String, Object> context,
WxCpService wxCpService, WxCpService wxCpService,
WxSessionManager sessionManager, WxSessionManager sessionManager,
WxErrorExceptionHandler exceptionHandler) { WxErrorExceptionHandler exceptionHandler) {


try {
if (context == null) {
context = new HashMap<>();
}


Map<String, Object> context = new HashMap<>();
try {
// 如果拦截器不通过 // 如果拦截器不通过
for (WxCpMessageInterceptor interceptor : this.interceptors) { for (WxCpMessageInterceptor interceptor : this.interceptors) {
if (!interceptor.intercept(wxMessage, context, wxCpService, sessionManager)) { if (!interceptor.intercept(wxMessage, context, wxCpService, sessionManager)) {


+ 9
- 3
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java View File

@@ -14,7 +14,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;


import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; 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)) { if (isMsgDuplicated(wxMessage)) {
// 如果是重复消息,那么就不做处理 // 如果是重复消息,那么就不做处理
return null; return null;
@@ -156,12 +158,12 @@ public class WxMpMessageRouter {
this.executorService.submit(new Runnable() { this.executorService.submit(new Runnable() {
@Override @Override
public void run() { 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 { } else {
res = rule.service(wxMessage, this.wxMpService, this.sessionManager, this.exceptionHandler);
res = rule.service(wxMessage, context, this.wxMpService, this.sessionManager, this.exceptionHandler);
// 在同步操作结束,session访问结束 // 在同步操作结束,session访问结束
this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUser()); this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUser());
sessionEndAccess(wxMessage); sessionEndAccess(wxMessage);
@@ -188,6 +190,10 @@ public class WxMpMessageRouter {
return res; return res;
} }


public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) {
return this.route(wxMessage, new HashMap<String, Object>());
}

protected boolean isMsgDuplicated(WxMpXmlMessage wxMessage) { protected boolean isMsgDuplicated(WxMpXmlMessage wxMessage) {


StringBuilder messageId = new StringBuilder(); StringBuilder messageId = new StringBuilder();


+ 5
- 2
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouterRule.java View File

@@ -193,13 +193,16 @@ public class WxMpMessageRouterRule {
* @return true 代表继续执行别的router,false 代表停止执行别的router * @return true 代表继续执行别的router,false 代表停止执行别的router
*/ */
protected WxMpXmlOutMessage service(WxMpXmlMessage wxMessage, protected WxMpXmlOutMessage service(WxMpXmlMessage wxMessage,
Map<String, Object> context,
WxMpService wxMpService, WxMpService wxMpService,
WxSessionManager sessionManager, WxSessionManager sessionManager,
WxErrorExceptionHandler exceptionHandler) { WxErrorExceptionHandler exceptionHandler) {


try {
if (context == null) {
context = new HashMap<>();
}


Map<String, Object> context = new HashMap<>();
try {
// 如果拦截器不通过 // 如果拦截器不通过
for (WxMpMessageInterceptor interceptor : this.interceptors) { for (WxMpMessageInterceptor interceptor : this.interceptors) {
if (!interceptor.intercept(wxMessage, context, wxMpService, sessionManager)) { if (!interceptor.intercept(wxMessage, context, wxMpService, sessionManager)) {


Loading…
Cancel
Save