Bladeren bron

登录成功数据转换写入user表和corp表

刘立冬 2 maanden geleden
bovenliggende
commit
d22b763328

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

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.risk.control.model.qywx;
+
+import lombok.Data;
+
+@Data
+public class QwCallBackWrapperData {
+    private String uuid;
+    private String json;
+    private long type;
+}

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

@@ -27,7 +27,7 @@ public class QwLoginServiceImpl implements QwLoginService {
     @Autowired
     private QywxConfig qywxConfig; // 注入配置类
     @Autowired
-    private QywxUserService qwUserService;
+    private QywxUserDataService qwUserService;
     @Value("${qwcallback.url}")
     private String qwCallbackUrl;
     private static final Logger LOGGER = LoggerFactory.getLogger(QwLoginServiceImpl.class);
@@ -43,13 +43,6 @@ public class QwLoginServiceImpl implements QwLoginService {
         } else {
             LOGGER.info("User not exists, phoneNumber: {}", phoneNumber);
             uuid = initUUID("");
-            // Create a new user if UUID is generated
-            if (!TextUtils.isEmpty(uuid)) {
-                UserBase newUser = new UserBase();
-                newUser.setUuid(uuid);
-                newUser.setMobile(phoneNumber);
-                qwUserService.createUser(newUser);
-            }
         }
         LOGGER.info("getLoginQRCode,uuid: {}", uuid);
         System.out.println("getLoginQRCode,uuid: " + uuid);

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

@@ -0,0 +1,214 @@
+package com.tzld.piaoquan.risk.control.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.annotation.JSONField;
+import com.github.pagehelper.PageHelper;
+import com.tzld.piaoquan.risk.control.dao.mapper.UserBaseMapper;
+import com.tzld.piaoquan.risk.control.dao.mapper.UserCorpMapper;
+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.po.UserCorp;
+import com.tzld.piaoquan.risk.control.model.po.UserCorpExample;
+import com.tzld.piaoquan.risk.control.model.qywx.QwCallBackWrapperData;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@Service
+public class QywxUserDataService {
+
+    @Autowired
+    private UserBaseMapper userBaseMapper;
+
+    @Autowired
+    private UserCorpMapper userCorpMapper;
+
+    @Data
+    @NoArgsConstructor
+    private static class UserData {
+        // 企业信息
+        @JSONField(name = "Corpid")
+        private Long corpId;
+
+        @JSONField(name = "corp_id")
+        private Long corpId2;
+
+        @JSONField(name = "Corp_name")
+        private String corpName;
+
+        @JSONField(name = "Corp_full_name")
+        private String corpFullName;
+
+        @JSONField(name = "Corp_logo")
+        private String corpLogo;
+
+        @JSONField(name = "Corp_desc")
+        private String corpDesc;
+
+        @JSONField(name = "scorp_id")
+        private String sCorpId;
+
+        // 用户基础信息
+        @JSONField(name = "unionid")
+        private String unionId;
+
+        @JSONField(name = "Admin_vid")
+        private Long adminVid;
+
+        @JSONField(name = "acctid")
+        private String accountId;
+
+        @JSONField(name = "english_name")
+        private String englishName;
+
+        @JSONField(name = "Ownername")
+        private String ownerName;
+
+        @JSONField(name = "nickname")
+        private String nickName;
+
+        @JSONField(name = "create_time")
+        private Long createTime1;
+
+        @JSONField(name = "Create_time")
+        private Long createTime2;
+
+        @JSONField(name = "sex")
+        private Integer gender;
+
+        @JSONField(name = "mobile")
+        private String mobile;
+
+        @JSONField(name = "avatar")
+        private String avatarUrl;
+
+        @JSONField(name = "realname")
+        private String realName;
+
+        @JSONField(name = "Vid")
+        private Long vid;
+
+        @JSONField(name = "Mail")
+        private String email;
+
+        @JSONField(name = "user_id")
+        private Long userId;
+
+        @JSONField(name = "position")
+        private String jobPosition;
+    }
+
+    public void processUserData(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. 解析内层用户数据
+        UserData userData = JSON.parseObject(wrapperData.getJson(), UserData.class);
+
+        // 3. 处理用户基础信息
+        UserBase userBase = processBaseInfo(wrapperData, userData);
+
+        // 4. 处理企业关联信息
+        try {
+            processCorpRelation(Long.parseLong(userBase.getVid()), userData);
+        } catch (Exception e) {
+            log.error("Error processing user data: {}", e.getMessage(), e);
+        }
+    }
+
+    private UserBase processBaseInfo(QwCallBackWrapperData envelop, UserData data) {
+        UserBase userBase = new UserBase();
+        userBase.setUuid(envelop.getUuid());
+        userBase.setMobile(data.mobile);
+        userBase.setRealname(data.realName);
+        userBase.setAvatar(data.avatarUrl);
+        userBase.setLoginStatus(0);
+        userBase.setVid(data.vid.toString());
+        userBase.setUpdateTime(new Date());
+
+
+        // 时间处理(优先使用Create_time)
+        Long createTime = data.createTime2 != null && data.createTime2 > 0 ? data.createTime2 : data.createTime1;
+        if (createTime != null && createTime > 0) {
+            userBase.setCreateTime(new Date(createTime * 1000));
+        }
+
+        // 查询是否已存在
+        UserBaseExample example = new UserBaseExample();
+        example.createCriteria().andUuidEqualTo(envelop.getUuid());
+        List<UserBase> existUsers = userBaseMapper.selectByExample(example);
+
+        if (!existUsers.isEmpty()) {
+            UserBase existUser = existUsers.get(0);
+            userBase.setId(existUser.getId());
+            userBase.setCreateTime(existUser.getCreateTime());
+            userBaseMapper.updateByPrimaryKeySelective(userBase);
+        } else {
+            userBaseMapper.insertSelective(userBase);
+        }
+        return userBase;
+    }
+
+    private void processCorpRelation(Long userId, UserData data) {
+        UserCorp userCorp = new UserCorp();
+        userCorp.setUserId(userId);
+        userCorp.setCorpId(data.corpId != null ? data.corpId : data.corpId2);
+//        userCorp.setAdminVid(data.adminVid);
+        userCorp.setUnionid(data.unionId);
+//        userCorp.setAccountId(data.accountId);
+        userCorp.setPosition(data.jobPosition);
+//        userCorp.setStatus((byte) 0);
+        userCorp.setUpdateTime(new Date());
+        userCorp.setCorpName(data.corpName);
+//        userCorp.setCorpFullName(data.corpFullName);
+//        userCorp.setCorpLogo(data.corpLogo);
+//        userCorp.setCorpDesc(data.corpDesc);
+//        userCorp.setSCorpId(data.sCorpId);
+//        userCorp.setOwnerName(data.ownerName);
+        userCorp.setEnglishName(data.englishName);
+        userCorp.setUpdateTime(new Date());
+//        userCorp.setVid(data.vid);
+
+        UserCorpExample example = new UserCorpExample();
+        example.createCriteria()
+                .andUserIdEqualTo(userId)
+                .andCorpIdEqualTo(userCorp.getCorpId());
+
+        List<UserCorp> existRelations = userCorpMapper.selectByExample(example);
+
+        if (!existRelations.isEmpty()) {
+            UserCorp existRelation = existRelations.get(0);
+            userCorp.setId(existRelation.getId());
+            userCorpMapper.updateByPrimaryKeySelective(userCorp);
+        } else {
+            userCorpMapper.insertSelective(userCorp);
+        }
+    }
+
+    // 根据手机号查询用户
+    public UserBase getUserByMobile(String mobile) {
+        UserBaseExample example = new UserBaseExample();
+        example.createCriteria().andMobileEqualTo(mobile);
+        List<UserBase> users = userBaseMapper.selectByExample(example);
+        return users.isEmpty() ? null : users.get(0);
+    }
+
+    // 分页查询用户列表
+    public List<UserBase> listUsers(int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return userBaseMapper.selectByExample(new UserBaseExample());
+    }
+}

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

@@ -1,54 +0,0 @@
-package com.tzld.piaoquan.risk.control.service.impl;
-
-import com.github.pagehelper.PageHelper;
-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 org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Date;
-import java.util.List;
-
-// UserService.java
-@Service
-public class QywxUserService {
-
-    @Autowired
-    private UserBaseMapper userBaseMapper;
-
-    // 新增用户(自动生成ID)
-    public void createUser(UserBase user) {
-        user.setCreateTime(new Date()); // 自动设置创建时间
-        userBaseMapper.insertSelective(user);
-    }
-
-    // 根据ID删除用户
-    public void deleteUserById(Long id) {
-        userBaseMapper.deleteByPrimaryKey(id);
-    }
-
-    // 更新用户信息(选择性更新)
-    public void updateUser(UserBase user) {
-        userBaseMapper.updateByPrimaryKeySelective(user);
-    }
-
-    // 根据ID查询用户
-    public UserBase getUserById(Long id) {
-        return userBaseMapper.selectByPrimaryKey(id);
-    }
-
-    // 根据手机号查询用户
-    public UserBase getUserByMobile(String mobile) {
-        UserBaseExample example = new UserBaseExample();
-        example.createCriteria().andMobileEqualTo(mobile);
-        List<UserBase> users = userBaseMapper.selectByExample(example);
-        return users.isEmpty() ? null : users.get(0);
-    }
-
-    // 分页查询用户列表
-    public List<UserBase> listUsers(int pageNum, int pageSize) {
-        PageHelper.startPage(pageNum, pageSize);
-        return userBaseMapper.selectByExample(new UserBaseExample());
-    }
-}

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

@@ -34,5 +34,9 @@ public class Constant {
     public static int ROOM_ADMIN_UPDATE=115006;
 
 
+    //登录成功
+    public static int LOGIN_SUCCESS = 104001;
+
+
 
 }

+ 10 - 1
risk-control-server/src/main/java/com/tzld/piaoquan/risk/control/Application.java

@@ -1,5 +1,6 @@
 package com.tzld.piaoquan.risk.control;
 
+import com.tzld.piaoquan.risk.control.service.impl.QywxUserDataService;
 import org.mybatis.spring.annotation.MapperScan;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -8,6 +9,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.ApplicationContext;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
 /**
@@ -18,6 +20,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
 @SpringBootApplication
 @ServletComponentScan("com.tzld.piaoquan.risk.control")
 @MapperScan("com.tzld.piaoquan.risk.control.dao")
+@MapperScan(basePackages = {"com.tzld.piaoquan.risk.control.dao.mapper"})
 @EnableFeignClients
 @EnableEurekaClient
 @EnableSwagger2
@@ -25,7 +28,13 @@ public class Application {
     private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);
 
     public static void main(String[] args) {
-        SpringApplication.run(Application.class, args);
+        ApplicationContext context = SpringApplication.run(Application.class, args);
         LOGGER.info("risk-control SpringBoot Start Success");
+//        QywxUserDataService service = new QywxUserDataService();
+        QywxUserDataService service = context.getBean(QywxUserDataService.class);
+
+        String json = "{\"json\":\"{\\\"Corpid\\\":1970325203990889,\\\"unionid\\\":\\\"ozynqskybEa2GLhBnMluT2Jt8YUI\\\",\\\"Admin_vid\\\":1688855333403203,\\\"Corp_full_name\\\":\\\"北京一起成行科技有限公司\\\",\\\"acctid\\\":\\\"liulidong2\\\",\\\"english_name\\\":\\\"\\\",\\\"Ownername\\\":\\\"王娟\\\",\\\"nickname\\\":\\\"刘立冬2\\\",\\\"Corp_logo\\\":\\\"https://wework.qpic.cn/wwpic3az/219337_eMSDBIJ_Sr-soGJ_1729763638/0\\\",\\\"create_time\\\":0,\\\"sex\\\":1,\\\"mobile\\\":\\\"18810112376\\\",\\\"scorp_id\\\":\\\"ww2c0a198821e1869f\\\",\\\"avatar\\\":\\\"https://wework.qpic.cn/wwpic3az/89288_v-2hHXqzRZ2JH-R_1747071144/0\\\",\\\"corp_name\\\":\\\"北京一起成行\\\",\\\"Create_time\\\":1656927382,\\\"realname\\\":\\\"刘立冬\\\",\\\"Vid\\\":1688858050719288,\\\"Mail\\\":\\\"\\\",\\\"user_id\\\":1688858050719288,\\\"position\\\":\\\"\\\",\\\"Corp_desc\\\":\\\"\\\",\\\"corp_id\\\":1970325203990889,\\\"Corp_name\\\":\\\"北京一起成行\\\"}\",\"type\":104001,\"uuid\":\"a09c1237a66a2f30868c9e71b0941fac\"}";
+        service.processUserData(json);
+        System.out.println("User data processed successfully.");
     }
 }

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

@@ -1,7 +1,13 @@
 package com.tzld.piaoquan.risk.control.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.tzld.piaoquan.risk.control.model.qywx.QwCallBackWrapperData;
+import com.tzld.piaoquan.risk.control.service.impl.QywxUserDataService;
+import com.tzld.piaoquan.risk.control.service.qywx.Constant;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -11,12 +17,19 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/qw")
 public class QwCallbackController {
     private static final Logger LOGGER = LoggerFactory.getLogger(QwLoginController.class);
-
+    @Autowired
+    private QywxUserDataService userDataService;
     @PostMapping("/callback")
-    public void onMessage(@RequestBody String requestBody) {
+    public void onMessage(@RequestBody String callbackData) {
+        // 1. 解析外层数据
+        LOGGER.info("Received qw message: {}", callbackData);
+        QwCallBackWrapperData wrapperData =  JSON.parseObject(callbackData, QwCallBackWrapperData.class);
+        if (wrapperData != null && wrapperData.getType() == Constant.LOGIN_SUCCESS) {
+            userDataService.processUserData(callbackData);
+        }
         // Handle the message
-        LOGGER.info("Received qw message: {}", requestBody);
-        System.out.println("Received message: " + requestBody);
+
+        System.out.println("Received message: " + callbackData);
 
     }
 }

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

@@ -59,11 +59,11 @@ public class QwLoginController {
         return CommonResponse.success();
     }
 
-    @PostMapping("/quiteLogin")
-    public CommonResponse<String> quiteLogin(@RequestBody String uuid) {
+    @PostMapping("/quiteQwLogin")
+    public CommonResponse<String> quiteQwLogin(@RequestBody String uuid) {
         String url = qywxConfig.getDomain() + qywxConfig.getPath("quit-login");
         String response =  httpPoolClientDefault.postJson(url, uuid).toString();
-        System.out.println("quiteLogin,response: " + response);
+        log.info("quiteLogin,response: {}", response);
         QwCommonResModel<QwLoginQRCodeModel> QRCODE = JSON.parseObject(response, new TypeReference<QwCommonResModel<QwLoginQRCodeModel>>() {});
         return CommonResponse.success();
 

+ 6 - 4
risk-control-server/src/main/resources/application-dev.yml

@@ -15,9 +15,9 @@ eureka:
 spring:
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com:3306/riskcontrol?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
-    username: riskcontrol
-    password: riskcontrol123456@
+    url: jdbc:mysql://rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com:3306/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
+    username: wx2016_longvideo
+    password: wx2016_longvideoP@assword1234
     type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 10
@@ -61,4 +61,6 @@ xxl:
       ip:
       port: 9999
       logpath: /datalog/weblog/${project.name}/xxl-job/
-      logretentiondays: 30
+      logretentiondays: 30
+qwcallback:
+  url: "https://api.piaoquantv.com/risk-control/qw/callback"