Bläddra i källkod

监听验证码回调写入状态

刘立冬 1 månad sedan
förälder
incheckning
693e5d6ed5

+ 25 - 0
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/model/qywx/QwNeedVerifyModel.java

@@ -0,0 +1,25 @@
+package com.tzld.piaoquan.risk.control.model.qywx;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+@Data
+public class QwNeedVerifyModel {
+    @JSONField(name = "Vid")
+    private Long vid;  // 账号唯一标识
+
+    @JSONField(name = "Qrcode_key")
+    private String qrcodeKey;  // 二维码验证密钥
+
+    @JSONField(name = "Corpid")
+    private Long corpId;  // 企业ID
+
+    @JSONField(name = "Nick_name")
+    private String nickName;  // 用户昵称
+
+    @JSONField(name = "Icon_url")
+    private String iconUrl;  // 用户头像URL
+
+    @JSONField(name = "Logo")
+    private String logo;  // 企业Logo URL
+}

+ 33 - 5
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/service/impl/QywxUserDataService.java

@@ -7,6 +7,7 @@ import com.tzld.piaoquan.risk.control.dao.mapper.UserBaseMapper;
 import com.tzld.piaoquan.risk.control.model.po.UserBase;
 import com.tzld.piaoquan.risk.control.model.po.UserBaseExample;
 import com.tzld.piaoquan.risk.control.model.qywx.QwCallBackWrapperData;
+import com.tzld.piaoquan.risk.control.model.qywx.QwNeedVerifyModel;
 import com.tzld.piaoquan.risk.control.service.qywx.Constant;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -151,27 +152,54 @@ public class QywxUserDataService {
         return userBase;
     }
 
