diff --git a/web-adapter/src/main/java/com/zcloud/basic/info/web/UserController.java b/web-adapter/src/main/java/com/zcloud/basic/info/web/UserController.java index c5245e0..b929d19 100644 --- a/web-adapter/src/main/java/com/zcloud/basic/info/web/UserController.java +++ b/web-adapter/src/main/java/com/zcloud/basic/info/web/UserController.java @@ -118,8 +118,15 @@ public class UserController { @ApiOperation("导入用户列表") @PostMapping("/importUserTable") - public Response importUserTable(@RequestPart(value = "file") MultipartFile file, @RequestPart(value = "corpFlag") Integer corpFlag) { - userService.importUserTable(file, corpFlag); + public Response importUserTable(@RequestPart(value = "file") MultipartFile file) { + userService.importUserTable(file, 1); + return SingleResponse.buildSuccess(); + } + + @ApiOperation("导入用户列表") + @PostMapping("/importUserTableByCorp2") + public Response importUserTableByCorp2(@RequestPart(value = "file") MultipartFile file) { + userService.importUserTable(file, 2); return SingleResponse.buildSuccess(); } diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/UserImportExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/UserImportExe.java index 4868789..4aae1b3 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/UserImportExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/UserImportExe.java @@ -6,8 +6,10 @@ import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.cola.dto.MultiResponse; import com.alibaba.cola.exception.BizException; import com.jjb.saas.framework.auth.utils.AuthContext; +import com.jjb.saas.system.client.dept.facade.DeptFacade; import com.jjb.saas.system.client.role.facade.RoleFacade; import com.jjb.saas.system.client.role.response.RoleCO; +import com.jjb.saas.system.client.user.facade.UserFacade; import com.zcloud.basic.info.domain.gateway.DepartmentGateway; import com.zcloud.basic.info.domain.gateway.PostGateway; import com.zcloud.basic.info.domain.gateway.UserEmploymentLogGateway; @@ -60,6 +62,10 @@ public class UserImportExe { private final DepartmentGateway departmentGateway; @DubboReference private RoleFacade roleFacade; + @DubboReference + private DeptFacade deptFacade; + @DubboReference + private UserFacade userFacade; @Transactional(rollbackFor = Exception.class) public void importUserTable(MultipartFile file, Integer corpFlag) { @@ -76,10 +82,12 @@ public class UserImportExe { } // 部门数据 List departmentDOList = departmentRepository.listByCorpInfoId(corpinfoId); + List departmentDOTempList = new ArrayList<>(); // 岗位数据 List postDOList = postRepository.listByCorpInfoId(corpinfoId); // 用户名数据 List userDOList = userRepository.listByCorpInfoId(corpinfoId); + List userDOTempList = new ArrayList<>(); List list = new ArrayList<>(); try { @@ -94,8 +102,19 @@ public class UserImportExe { // 开始处理导入逻辑 for (UserExcelImportEntity importEntity : list) { try { - processSingleUser(importEntity, corpFlag, corpinfoId, corpInfoDO, departmentDOList, postDOList, userDOList, roleCOMultiResponse.getData()); + processSingleUser(importEntity, corpFlag, corpinfoId, corpInfoDO, departmentDOList, departmentDOTempList, postDOList, userDOList, userDOTempList, roleCOMultiResponse.getData()); } catch (Exception e) { + if(CollUtil.isNotEmpty(departmentDOTempList)){ + // 删除底座创建的部门 + for (DepartmentDO departmentDO : departmentDOTempList) { + deptFacade.deleteById(departmentDO.getId()); + } + } + if(CollUtil.isNotEmpty(userDOTempList)){ + for (UserDO userDO : userDOTempList) { + userFacade.delete(userDO.getId()); + } + } throw new BizException("导入该用户失败: " + importEntity.getUsername() + ", 原因: " + e.getMessage()); } } @@ -107,11 +126,15 @@ public class UserImportExe { private void processSingleUser(UserExcelImportEntity importEntity, Integer corpFlag, Long corpinfoId, CorpInfoDO corpInfoDO, - List departmentDOList, List postDOList, - List userDOList, List roleList) { + List departmentDOList, + List departmentDOTempList, + List postDOList, + List userDOList, + List userDOTempList, + List roleList) { // 1. 处理部门层级,获取最终部门ID - Long departmentId = processDepartmentHierarchy(importEntity, corpinfoId, departmentDOList); + Long departmentId = processDepartmentHierarchy(importEntity, corpinfoId, departmentDOList, departmentDOTempList); // 2. 处理岗位,获取岗位ID Long postId = processPost(importEntity, corpinfoId, corpInfoDO, departmentId, postDOList); @@ -120,14 +143,15 @@ public class UserImportExe { Long roleId = processRoleInfo(importEntity, roleList); // 4. 处理用户信息 - processUserInfo(importEntity, corpFlag, corpinfoId, corpInfoDO, departmentId, postId, userDOList, roleId); + processUserInfo(importEntity, corpFlag, corpinfoId, corpInfoDO, departmentId, postId, userDOList, userDOTempList, roleId); } /** * 处理部门层级结构 */ private Long processDepartmentHierarchy(UserExcelImportEntity importEntity, Long corpinfoId, - List allDepartments) { + List allDepartments, + List departmentDOTempList) { if(StringUtils.isEmpty(importEntity.getDepartmentName1()) && StringUtils.isEmpty(importEntity.getDepartmentName2()) @@ -175,7 +199,7 @@ public class UserImportExe { } // 查找或创建部门(从二级部门开始) - currentDept = findOrCreateDepartment(deptName, currentParentId, level + 1, corpinfoId, allDepartments); + currentDept = findOrCreateDepartment(deptName, currentParentId, level + 1, corpinfoId, allDepartments, departmentDOTempList); if (currentDept == null) { throw new BizException("创建部门失败: " + deptName + " (层级: " + (level + 1) + ")"); @@ -213,7 +237,7 @@ public class UserImportExe { * 查找或创建部门(从二级部门开始使用) */ private DepartmentDO findOrCreateDepartment(String deptName, Long parentId, int level, - Long corpinfoId, List allDepartments) { + Long corpinfoId, List allDepartments,List departmentDOTempList) { // 在现有部门中查找 DepartmentDO existingDept = findDepartmentInList(allDepartments, parentId, deptName); if (existingDept != null) { @@ -225,6 +249,7 @@ public class UserImportExe { // 将新部门添加到列表中 allDepartments.add(newDept); + departmentDOTempList.add(newDept); return newDept; } @@ -338,7 +363,9 @@ public class UserImportExe { private void processUserInfo(UserExcelImportEntity importEntity, Integer corpFlag, Long corpinfoId, CorpInfoDO corpInfoDO, - Long departmentId, Long postId, List allUsers, + Long departmentId, Long postId, + List allUsers, + List userDOTempList, Long roleId) { // 检查用户名是否已存在 boolean usernameExists = allUsers.stream() @@ -374,6 +401,7 @@ public class UserImportExe { UserDO userDO = new UserDO(); BeanUtils.copyProperties(user, userDO); allUsers.add(userDO); + userDOTempList.add(userDO); } }