Commit 878b56a7d60ea5dbaabd2d53719c36cf826353c1

Authored by yinyilong
1 parent 4959479a

bugfix-导入系统用户时,增加注解校验过程,与界面添加和修改用户保持一致

yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java
@@ -103,6 +103,10 @@ public class RandomUtils { @@ -103,6 +103,10 @@ public class RandomUtils {
103 return randomString() + "@qq.com"; 103 return randomString() + "@qq.com";
104 } 104 }
105 105
  106 + public static String randomMobile() {
  107 + return "13800138" + RandomUtil.randomNumbers(3);
  108 + }
  109 +
106 public static String randomURL() { 110 public static String randomURL() {
107 return "https://www.iocoder.cn/" + randomString(); 111 return "https://www.iocoder.cn/" + randomString();
108 } 112 }
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
@@ -9,6 +9,7 @@ import cn.iocoder.yudao.framework.common.exception.ServiceException; @@ -9,6 +9,7 @@ import cn.iocoder.yudao.framework.common.exception.ServiceException;
9 import cn.iocoder.yudao.framework.common.pojo.PageResult; 9 import cn.iocoder.yudao.framework.common.pojo.PageResult;
10 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 10 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
11 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 11 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  12 +import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
12 import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils; 13 import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
13 import cn.iocoder.yudao.module.infra.api.config.ConfigApi; 14 import cn.iocoder.yudao.module.infra.api.config.ConfigApi;
14 import cn.iocoder.yudao.module.infra.api.file.FileApi; 15 import cn.iocoder.yudao.module.infra.api.file.FileApi;
@@ -32,6 +33,7 @@ import com.mzt.logapi.context.LogRecordContext; @@ -32,6 +33,7 @@ import com.mzt.logapi.context.LogRecordContext;
32 import com.mzt.logapi.service.impl.DiffParseFunction; 33 import com.mzt.logapi.service.impl.DiffParseFunction;
33 import com.mzt.logapi.starter.annotation.LogRecord; 34 import com.mzt.logapi.starter.annotation.LogRecord;
34 import jakarta.annotation.Resource; 35 import jakarta.annotation.Resource;
  36 +import jakarta.validation.ConstraintViolationException;
35 import lombok.extern.slf4j.Slf4j; 37 import lombok.extern.slf4j.Slf4j;
36 import org.springframework.context.annotation.Lazy; 38 import org.springframework.context.annotation.Lazy;
37 import org.springframework.security.crypto.password.PasswordEncoder; 39 import org.springframework.security.crypto.password.PasswordEncoder;
@@ -40,13 +42,36 @@ import org.springframework.transaction.annotation.Transactional; @@ -40,13 +42,36 @@ import org.springframework.transaction.annotation.Transactional;
40 42
41 import java.io.InputStream; 43 import java.io.InputStream;
42 import java.time.LocalDateTime; 44 import java.time.LocalDateTime;
43 -import java.util.*; 45 +import java.util.ArrayList;
  46 +import java.util.Collection;
  47 +import java.util.Collections;
  48 +import java.util.HashSet;
  49 +import java.util.LinkedHashMap;
  50 +import java.util.List;
  51 +import java.util.Map;
  52 +import java.util.Set;
44 53
45 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 54 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
46 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; 55 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
47 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; 56 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
48 -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;  
49 -import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.*; 57 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_COUNT_MAX;
  58 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_EMAIL_EXISTS;
  59 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_IMPORT_INIT_PASSWORD;
  60 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY;
  61 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_IS_DISABLE;
  62 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_MOBILE_EXISTS;
  63 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_NOT_EXISTS;
  64 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_PASSWORD_FAILED;
  65 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_USERNAME_EXISTS;
  66 +import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.SYSTEM_USER_CREATE_SUB_TYPE;
  67 +import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.SYSTEM_USER_CREATE_SUCCESS;
  68 +import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.SYSTEM_USER_DELETE_SUB_TYPE;
  69 +import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.SYSTEM_USER_DELETE_SUCCESS;
  70 +import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.SYSTEM_USER_TYPE;
  71 +import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.SYSTEM_USER_UPDATE_PASSWORD_SUB_TYPE;
  72 +import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.SYSTEM_USER_UPDATE_PASSWORD_SUCCESS;
  73 +import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.SYSTEM_USER_UPDATE_SUB_TYPE;
  74 +import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.SYSTEM_USER_UPDATE_SUCCESS;
50 75
51 /** 76 /**
52 * 后台用户 Service 实现类 77 * 后台用户 Service 实现类
@@ -451,6 +476,13 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -451,6 +476,13 @@ public class AdminUserServiceImpl implements AdminUserService {
451 respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage()); 476 respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage());
452 return; 477 return;
453 } 478 }
  479 + // 校验字段是否符合要求
  480 + try {
  481 + ValidationUtils.validate(BeanUtils.toBean(importUser, UserSaveReqVO.class).setPassword(initPassword));
  482 + }catch (ConstraintViolationException ex){
  483 + respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage());
  484 + return;
  485 + }
454 // 判断如果不存在,在进行插入 486 // 判断如果不存在,在进行插入
455 AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername()); 487 AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername());
456 if (existUser == null) { 488 if (existUser == null) {
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java
@@ -452,6 +452,8 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { @@ -452,6 +452,8 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
452 UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { 452 UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> {
453 o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围 453 o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
454 o.setSex(randomEle(SexEnum.values()).getSex()); // 保证 sex 的范围 454 o.setSex(randomEle(SexEnum.values()).getSex()); // 保证 sex 的范围
  455 + o.setEmail(randomEmail());
  456 + o.setMobile(randomMobile());
455 }); 457 });
456 // mock deptService 的方法 458 // mock deptService 的方法
457 DeptDO dept = randomPojo(DeptDO.class, o -> { 459 DeptDO dept = randomPojo(DeptDO.class, o -> {
@@ -486,6 +488,8 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { @@ -486,6 +488,8 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
486 o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围 488 o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
487 o.setSex(randomEle(SexEnum.values()).getSex()); // 保证 sex 的范围 489 o.setSex(randomEle(SexEnum.values()).getSex()); // 保证 sex 的范围
488 o.setUsername(dbUser.getUsername()); 490 o.setUsername(dbUser.getUsername());
  491 + o.setEmail(randomEmail());
  492 + o.setMobile(randomMobile());
489 }); 493 });
490 // mock deptService 的方法 494 // mock deptService 的方法
491 DeptDO dept = randomPojo(DeptDO.class, o -> { 495 DeptDO dept = randomPojo(DeptDO.class, o -> {
@@ -516,6 +520,8 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { @@ -516,6 +520,8 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
516 o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围 520 o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
517 o.setSex(randomEle(SexEnum.values()).getSex()); // 保证 sex 的范围 521 o.setSex(randomEle(SexEnum.values()).getSex()); // 保证 sex 的范围
518 o.setUsername(dbUser.getUsername()); 522 o.setUsername(dbUser.getUsername());
  523 + o.setEmail(randomEmail());
  524 + o.setMobile(randomMobile());
519 }); 525 });
520 // mock deptService 的方法 526 // mock deptService 的方法
521 DeptDO dept = randomPojo(DeptDO.class, o -> { 527 DeptDO dept = randomPojo(DeptDO.class, o -> {