From 0ecb32909d1293d6faa39e8bf563302ec3947b94 Mon Sep 17 00:00:00 2001 From: xuliangtong <1124839262@qq.com> Date: Tue, 29 Nov 2022 16:30:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ibeetl/jlw/service/MsgHandler.java | 29 +++++++++++++++++-- .../com/ibeetl/jlw/web/WeiXinController.java | 27 +++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/web/src/main/java/com/ibeetl/jlw/service/MsgHandler.java b/web/src/main/java/com/ibeetl/jlw/service/MsgHandler.java index e3c5f61d..66397b1d 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/MsgHandler.java +++ b/web/src/main/java/com/ibeetl/jlw/service/MsgHandler.java @@ -20,8 +20,10 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * @author Binary Wang @@ -40,6 +42,11 @@ public class MsgHandler extends AbstractHandler { @Autowired private WxMpConfig wxConfig; + /** + * 存放微信登录用户的信息 + */ + public static ConcurrentHashMap> WE_CHAT_MAP = new ConcurrentHashMap<>(); + @Override public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, @@ -55,6 +62,7 @@ public class MsgHandler extends AbstractHandler { .build(); } userId = userId.replace("qrscene_", ""); + Map map = new HashMap<>(); //登录 if (userId.contains("login")) { //登录所包含userId为雪花算法ID @@ -65,11 +73,20 @@ public class MsgHandler extends AbstractHandler { if (CollectionUtil.isNotEmpty(info)) { Student student = studentService.getByUserId(info.get(0).getUserId()); String token = tokenService.getToken(student); - WebSocketServer.sendToUser("token="+token, userId); + + map.put("type", "login"); + map.put("status", "success"); + map.put("token", token); + WE_CHAT_MAP.put(userId, map); +// WebSocketServer.sendToUser("token="+token, userId); return WxMpXmlOutMessage.TEXT().content("登录成功").toUser(fromUser) .fromUser(wxMessage.getToUser()) .build(); } + map.put("type", "login"); + map.put("status", "error"); + map.put("token", "登录失败,未绑定账号"); + WE_CHAT_MAP.put(userId, map); return WxMpXmlOutMessage.TEXT().content("登录失败,未绑定账号").toUser(fromUser) .fromUser(wxMessage.getToUser()) .build(); @@ -81,12 +98,20 @@ public class MsgHandler extends AbstractHandler { coreUserWxQuery2.setUserId(Long.parseLong(userId)); CoreUserWx info2 = coreUserWxService.getInfo(coreUserWxQuery2); if (info2 != null || info1 != null) { - return WxMpXmlOutMessage.TEXT().content("绑定失败,已经绑定其他账号").toUser(fromUser) + map.put("type", "bind"); + map.put("status", "error"); + map.put("token", "绑定失败,已经绑定"); + WE_CHAT_MAP.put(userId, map); + return WxMpXmlOutMessage.TEXT().content("绑定失败,已经绑定").toUser(fromUser) .fromUser(wxMessage.getToUser()) .build(); } coreUserWxQuery2.setOpenid(fromUser); coreUserWxService.add(coreUserWxQuery2); + map.put("type", "bind"); + map.put("status", "success"); + map.put("token", "绑定成功"); + WE_CHAT_MAP.put(userId, map); // String redirectURI = wxConfig.getCodeBackUrl(); // String s = weixinService.oauth2buildAuthorizationUrl(redirectURI, "snsapi_userinfo", "STATE"); return WxMpXmlOutMessage.TEXT().content("绑定成功").toUser(fromUser) diff --git a/web/src/main/java/com/ibeetl/jlw/web/WeiXinController.java b/web/src/main/java/com/ibeetl/jlw/web/WeiXinController.java index 0cd796d8..c5ee4909 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/WeiXinController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/WeiXinController.java @@ -8,10 +8,12 @@ import cn.jlw.webSocket.WebSocketServer; import com.github.binarywang.utils.qrcode.MatrixToImageWriter; import com.ibeetl.admin.core.conf.WxMpConfig; import com.ibeetl.admin.core.entity.CoreUser; +import com.ibeetl.admin.core.util.map.MapUtil; import com.ibeetl.admin.core.web.JsonResult; import com.ibeetl.jlw.entity.CoreUserWx; import com.ibeetl.jlw.entity.Student; import com.ibeetl.jlw.service.CoreUserWxService; +import com.ibeetl.jlw.service.MsgHandler; import com.ibeetl.jlw.service.StudentService; import com.ibeetl.jlw.service.WeixinService; import com.ibeetl.jlw.web.query.CoreUserWxQuery; @@ -228,4 +230,29 @@ public class WeiXinController { //endregion 网页授权 + + //region 登录绑定轮询 + + /** + * 查询微信回执 + * @param type login 登录 bind 绑定 + * @param userId 获取二维码时候的id信息 + * @return status success成功,error失败,warning未回复 + */ + @GetMapping("/getLoginAndBindStatus") + public Map getLoginAndBindStatus(String type, String userId) { + Map userMap = MsgHandler.WE_CHAT_MAP.get(userId); + if (MapUtil.isEmpty(userMap)) { + Map map = new HashMap<>(); + map.put("type", type); + map.put("status", "warning"); + map.put("token", "微信未回复,请等待"); + return map; + } + MsgHandler.WE_CHAT_MAP.remove(userId); + return userMap; + } + + //endregion 登录绑定轮询 + } \ No newline at end of file