mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-10-31 18:49:06 +08:00 
			
		
		
		
	1. 完成用户导入的功能
This commit is contained in:
		| @ -122,7 +122,8 @@ export function uploadAvatar(data) { | |||||||
| // 下载用户导入模板 | // 下载用户导入模板 | ||||||
| export function importTemplate() { | export function importTemplate() { | ||||||
|   return request({ |   return request({ | ||||||
|     url: '/system/user/importTemplate', |     url: '/system/user/get-import-template', | ||||||
|     method: 'get' |     method: 'get', | ||||||
|  |     responseType: 'blob' | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  | |||||||
| @ -391,7 +391,7 @@ export default { | |||||||
|         // 设置上传的请求头部 |         // 设置上传的请求头部 | ||||||
|         headers: { Authorization: "Bearer " + getToken() }, |         headers: { Authorization: "Bearer " + getToken() }, | ||||||
|         // 上传的地址 |         // 上传的地址 | ||||||
|         url: process.env.VUE_APP_BASE_API + "/system/user/importData" |         url: process.env.VUE_APP_BASE_API + '/api/' + "/system/user/import" | ||||||
|       }, |       }, | ||||||
|       // 查询参数 |       // 查询参数 | ||||||
|       queryParams: { |       queryParams: { | ||||||
| @ -669,7 +669,7 @@ export default { | |||||||
|     /** 下载模板操作 */ |     /** 下载模板操作 */ | ||||||
|     importTemplate() { |     importTemplate() { | ||||||
|       importTemplate().then(response => { |       importTemplate().then(response => { | ||||||
|         this.download(response.msg); |         this.downloadExcel(response, '用户导入模板.xls'); | ||||||
|       }); |       }); | ||||||
|     }, |     }, | ||||||
|     // 文件上传中处理 |     // 文件上传中处理 | ||||||
| @ -681,7 +681,21 @@ export default { | |||||||
|       this.upload.open = false; |       this.upload.open = false; | ||||||
|       this.upload.isUploading = false; |       this.upload.isUploading = false; | ||||||
|       this.$refs.upload.clearFiles(); |       this.$refs.upload.clearFiles(); | ||||||
|       this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true }); |       // 拼接提示语 | ||||||
|  |       let data = response.data; | ||||||
|  |       let text = '创建成功数量:' + data.createUsernames.length; | ||||||
|  |       for (const username of data.createUsernames) { | ||||||
|  |         text += '<br />    ' + username; | ||||||
|  |       } | ||||||
|  |       text += '<br />更新成功数量:' + data.updateUsernames.length; | ||||||
|  |       for (const username of data.updateUsernames) { | ||||||
|  |         text += '<br />    ' + username; | ||||||
|  |       } | ||||||
|  |       text += '<br />更新失败数量:' + Object.keys(data.failureUsernames).length; | ||||||
|  |       for (const username in data.failureUsernames) { | ||||||
|  |         text += '<br />    ' + username + ':' + data.failureUsernames[username]; | ||||||
|  |       } | ||||||
|  |       this.$alert(text, "导入结果", { dangerouslyUseHTMLString: true }); | ||||||
|       this.getList(); |       this.getList(); | ||||||
|     }, |     }, | ||||||
|     // 提交上传文件 |     // 提交上传文件 | ||||||
|  | |||||||
| @ -47,6 +47,7 @@ public final class ServiceException extends RuntimeException { | |||||||
|         return this; |         return this; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|     public String getMessage() { |     public String getMessage() { | ||||||
|         return message; |         return message; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -103,11 +103,11 @@ public class ServiceExceptionUtil { | |||||||
|                 if (i == 0) { |                 if (i == 0) { | ||||||
|                     return messagePattern; |                     return messagePattern; | ||||||
|                 } else { |                 } else { | ||||||
|                     sbuf.append(messagePattern.substring(i, messagePattern.length())); |                     sbuf.append(messagePattern.substring(i)); | ||||||
|                     return sbuf.toString(); |                     return sbuf.toString(); | ||||||
|                 } |                 } | ||||||
|             } else { |             } else { | ||||||
|                 sbuf.append(messagePattern.substring(i, j)); |                 sbuf.append(messagePattern, i, j); | ||||||
|                 sbuf.append(params[l]); |                 sbuf.append(params[l]); | ||||||
|                 i = j + 2; |                 i = j + 2; | ||||||
|             } |             } | ||||||
| @ -115,7 +115,7 @@ public class ServiceExceptionUtil { | |||||||
|         if (messagePattern.indexOf("{}", i) != -1) { |         if (messagePattern.indexOf("{}", i) != -1) { | ||||||
|             LOGGER.error("[doFormat][参数过少:错误码({})|错误内容({})|参数({})", code, messagePattern, params); |             LOGGER.error("[doFormat][参数过少:错误码({})|错误内容({})|参数({})", code, messagePattern, params); | ||||||
|         } |         } | ||||||
|         sbuf.append(messagePattern.substring(i, messagePattern.length())); |         sbuf.append(messagePattern.substring(i)); | ||||||
|         return sbuf.toString(); |         return sbuf.toString(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ package cn.iocoder.dashboard.framework.excel.core.util; | |||||||
|  |  | ||||||
| import com.alibaba.excel.EasyExcel; | import com.alibaba.excel.EasyExcel; | ||||||
| import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; | import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; | ||||||
|  | import org.springframework.web.multipart.MultipartFile; | ||||||
|  |  | ||||||
| import javax.servlet.http.HttpServletResponse; | import javax.servlet.http.HttpServletResponse; | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
| @ -38,4 +39,10 @@ public class ExcelUtils { | |||||||
|         response.setContentType("application/vnd.ms-excel;charset=UTF-8"); |         response.setContentType("application/vnd.ms-excel;charset=UTF-8"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public static <T> List<T> raed(MultipartFile file, Class<T> head) throws IOException { | ||||||
|  |        return EasyExcel.read(file.getInputStream(), head, null) | ||||||
|  |                 .autoCloseStream(false)  // 不要自动关闭,交给 Servlet 自己处理 | ||||||
|  |                 .doReadAllSync(); | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| package cn.iocoder.dashboard.modules.system.controller.user; | package cn.iocoder.dashboard.modules.system.controller.user; | ||||||
|  |  | ||||||
| import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||||
|  | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | ||||||
| import cn.iocoder.dashboard.common.pojo.CommonResult; | import cn.iocoder.dashboard.common.pojo.CommonResult; | ||||||
| import cn.iocoder.dashboard.common.pojo.PageResult; | import cn.iocoder.dashboard.common.pojo.PageResult; | ||||||
| import cn.iocoder.dashboard.framework.excel.core.util.ExcelUtils; | import cn.iocoder.dashboard.framework.excel.core.util.ExcelUtils; | ||||||
| @ -8,23 +9,23 @@ import cn.iocoder.dashboard.modules.system.controller.user.vo.user.*; | |||||||
| import cn.iocoder.dashboard.modules.system.convert.user.SysUserConvert; | import cn.iocoder.dashboard.modules.system.convert.user.SysUserConvert; | ||||||
| import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; | ||||||
| import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; | ||||||
|  | import cn.iocoder.dashboard.modules.system.enums.common.SysSexEnum; | ||||||
| import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService; | import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService; | ||||||
| import cn.iocoder.dashboard.modules.system.service.user.SysUserService; | import cn.iocoder.dashboard.modules.system.service.user.SysUserService; | ||||||
| import cn.iocoder.dashboard.util.collection.CollectionUtils; | import cn.iocoder.dashboard.util.collection.CollectionUtils; | ||||||
| import cn.iocoder.dashboard.util.collection.MapUtils; | import cn.iocoder.dashboard.util.collection.MapUtils; | ||||||
| import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||||
| import io.swagger.annotations.ApiImplicitParam; | import io.swagger.annotations.ApiImplicitParam; | ||||||
|  | import io.swagger.annotations.ApiImplicitParams; | ||||||
| import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||||
| import org.springframework.validation.annotation.Validated; | import org.springframework.validation.annotation.Validated; | ||||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||||
|  | import org.springframework.web.multipart.MultipartFile; | ||||||
|  |  | ||||||
| import javax.annotation.Resource; | import javax.annotation.Resource; | ||||||
| import javax.servlet.http.HttpServletResponse; | import javax.servlet.http.HttpServletResponse; | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
| import java.util.ArrayList; | import java.util.*; | ||||||
| import java.util.Collection; |  | ||||||
| import java.util.List; |  | ||||||
| import java.util.Map; |  | ||||||
|  |  | ||||||
| import static cn.iocoder.dashboard.common.pojo.CommonResult.success; | import static cn.iocoder.dashboard.common.pojo.CommonResult.success; | ||||||
|  |  | ||||||
| @ -145,35 +146,35 @@ public class SysUserController { | |||||||
|                 SysUserExcelVO.class, excelUsers); |                 SysUserExcelVO.class, excelUsers); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| //    @Log(title = "用户管理", businessType = BusinessType.EXPORT) |     @ApiOperation("获得导入用户模板") | ||||||
| //    @PreAuthorize("@ss.hasPermi('system:user:export')") |     @GetMapping("/get-import-template") | ||||||
| //    @GetMapping("/export") |     public void importTemplate(HttpServletResponse response) throws IOException { | ||||||
| //    public AjaxResult export(SysUser user) |         // 手动创建导出 demo | ||||||
| //    { |         List<SysUserImportExcelVO> list = Arrays.asList( | ||||||
| //        List<SysUser> list = userService.selectUserList(user); |                 SysUserImportExcelVO.builder().username("yudao").deptId(1L).email("yudao@iocoder.cn").mobile("15601691300") | ||||||
| //        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); |                         .nickname("芋道").status(CommonStatusEnum.ENABLE.getStatus()).sex(SysSexEnum.MALE.getSEX()).build(), | ||||||
| //        return util.exportExcel(list, "用户数据"); |                 SysUserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@iocoder.cn").mobile("15601701300") | ||||||
| //    } |                         .nickname("源码").status(CommonStatusEnum.DISABLE.getStatus()).sex(SysSexEnum.FEMALE.getSEX()).build() | ||||||
| // |         ); | ||||||
| //    @Log(title = "用户管理", businessType = BusinessType.IMPORT) |  | ||||||
| //    @PreAuthorize("@ss.hasPermi('system:user:import')") |         // 输出 | ||||||
| //    @PostMapping("/importData") |         ExcelUtils.write(response, "用户导入模板.xls", "用户列表", | ||||||
| //    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception |                 SysUserImportExcelVO.class, list); | ||||||
| //    { |  | ||||||
| //        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); |     } | ||||||
| //        List<SysUser> userList = util.importExcel(file.getInputStream()); |  | ||||||
| //        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); |     @ApiOperation("导入用户") | ||||||
| //        String operName = loginUser.getUsername(); |     @ApiImplicitParams({ | ||||||
| //        String message = userService.importUser(userList, updateSupport, operName); |             @ApiImplicitParam(name = "path", value = "Excel 文件", required = true, dataTypeClass = MultipartFile.class), | ||||||
| //        return AjaxResult.success(message); |             @ApiImplicitParam(name = "update-support", value = "是否支持更新,默认为 false", example = "true", dataTypeClass = Long.class) | ||||||
| //    } |     }) | ||||||
| // |     @PostMapping("/import") | ||||||
| //    @GetMapping("/importTemplate") | //    @Log(title = "用户管理", businessType = BusinessType.IMPORT) | ||||||
| //    public AjaxResult importTemplate() | //    @PreAuthorize("@ss.hasPermi('system:user:import')") | ||||||
| //    { |     public CommonResult<SysUserImportRespVO> importExcel(@RequestParam("file") MultipartFile file, | ||||||
| //        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); |                                                          @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception { | ||||||
| //        return util.importTemplateExcel("用户数据"); |         List<SysUserImportExcelVO> list = ExcelUtils.raed(file, SysUserImportExcelVO.class); | ||||||
| //    } |         return success(userService.importUsers(list, updateSupport)); | ||||||
| // |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -4,12 +4,18 @@ import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat; | |||||||
| import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert; | import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert; | ||||||
| import cn.iocoder.dashboard.modules.system.enums.dict.DictTypeEnum; | import cn.iocoder.dashboard.modules.system.enums.dict.DictTypeEnum; | ||||||
| import com.alibaba.excel.annotation.ExcelProperty; | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
|  | import lombok.AllArgsConstructor; | ||||||
|  | import lombok.Builder; | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
|  | import lombok.NoArgsConstructor; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 用户 Excel 导入 VO |  * 用户 Excel 导入 VO | ||||||
|  */ |  */ | ||||||
| @Data | @Data | ||||||
|  | @Builder | ||||||
|  | @AllArgsConstructor | ||||||
|  | @NoArgsConstructor | ||||||
| public class SysUserImportExcelVO { | public class SysUserImportExcelVO { | ||||||
|  |  | ||||||
|     @ExcelProperty("登录名称") |     @ExcelProperty("登录名称") | ||||||
| @ -29,7 +35,7 @@ public class SysUserImportExcelVO { | |||||||
|  |  | ||||||
|     @ExcelProperty(value = "用户性别", converter = DictConvert.class) |     @ExcelProperty(value = "用户性别", converter = DictConvert.class) | ||||||
|     @DictFormat(DictTypeEnum.SYS_USER_SEX) |     @DictFormat(DictTypeEnum.SYS_USER_SEX) | ||||||
|     private String sex; |     private Integer sex; | ||||||
|  |  | ||||||
|     @ExcelProperty(value = "账号状态", converter = DictConvert.class) |     @ExcelProperty(value = "账号状态", converter = DictConvert.class) | ||||||
|     @DictFormat(DictTypeEnum.SYS_COMMON_STATUS) |     @DictFormat(DictTypeEnum.SYS_COMMON_STATUS) | ||||||
|  | |||||||
| @ -0,0 +1,25 @@ | |||||||
|  | package cn.iocoder.dashboard.modules.system.controller.user.vo.user; | ||||||
|  |  | ||||||
|  | import io.swagger.annotations.ApiModel; | ||||||
|  | import io.swagger.annotations.ApiModelProperty; | ||||||
|  | import lombok.Builder; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  |  | ||||||
|  | @ApiModel("用户导入 Response VO") | ||||||
|  | @Data | ||||||
|  | @Builder | ||||||
|  | public class SysUserImportRespVO { | ||||||
|  |  | ||||||
|  |     @ApiModelProperty(value = "创建成功的用户名数组", required = true) | ||||||
|  |     private List<String> createUsernames; | ||||||
|  |  | ||||||
|  |     @ApiModelProperty(value = "更新成功的用户名数组", required = true) | ||||||
|  |     private List<String> updateUsernames; | ||||||
|  |  | ||||||
|  |     @ApiModelProperty(value = "导入失败的用户集合", required = true, notes = "key 为用户名,value 为失败原因") | ||||||
|  |     private Map<String, String> failureUsernames; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -2,10 +2,7 @@ package cn.iocoder.dashboard.modules.system.controller.user.vo.user; | |||||||
|  |  | ||||||
| import io.swagger.annotations.ApiModel; | import io.swagger.annotations.ApiModel; | ||||||
| import io.swagger.annotations.ApiModelProperty; | import io.swagger.annotations.ApiModelProperty; | ||||||
| import lombok.AllArgsConstructor; | import lombok.*; | ||||||
| import lombok.Data; |  | ||||||
| import lombok.EqualsAndHashCode; |  | ||||||
| import lombok.NoArgsConstructor; |  | ||||||
|  |  | ||||||
| import java.util.Date; | import java.util.Date; | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,10 +1,7 @@ | |||||||
| package cn.iocoder.dashboard.modules.system.convert.user; | package cn.iocoder.dashboard.modules.system.convert.user; | ||||||
|  |  | ||||||
| import cn.iocoder.dashboard.common.pojo.PageResult; | import cn.iocoder.dashboard.common.pojo.PageResult; | ||||||
| import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO; | import cn.iocoder.dashboard.modules.system.controller.user.vo.user.*; | ||||||
| import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExcelVO; |  | ||||||
| import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageItemRespVO; |  | ||||||
| import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO; |  | ||||||
| import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; | ||||||
| import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; | ||||||
| import com.baomidou.mybatisplus.core.metadata.IPage; | import com.baomidou.mybatisplus.core.metadata.IPage; | ||||||
| @ -30,4 +27,6 @@ public interface SysUserConvert { | |||||||
|  |  | ||||||
|     SysUserExcelVO convert02(SysUserDO bean); |     SysUserExcelVO convert02(SysUserDO bean); | ||||||
|  |  | ||||||
|  |     SysUserDO convert(SysUserImportExcelVO bean); | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -37,6 +37,7 @@ public interface SysErrorCodeConstants { | |||||||
|     ErrorCode USER_MOBILE_EXISTS = new ErrorCode(1002004001, "手机号已经存在"); |     ErrorCode USER_MOBILE_EXISTS = new ErrorCode(1002004001, "手机号已经存在"); | ||||||
|     ErrorCode USER_EMAIL_EXISTS = new ErrorCode(1002004002, "邮箱已经存在"); |     ErrorCode USER_EMAIL_EXISTS = new ErrorCode(1002004002, "邮箱已经存在"); | ||||||
|     ErrorCode USER_NOT_EXISTS = new ErrorCode(1002004003, "用户不存在"); |     ErrorCode USER_NOT_EXISTS = new ErrorCode(1002004003, "用户不存在"); | ||||||
|  |     ErrorCode USER_IMPORT_LIST_IS_EMPTY = new ErrorCode(1002004004, "导入用户数据不能为空!"); | ||||||
|  |  | ||||||
|     // ========== 部门模块 1002005000 ========== |     // ========== 部门模块 1002005000 ========== | ||||||
|     ErrorCode DEPT_NAME_DUPLICATE = new ErrorCode(1002004001, "已经存在该名字的部门"); |     ErrorCode DEPT_NAME_DUPLICATE = new ErrorCode(1002004001, "已经存在该名字的部门"); | ||||||
|  | |||||||
| @ -1,10 +1,7 @@ | |||||||
| package cn.iocoder.dashboard.modules.system.service.user; | package cn.iocoder.dashboard.modules.system.service.user; | ||||||
|  |  | ||||||
| import cn.iocoder.dashboard.common.pojo.PageResult; | import cn.iocoder.dashboard.common.pojo.PageResult; | ||||||
| import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO; | import cn.iocoder.dashboard.modules.system.controller.user.vo.user.*; | ||||||
| import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExportReqVO; |  | ||||||
| import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageReqVO; |  | ||||||
| import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO; |  | ||||||
| import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; | ||||||
|  |  | ||||||
| import java.util.List; | import java.util.List; | ||||||
| @ -86,6 +83,15 @@ public interface SysUserService { | |||||||
|      */ |      */ | ||||||
|     void updateUserStatus(Long id, Integer status); |     void updateUserStatus(Long id, Integer status); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 批量导入用户 | ||||||
|  |      * | ||||||
|  |      * @param importUsers 导入用户列表 | ||||||
|  |      * @param isUpdateSupport 是否支持更新 | ||||||
|  |      * @return 导入结果 | ||||||
|  |      */ | ||||||
|  |     SysUserImportRespVO importUsers(List<SysUserImportExcelVO> importUsers, boolean isUpdateSupport); | ||||||
|  |  | ||||||
| // | // | ||||||
| //    /** | //    /** | ||||||
| //     * 修改用户基本信息 | //     * 修改用户基本信息 | ||||||
| @ -121,14 +127,4 @@ public interface SysUserService { | |||||||
| //     */ | //     */ | ||||||
| //    public int resetUserPwd(String userName, String password); | //    public int resetUserPwd(String userName, String password); | ||||||
|  |  | ||||||
| // |  | ||||||
| //    /** |  | ||||||
| //     * 导入用户数据 |  | ||||||
| //     * |  | ||||||
| //     * @param userList 用户数据列表 |  | ||||||
| //     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 |  | ||||||
| //     * @param operName 操作用户 |  | ||||||
| //     * @return 结果 |  | ||||||
| //     */ |  | ||||||
| //    public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -3,12 +3,10 @@ package cn.iocoder.dashboard.modules.system.service.user; | |||||||
| import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||||
| import cn.hutool.core.util.StrUtil; | import cn.hutool.core.util.StrUtil; | ||||||
| import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | ||||||
|  | import cn.iocoder.dashboard.common.exception.ServiceException; | ||||||
| import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; | import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; | ||||||
| import cn.iocoder.dashboard.common.pojo.PageResult; | import cn.iocoder.dashboard.common.pojo.PageResult; | ||||||
| import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO; | import cn.iocoder.dashboard.modules.system.controller.user.vo.user.*; | ||||||
| import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExportReqVO; |  | ||||||
| import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageReqVO; |  | ||||||
| import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO; |  | ||||||
| import cn.iocoder.dashboard.modules.system.convert.user.SysUserConvert; | import cn.iocoder.dashboard.modules.system.convert.user.SysUserConvert; | ||||||
| import cn.iocoder.dashboard.modules.system.dal.mysql.dao.user.SysUserMapper; | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.user.SysUserMapper; | ||||||
| import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; | ||||||
| @ -21,12 +19,10 @@ import cn.iocoder.dashboard.util.collection.CollectionUtils; | |||||||
| import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||||
| import org.springframework.security.crypto.password.PasswordEncoder; | import org.springframework.security.crypto.password.PasswordEncoder; | ||||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||||
|  | import org.springframework.transaction.annotation.Transactional; | ||||||
|  |  | ||||||
| import javax.annotation.Resource; | import javax.annotation.Resource; | ||||||
| import java.util.Collections; | import java.util.*; | ||||||
| import java.util.List; |  | ||||||
| import java.util.Map; |  | ||||||
| import java.util.Set; |  | ||||||
|  |  | ||||||
| import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | ||||||
|  |  | ||||||
| @ -268,71 +264,42 @@ public class SysUserServiceImpl implements SysUserService { | |||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| //    /** |     @Override | ||||||
| //     * 导入用户数据 |     @Transactional // 添加事务,异常则回滚所有导入 | ||||||
| //     * |     public SysUserImportRespVO importUsers(List<SysUserImportExcelVO> importUsers, boolean isUpdateSupport) { | ||||||
| //     * @param userList 用户数据列表 |         if (CollUtil.isEmpty(importUsers)) { | ||||||
| //     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 |             throw ServiceExceptionUtil.exception(USER_IMPORT_LIST_IS_EMPTY); | ||||||
| //     * @param operName 操作用户 |         } | ||||||
| //     * @return 结果 |         SysUserImportRespVO respVO = SysUserImportRespVO.builder().createUsernames(new ArrayList<>()) | ||||||
| //     */ |                 .updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build(); | ||||||
| //    @Override |         importUsers.forEach(importUser -> { | ||||||
| //    public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) |             // 校验,判断是否有不符合的原因 | ||||||
| //    { |             try { | ||||||
| //        if (StringUtils.isNull(userList) || userList.size() == 0) |                 checkCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(), | ||||||
| //        { |                         importUser.getDeptId(), null); | ||||||
| //            throw new CustomException("导入用户数据不能为空!"); |             } catch (ServiceException ex) { | ||||||
| //        } |                 respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage()); | ||||||
| //        int successNum = 0; |                 return; | ||||||
| //        int failureNum = 0; |             } | ||||||
| //        StringBuilder successMsg = new StringBuilder(); |             // 判断如果不存在,在进行插入 | ||||||
| //        StringBuilder failureMsg = new StringBuilder(); |             SysUserDO existUser = userMapper.selectByUsername(importUser.getUsername()); | ||||||
| //        String password = configService.selectConfigByKey("sys.user.initPassword"); |             if (existUser == null) { | ||||||
| //        for (SysUser user : userList) |                 // TODO 芋艿:初始密码 | ||||||
| //        { |                 userMapper.insert(SysUserConvert.INSTANCE.convert(importUser)); | ||||||
| //            try |                 respVO.getCreateUsernames().add(importUser.getUsername()); | ||||||
| //            { |                 return; | ||||||
| //                // 验证是否存在这个用户 |             } | ||||||
| //                SysUser u = userMapper.selectUserByUserName(user.getUserName()); |             // 如果存在,判断是否允许更新 | ||||||
| //                if (StringUtils.isNull(u)) |             if (!isUpdateSupport) { | ||||||
| //                { |                 respVO.getFailureUsernames().put(importUser.getUsername(), USER_USERNAME_EXISTS.getMessage()); | ||||||
| //                    user.setPassword(SecurityUtils.encryptPassword(password)); |                 return; | ||||||
| //                    user.setCreateBy(operName); |             } | ||||||
| //                    this.insertUser(user); |             SysUserDO updateUser = SysUserConvert.INSTANCE.convert(importUser); | ||||||
| //                    successNum++; |             updateUser.setId(existUser.getId()); | ||||||
| //                    successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功"); |             userMapper.updateById(updateUser); | ||||||
| //                } |             respVO.getUpdateUsernames().add(importUser.getUsername()); | ||||||
| //                else if (isUpdateSupport) |         }); | ||||||
| //                { |         return respVO; | ||||||
| //                    user.setUpdateBy(operName); |     } | ||||||
| //                    this.updateUser(user); |  | ||||||
| //                    successNum++; |  | ||||||
| //                    successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功"); |  | ||||||
| //                } |  | ||||||
| //                else |  | ||||||
| //                { |  | ||||||
| //                    failureNum++; |  | ||||||
| //                    failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在"); |  | ||||||
| //                } |  | ||||||
| //            } |  | ||||||
| //            catch (Exception e) |  | ||||||
| //            { |  | ||||||
| //                failureNum++; |  | ||||||
| //                String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:"; |  | ||||||
| //                failureMsg.append(msg + e.getMessage()); |  | ||||||
| //                log.error(msg, e); |  | ||||||
| //            } |  | ||||||
| //        } |  | ||||||
| //        if (failureNum > 0) |  | ||||||
| //        { |  | ||||||
| //            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); |  | ||||||
| //            throw new CustomException(failureMsg.toString()); |  | ||||||
| //        } |  | ||||||
| //        else |  | ||||||
| //        { |  | ||||||
| //            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); |  | ||||||
| //        } |  | ||||||
| //        return successMsg.toString(); |  | ||||||
| //    } |  | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV