Commit 36765d53a1693bd92e590f588f8c3f0960b6e71a
Committed by
Gitee
!1017 bugfix-导入系统用户时,增加注解校验过程,与界面添加和修改用户保持一致
Merge pull request !1017 from 尹先生/master-jdk17
Showing
3 changed files
with
45 additions
and
3 deletions
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 -> { |