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