diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/user/UserController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/user/UserController.java index c0b14f8b..4289995b 100644 --- a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/user/UserController.java +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/user/UserController.java @@ -180,13 +180,13 @@ public class UserController { @Operation(summary = "导入用户") @Parameters({ @Parameter(name = "file", description = "Excel 文件", required = true), - @Parameter(name = "updateSupport", description = "是否支持更新,默认为 false", example = "true") + @Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"), + @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") }) @PreAuthorize("@ss.hasPermission('system:user:import')") - public CommonResult importExcel(@RequestParam("file") MultipartFile file, - @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception { + public CommonResult importExcel(@RequestParam("file") MultipartFile file, @RequestParam(value = "mode") Integer mode, @RequestParam(value = "updatePart") Boolean updatePart) throws Exception { List list = ExcelUtils.read(file, UserImportExcelVO.class); - return success(userService.importUserList(list, updateSupport)); + return success(userService.importUserList(list, mode, updatePart)); } } diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserService.java index cbfe7c6f..e47e7adf 100644 --- a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserService.java +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserService.java @@ -37,7 +37,7 @@ public interface AdminUserService { /** * 更新用户的最后登陆信息 * - * @param id 用户编号 + * @param id 用户编号 * @param loginIp 登陆 IP */ void updateUserLogin(Long id, String loginIp); @@ -45,7 +45,7 @@ public interface AdminUserService { /** * 修改用户个人信息 * - * @param id 用户编号 + * @param id 用户编号 * @param reqVO 用户个人信息 */ void updateUserProfile(Long id, @Valid UserProfileUpdateReqVO reqVO); @@ -53,7 +53,7 @@ public interface AdminUserService { /** * 修改用户个人密码 * - * @param id 用户编号 + * @param id 用户编号 * @param reqVO 更新用户个人密码 */ void updateUserPassword(Long id, @Valid UserProfileUpdatePasswordReqVO reqVO); @@ -186,11 +186,12 @@ public interface AdminUserService { /** * 批量导入用户 * - * @param importUsers 导入用户列表 - * @param isUpdateSupport 是否支持更新 + * @param importUsers 导入用户列表 + * @param mode 模式 + * @param updatePart 是否部分更新 * @return 导入结果 */ - UserImportRespVO importUserList(List importUsers, boolean isUpdateSupport); + UserImportRespVO importUserList(List importUsers, Integer mode, boolean updatePart); /** * 获得指定状态的用户们 @@ -203,7 +204,7 @@ public interface AdminUserService { /** * 判断密码是否匹配 * - * @param rawPassword 未加密的密码 + * @param rawPassword 未加密的密码 * @param encodedPassword 加密后的密码 * @return 是否匹配 */ diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserServiceImpl.java index 54e9760e..575439ca 100644 --- a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserServiceImpl.java +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.StrUtil; +import com.google.common.annotations.VisibleForTesting; import com.win.framework.common.enums.CommonStatusEnum; import com.win.framework.common.exception.ServiceException; import com.win.framework.common.pojo.PageResult; @@ -23,13 +24,13 @@ import com.win.module.system.service.dept.DeptService; import com.win.module.system.service.dept.PostService; import com.win.module.system.service.permission.PermissionService; import com.win.module.system.service.tenant.TenantService; -import com.google.common.annotations.VisibleForTesting; 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; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; import javax.annotation.Resource; import java.io.InputStream; @@ -397,39 +398,36 @@ public class AdminUserServiceImpl implements AdminUserService { @Override @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入 - public UserImportRespVO importUserList(List importUsers, boolean isUpdateSupport) { + public UserImportRespVO importUserList(List importUsers, Integer mode, boolean updatePart) { if (CollUtil.isEmpty(importUsers)) { throw exception(USER_IMPORT_LIST_IS_EMPTY); } - UserImportRespVO respVO = UserImportRespVO.builder().createUsernames(new ArrayList<>()) - .updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build(); + UserImportRespVO respVO = UserImportRespVO.builder().createUsernames(new ArrayList<>()).updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build(); importUsers.forEach(importUser -> { // 校验,判断是否有不符合的原因 try { - validateUserForCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(), - importUser.getDeptId(), null); + validateUserForCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(), importUser.getDeptId(), null); } catch (ServiceException ex) { respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage()); return; } // 判断如果不存在,在进行插入 AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername()); - if (existUser == null) { - userMapper.insert(UserConvert.INSTANCE.convert(importUser) - .setPassword(encodePassword(userInitPassword)).setPostIds(new HashSet<>())); // 设置默认密码及空岗位编号数组 + //不存在并非覆盖类型 + if (existUser == null && mode != 3) { + userMapper.insert(UserConvert.INSTANCE.convert(importUser).setPassword(encodePassword(userInitPassword)).setPostIds(new HashSet<>())); // 设置默认密码及空岗位编号数组 respVO.getCreateUsernames().add(importUser.getUsername()); - return; + } else if (existUser != null && mode != 2) {// 如果存在,判断是否允许更新 + AdminUserDO updateUser = UserConvert.INSTANCE.convert(importUser); + updateUser.setId(existUser.getId()); + userMapper.updateById(updateUser); + respVO.getUpdateUsernames().add(importUser.getUsername()); } - // 如果存在,判断是否允许更新 - if (!isUpdateSupport) { - respVO.getFailureUsernames().put(importUser.getUsername(), USER_USERNAME_EXISTS.getMsg()); - return; - } - AdminUserDO updateUser = UserConvert.INSTANCE.convert(importUser); - updateUser.setId(existUser.getId()); - userMapper.updateById(updateUser); - respVO.getUpdateUsernames().add(importUser.getUsername()); }); + //错误不为空并非部分更新,手工回滚 + if(respVO.getUpdateUsernames().isEmpty() && !updatePart) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } return respVO; }