From 8e1c5b13e9dd4a88f17dfe4569d4a51b3495d83a Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Tue, 14 Oct 2025 03:36:28 +0800
Subject: [PATCH] 1

---
 ruoyi-admin/src/main/java/com/ruoyi/im/util/SymmetricCryptoUtil.java                 |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java |   57 +++++++++++++------
 ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserKycDto.java               |    2 
 ruoyi-admin/src/main/java/com/ruoyi/im/out/UserAccountOut.java                       |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java    |   60 +++++++++++++++++---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/user/UserController.java          |   35 ++++++++++-
 6 files changed, 127 insertions(+), 31 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/out/UserAccountOut.java b/ruoyi-admin/src/main/java/com/ruoyi/im/out/UserAccountOut.java
index 3a323df..056aa8b 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/im/out/UserAccountOut.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/out/UserAccountOut.java
@@ -69,6 +69,8 @@
     //身份证
     private String idCard;
 
+    //是否已激活  true 已激活  false  未激活
+    private Boolean activate;
 
     //创建群开关 0 开启 1关闭
     private Integer groupPermissions;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/util/SymmetricCryptoUtil.java b/ruoyi-admin/src/main/java/com/ruoyi/im/util/SymmetricCryptoUtil.java
index b898b4d..b926111 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/im/util/SymmetricCryptoUtil.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/util/SymmetricCryptoUtil.java
@@ -31,7 +31,7 @@
 
         String encryptData = encryptFromString(originalText, Mode.CBC, Padding.ZeroPadding);
         System.out.println("加密:" + encryptData);
-        String decryptData = decryptFromString("6Du/e/lgbGjalVXFruqxjA==", Mode.CBC, Padding.ZeroPadding);
+        String decryptData = decryptFromString("r9MkCPI7xQpdekYIhcVGwA==", Mode.CBC, Padding.ZeroPadding);
         System.out.println("解密:" + decryptData);
 
         // 验证加解密是否一致
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java
index 4c35f6b..82260ea 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java
@@ -107,14 +107,32 @@
             if(approvalStatus == 2 && StringUtils.isEmpty(message)){
                 return AjaxResult.error("驳回理由不能为空!");
             }
-            userKyc.setState(approvalStatus);
-            userKyc.setMessage(message);
-            userKyc.setUpdatedAt(new Date());
-            userKycService.updateById(userKyc);
-            UserAccount userAccount = userAccountService.getById(userKyc.getUserId());
-            userAccount.setKycStatus(approvalStatus);
-            userAccountService.updateById(userAccount);
-            return AjaxResult.success("审批成功");
+            if(approvalStatus == 2){
+                userKyc.setState(approvalStatus);
+                userKyc.setMessage(message);
+                userKyc.setUpdatedAt(new Date());
+                userKyc.setHeadPortraitImg(null);
+                userKyc.setNationalEmblemImg(null);
+                userKyc.setHandImg(null);
+                userKyc.setName(null);
+                userKyc.setIdCard(null);
+                userKycService.updateById(userKyc);
+
+                userKycService.updateById(userKyc);
+                UserAccount userAccount = userAccountService.getById(userKyc.getUserId());
+                userAccount.setKycStatus(approvalStatus);
+                userAccountService.updateById(userAccount);
+                return AjaxResult.success("审批成功");
+            }else{
+                userKyc.setState(approvalStatus);
+                userKyc.setMessage(message);
+                userKyc.setUpdatedAt(new Date());
+                userKycService.updateById(userKyc);
+                UserAccount userAccount = userAccountService.getById(userKyc.getUserId());
+                userAccount.setKycStatus(approvalStatus);
+                userAccountService.updateById(userAccount);
+                return AjaxResult.success("审批成功");
+            }
         }catch (Exception e){
             e.printStackTrace();
             // 手动设置回滚
@@ -124,7 +142,7 @@
     }
 
     /**
-     * 什么认证列表
+     * 实名认证列表
      */
     @GetMapping("/list")
     public TableDataInfo list(@RequestParam(value = "account",required = false) String account,
@@ -147,6 +165,30 @@
         return getDataTable(list);
     }
 
