mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-10-30 01:58:23 +08:00
消息路由器路由时可以传入context (#245)
This commit is contained in:
@ -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 = "";
|
||||||
|
|||||||
@ -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)) {
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user