-
-    public void loginOtherDevice(String uuid) {
+    public void needVerifyCode(String originalJson) {
+        // 1. 解析外层数据
+        QwCallBackWrapperData wrapperData = JSON.parseObject(originalJson, QwCallBackWrapperData.class);
+        if (StringUtils.isEmpty(wrapperData.getJson())) {
+            log.warn("Empty inner json data, uuid: {}", wrapperData.getUuid());
+            return;
+        }
+        // 2. 解析内层用户数据
+        String uuid = wrapperData.getUuid();
+        //查找库并改写登录状态
         UserBaseExample example = new UserBaseExample();
         example.createCriteria().andUuidEqualTo(uuid);
         List<UserBase> users = userBaseMapper.selectByExample(example);
         UserBase user = users.isEmpty() ? null : users.get(0);
+        log.info("needVerifyCode, uuid: {}, user: {}", uuid, user);
         if (user != null) {
-            user.setLoginStatus(Constant.LOGIN_STATUS_LOGOUT_OTHER_DEVICE);
+            user.setLoginStatus(Constant.LOGIN_STATUS_LOGIN_VERIFY);
             userBaseMapper.updateByPrimaryKeySelective(user);
         }
     }
-    public void seconderyVerify(String uuid) {
+
+    public void loginOtherDevice(String originalJson) {
+        QwCallBackWrapperData wrapperData = JSON.parseObject(originalJson, QwCallBackWrapperData.class);
+        if (StringUtils.isEmpty(wrapperData.getJson())) {
+            log.warn("Empty inner json data, uuid: {}", wrapperData.getUuid());
+            return;
+        }
+        // 2. 解析内层用户数据
+        String uuid = wrapperData.getUuid();
         UserBaseExample example = new UserBaseExample();
         example.createCriteria().andUuidEqualTo(uuid);
         List<UserBase> users = userBaseMapper.selectByExample(example);
         UserBase user = users.isEmpty() ? null : users.get(0);
         if (user != null) {
-            user.setLoginStatus(Constant.LOGIN_STATUS_LOGIN_VERIFY);
+            user.setLoginStatus(Constant.LOGIN_STATUS_LOGOUT_OTHER_DEVICE);
             userBaseMapper.updateByPrimaryKeySelective(user);
         }
     }
+    public void seconderyVerify(String originalJson) {
+//        UserBaseExample example = new UserBaseExample();
+//        example.createCriteria().andUuidEqualTo(uuid);
+//        List<UserBase> users = userBaseMapper.selectByExample(example);
+//        UserBase user = users.isEmpty() ? null : users.get(0);
+//        if (user != null) {
+//            user.setLoginStatus(Constant.LOGIN_STATUS_LOGIN_VERIFY);
+//            userBaseMapper.updateByPrimaryKeySelective(user);
+//        }
+    }
 
     // 根据手机号查询用户
     public UserBase getUserByMobile(String mobile) {

+ 5 - 3
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/service/qywx/Constant.java

@@ -41,13 +41,15 @@ public class Constant {
     //企业切换
     public static final int CORP_SWITCH = 100006; // -2: 企业切换
 
+    //需要验证码回调
+    public static final int QW_NEED_VERIFY_CODE = 100004; // -
 
     //登录状态
     public static final int LOGIN_STATUS_NO_LOGIN = 0; // 0: 未登录,
     public static final int LOGIN_STATUS_LOGIN = 1; // 1: 已登录
-    public static final int LOGIN_STATUS_LOGIN_VERIFY= -3;
-    public static final int LOGIN_STATUS_LOGIN_FAIL = -1; // -1: 登录失败
-    public static final int LOGIN_STATUS_LOGOUT_OTHER_DEVICE = -4; // -1: 登录失败
+    public static final int LOGIN_STATUS_LOGIN_VERIFY = -1;
+    public static final int LOGIN_STATUS_LOGIN_FAIL = -2; // -1: 登录失败
+    public static final int LOGIN_STATUS_LOGOUT_OTHER_DEVICE = -3; // 其他设备登录
 
 
 

+ 8 - 4
risk-control-server/src/main/java/com/tzld/piaoquan/risk/control/controller/QwCallbackController.java

@@ -39,15 +39,19 @@ public class QwCallbackController {
                 break;
             case Constant.SECONDERY_VERIFY:
                 userDataService.seconderyVerify(callbackData);
-                LOGGER.error("Login verify: {}", callbackData);
+                LOGGER.info("Login verify: {}", callbackData);
                 break;
             case Constant.LOGIN_OTHER_DEVICE:
                 userDataService.loginOtherDevice(callbackData);
-                LOGGER.error("Login other device: {}", callbackData);
+                LOGGER.info("Login other device: {}", callbackData);
                 break;
             case Constant.CORP_SWITCH:
-                userDataService.loginOtherDevice(callbackData);
-                LOGGER.error("Login other device: {}", callbackData);
+//                userDataService.s(callbackData);
+//                LOGGER.info("Login other device: {}", callbackData);
+                break;
+            case Constant.QW_NEED_VERIFY_CODE:
+                userDataService.needVerifyCode(callbackData);
+                LOGGER.info("Login need verify code: {}", callbackData);
                 break;
             default:
                 LOGGER.warn("Unknown message type: {}", wrapperData.getType());

+ 4 - 14
risk-control-server/src/main/java/com/tzld/piaoquan/risk/control/controller/QwLoginController.java

@@ -10,6 +10,7 @@ import com.tzld.piaoquan.risk.control.model.qywx.QwCommonResModel;
 import com.tzld.piaoquan.risk.control.model.qywx.QwLoginCheckCode;
 import com.tzld.piaoquan.risk.control.model.qywx.QwLoginQRCodeModel;
 import com.tzld.piaoquan.risk.control.service.QwLoginService;
+import com.tzld.piaoquan.risk.control.service.qywx.Constant;
 import com.tzld.piaoquan.risk.control.util.HttpClientUtil;
 import com.tzld.piaoquan.risk.control.util.HttpPoolClient;
 import lombok.extern.slf4j.Slf4j;
@@ -55,17 +56,6 @@ public class QwLoginController {
         }
     }
 
-    // @PostMapping("/checkLogin")
-    // public CommonResponse<String> checkLogin(@RequestBody QwLoginCheckCode checkCode) {
-    //     int ret = qwLoginService.checkQRCode(checkCode);
-    //     if(ret == 0) {
-    //         return CommonResponse.success();
-    //     } else {
-    //         LOGGER.error("checkQRCode failed, ret: {}", ret);
-    //         return CommonResponse.error("failed");
-    //     }
-    // }
-
     @PostMapping("/automaticLogin")
     public CommonResponse<String> automaticLogin(@RequestBody QwLoginCheckCode checkCode) {
         String url = qywxConfig.getDomain() + qywxConfig.getPath("login-qrcode");
@@ -93,15 +83,15 @@ public class QwLoginController {
         UserBase user = qwLoginService.checkLogin(uuid);
         LoginStatusResultModel model = new LoginStatusResultModel();
         if (user != null && !TextUtils.isEmpty(user.getVid()) && user.getLoginStatus() == 1) {
-            model.setLoginStatus(1);
+            model.setLoginStatus(Constant.LOGIN_STATUS_LOGIN);
             model.setMessage("success");
             return CommonResponse.success(model);
         } else if(user != null && TextUtils.isEmpty(user.getVid())) {
             model.setLoginStatus(-1);
             model.setMessage("输入验证码");
             return CommonResponse.success(model);
-        } else if (user != null && user.getLoginStatus() == 0) {
-            model.setLoginStatus(0);
+        } else if (user != null && user.getLoginStatus() == Constant.LOGIN_STATUS_NO_LOGIN) {
+            model.setLoginStatus(Constant.LOGIN_STATUS_NO_LOGIN);
             model.setMessage("processing");
             return CommonResponse.success(model);
         } else {