若依这个框架非常的神la奇ji,每次我想加入某个功能的时候都会报一些奇奇怪怪的错,其他项目里能用的代码复制粘贴过来就报错,然后逛一下官网发现官网已经集成了,然后用他官方集成的就不报错.就只许用你的不许用我自己的是吧?不多吐槽,下面开始.
导入:
controller层:官方是以SysUser为模板,更换为其他对象即可.getUsername是若依的静态方法,return可以为Ajax也可以为R
@PreAuthorize("@ss.hasPermi('system:user:import')")@PostMapping("/importData")public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception{ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);List<SysUser> userList = util.importExcel(file.getInputStream());String operName = getUsername();String message = userService.importUser(userList, updateSupport, operName);return AjaxResult.success(message);}
对象:主要看里面的@Excel的参数,去除了一些只有name的属性,其他的cellType type readConverterExp等等还没研究 要用刀的时候再去研究
@Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")private Long userId;@Excel(name = "部门编号", type = Type.IMPORT)private Long deptId;@Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")private String sex;@Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")private String status;private String delFlag;@Excel(name = "最后登录IP", type = Type.EXPORT)private String loginIp;@Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)private Date loginDate;/** 部门对象 */@Excels({@Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),@Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)})private SysDept dept;
service层:没啥好说的
/** * 导入用户数据 ** @param userList 用户数据列表 * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 * @param operName 操作用户 * @return 结果 */public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
serviceImpl层:分了三种 插入 更新和失败 计数返回
/** * 导入用户数据 ** @param userList 用户数据列表 * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 * @param operName 操作用户 * @return 结果 */@Overridepublic String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) {if (StringUtils.isNull(userList) || userList.size() == 0){throw new ServiceException("导入用户数据不能为空!");}int successNum = 0;int failureNum = 0;StringBuilder successMsg = new StringBuilder();StringBuilder failureMsg = new StringBuilder();String password = configService.selectConfigByKey("sys.user.initPassword");for (SysUser user : userList){try {// 验证是否存在这个用户SysUser u = userMapper.selectUserByUserName(user.getUserName());if (StringUtils.isNull(u)) {BeanValidators.validateWithException(validator, user);user.setPassword(SecurityUtils.encryptPassword(password));user.setCreateBy(operName);this.insertUser(user);successNum++;successMsg.append("
" + successNum + "、账号 " + user.getUserName() + " 导入成功");} else if (isUpdateSupport) {BeanValidators.validateWithException(validator, user);user.setUpdateBy(operName);this.updateUser(user);successNum++;successMsg.append("
" + successNum + "、账号 " + user.getUserName() + " 更新成功");}else {failureNum++;failureMsg.append("
" + failureNum + "、账号 " + user.getUserName() + " 已存在");}}catch (Exception e) {failureNum++;String msg = "
" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";failureMsg.append(msg + e.getMessage());log.error(msg, e);}}if (failureNum > 0) {failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");throw new ServiceException(failureMsg.toString());} else {successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");}return successMsg.toString();}
导出:同样的 ExcelUtil泛型的对象也要加上@Excel注解,查询出来之后直接导出即可.这倒是非常简单
@PreAuthorize("@ss.hasPermi('system:user:export')")@PostMapping("/export")public void export(HttpServletResponse response, SysUser user){List<SysUser> list = userService.selectUserList(user);ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);util.exportExcel(response, list, "用户数据");}
以上,over.