mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 04:08:43 +08:00 
			
		
		
		
	Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into develop
This commit is contained in:
		@@ -33,8 +33,8 @@ public class OperateLogApiImpl implements OperateLogApi {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    @TransMethodResult
 | 
			
		||||
    public PageResult<OperateLogRespDTO> getOperateLogPage(OperateLogPageReqDTO pageReqVO) {
 | 
			
		||||
        PageResult<OperateLogDO> operateLogPage = operateLogService.getOperateLogPage(pageReqVO);
 | 
			
		||||
    public PageResult<OperateLogRespDTO> getOperateLogPage(OperateLogPageReqDTO pageReqDTO) {
 | 
			
		||||
        PageResult<OperateLogDO> operateLogPage = operateLogService.getOperateLogPage(pageReqDTO);
 | 
			
		||||
        return BeanUtils.toBean(operateLogPage, OperateLogRespDTO.class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -74,8 +74,12 @@ public class SocialClientServiceImpl implements SocialClientService {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 小程序版本
 | 
			
		||||
     *
 | 
			
		||||
     * 1. release:正式版
 | 
			
		||||
     * 2. trial:体验版
 | 
			
		||||
     * 3. developer:开发版
 | 
			
		||||
     */
 | 
			
		||||
    @Value("${yudao.wxa-code.env-version}")
 | 
			
		||||
    @Value("${yudao.wxa-code.env-version:release}")
 | 
			
		||||
    public String envVersion;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,9 @@ import cn.iocoder.yudao.framework.common.exception.ServiceException;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.api.config.ConfigApi;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.api.file.FileApi;
 | 
			
		||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
 | 
			
		||||
@@ -31,8 +33,8 @@ import com.mzt.logapi.context.LogRecordContext;
 | 
			
		||||
import com.mzt.logapi.service.impl.DiffParseFunction;
 | 
			
		||||
import com.mzt.logapi.starter.annotation.LogRecord;
 | 
			
		||||
import jakarta.annotation.Resource;
 | 
			
		||||
import jakarta.validation.ConstraintViolationException;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Value;
 | 
			
		||||
import org.springframework.context.annotation.Lazy;
 | 
			
		||||
import org.springframework.security.crypto.password.PasswordEncoder;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
@@ -57,8 +59,7 @@ import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.*;
 | 
			
		||||
@Slf4j
 | 
			
		||||
public class AdminUserServiceImpl implements AdminUserService {
 | 
			
		||||
 | 
			
		||||
    @Value("${sys.user.init-password:yudaoyuanma}")
 | 
			
		||||
    private String userInitPassword;
 | 
			
		||||
    static final String USER_INIT_PASSWORD_KEY = "system.user.init-password";
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private AdminUserMapper userMapper;
 | 
			
		||||
@@ -80,6 +81,8 @@ public class AdminUserServiceImpl implements AdminUserService {
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private FileApi fileApi;
 | 
			
		||||
    @Resource
 | 
			
		||||
    private ConfigApi configApi;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    @Transactional(rollbackFor = Exception.class)
 | 
			
		||||
@@ -428,13 +431,28 @@ public class AdminUserServiceImpl implements AdminUserService {
 | 
			
		||||
    @Override
 | 
			
		||||
    @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入
 | 
			
		||||
    public UserImportRespVO importUserList(List<UserImportExcelVO> importUsers, boolean isUpdateSupport) {
 | 
			
		||||
        // 1.1 参数校验
 | 
			
		||||
        if (CollUtil.isEmpty(importUsers)) {
 | 
			
		||||
            throw exception(USER_IMPORT_LIST_IS_EMPTY);
 | 
			
		||||
        }
 | 
			
		||||
        // 1.2 初始化密码不能为空
 | 
			
		||||
        String initPassword = configApi.getConfigValueByKey(USER_INIT_PASSWORD_KEY);
 | 
			
		||||
        if (StrUtil.isEmpty(initPassword)) {
 | 
			
		||||
            throw exception(USER_IMPORT_INIT_PASSWORD);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 2. 遍历,逐个创建 or 更新
 | 
			
		||||
        UserImportRespVO respVO = UserImportRespVO.builder().createUsernames(new ArrayList<>())
 | 
			
		||||
                .updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build();
 | 
			
		||||
        importUsers.forEach(importUser -> {
 | 
			
		||||
            // 校验,判断是否有不符合的原因
 | 
			
		||||
            // 2.1.1 校验字段是否符合要求
 | 
			
		||||
            try {
 | 
			
		||||
                ValidationUtils.validate(BeanUtils.toBean(importUser, UserSaveReqVO.class).setPassword(initPassword));
 | 
			
		||||
            } catch (ConstraintViolationException ex){
 | 
			
		||||
                respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            // 2.1.2 校验,判断是否有不符合的原因
 | 
			
		||||
            try {
 | 
			
		||||
                validateUserForCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(),
 | 
			
		||||
                        importUser.getDeptId(), null);
 | 
			
		||||
@@ -442,15 +460,16 @@ public class AdminUserServiceImpl implements AdminUserService {
 | 
			
		||||
                respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            // 判断如果不存在,在进行插入
 | 
			
		||||
 | 
			
		||||
            // 2.2.1 判断如果不存在,在进行插入
 | 
			
		||||
            AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername());
 | 
			
		||||
            if (existUser == null) {
 | 
			
		||||
                userMapper.insert(BeanUtils.toBean(importUser, AdminUserDO.class)
 | 
			
		||||
                        .setPassword(encodePassword(userInitPassword)).setPostIds(new HashSet<>())); // 设置默认密码及空岗位编号数组
 | 
			
		||||
                        .setPassword(encodePassword(initPassword)).setPostIds(new HashSet<>())); // 设置默认密码及空岗位编号数组
 | 
			
		||||
                respVO.getCreateUsernames().add(importUser.getUsername());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            // 如果存在,判断是否允许更新
 | 
			
		||||
            // 2.2.2 如果存在,判断是否允许更新
 | 
			
		||||
            if (!isUpdateSupport) {
 | 
			
		||||
                respVO.getFailureUsernames().put(importUser.getUsername(), USER_USERNAME_EXISTS.getMsg());
 | 
			
		||||
                return;
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.api.config.ConfigApi;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.api.file.FileApi;
 | 
			
		||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
 | 
			
		||||
@@ -23,6 +24,7 @@ import cn.iocoder.yudao.module.system.service.dept.DeptService;
 | 
			
		||||
import cn.iocoder.yudao.module.system.service.dept.PostService;
 | 
			
		||||
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
 | 
			
		||||
import cn.iocoder.yudao.module.system.service.tenant.TenantService;
 | 
			
		||||
import org.junit.jupiter.api.BeforeEach;
 | 
			
		||||
import org.junit.jupiter.api.Test;
 | 
			
		||||
import org.mockito.stubbing.Answer;
 | 
			
		||||
import org.springframework.boot.test.mock.mockito.MockBean;
 | 
			
		||||
@@ -46,6 +48,7 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq
 | 
			
		||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
 | 
			
		||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
 | 
			
		||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
 | 
			
		||||
import static cn.iocoder.yudao.module.system.service.user.AdminUserServiceImpl.USER_INIT_PASSWORD_KEY;
 | 
			
		||||
import static java.util.Collections.singleton;
 | 
			
		||||
import static java.util.Collections.singletonList;
 | 
			
		||||
import static org.assertj.core.util.Lists.newArrayList;
 | 
			
		||||
@@ -76,6 +79,14 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
 | 
			
		||||
    private TenantService tenantService;
 | 
			
		||||
    @MockBean
 | 
			
		||||
    private FileApi fileApi;
 | 
			
		||||
    @MockBean
 | 
			
		||||
    private ConfigApi configApi;
 | 
			
		||||
 | 
			
		||||
    @BeforeEach
 | 
			
		||||
    public void before() {
 | 
			
		||||
        // mock 初始化密码
 | 
			
		||||
        when(configApi.getConfigValueByKey(USER_INIT_PASSWORD_KEY)).thenReturn("yudaoyuanma");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testCreatUser_success() {
 | 
			
		||||
@@ -419,6 +430,8 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
 | 
			
		||||
    public void testImportUserList_01() {
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> {
 | 
			
		||||
            o.setEmail(randomEmail());
 | 
			
		||||
            o.setMobile(randomMobile());
 | 
			
		||||
        });
 | 
			
		||||
        // mock 方法,模拟失败
 | 
			
		||||
        doThrow(new ServiceException(DEPT_NOT_FOUND)).when(deptService).validateDeptList(any());
 | 
			
		||||
@@ -441,6 +454,8 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
 | 
			
		||||
        UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> {
 | 
			
		||||
            o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
 | 
			
		||||
            o.setSex(randomEle(SexEnum.values()).getSex()); // 保证 sex 的范围
 | 
			
		||||
            o.setEmail(randomEmail());
 | 
			
		||||
            o.setMobile(randomMobile());
 | 
			
		||||
        });
 | 
			
		||||
        // mock deptService 的方法
 | 
			
		||||
        DeptDO dept = randomPojo(DeptDO.class, o -> {
 | 
			
		||||
@@ -475,6 +490,8 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
 | 
			
		||||
            o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
 | 
			
		||||
            o.setSex(randomEle(SexEnum.values()).getSex()); // 保证 sex 的范围
 | 
			
		||||
            o.setUsername(dbUser.getUsername());
 | 
			
		||||
            o.setEmail(randomEmail());
 | 
			
		||||
            o.setMobile(randomMobile());
 | 
			
		||||
        });
 | 
			
		||||
        // mock deptService 的方法
 | 
			
		||||
        DeptDO dept = randomPojo(DeptDO.class, o -> {
 | 
			
		||||
@@ -505,6 +522,8 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
 | 
			
		||||
            o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
 | 
			
		||||
            o.setSex(randomEle(SexEnum.values()).getSex()); // 保证 sex 的范围
 | 
			
		||||
            o.setUsername(dbUser.getUsername());
 | 
			
		||||
            o.setEmail(randomEmail());
 | 
			
		||||
            o.setMobile(randomMobile());
 | 
			
		||||
        });
 | 
			
		||||
        // mock deptService 的方法
 | 
			
		||||
        DeptDO dept = randomPojo(DeptDO.class, o -> {
 | 
			
		||||
 
 | 
			
		||||
@@ -46,8 +46,3 @@ mybatis:
 | 
			
		||||
yudao:
 | 
			
		||||
  info:
 | 
			
		||||
    base-package: cn.iocoder.yudao.module
 | 
			
		||||
  captcha:
 | 
			
		||||
    timeout: 5m
 | 
			
		||||
    width: 160
 | 
			
		||||
    height: 60
 | 
			
		||||
    enable: true
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user