dev:人员导入(部门岗位反哺版)
parent
f2b527d32a
commit
eac75ce415
|
|
@ -0,0 +1,382 @@
|
||||||
|
package com.zcloud.basic.info.command;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import com.alibaba.cloud.commons.lang.StringUtils;
|
||||||
|
import com.alibaba.cola.dto.MultiResponse;
|
||||||
|
import com.alibaba.cola.exception.BizException;
|
||||||
|
import com.jjb.saas.config.client.dicttree.facade.ConfDictTreeFacade;
|
||||||
|
import com.jjb.saas.config.client.dicttree.response.ConfDictTreeCO;
|
||||||
|
import com.jjb.saas.framework.auth.model.SSOUser;
|
||||||
|
import com.jjb.saas.framework.auth.utils.AuthContext;
|
||||||
|
import com.jjb.saas.system.client.role.facade.RoleFacade;
|
||||||
|
import com.jjb.saas.system.client.role.response.RoleCO;
|
||||||
|
import com.zcloud.basic.info.command.convertor.UserCoConvertor;
|
||||||
|
import com.zcloud.basic.info.domain.gateway.DepartmentGateway;
|
||||||
|
import com.zcloud.basic.info.domain.gateway.PostGateway;
|
||||||
|
import com.zcloud.basic.info.domain.gateway.UserEmploymentLogGateway;
|
||||||
|
import com.zcloud.basic.info.domain.gateway.UserGateway;
|
||||||
|
import com.zcloud.basic.info.domain.model.DepartmentE;
|
||||||
|
import com.zcloud.basic.info.domain.model.PostE;
|
||||||
|
import com.zcloud.basic.info.domain.model.UserE;
|
||||||
|
import com.zcloud.basic.info.domain.model.UserEmploymentLogE;
|
||||||
|
import com.zcloud.basic.info.dto.CorpInfoAddCmd;
|
||||||
|
import com.zcloud.basic.info.dto.UserAddCmd;
|
||||||
|
import com.zcloud.basic.info.dto.UserXgfAddCmd;
|
||||||
|
import com.zcloud.basic.info.persistence.dataobject.CorpInfoDO;
|
||||||
|
import com.zcloud.basic.info.persistence.dataobject.DepartmentDO;
|
||||||
|
import com.zcloud.basic.info.persistence.dataobject.PostDO;
|
||||||
|
import com.zcloud.basic.info.persistence.dataobject.UserDO;
|
||||||
|
import com.zcloud.basic.info.persistence.repository.CorpInfoRepository;
|
||||||
|
import com.zcloud.basic.info.persistence.repository.DepartmentRepository;
|
||||||
|
import com.zcloud.basic.info.persistence.repository.PostRepository;
|
||||||
|
import com.zcloud.basic.info.persistence.repository.UserRepository;
|
||||||
|
import com.zcloud.gbscommon.excelEntity.UserExcelImportEntity;
|
||||||
|
import com.zcloud.gbscommon.utils.ExcelUtils;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* web-app
|
||||||
|
* @Author zhangyue
|
||||||
|
* @Date 2025-11-04 14:07:21
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class UserImportExe {
|
||||||
|
private final UserGateway userGateway;
|
||||||
|
private final UserEmploymentLogGateway userEmploymentLogGateway;
|
||||||
|
private final CorpInfoRepository corpInfoRepository;
|
||||||
|
private final DepartmentRepository departmentRepository;
|
||||||
|
private final PostRepository postRepository;
|
||||||
|
private final PostGateway postGateway;
|
||||||
|
private final UserRepository userRepository;
|
||||||
|
private final DepartmentGateway departmentGateway;
|
||||||
|
@DubboReference
|
||||||
|
private ConfDictTreeFacade confDictTreeFacade;
|
||||||
|
@DubboReference
|
||||||
|
private RoleFacade roleFacade;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void importUserTable(MultipartFile file) {
|
||||||
|
Long corpinfoId = AuthContext.getTenantId();
|
||||||
|
|
||||||
|
CorpInfoDO corpInfoDO = corpInfoRepository.getById(corpinfoId);
|
||||||
|
// 角色数据
|
||||||
|
MultiResponse<RoleCO> roleCOMultiResponse = roleFacade.listRoles();
|
||||||
|
if (roleCOMultiResponse == null || CollUtil.isEmpty(roleCOMultiResponse.getData())) {
|
||||||
|
throw new BizException("未创建默认通用角色,请联系管理员");
|
||||||
|
}
|
||||||
|
// 部门数据
|
||||||
|
List<DepartmentDO> departmentDOList = departmentRepository.listByCorpInfoId(corpinfoId);
|
||||||
|
// 岗位数据
|
||||||
|
List<PostDO> postDOList = postRepository.listByCorpInfoId(corpinfoId);
|
||||||
|
// 用户名数据
|
||||||
|
List<UserDO> userDOList = userRepository.listByCorpInfoId(corpinfoId);
|
||||||
|
|
||||||
|
List<UserExcelImportEntity> list = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
ExcelUtils.readBatch(file, UserExcelImportEntity.class, list);
|
||||||
|
if (list.isEmpty()) {
|
||||||
|
throw new BizException("文件为空");
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new BizException("文件解析失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始处理导入逻辑
|
||||||
|
for (UserExcelImportEntity importEntity : list) {
|
||||||
|
try {
|
||||||
|
processSingleUser(importEntity, corpinfoId, corpInfoDO, departmentDOList, postDOList, userDOList, roleCOMultiResponse.getData());
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("导入用户失败: " + importEntity.getUsername());
|
||||||
|
throw new BizException("导入用户失败: " + importEntity.getUsername() + ", 原因: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理单个用户导入
|
||||||
|
*/
|
||||||
|
private void processSingleUser(UserExcelImportEntity importEntity, Long corpinfoId,
|
||||||
|
CorpInfoDO corpInfoDO,
|
||||||
|
List<DepartmentDO> departmentDOList, List<PostDO> postDOList,
|
||||||
|
List<UserDO> userDOList, List<RoleCO> roleList) {
|
||||||
|
|
||||||
|
// 1. 处理部门层级,获取最终部门ID
|
||||||
|
Long departmentId = processDepartmentHierarchy(importEntity, corpinfoId, departmentDOList);
|
||||||
|
|
||||||
|
// 2. 处理岗位,获取岗位ID
|
||||||
|
Long postId = processPost(importEntity, corpinfoId, corpInfoDO, departmentId, postDOList);
|
||||||
|
|
||||||
|
// 3. 处理角色信息
|
||||||
|
Long roleId = processRoleInfo(importEntity, roleList);
|
||||||
|
|
||||||
|
// 4. 处理用户信息
|
||||||
|
processUserInfo(importEntity, corpinfoId, corpInfoDO, departmentId, postId, userDOList, roleId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理部门层级结构
|
||||||
|
*/
|
||||||
|
private Long processDepartmentHierarchy(UserExcelImportEntity importEntity, Long corpinfoId,
|
||||||
|
List<DepartmentDO> allDepartments) {
|
||||||
|
|
||||||
|
if(StringUtils.isEmpty(importEntity.getDepartmentName1())
|
||||||
|
&& StringUtils.isEmpty(importEntity.getDepartmentName2())
|
||||||
|
&& StringUtils.isEmpty(importEntity.getDepartmentName3())
|
||||||
|
&& StringUtils.isEmpty(importEntity.getDepartmentName4())
|
||||||
|
&& StringUtils.isEmpty(importEntity.getDepartmentName5())){
|
||||||
|
throw new BizException("部门层级不能为空。");
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] deptLevels = {
|
||||||
|
importEntity.getDepartmentName1(),
|
||||||
|
importEntity.getDepartmentName2(),
|
||||||
|
importEntity.getDepartmentName3(),
|
||||||
|
importEntity.getDepartmentName4(),
|
||||||
|
importEntity.getDepartmentName5()
|
||||||
|
};
|
||||||
|
|
||||||
|
// 首先获取或创建固定的一级部门(公司同名部门)
|
||||||
|
DepartmentDO rootDept = getOrCreateRootDepartment(corpinfoId, allDepartments);
|
||||||
|
|
||||||
|
// 验证一级部门名称是否与Excel中的部门1匹配
|
||||||
|
if (StringUtils.isNotBlank(importEntity.getDepartmentName1()) &&
|
||||||
|
!importEntity.getDepartmentName1().equals(rootDept.getName())) {
|
||||||
|
throw new BizException("一级部门名称与公司名称不一致: Excel中的" + importEntity.getDepartmentName1() + " vs 系统中的" + rootDept.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
Long currentParentId = rootDept.getId(); // 从一级部门开始
|
||||||
|
DepartmentDO currentDept = rootDept;
|
||||||
|
|
||||||
|
// 从一级部门开始处理(但一级部门已经存在,所以从二级开始创建)
|
||||||
|
for (int level = 0; level < deptLevels.length; level++) {
|
||||||
|
String deptName = deptLevels[level];
|
||||||
|
|
||||||
|
// 如果当前层级部门名为空,则停止处理
|
||||||
|
if (StringUtils.isBlank(deptName)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
deptName = deptName.trim();
|
||||||
|
|
||||||
|
// 一级部门已经存在,跳过创建
|
||||||
|
if (level == 0) {
|
||||||
|
// 一级部门使用现有的根部门,继续处理下级
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查找或创建部门(从二级部门开始)
|
||||||
|
currentDept = findOrCreateDepartment(deptName, currentParentId, level + 1, corpinfoId, allDepartments);
|
||||||
|
|
||||||
|
if (currentDept == null) {
|
||||||
|
throw new BizException("创建部门失败: " + deptName + " (层级: " + (level + 1) + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 当前部门作为下一级的父部门
|
||||||
|
currentParentId = currentDept.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回最终的部门ID
|
||||||
|
// 如果没有下级部门,则返回一级部门ID;否则返回最后创建的部门ID
|
||||||
|
return currentDept != null ? currentDept.getId() : rootDept.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取或创建固定的一级部门(公司同名部门)
|
||||||
|
*/
|
||||||
|
private DepartmentDO getOrCreateRootDepartment(Long corpinfoId, List<DepartmentDO> allDepartments) {
|
||||||
|
// 先从现有部门中查找一级部门(父ID为0)
|
||||||
|
DepartmentDO rootDept = allDepartments.stream()
|
||||||
|
.filter(dept -> dept.getParentId() != null && dept.getParentId() == 0L)
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
|
||||||
|
if (rootDept != null) {
|
||||||
|
return rootDept;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果根部门不存在,需要创建(根据你的业务需求决定)
|
||||||
|
// 这里保持你的原有逻辑,抛出异常
|
||||||
|
throw new BizException("所属部门1不存在,该部门无法手动创建");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查找或创建部门(从二级部门开始使用)
|
||||||
|
*/
|
||||||
|
private DepartmentDO findOrCreateDepartment(String deptName, Long parentId, int level,
|
||||||
|
Long corpinfoId, List<DepartmentDO> allDepartments) {
|
||||||
|
// 在现有部门中查找
|
||||||
|
DepartmentDO existingDept = findDepartmentInList(allDepartments, parentId, deptName);
|
||||||
|
if (existingDept != null) {
|
||||||
|
return existingDept;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 不存在则创建新部门
|
||||||
|
DepartmentDO newDept = createNewDepartment(deptName, parentId, level, corpinfoId);
|
||||||
|
|
||||||
|
// 将新部门添加到列表中
|
||||||
|
allDepartments.add(newDept);
|
||||||
|
|
||||||
|
return newDept;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在部门列表中查找指定部门
|
||||||
|
*/
|
||||||
|
private DepartmentDO findDepartmentInList(List<DepartmentDO> departments, Long parentId, String name) {
|
||||||
|
return departments.stream()
|
||||||
|
.filter(dept -> {
|
||||||
|
// 根部门的父ID是0,不是null
|
||||||
|
boolean parentMatch = (parentId == null && dept.getParentId() == 0L) ||
|
||||||
|
(parentId != null && parentId.equals(dept.getParentId()));
|
||||||
|
return parentMatch && name.equals(dept.getName());
|
||||||
|
})
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建新部门
|
||||||
|
*/
|
||||||
|
private DepartmentDO createNewDepartment(String name, Long parentId, int level, Long corpinfoId) {
|
||||||
|
DepartmentE department = new DepartmentE();
|
||||||
|
department.setName(name);
|
||||||
|
department.setParentId(parentId);
|
||||||
|
department.setCorpinfoId(corpinfoId);
|
||||||
|
department.setDepOrder(9999);
|
||||||
|
|
||||||
|
Long departmentId = departmentGateway.add(department);
|
||||||
|
|
||||||
|
DepartmentDO departmentDO = new DepartmentDO();
|
||||||
|
BeanUtils.copyProperties(department, departmentDO);
|
||||||
|
departmentDO.setId(departmentId);
|
||||||
|
return departmentDO;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理岗位信息
|
||||||
|
*/
|
||||||
|
private Long processPost(UserExcelImportEntity importEntity, Long corpinfoId,
|
||||||
|
CorpInfoDO corpInfoDO,
|
||||||
|
Long departmentId, List<PostDO> allPosts) {
|
||||||
|
if (StringUtils.isBlank(importEntity.getPostName())) {
|
||||||
|
throw new BizException("岗位名称不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
String postName = importEntity.getPostName().trim();
|
||||||
|
|
||||||
|
// 查找该部门下是否存在该岗位
|
||||||
|
PostDO existingPost = findPostInList(allPosts, departmentId, postName);
|
||||||
|
if (existingPost != null) {
|
||||||
|
return existingPost.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 不存在则创建新岗位
|
||||||
|
PostDO newPost = createNewPost(postName, departmentId, corpinfoId, corpInfoDO);
|
||||||
|
|
||||||
|
// 将新岗位添加到列表中
|
||||||
|
allPosts.add(newPost);
|
||||||
|
|
||||||
|
return newPost.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在岗位列表中查找指定岗位
|
||||||
|
*/
|
||||||
|
private PostDO findPostInList(List<PostDO> posts, Long departmentId, String name) {
|
||||||
|
return posts.stream()
|
||||||
|
.filter(post -> departmentId.equals(post.getDepartmentId()) && name.equals(post.getPostName()))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建新岗位
|
||||||
|
*/
|
||||||
|
private PostDO createNewPost(String name, Long departmentId, Long corpinfoId, CorpInfoDO corpInfoDO) {
|
||||||
|
|
||||||
|
PostDO post = new PostDO();
|
||||||
|
post.setPostName(name);
|
||||||
|
post.setDepartmentId(departmentId);
|
||||||
|
post.setCorpinfoId(corpinfoId);
|
||||||
|
post.setCorpinfoName(corpInfoDO.getCorpName());
|
||||||
|
|
||||||
|
PostE postE = new PostE();
|
||||||
|
BeanUtils.copyProperties(post, postE);
|
||||||
|
Long postId = postGateway.add(postE);
|
||||||
|
post.setId(postId);
|
||||||
|
return post;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理角色信息
|
||||||
|
*/
|
||||||
|
private Long processRoleInfo(UserExcelImportEntity importEntity, List<RoleCO> roleList) {
|
||||||
|
if(StringUtils.isBlank(importEntity.getRoleName())){
|
||||||
|
throw new BizException("角色名称不能为空");
|
||||||
|
}
|
||||||
|
Map<String, RoleCO> roleCOMap = roleList.stream().collect(Collectors.toMap(RoleCO::getRoleName, role -> role));
|
||||||
|
String roleName = importEntity.getRoleName();
|
||||||
|
if(roleCOMap.get(roleName) == null){
|
||||||
|
throw new BizException("角色不存在: " + roleName);
|
||||||
|
}
|
||||||
|
return roleCOMap.get(roleName).getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理用户信息
|
||||||
|
*/
|
||||||
|
private void processUserInfo(UserExcelImportEntity importEntity, Long corpinfoId,
|
||||||
|
CorpInfoDO corpInfoDO,
|
||||||
|
Long departmentId, Long postId, List<UserDO> allUsers,
|
||||||
|
Long roleId) {
|
||||||
|
// 检查用户名是否已存在
|
||||||
|
boolean usernameExists = allUsers.stream()
|
||||||
|
.anyMatch(user -> importEntity.getUsername().equals(user.getUsername()));
|
||||||
|
|
||||||
|
if (usernameExists) {
|
||||||
|
throw new BizException("用户名已存在: " + importEntity.getUsername());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建用户
|
||||||
|
UserE user = new UserE();
|
||||||
|
user.setUsername(importEntity.getUsername());
|
||||||
|
user.setRoleId(roleId);
|
||||||
|
user.setDepartmentId(departmentId);
|
||||||
|
user.setPostId(postId);
|
||||||
|
user.setCorpinfoId(corpinfoId);
|
||||||
|
user.setName(importEntity.getName());
|
||||||
|
|
||||||
|
userGateway.add(user);
|
||||||
|
String corpName = null;
|
||||||
|
if(corpInfoDO != null && !ObjectUtils.isEmpty(corpInfoDO.getCorpName())){
|
||||||
|
corpName = corpInfoDO.getCorpName();
|
||||||
|
}
|
||||||
|
UserEmploymentLogE userEmploymentLogE = new UserEmploymentLogE();
|
||||||
|
userEmploymentLogE.initAdd(userEmploymentLogE, corpName, user.getId());
|
||||||
|
userEmploymentLogGateway.add(userEmploymentLogE);
|
||||||
|
|
||||||
|
// 将新用户添加到列表中
|
||||||
|
UserDO userDO = new UserDO();
|
||||||
|
BeanUtils.copyProperties(user, userDO);
|
||||||
|
allUsers.add(userDO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -6,6 +6,7 @@ import com.alibaba.cola.exception.BizException;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.jjb.saas.framework.domain.model.BaseE;
|
import com.jjb.saas.framework.domain.model.BaseE;
|
||||||
import com.zcloud.basic.info.domain.enums.CorpTypeEnum;
|
import com.zcloud.basic.info.domain.enums.CorpTypeEnum;
|
||||||
|
import com.zcloud.basic.info.domain.gateway.DepartmentGateway;
|
||||||
import com.zcloud.gbscommon.excelEntity.UserExcelExportEntity;
|
import com.zcloud.gbscommon.excelEntity.UserExcelExportEntity;
|
||||||
import com.zcloud.gbscommon.excelEntity.UserExcelImportEntity;
|
import com.zcloud.gbscommon.excelEntity.UserExcelImportEntity;
|
||||||
import com.zcloud.gbscommon.utils.ExcelUtils;
|
import com.zcloud.gbscommon.utils.ExcelUtils;
|
||||||
|
|
@ -18,6 +19,7 @@ import org.apache.commons.lang.StringUtils;
|
||||||
import org.springframework.util.ObjectUtils;
|
import org.springframework.util.ObjectUtils;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -196,151 +198,6 @@ public class UserE extends BaseE {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 导入
|
|
||||||
public List<UserE> parseImportTemplateData(MultipartFile file,
|
|
||||||
List<DepartmentE> departmentList,
|
|
||||||
List<PostE> postList,
|
|
||||||
List<UserE> userList,
|
|
||||||
Map<String, Long> roleMap,
|
|
||||||
Map<String, String> dictMap) {
|
|
||||||
List<UserExcelImportEntity> list = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
ExcelUtils.readBatch(file, UserExcelImportEntity.class, list);
|
|
||||||
if (list.isEmpty()) {
|
|
||||||
throw new BizException("文件为空");
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new BizException("文件解析失败");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CollUtil.isEmpty(departmentList)) {
|
|
||||||
throw new BizException("该企业暂未存在部门信息,请添加部门后重新导入");
|
|
||||||
}
|
|
||||||
// if(CollUtil.isEmpty(postList)){
|
|
||||||
// throw new BizException("该企业暂未存在岗位信息,请添加岗位后重新导入");
|
|
||||||
// }
|
|
||||||
Map<String, DepartmentE> departmentEMap = departmentList.stream().collect(Collectors.toMap(DepartmentE::getName, DepartmentE -> DepartmentE));
|
|
||||||
|
|
||||||
|
|
||||||
Map<String, UserE> userEMap = new HashMap<>();
|
|
||||||
if (CollUtil.isNotEmpty(userList)) {
|
|
||||||
userEMap = userList.stream().collect(Collectors.toMap(UserE::getUsername, UserE -> UserE));
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, String> usernameMap = new HashMap<>();
|
|
||||||
|
|
||||||
|
|
||||||
// 错误消息集合
|
|
||||||
List<String> errList = new ArrayList<>();
|
|
||||||
// 校验
|
|
||||||
for (int i = 0; i < list.size(); i++) {
|
|
||||||
UserExcelImportEntity entity = list.get(i);
|
|
||||||
if (entity == null) {
|
|
||||||
errList.add("第" + (i + 2) + "行数据不能为空。");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (StringUtils.isEmpty(entity.getRoleName())) {
|
|
||||||
errList.add("第" + (i + 2) + "行用户角色不能为空。");
|
|
||||||
}
|
|
||||||
if(!roleMap.containsKey(entity.getRoleName())){
|
|
||||||
errList.add("第" + (i + 2) + "行用户角色不存在。");
|
|
||||||
}
|
|
||||||
if (StringUtils.isEmpty(entity.getDepartmentName())) {
|
|
||||||
errList.add("第" + (i + 2) + "行所属部门不能为空。");
|
|
||||||
} else {
|
|
||||||
if (departmentEMap.get(entity.getDepartmentName()) == null) {
|
|
||||||
errList.add("第" + (i + 2) + "行所属部门不存在。");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 岗位
|
|
||||||
if (StringUtils.isNotEmpty(entity.getPostName())) {
|
|
||||||
if (CollUtil.isEmpty(postList)) {
|
|
||||||
throw new BizException("该企业暂未存在岗位信息,请添加岗位后重新导入");
|
|
||||||
}
|
|
||||||
DepartmentE departmentE = departmentEMap.get(entity.getDepartmentName());
|
|
||||||
if (departmentE != null) {
|
|
||||||
List<PostE> postListByDepartId = postList.stream().filter(post -> post.getDepartmentId().equals(departmentE.getId())).collect(Collectors.toList());
|
|
||||||
if (CollUtil.isEmpty(postListByDepartId)) {
|
|
||||||
errList.add("第" + (i + 2) + "行所属部门下不存在岗位信息。");
|
|
||||||
} else {
|
|
||||||
Map<String, PostE> postEMap = postListByDepartId.stream().collect(Collectors.toMap(PostE::getPostName, PostE -> PostE));
|
|
||||||
if (postEMap.get(entity.getPostName()) == null) {
|
|
||||||
errList.add("第" + (i + 2) + "行所属岗位信息与所属部门信息不匹配。");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// if(StringUtils.isEmpty(entity.getPostName())){
|
|
||||||
// errList.add("第" + (i+2) + "行所属岗位不能为空。");
|
|
||||||
// }else{
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
// 用户名
|
|
||||||
if (StringUtils.isEmpty(entity.getUsername())) {
|
|
||||||
errList.add("第" + (i + 2) + "行用户名不能为空。");
|
|
||||||
} else {
|
|
||||||
if (CollUtil.isNotEmpty(userEMap)) {
|
|
||||||
if (userEMap.get(entity.getUsername()) != null) {
|
|
||||||
errList.add("第" + (i + 2) + "行用户名重复。");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (usernameMap.get(entity.getUsername()) != null) {
|
|
||||||
errList.add("第" + (i + 2) + "行用户名重复。");
|
|
||||||
} else {
|
|
||||||
usernameMap.put(entity.getUsername(), entity.getUsername());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (StringUtils.isEmpty(entity.getName())) {
|
|
||||||
errList.add("第" + (i + 2) + "行姓名不能为空。");
|
|
||||||
}
|
|
||||||
if (StringUtils.isEmpty(entity.getPersonnelTypeName())) {
|
|
||||||
errList.add("第" + (i + 2) + "行人员类型不能为空。");
|
|
||||||
} else {
|
|
||||||
if (StringUtils.isEmpty(dictMap.get(entity.getPersonnelTypeName()))) {
|
|
||||||
errList.add("第" + (i + 2) + "行人员类型与系统不匹配。");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CollUtil.isNotEmpty(errList)) {
|
|
||||||
throw new BizException("导入信息有误,请检查后重新导入。错误信息:" + String.join("", errList));
|
|
||||||
}
|
|
||||||
|
|
||||||
// 映射
|
|
||||||
List<UserE> userEList = new ArrayList<>();
|
|
||||||
for (int i = 0; i < list.size(); i++) {
|
|
||||||
UserExcelImportEntity entity = list.get(i);
|
|
||||||
UserE userE = new UserE();
|
|
||||||
|
|
||||||
// 部门
|
|
||||||
Long departmentId = departmentEMap.get(entity.getDepartmentName()).getId();
|
|
||||||
userE.setDepartmentId(departmentId);
|
|
||||||
userE.setDepartmentName(entity.getDepartmentName());
|
|
||||||
|
|
||||||
// 岗位
|
|
||||||
if (StringUtils.isNotEmpty(entity.getPostName())) {
|
|
||||||
List<PostE> postListByDepartId = postList.stream().filter(post -> post.getDepartmentId().equals(departmentId)).collect(Collectors.toList());
|
|
||||||
Map<String, PostE> postEMap = postListByDepartId.stream().collect(Collectors.toMap(PostE::getPostName, PostE -> PostE));
|
|
||||||
userE.setPostId(postEMap.get(entity.getPostName()).getId());
|
|
||||||
userE.setPostName(entity.getPostName());
|
|
||||||
}
|
|
||||||
userE.setRoleId(roleMap.get(entity.getRoleName()));
|
|
||||||
// 用户名
|
|
||||||
userE.setUsername(entity.getUsername());
|
|
||||||
// 姓名
|
|
||||||
userE.setName(entity.getName());
|
|
||||||
|
|
||||||
// 人员类型
|
|
||||||
userE.setPersonnelType(dictMap.get(entity.getPersonnelTypeName()));
|
|
||||||
userE.setPersonnelTypeName(entity.getPersonnelTypeName());
|
|
||||||
|
|
||||||
userEList.add(userE);
|
|
||||||
}
|
|
||||||
|
|
||||||
return userEList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initCorpInfo(CorpInfoE examTypeE, Long departmentId, Long corpInfoId) {
|
public void initCorpInfo(CorpInfoE examTypeE, Long departmentId, Long corpInfoId) {
|
||||||
this.setId(corpInfoId);
|
this.setId(corpInfoId);
|
||||||
this.setName(examTypeE.getCorpName());
|
this.setName(examTypeE.getCorpName());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue