Преглед изворни кода

退出登录实现,以及增加一些其他回调事件

刘立冬 пре 1 месец
родитељ
комит
8f411bf237

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

@@ -0,0 +1,40 @@
+package com.tzld.piaoquan.risk.control.model.qywx;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+@Data
+public class CropSwitchCallBackModel {
+    @JSONField(name = "this_vid")
+    private Long thisVid; // 切换前当前登录的账号vid
+
+    @JSONField(name = "vid")
+    private Long vid; // 切换企业后的账号vid
+
+    @JSONField(name = "corp_full_name")
+    private String corpFullName;
+
+    @JSONField(name = "corpid")
+    private Long corpId; // 切换后的企业id
+
+    @JSONField(name = "create_time")
+    private Integer createTime;
+
+    @JSONField(name = "mail")
+    private String mail;
+
+    @JSONField(name = "ownername")
+    private String ownerName; // 企业创建人昵称
+
+    @JSONField(name = "card_url")
+    private String cardUrl; // 企业头像URL
+
+    @JSONField(name = "nickname")
+    private String nickname; // 切换后的账号昵称
+
+    @JSONField(name = "avatar")
+    private String avatar; // 切换后的账号头像URL
+
+    @JSONField(name = "corp_name")
+    private String corpName; // 切换后的企业名称
+}

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

@@ -0,0 +1,14 @@
+package com.tzld.piaoquan.risk.control.model.qywx;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+public class SecondaryVerifyModel {
+    @JSONField(name = "vid")
+    private Long vid;
+
+    @JSONField(name = "msg")
+    private String message;
+
+    @JSONField(name = "uuid")
+    private String uuid;
+}

+ 1 - 0
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/service/QwLoginService.java

@@ -11,4 +11,5 @@ public interface QwLoginService {
     int checkQRCode(QwLoginCheckCode checkQrcode);
     String getRunClients();
     UserBase checkLogin(String uuid);
+    boolean quitLogin(String uuid);
 }

+ 24 - 0
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/service/impl/QwLoginServiceImpl.java

@@ -92,6 +92,30 @@ public class QwLoginServiceImpl implements QwLoginService {
         return qwUserService.getUserByUuid(uuid);
     }
 
+    @Override
+    public boolean quitLogin(String uuid) {
+        String url = qywxConfig.getDomain() + qywxConfig.getPath("quit-login");
+        Map<String, String> requestBody = new HashMap<>();
+        requestBody.put("uuid", uuid);
+        Optional<String> response =  httpPoolClientDefault.postJson(url, JSON.toJSONString(requestBody));
+
+        boolean isSuccess = false;
+        if (response.isPresent()) {
+            QwCommonResModel<Object> model = QwCommonResModel.parseResponse(response.get(), Object.class);
+            isSuccess =  model.getErrcode() == 0;
+            //更改登录状态,根据uuid
+            UserBaseExample example = new UserBaseExample();
+            example.createCriteria().andUuidEqualTo(uuid);
+            List<UserBase> userBases = userBaseMapper.selectByExample(example);
+            if (CollectionUtils.isNotEmpty(userBases)) {
+                UserBase update = userBases.get(0);
+                update.setLoginStatus(0); // 设置登录状态为0
+                userBaseMapper.updateByPrimaryKeySelective(update);
+            }
+        }
+        return isSuccess;
+    }
+
     private String initUUID(String vid) {
         Long userId = LoginUserContext.getUserId();
         Map<String, Object> requestBody = new HashMap<>();

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

@@ -151,6 +151,28 @@ public class QywxUserDataService {
         return userBase;
     }
 
+
+    public void loginOtherDevice(String uuid) {
+        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_LOGOUT_OTHER_DEVICE);
+            userBaseMapper.updateByPrimaryKeySelective(user);
+        }
+    }
+    public void seconderyVerify(String uuid) {
+        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) {
         UserBaseExample example = new UserBaseExample();

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

@@ -31,11 +31,27 @@ public class Constant {
     public static int ROOM_NAME_MSG=115005;
 
     //转让群主通知
-    public static int ROOM_ADMIN_UPDATE=115006;
+    public static final int ROOM_ADMIN_UPDATE=115006;
 
 
     //登录成功
-    public static int LOGIN_SUCCESS = 104001;
+    public static final int LOGIN_SUCCESS = 104001;
+    public static final int SECONDERY_VERIFY = 100012;
+    public static final int LOGIN_OTHER_DEVICE = 100008;
+    //企业切换
+    public static final int CORP_SWITCH = 100006; // -2: 企业切换
+
+
+    //登录状态
+    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: 登录失败
+
+
+
+
 
 
 

+ 28 - 1
risk-control-server/src/main/java/com/tzld/piaoquan/risk/control/controller/QwCallbackController.java

@@ -24,7 +24,34 @@ public class QwCallbackController {
     public void onMessage(@RequestBody String callbackData) {
         // 1. 解析外层数据
         LOGGER.info("Received qw message: {}", callbackData);
-        QwCallBackWrapperData wrapperData =  JSON.parseObject(callbackData, QwCallBackWrapperData.class);
+        QwCallBackWrapperData wrapperData;
+        try {
+             wrapperData =  JSON.parseObject(callbackData, QwCallBackWrapperData.class);
+        } catch (Exception e) {
+            LOGGER.error("Error parsing callback data: {}", e.getMessage());
+            return;
+        }
+
+        switch ((int) wrapperData.getType()) {
+            case Constant.LOGIN_SUCCESS:
+                userDataService.processUserData(callbackData);
+                LOGGER.info("Login success: {}", callbackData);
+                break;
+            case Constant.SECONDERY_VERIFY:
+                userDataService.seconderyVerify(callbackData);
+                LOGGER.error("Login verify: {}", callbackData);
+                break;
+            case Constant.LOGIN_OTHER_DEVICE:
+                userDataService.loginOtherDevice(callbackData);
+                LOGGER.error("Login other device: {}", callbackData);
+                break;
+            case Constant.CORP_SWITCH:
+                userDataService.loginOtherDevice(callbackData);
+                LOGGER.error("Login other device: {}", callbackData);
+                break;
+            default:
+                LOGGER.warn("Unknown message type: {}", wrapperData.getType());
+        }
         if (wrapperData != null && wrapperData.getType() == Constant.LOGIN_SUCCESS) {
             userDataService.processUserData(callbackData);
         }

+ 3 - 9
risk-control-server/src/main/java/com/tzld/piaoquan/risk/control/controller/QwLoginController.java

@@ -76,19 +76,13 @@ public class QwLoginController {
 
     @PostMapping("/quiteQwLogin")
     public CommonResponse<String> quiteQwLogin(@RequestBody Map<String, String> request) {
-        String url = qywxConfig.getDomain() + qywxConfig.getPath("quit-login");
         String uuid = request.get("uuid");
-        Optional<String> response =  httpPoolClientDefault.postJson(url, uuid);
-        boolean isSuccess = false;
-        if (response.isPresent()) {
-            QwCommonResModel<Object> model = QwCommonResModel.parseResponse(response.get(), Object.class);
-            isSuccess =  model.getErrcode() == 0;
-        }
+        boolean isSuccess = qwLoginService.quitLogin(uuid);
         if (!isSuccess) {
-            LOGGER.error("quiteQwLogin failed, response: {}", response);
+            LOGGER.error("quiteQwLogin failed, uuid: {}", uuid);
             return CommonResponse.error("failed");
         } else {
-            LOGGER.info("quiteQwLogin success, response: {}", response);
+            LOGGER.info("quiteQwLogin success, uuid: {}", uuid);
             return CommonResponse.success("success");
         }
     }