Skip to content

Commit 563302e

Browse files
Hyseenbinarywang
authored andcommitted
消息路由器路由时可以传入context (#245)
1 parent cc33de3 commit 563302e

File tree

4 files changed

+35
-10
lines changed

4 files changed

+35
-10
lines changed

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouter.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
import org.slf4j.LoggerFactory;
1515

1616
import java.util.ArrayList;
17+
import java.util.HashMap;
1718
import java.util.List;
19+
import java.util.Map;
1820
import java.util.concurrent.ExecutionException;
1921
import java.util.concurrent.ExecutorService;
2022
import java.util.concurrent.Executors;
@@ -135,8 +137,9 @@ public WxCpMessageRouterRule rule() {
135137
* 处理微信消息
136138
*
137139
* @param wxMessage
140+
* @param context
138141
*/
139-
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage) {
142+
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage, final Map<String, Object> context) {
140143
if (isDuplicateMessage(wxMessage)) {
141144
// 如果是重复消息,那么就不做处理
142145
return null;
@@ -166,12 +169,12 @@ public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage) {
166169
this.executorService.submit(new Runnable() {
167170
@Override
168171
public void run() {
169-
rule.service(wxMessage, WxCpMessageRouter.this.wxCpService, WxCpMessageRouter.this.sessionManager, WxCpMessageRouter.this.exceptionHandler);
172+
rule.service(wxMessage, context, WxCpMessageRouter.this.wxCpService, WxCpMessageRouter.this.sessionManager, WxCpMessageRouter.this.exceptionHandler);
170173
}
171174
})
172175
);
173176
} else {
174-
res = rule.service(wxMessage, this.wxCpService, this.sessionManager, this.exceptionHandler);
177+
res = rule.service(wxMessage, context, this.wxCpService, this.sessionManager, this.exceptionHandler);
175178
// 在同步操作结束,session访问结束
176179
this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUserName());
177180
sessionEndAccess(wxMessage);
@@ -200,6 +203,16 @@ public void run() {
200203
return res;
201204
}
202205

206+
207+
/**
208+
* 处理微信消息
209+
*
210+
* @param wxMessage
211+
*/
212+
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage) {
213+
return this.route(wxMessage, new HashMap<String, Object>());
214+
}
215+
203216
protected boolean isDuplicateMessage(WxCpXmlMessage wxMessage) {
204217

205218
String messageId = "";

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouterRule.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,13 +229,16 @@ protected boolean test(WxCpXmlMessage wxMessage) {
229229
* @return true 代表继续执行别的router,false 代表停止执行别的router
230230
*/
231231
protected WxCpXmlOutMessage service(WxCpXmlMessage wxMessage,
232+
Map<String, Object> context,
232233
WxCpService wxCpService,
233234
WxSessionManager sessionManager,
234235
WxErrorExceptionHandler exceptionHandler) {
235236

236-
try {
237+
if (context == null) {
238+
context = new HashMap<>();
239+
}
237240

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

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
import org.slf4j.LoggerFactory;
1515

1616
import java.util.ArrayList;
17+
import java.util.HashMap;
1718
import java.util.List;
19+
import java.util.Map;
1820
import java.util.concurrent.ExecutionException;
1921
import java.util.concurrent.ExecutorService;
2022
import java.util.concurrent.Executors;
@@ -126,7 +128,7 @@ public WxMpMessageRouterRule rule() {
126128
/**
127129
* 处理微信消息
128130
*/
129-
public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) {
131+
public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage, final Map<String, Object> context) {
130132
if (isMsgDuplicated(wxMessage)) {
131133
// 如果是重复消息,那么就不做处理
132134
return null;
@@ -156,12 +158,12 @@ public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) {
156158
this.executorService.submit(new Runnable() {
157159
@Override
158160
public void run() {
159-
rule.service(wxMessage, WxMpMessageRouter.this.wxMpService, WxMpMessageRouter.this.sessionManager, WxMpMessageRouter.this.exceptionHandler);
161+
rule.service(wxMessage, context, WxMpMessageRouter.this.wxMpService, WxMpMessageRouter.this.sessionManager, WxMpMessageRouter.this.exceptionHandler);
160162
}
161163
})
162164
);
163165
} else {
164-
res = rule.service(wxMessage, this.wxMpService, this.sessionManager, this.exceptionHandler);
166+
res = rule.service(wxMessage, context, this.wxMpService, this.sessionManager, this.exceptionHandler);
165167
// 在同步操作结束,session访问结束
166168
this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUser());
167169
sessionEndAccess(wxMessage);
@@ -188,6 +190,10 @@ public void run() {
188190
return res;
189191
}
190192

193+
public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) {
194+
return this.route(wxMessage, new HashMap<String, Object>());
195+
}
196+
191197
protected boolean isMsgDuplicated(WxMpXmlMessage wxMessage) {
192198

193199
StringBuilder messageId = new StringBuilder();

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouterRule.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,13 +193,16 @@ protected boolean test(WxMpXmlMessage wxMessage) {
193193
* @return true 代表继续执行别的router,false 代表停止执行别的router
194194
*/
195195
protected WxMpXmlOutMessage service(WxMpXmlMessage wxMessage,
196+
Map<String, Object> context,
196197
WxMpService wxMpService,
197198
WxSessionManager sessionManager,
198199
WxErrorExceptionHandler exceptionHandler) {
199200

200-
try {
201+
if (context == null) {
202+
context = new HashMap<>();
203+
}
201204

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

0 commit comments

Comments
 (0)