+    /**
+     * 实名认证后台修改
+     */
+    @PostMapping("/updateKyc")
+    @Transactional
+    public Result updateKyc(UserKycDto dto) {
+        try {
+            UserKyc userKyc = userKycService.getById(dto.getId());
+            if(ObjectUtil.isEmpty(userKyc)){
+                return Result.error("用户数据不存在!");
+            }else{
+                userKyc.setName(dto.getName());
+                userKyc.setIdCard(dto.getIdCard());
+                userKycService.updateById(userKyc);
+            }
+            return Result.success("修改成功!");
+        }catch (Exception e){
+            e.printStackTrace();
+            // 手动设置回滚
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return Result.error("提交失败");
+        }
+    }
+
 
     /**
      * 根据账户查询实名认证信息
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java
index c527cf7..33b8258 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java
@@ -78,28 +78,30 @@
      */
     @PostMapping("/purchaseApplication")
     public Result purchaseApplication(UserPolicyDto dto) {
-        // 生成锁的key:基于用户ID和产品ID,防止同一用户同时购买同一产品
-        String lockKey = redisDistributedLock.generateLockKey(dto.getAccount(), dto.getProductId());
+        synchronized (dto.getAccount()) {
+            // 生成锁的key:基于用户ID和产品ID,防止同一用户同时购买同一产品
+            String lockKey = redisDistributedLock.generateLockKey(dto.getAccount(), dto.getProductId());
 
-        boolean lockAcquired = false;
-        try {
-            // 尝试获取分布式锁:等待10秒,锁过期30秒
-            lockAcquired = redisDistributedLock.tryLock(lockKey, 30L, 10L);
+            boolean lockAcquired = false;
+            try {
+                // 尝试获取分布式锁:等待10秒,锁过期30秒
+                lockAcquired = redisDistributedLock.tryLock(lockKey, 30L, 10L);
 
-            if (!lockAcquired) {
-                return Result.error("操作过于频繁,请稍后重试");
-            }
+                if (!lockAcquired) {
+                    return Result.error("操作过于频繁,请稍后重试");
+                }
 
-            // 执行购买逻辑
-            return userPolicyService.purchaseApplication(dto);
+                // 执行购买逻辑
+                return userPolicyService.purchaseApplication(dto);
 
-        } catch (Exception e) {
-            e.printStackTrace();
-            return Result.error("购买失败");
-        } finally {
-            // 释放锁
-            if (lockAcquired) {
-                redisDistributedLock.releaseLock(lockKey);
+            } catch (Exception e) {
+                e.printStackTrace();
+                return Result.error("购买失败");
+            } finally {
+                // 释放锁
+                if (lockAcquired) {
+                    redisDistributedLock.releaseLock(lockKey);
+                }
             }
         }
     }
@@ -109,6 +111,25 @@
     /**
      * 根据用户id查询保单
      */
+    @GetMapping("/updateGender")
+    public AjaxResult updateGender(@RequestParam(value = "id") Integer id,@RequestParam(value = "gender") UserPolicy.Gender gender) {
+        try {
+            UserPolicy userPolicy = userPolicyService.getById(id);
+            if(ObjectUtil.isEmpty(userPolicy)){
+                AjaxResult.error("保单不存在!");
+            }
+            userPolicy.setGender(gender);
+            userPolicyService.updateById(userPolicy);
+            return AjaxResult.success("修改成功");
+        }catch (Exception e){
+            e.printStackTrace();
+            return AjaxResult.error("修改失败!");
+        }
+    }
+
+    /**
+     * 根据用户id查询保单
+     */
     @GetMapping("/getPolicyById")
     public Result getPolicyById(@RequestParam(value = "account") String account) {
         try {
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/user/UserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/user/UserController.java
index 4120a1c..eb827d6 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/user/UserController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/user/UserController.java
@@ -14,11 +14,13 @@
 import com.ruoyi.im.out.UserAccountOut;
 import com.ruoyi.im.service.ImApiServcie;
 import com.ruoyi.im.service.UserKycService;
+import com.ruoyi.im.service.UserPolicyService;
 import com.ruoyi.im.util.ConverterUtil;
 import com.ruoyi.im.util.PhoneNumberValidatorUtil;
 import com.ruoyi.im.util.SymmetricCryptoUtil;
 import com.ruoyi.system.domain.UserAccount;
 import com.ruoyi.system.domain.UserKyc;
+import com.ruoyi.system.domain.UserPolicy;
 import com.ruoyi.system.domain.vo.UserAccountUpdateVo;
 import com.ruoyi.system.domain.vo.UserAccountVo;
 import com.ruoyi.system.service.UserAccountService;
@@ -45,6 +47,9 @@
 
     @Autowired
     private UserKycService userKycService;
+
+    @Autowired
+    UserPolicyService userPolicyService;
 
     /**
      * 获取会员列表
@@ -126,9 +131,34 @@
         if (ObjectUtil.isEmpty(userAccounts) || maxLevel <= 0) {
             return new ArrayList<>();
         }
+        // 收集用户ID用于查询激活状态
+        List<Integer> idList = userAccounts.stream()
+                .map(UserAccount::getId)
+                .filter(ObjectUtil::isNotEmpty)
+                .collect(Collectors.toList());
 
-        // 先转换基础信息
-        List<UserAccountOut> result = ConverterUtil.convertToList(userAccounts, UserAccountOut.class);
+        // 批量查询激活状态
+        Set<Integer> activatedUserIds = Collections.emptySet();
+        if (!idList.isEmpty()) {
+            LambdaQueryWrapper<UserPolicy> userPolicyWrapper = new LambdaQueryWrapper<>();
+            userPolicyWrapper.in(UserPolicy::getUserId, idList)
+                    .eq(UserPolicy::getApprovalStatus, 1)
+                    .select(UserPolicy::getUserId);
+
+            List<UserPolicy> policyList = userPolicyService.list(userPolicyWrapper);
+            activatedUserIds = policyList.stream()
+                    .map(UserPolicy::getUserId)
+                    .collect(Collectors.toSet());
+        }
+
+        // 转换基础信息并设置激活状态
+        List<UserAccountOut> result = new ArrayList<>();
+        for (UserAccount user : userAccounts) {
+            UserAccountOut out = ConverterUtil.convert(user, UserAccountOut.class);
+            // 设置激活状态
+            out.setActivate(activatedUserIds.contains(user.getId()));
+            result.add(out);
+        }
 
         // 递归加载下级用户
         loadSubordinateUsersRecursive(result, maxLevel);
@@ -290,7 +320,6 @@
             List<UserAccount> subordinates = userAccountService.list(queryWrapper);
 
             List<UserAccountOut> result = ConverterUtil.convertToList(subordinates, UserAccountOut.class);
-
             return AjaxResult.success(result);
         } catch (Exception e) {
             log.error("获取直接下级列表失败", e);
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserKycDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserKycDto.java
index 326cd68..2540fba 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserKycDto.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserKycDto.java
@@ -10,6 +10,8 @@
 @Data
 public class UserKycDto {
 
+    private Integer id;
+
     // 系统生成的用户ID
     @NotEmpty(message = "用户账号不能为空")
     private String account;

--
Gitblit v1.9.3