Ver Fonte

用户导入使用部门编号

xy há 3 dias atrás
pai
commit
2a15919b4e

+ 4 - 0
tz-module-system/tz-module-system-biz/src/main/java/cn/start/tz/module/system/service/dept/DeptService.java

@@ -116,5 +116,9 @@ public interface DeptService {
      */
     void validateDeptList(Collection<String> ids);
 
+    void validateDeptListByCodes(Collection<String> codes);
+
+    DeptDO getDeptByCode(String code);
+
     DeptDO getDeptByName(String name);
 }

+ 27 - 0
tz-module-system/tz-module-system-biz/src/main/java/cn/start/tz/module/system/service/dept/DeptServiceImpl.java

@@ -3,6 +3,7 @@ package cn.start.tz.module.system.service.dept;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.start.tz.framework.common.enums.CommonStatusEnum;
+import cn.start.tz.framework.common.util.collection.CollectionUtils;
 import cn.start.tz.framework.common.util.object.BeanUtils;
 import cn.start.tz.framework.datapermission.core.annotation.DataPermission;
 import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -225,10 +226,36 @@ public class DeptServiceImpl implements DeptService {
         });
     }
 
+    @Override
+    public void validateDeptListByCodes(Collection<String> codes) {
+        if (CollUtil.isEmpty(codes)) {
+            return;
+        }
+        // 获得科室信息
+        List<DeptDO> list = deptMapper.selectList(new LambdaQueryWrapperX<DeptDO>().in(DeptDO::getCode, codes));
+        Map<String, DeptDO> deptMap = CollectionUtils.convertMap(list, DeptDO::getCode);
+        // 校验
+        codes.forEach(code -> {
+            DeptDO dept = deptMap.get(code);
+            if (dept == null) {
+                throw exception(DEPT_NOT_FOUND);
+            }
+            if (!CommonStatusEnum.ENABLE.getStatus().equals(dept.getStatus())) {
+                throw exception(DEPT_NOT_ENABLE, dept.getName());
+            }
+        });
+    }
+
     @Override
     public DeptDO getDeptByName(String name) {
         DeptDO deptDO = deptMapper.selectOne(new LambdaQueryWrapperX<DeptDO>().eq(DeptDO::getName, name),false);
         return deptDO;
     }
 
+    @Override
+    public DeptDO getDeptByCode(String code) {
+        DeptDO deptDO = deptMapper.selectOne(new LambdaQueryWrapperX<DeptDO>().eq(DeptDO::getCode, code),false);
+        return deptDO;
+    }
+
 }

+ 28 - 1
tz-module-system/tz-module-system-biz/src/main/java/cn/start/tz/module/system/service/user/AdminUserServiceImpl.java

@@ -402,6 +402,26 @@ public class AdminUserServiceImpl implements AdminUserService {
         });
     }
 
+    private AdminUserDO validateUserForImport(String id, String username, String mobile, String email,
+                                                      String deptId, Set<String> postIds) {
+        // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确
+        return DataPermissionUtils.executeIgnore(() -> {
+            // 校验用户存在
+            AdminUserDO user = validateUserExists(id);
+            // 校验用户名唯一
+            validateUsernameUnique(id, username);
+            // 校验手机号唯一
+            validateMobileUnique(id, mobile);
+            // 校验邮箱唯一
+            validateEmailUnique(id, email);
+            // 校验部门处于开启状态
+            deptService.validateDeptListByCodes(CollectionUtils.singleton(deptId));
+            // 校验岗位处于开启状态
+            postService.validatePostList(postIds);
+            return user;
+        });
+    }
+
     @VisibleForTesting
     AdminUserDO validateUserExists(String id) {
         if (id == null) {
@@ -510,7 +530,7 @@ public class AdminUserServiceImpl implements AdminUserService {
             }
             // 2.1.2 校验,判断是否有不符合的原因
             try {
-                validateUserForCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(),
+                validateUserForImport(null, null, importUser.getMobile(), importUser.getEmail(),
                         importUser.getDeptId(), null);
             } catch (ServiceException ex) {
                 respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage());
@@ -520,6 +540,13 @@ public class AdminUserServiceImpl implements AdminUserService {
             // 2.2.1 判断如果不存在,在进行插入
             AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername());
             if (existUser == null) {
+
+                DeptDO dept = deptService.getDeptByCode(importUser.getDeptId());
+                if (dept == null) {
+                    respVO.getFailureUsernames().put(importUser.getUsername(), DEPT_NOT_FOUND.getMsg());
+                    return;
+                }
+                importUser.setDeptId(dept.getId());
                 userMapper.insert(BeanUtils.toBean(importUser, AdminUserDO.class)
                         .setPassword(encodePassword(initPassword)).setPostIds(new HashSet<>())); // 设置默认密码及空岗位编号数组
                 respVO.getCreateUsernames().add(importUser.getUsername());