Browse Source

feat(app): 新增通过微信code获取手机号功能

- 在AppUserController中添加/getMobilePhone接口,支持通过微信code获取用户手机号
- UserService新增getMobilePhone方法实现手机号解密与存储逻辑
- 优化用户登录流程,自动同步微信手机号到用户信息
- 完善家庭成员身份证号唯一性校验,避免重复添加
- 移除冗余的部门相关mapper依赖
- 更新HikiotTool工具类,支持批量处理多个设备数据
SheepHy 3 weeks ago
parent
commit
1cc46d58fe

+ 11 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/AppUserController.java

@@ -44,6 +44,17 @@ public class AppUserController {
         return Result.ok(userService.wechatLogin(code));
     }
 
+    /**
+     * @Description 根据CODE获取手机号
+     * @Param phone 手机号
+     * @return boolean
+     **/
+    @GetMapping("/getMobilePhone")
+    @Operation(summary = "根据CODE获取手机号")
+    public Result<Boolean> getMobilePhone(@RequestParam @Schema(description = "微信登录获取手机号code") String code){
+        return Result.ok(userService.getMobilePhone(code));
+    }
+
     /**
      * @Author SheepHy
      * @Description 修改用户基础信息

+ 7 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IUserService.java

@@ -17,6 +17,13 @@ public interface IUserService {
      **/
     LoginUserVO wechatLogin(String code);
 
+    /**
+     * @Description 更新用户基础信息
+     * @Param phone 手机号
+     * @return boolean
+     **/
+    boolean getMobilePhone(String code);
+
     /**
      * @Author SheepHy
      * @Description 查询消息通知列表(简略)

+ 21 - 5
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/UserServiceImpl.java

@@ -2,6 +2,7 @@ package org.jeecg.modules.app.service.impl;
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
 import cn.binarywang.wx.miniapp.util.WxMaConfigHolder;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.extern.log4j.Log4j2;
@@ -54,10 +55,6 @@ public class UserServiceImpl implements IUserService {
     @Resource
     private SysAnnouncementMapper sysAnnouncementMapper;
     @Resource
-    private SysDepartMapper sysDepartMapper;
-    @Resource
-    private SysUserDepartMapper sysUserDepartMapper;
-    @Resource
     private FamilyMembersMapper familyMembersMapper;
     @Resource
     private SecurityManager securityManager;
@@ -92,7 +89,12 @@ public class UserServiceImpl implements IUserService {
                 if (!result) {
                     throw new JeecgBootException("登录失败", SC_INTERNAL_SERVER_ERROR_500);
                 }
-                familyMembersMapper.insert(new FamilyMembers().setDelFlag(0).setUserId(user.getId()).setUserType(0).setRealNameStatus(0));
+                sysUserMapper.updateById(user);
+                if(user.getPhone() != null && familyMembersMapper.selectOne(Wrappers.<FamilyMembers>lambdaQuery()
+                        .eq(FamilyMembers::getUserId,user.getId())
+                        .eq(FamilyMembers::getUserType,0)) == null ){
+                    familyMembersMapper.insert(new FamilyMembers().setDelFlag(0).setUserId(user.getId()).setUserType(0).setRealNameStatus(0));
+                }
             }
 
             return generateLoginUserVO(user);
@@ -103,6 +105,20 @@ public class UserServiceImpl implements IUserService {
             WxMaConfigHolder.remove(); // 清理ThreadLocal
         }
     }
+
+    @Override
+    public boolean getMobilePhone(String code) {
+        try {
+            WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNoInfo(code);
+            LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+            SysUser sysUser = sysUserMapper.selectById(user.getId());
+            sysUser.setPhone(phoneNoInfo.getPhoneNumber());
+        } catch (WxErrorException e) {
+            throw new RuntimeException(e);
+        }
+        return true;
+    }
+
     private String generateRandomString(int letterCount, int digitCount) {
         StringBuilder sb = new StringBuilder();
         String letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

+ 17 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/hikiot/HikiotTool.java

@@ -578,6 +578,22 @@ public class HikiotTool {
     }
 
     public static void main(String[] args) throws IOException, InterruptedException {
-        deleteExpiredVisitors("FY2389353");
+        String[] deviceSerials = {
+                "FY1932308", "FY1932375", "FX0889977", "FW9664115", "FY2389303",
+                "FY2389306", "FX0890040", "FW9664183", "FY1932320", "FW9664124",
+                "FY2389346", "FY2389320", "FZ0080611", "FW9664116", "FY2389367",
+                "FY1929855", "FX0890043", "FW9664192", "FZ0080523", "FN1697293",
+                "FW9664142", "FW9664200", "FZ0080597", "FZ0080608", "FY2389353",
+                "FY2389338", "FY2389361", "FY1929864", "FX0889961"
+        };
+
+        for (String deviceSerial : deviceSerials) {
+            try {
+                String result = deleteExpiredVisitors(deviceSerial);
+                System.out.println("设备 " + deviceSerial + " 处理结果: " + result);
+            } catch (Exception e) {
+                System.err.println("处理设备 " + deviceSerial + " 时发生错误: " + e.getMessage());
+            }
+        }
     }
 }

+ 6 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/FamilyMembersServiceImpl.java

@@ -2,6 +2,7 @@ package org.jeecg.modules.system.app.service.impl;
 
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import me.zhyd.oauth.utils.UuidUtils;
@@ -67,6 +68,11 @@ public class FamilyMembersServiceImpl extends ServiceImpl<FamilyMembersMapper, F
         if (StringUtils.isEmpty(addFamilyMembersDTO.getIdentityCard())||addFamilyMembersDTO.getIdentityCard().length()>18){
             return Result.error("添加家庭成员失败,身份证号不允许为空,或者长度超过18位数");
         }
+        if (!familyMembersMapper.selectList(Wrappers.<FamilyMembers>lambdaQuery()
+                .eq(FamilyMembers::getUserId,addFamilyMembersDTO.getUserId())
+                .eq(FamilyMembers::getIdentityCard,addFamilyMembersDTO.getIdentityCard())).isEmpty()){
+            return Result.error("请勿重复添加,该身份证已填写!");
+        }
         FamilyMembers familyMembers = familyMembersMapper.findByUserIdAndPhone(addFamilyMembersDTO.getUserId(),addFamilyMembersDTO.getPhone());
         if (familyMembers==null){
             familyMembers = new FamilyMembers();