From c8c3ac3593b5efb48488d8d0d340676803ec7b41 Mon Sep 17 00:00:00 2001 From: caozhen <18736171426@139.com> Date: Fri, 8 Sep 2023 13:53:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=85=E9=83=A8=E5=B7=A5=E4=BD=9C=E7=BB=84?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=AF=BC=E5=87=BA=E3=80=81=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=97=B6=E5=88=A4=E6=96=AD=E6=9C=89=E6=97=A0=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LawsWorkingGroupUserController.java | 551 ++++++++---------- .../sys/entity/LawsWorkingGroupUser.java | 3 - .../impl/LawsWorkingGroupUserServiceImpl.java | 94 +-- 3 files changed, 287 insertions(+), 361 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/sys/controller/LawsWorkingGroupUserController.java b/laws-modules/src/main/java/com/jero/modules/sys/controller/LawsWorkingGroupUserController.java index 8461cef1..d2a76cfe 100644 --- a/laws-modules/src/main/java/com/jero/modules/sys/controller/LawsWorkingGroupUserController.java +++ b/laws-modules/src/main/java/com/jero/modules/sys/controller/LawsWorkingGroupUserController.java @@ -1,19 +1,32 @@ package com.jero.modules.sys.controller; +import java.io.InputStream; +import java.io.OutputStream; import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import cn.hutool.core.io.IoUtil; +import cn.hutool.poi.excel.ExcelReader; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.ExcelWriter; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jero.common.api.vo.Result; import com.jero.modules.sys.entity.LawsWorkingGroupUser; import com.jero.modules.sys.service.ILawsWorkingGroupUserService; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysUserService; +import com.sun.deploy.net.URLEncoder; import lombok.extern.slf4j.Slf4j; import com.jero.common.system.base.controller.JeroController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.multipart.MultipartFile; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import com.jero.common.aspect.annotation.AutoLog; @@ -34,6 +47,8 @@ import org.apache.poi.ss.formula.functions.T; public class LawsWorkingGroupUserController extends JeroController { @Autowired private ILawsWorkingGroupUserService lawsWorkingGroupUserService; + @Autowired + private ISysUserService sysUserService; /** @@ -77,6 +92,15 @@ public class LawsWorkingGroupUserController extends JeroController wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(LawsWorkingGroupUser::getDelFlag, "0"); + wrapper.eq(LawsWorkingGroupUser::getUserId, lawsWorkingGroupUser.getUserId()); + wrapper.eq(LawsWorkingGroupUser::getWorkingGroupId, lawsWorkingGroupUser.getWorkingGroupId()); + List list = lawsWorkingGroupUserService.list(); + if (list.size() > 0){ + String workNo = list.get(0).getUserWorkNo(); + return Result.error("工号" + workNo + "已存在!"); + } lawsWorkingGroupUser.setDelFlag("0"); lawsWorkingGroupUserService.add(lawsWorkingGroupUser); return Result.OK("操作成功!"); @@ -100,327 +124,230 @@ public class LawsWorkingGroupUserController extends JeroController importFile(MultipartFile file, String workingGroupId) throws Exception { + String fileName = file.getOriginalFilename(); + // 上传文件为空 + if (StringUtils.isEmpty(fileName)) { + return Result.error("没有导入文件"); + } + if (StringUtils.isBlank(workingGroupId)) { + return Result.error("请选择工作组进行导入!"); + } + // 上传文件名格式不正确 + if (fileName.lastIndexOf(".") != -1 && !".xlsx".equals(fileName.substring(fileName.lastIndexOf(".")))) { + return Result.error("文件名格式不正确, 请使用后缀名为.xlsx的文件"); + } + InputStream inputStream = file.getInputStream(); + List all; + try { + ExcelReader excelReader = ExcelUtil.getReader(inputStream, "sheet1"); + List> maps = excelReader.readAll(); + if (maps.size() < 1) { + return Result.error("导入数据不能为空!"); + } + // 校验表头,同时映射对象字段 + if (!validateHeader(excelReader)) { + return Result.error("导入失败,表头与模板不一致"); + } + all = excelReader.readAll(LawsWorkingGroupUser.class); + } catch (Exception e) { + return Result.error("导入失败,数据格式未按照示例规范导入!"); + } + //校验导入正确性,msg是错误信息 + String msg = importExcelCheck(all); + if (StringUtils.isNotBlank(msg)) { + return Result.error(msg); + } + for (LawsWorkingGroupUser groupUser : all) { + String userWorkNo = groupUser.getUserWorkNo(); + SysUser userByWorkNo = sysUserService.getUserByWorkNo(userWorkNo); + groupUser.setUserId(userByWorkNo.getId()); + groupUser.setWorkingGroupId(workingGroupId); + groupUser.setDelFlag("0"); + } + lawsWorkingGroupUserService.saveBatch(all); + return Result.OK("导入成功!"); } /** - * 通过excel导入数据 + * 导出 */ - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { - return super.importExcel(request, response, LawsWorkingGroupUser.class); + @AutoLog(value = "内部工作组人员关联表-导出") + @ApiOperation(value="内部工作组人员关联表-导出", notes="内部工作组人员关联表-导出") + @RequestMapping(value = "/export", method = RequestMethod.POST) + public Result template(@RequestBody LawsWorkingGroupUser lawsWorkingGroupUser, HttpServletResponse response) { + String workingGroupId = lawsWorkingGroupUser.getWorkingGroupId(); + if (StringUtils.isBlank(workingGroupId)) { + return Result.error("请选择工作组进行导出!"); + } + + String outFileName = "内部工作组人员表" + System.currentTimeMillis() + ".xlsx"; + String ENCODING = "UTF-8"; + ExcelWriter writer = ExcelUtil.getWriter(true); + + // 通过工具类创建writer并且进行别名 + assembleWriter(writer); + + //获取数据,分为三种情况:1、选中ID;2、没选ID且选了姓名、工号、角色、岗位四个筛选框;3、没选ID且没选四个筛选框 + List dos = null; + String userName = lawsWorkingGroupUser.getUserName(); + String userWorkNo = lawsWorkingGroupUser.getUserWorkNo(); + String userRoleName = lawsWorkingGroupUser.getUserRoleName(); + String userPostName = lawsWorkingGroupUser.getUserPostName(); + if (StringUtils.isNotBlank(lawsWorkingGroupUser.getUserId())){ + dos = this.queryDataByUserId(lawsWorkingGroupUser.getUserId()); + } + if (StringUtils.isBlank(lawsWorkingGroupUser.getUserId()) && !StringUtils.isAllBlank(userName, userWorkNo, userRoleName, userPostName)){ + dos = this.queryDataByConditions(userName, userWorkNo, userRoleName, userPostName, lawsWorkingGroupUser.getWorkingGroupId()); + } + if (StringUtils.isBlank(lawsWorkingGroupUser.getUserId()) && StringUtils.isAllBlank(userName, userWorkNo, userRoleName, userPostName)){ + dos = this.queryDataByTree(lawsWorkingGroupUser.getWorkingGroupId()); + } + + //导出表头只保留别名中的字段 + writer.setOnlyAlias(true); + //表格高度 + writer.setDefaultRowHeight(18); + //表格宽度 + writer.setColumnWidth(-1, 20); + //放入数据 + writer.write(dos, true); + try { + // 获取我们的输出流 + final OutputStream output = response.getOutputStream(); + response.setContentType("application/vnd.ms-excel;charset=utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + outFileName + ";filename*=utf-8" + + URLEncoder.encode(outFileName, ENCODING)); + writer.flush(output, true); + writer.close(); + // 这里可以自行关闭资源或者写一个关闭资源的工具类 + IoUtil.close(output); + } catch (Exception e) { + log.error("导出失败:", e); + } + return null; + } + private List queryDataByUserId(String userId) { + return lawsWorkingGroupUserService.listByIds(Arrays.asList(userId.split(","))); + } + private List queryDataByConditions(String userName, String userWorkNo, String userRoleName, String userPostName, String workingGroupId) { + List ids = sysUserService.LawsWorkingGroupUserSearch(userName, userWorkNo, userRoleName, userPostName); + List list = new ArrayList<>(); + if (!ids.isEmpty()) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(LawsWorkingGroupUser::getWorkingGroupId, workingGroupId); + wrapper.eq(LawsWorkingGroupUser::getDelFlag, "0"); + wrapper.in(LawsWorkingGroupUser::getUserId, ids); + list = lawsWorkingGroupUserService.list(wrapper); + } + return list; + } + private List queryDataByTree(String workingGroupId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(LawsWorkingGroupUser::getWorkingGroupId, workingGroupId); + wrapper.eq(LawsWorkingGroupUser::getDelFlag, "0"); + return lawsWorkingGroupUserService.list(wrapper); } + /** + * 校验表头,同时映射对象字段 + */ + private boolean validateHeader(ExcelReader excelReader) { + List> read = excelReader.read(0, 1, 1); + Map map = read.get(0); + assembleReader(excelReader); + Map headerAlias = excelReader.getHeaderAlias(); + boolean isSameKeys = map.keySet().stream().allMatch(key -> headerAlias.containsKey(key)); + return isSameKeys; + } - //导入导出模板还没定,暂时不写 -// -// /** -// * 通过excel导入数据 -// */ -// @RequestMapping(value = "/importExcel", method = RequestMethod.POST) -// public Result importFile(MultipartFile file, String planId) throws Exception { -// String fileName = file.getOriginalFilename(); -// // 上传文件为空 -// if (StringUtils.isEmpty(fileName)) { -// return Result.error("没有导入文件"); -// } -// if (StringUtils.isBlank(planId)) { -// return Result.error("请选择值班计划进行导入!"); -// } -// // 上传文件名格式不正确 -// if (fileName.lastIndexOf(".") != -1 && !".xlsx".equals(fileName.substring(fileName.lastIndexOf(".")))) { -// return Result.error("文件名格式不正确, 请使用后缀名为.xlsx的文件"); -// } -// InputStream inputStream = file.getInputStream(); -// List all; -// try { -// ExcelReader excelReader = ExcelUtil.getReader(inputStream, "sheet1"); -// List> maps = excelReader.readAll(); -// if (maps.size() < 1) { -// return Result.error("导入数据不能为空!"); -// } -// // 校验表头,同时映射对象字段 -// if (!validateHeader(excelReader)) { -// return Result.error("导入失败,表头与模板不一致"); -// } -// all = excelReader.readAll(DutyDetailDO.class); -// } catch (Exception e) { -// return Result.error("导入失败,数据格式未按照示例规范导入!"); -// } -// //校验导入正确性,msg是错误信息 -// String msg = importExcelCheck(all); -// if (StringUtils.isNotBlank(msg)) { -// return Result.error(msg); -// } -// for (DutyDetailDO dutyDetailDO : all) { -// dutyDetailDO.setPlanId(planId); -// dutyDetailDO.setLeaderId(dutyDetailDO.getLeaderNo()); -// dutyDetailDO.setUserId(dutyDetailDO.getUserId()); -// String week = dutyDetailDO.getWeek(); -// switch (week) { -// case "星期一": -// dutyDetailDO.setWeek("1"); -// break; -// case "星期二": -// dutyDetailDO.setWeek("2"); -// break; -// case "星期三": -// dutyDetailDO.setWeek("3"); -// break; -// case "星期四": -// dutyDetailDO.setWeek("4"); -// break; -// case "星期五": -// dutyDetailDO.setWeek("5"); -// break; -// case "星期六": -// dutyDetailDO.setWeek("6"); -// break; -// case "星期日": -// dutyDetailDO.setWeek("7"); -// break; -// default: -// dutyDetailDO.setWeek(""); -// } -// } -// dutyDetailService.saveBatch(all); -// return Result.OK("导入成功!"); -// } -// -// /** -// * 校验表头,同时映射对象字段 -// * -// * @param excelReader -// * @return -// */ -// private boolean validateHeader(ExcelReader excelReader) { -// List> read = excelReader.read(0, 1, 1); -// Map map = read.get(0); -// assembleReader(excelReader); -// Map headerAlias = excelReader.getHeaderAlias(); -// boolean isSameKeys = map.keySet().stream().allMatch(key -> headerAlias.containsKey(key)); -// return isSameKeys; -// } -// -// /** -// * 导入数据校验错误信息 -// * -// * @param all -// * @return -// */ -// private String importExcelCheck(List all) { -// String msg = ""; -// for (int i = 0; i < all.size(); i++) { -// StringBuilder error = new StringBuilder("第" + i + 2 + "行"); -// DutyDetailDO dutyDetailDO = all.get(i); -// //0、校验是否有未填字段 -// if (dutyDetailDO.getPlace() == null || dutyDetailDO.getPlace().trim().length() == 0) { -// error.append(",地点不能为空"); -// } -// if (dutyDetailDO.getBeginTime() == null) { -// error.append(",值班开始时间不能为空或未按照示例格式填写"); -// } -// if (dutyDetailDO.getEndTime() == null) { -// error.append(",值班结束时间不能为空或未按照示例格式填写"); -// } -// if (dutyDetailDO.getWeek() == null || dutyDetailDO.getWeek().trim().length() == 0) { -// error.append(",星期不能为空"); -// } -// if (dutyDetailDO.getLeaderNo() == null || dutyDetailDO.getLeaderNo().trim().length() == 0) { -// error.append(",带班领导工号不能为空"); -// } -// if (dutyDetailDO.getLeaderName() == null || dutyDetailDO.getLeaderName().trim().length() == 0) { -// error.append(",带班领导姓名不能为空"); -// } -// if (dutyDetailDO.getDutyWork() == null || dutyDetailDO.getDutyWork().trim().length() == 0) { -// error.append(",白班/夜班不能为空"); -// } -// if (dutyDetailDO.getUserNo() == null || dutyDetailDO.getUserNo().trim().length() == 0) { -// error.append(",值班人工号不能为空"); -// } -// if (dutyDetailDO.getUserName() == null || dutyDetailDO.getUserName().trim().length() == 0) { -// error.append(",值班人姓名不能为空"); -// } -// if (dutyDetailDO.getDutyPhone() == null || dutyDetailDO.getDutyPhone().trim().length() == 0) { -// error.append(",值班电话不能为空"); -// } -// //1、校验带班领导 -// String leaderNo = dutyDetailDO.getLeaderNo(); -// String leaderName = dutyDetailDO.getLeaderName(); -// if (StringUtils.isNotBlank(leaderNo) && StringUtils.isNotBlank(leaderName)) { -// //校验工号是否存在 -// SysUser sysUser = sysUserService.getById(leaderNo); -// if (sysUser == null) { -// error.append(",带班领导工号错误"); -// } else { -// if (!sysUser.getRealname().equals(leaderName)) { -// error.append(",带班领导姓名错误"); -// } -// } -// } -// //2、校验值班人 -// String userNo = dutyDetailDO.getUserNo(); -// String userName = dutyDetailDO.getUserName(); -// if (StringUtils.isNotBlank(userNo) && StringUtils.isNotBlank(userName)) { -// //校验工号是否存在 -// SysUser sysUser = sysUserService.getById(userNo); -// if (sysUser == null) { -// error.append(",值班人工号错误"); -// } else { -// if (!sysUser.getRealname().equals(userName)) { -// error.append(",值班人姓名错误"); -// } -// } -// } -// //校验星期填写是否按照要求 -// String week = dutyDetailDO.getWeek().trim(); -// if (StringUtils.isNotBlank(week)) { -// List list = new ArrayList<>(Arrays.asList("星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日")); -// if (!list.contains(week)) { -// error.append(",星期列未按照示例格式填写(星期一二三四五六日)"); -// } -// } -// if (error.toString().length() > 4) { -// error.append(";"); -// msg += error; -// } -// } -// return msg; -// } -// -// /** -// * 下载模板 -// * -// * @param response -// */ -// @RequestMapping(value = "/download/template", method = RequestMethod.GET) -// public void template(HttpServletResponse response) { -// String outFileName = "排班表" + System.currentTimeMillis() + ".xlsx"; -// String ENCODING = "UTF-8"; -// ExcelWriter writer = ExcelUtil.getWriter(true); -// -// // 通过工具类创建writer并且进行别名 -// assembleWriter(writer); -// -// List dos = new ArrayList<>(); -// DutyDetailDO dutyDetailDO = new DutyDetailDO(); -// dutyDetailDO.setPlace("格式示例(导入前删除):二楼会议厅"); -// dutyDetailDO.setBeginTime(new Date()); -// dutyDetailDO.setEndTime(new Date()); -// dutyDetailDO.setWeek("星期日"); -// dutyDetailDO.setLeaderNo("1000001"); -// dutyDetailDO.setLeaderName("校领导"); -// dutyDetailDO.setDutyWork("白班"); -// dutyDetailDO.setUserNo("2022001"); -// dutyDetailDO.setUserName("张三"); -// dutyDetailDO.setDutyPhone("18866669999"); -// dos.add(dutyDetailDO); -// -// //导出表头只保留别名中的字段 -// writer.setOnlyAlias(true); -// //表格高度 -// writer.setDefaultRowHeight(20); -// //放入数据 -// writer.write(dos, true); -// //设置宽度自适应,10是assembleWriter()方法映射的字段数量,也就是导出excel带有数据的列数 -// setSizeColumn(writer.getSheet(), 10); -// try { -// // 获取我们的输出流 -// final OutputStream output = response.getOutputStream(); -// response.setContentType("application/vnd.ms-excel;charset=utf-8"); -// response.setHeader("Content-Disposition", "attachment;filename=" + outFileName + ";filename*=utf-8" -// + URLEncoder.encode(outFileName, ENCODING)); -// writer.flush(output, true); -// writer.close(); -// // 这里可以自行关闭资源或者写一个关闭资源的工具类 -// IoUtil.close(output); -// } catch (Exception e) { -// log.error("下载模板失败:", e); -// } -// } -// -// -// /** -// * 自适应宽度(中文支持) -// */ -// public static void setSizeColumn(Sheet sheet, int size) { -// DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); -// for (int columnNum = 0; columnNum <= size; columnNum++) { -// int columnWidth = sheet.getColumnWidth(columnNum) / 256; -// for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) { -// Row currentRow; -// // 当前行未被使用过 -// if (sheet.getRow(rowNum) == null) { -// currentRow = sheet.createRow(rowNum); -// } else { -// currentRow = sheet.getRow(rowNum); -// } -// -// if (currentRow.getCell(columnNum) != null) { -// Cell currentCell = currentRow.getCell(columnNum); -// if (currentCell.getCellType() == CellType.STRING) { -// String phoneNumber = currentCell.getStringCellValue(); -// // 使用 String.format() 方法将手机号格式化为固定长度的字符串 -// String formattedPhoneNumber = String.format("%-10s", phoneNumber); -// int length = formattedPhoneNumber.getBytes().length; -// if (columnWidth < length) { -// columnWidth = length; -// } -// } else if (currentCell.getCellType() == CellType.NUMERIC) { -// // 判断是否是日期格式 -// if (DateUtil.isCellDateFormatted(currentCell)) { -// LocalDateTime localDateTimeCellValue = currentCell.getLocalDateTimeCellValue(); -// String format = df.format(localDateTimeCellValue); -// columnWidth = format.length() * 2; -// } else { -// double numericCellValue = currentCell.getNumericCellValue(); -// String stringValue = String.valueOf(numericCellValue); -// String formattedStringValue = String.format("%-10s", stringValue); -// int length = formattedStringValue.getBytes().length; -// if (columnWidth < length) { -// columnWidth = length; -// } -// } -// } -// } -// sheet.setColumnWidth(columnNum, columnWidth * 300); -// } -// } -// } -// -// //assembleWriter方法和assembleReader方法可以通过实体类加@Alias注解实现,这里为了避免导入导出数据不统一,使用硬编码实现 -// private void assembleWriter(ExcelWriter writer) { -// writer.addHeaderAlias("place", "地点"); -// writer.addHeaderAlias("beginTime", "值班开始时间(年-月-日 时:分)"); -// writer.addHeaderAlias("endTime", "值班结束时间(年-月-日 时:分)"); -// writer.addHeaderAlias("week", "星期"); -// writer.addHeaderAlias("leaderNo", "带班领导工号"); -// writer.addHeaderAlias("leaderName", "带班领导姓名"); -// writer.addHeaderAlias("dutyWork", "白班/夜班"); -// writer.addHeaderAlias("userNo", "值班人工号"); -// writer.addHeaderAlias("userName", "值班人姓名"); -// writer.addHeaderAlias("dutyPhone", "值班电话"); -// } -// -// private void assembleReader(ExcelReader reader) { -// reader.addHeaderAlias("地点", "place"); -// reader.addHeaderAlias("值班开始时间(年-月-日 时:分)", "beginTime"); -// reader.addHeaderAlias("值班结束时间(年-月-日 时:分)", "endTime"); -// reader.addHeaderAlias("星期", "week"); -// reader.addHeaderAlias("带班领导工号", "leaderNo"); -// reader.addHeaderAlias("带班领导姓名", "leaderName"); -// reader.addHeaderAlias("白班/夜班", "dutyWork"); -// reader.addHeaderAlias("值班人工号", "userNo"); -// reader.addHeaderAlias("值班人姓名", "userName"); -// reader.addHeaderAlias("值班电话", "dutyPhone"); -// } -// + /** + * 导入数据校验错误信息 + */ + public String importExcelCheck(List all) { + List errorMessages = validateWorkNo(all); + return String.join(";", errorMessages); + } + private List validateWorkNo(List all) { + Set existingWorkNos = lawsWorkingGroupUserService.list().stream().map(LawsWorkingGroupUser::getWorkingGroupId).collect(Collectors.toSet()); + return IntStream.range(0, all.size()) + .mapToObj(i -> { + int index = i + 2; + LawsWorkingGroupUser lawsWorkingGroupUser = all.get(i); + String userWorkNo = lawsWorkingGroupUser.getUserWorkNo(); + if (userWorkNo == null || userWorkNo.trim().isEmpty()) { + return "第" + index + "行,工号不能为空"; + } + if (!isValidWorkNo(userWorkNo)) { + return "第" + index + "行," + userWorkNo + "工号不存在"; + } + if (!existingWorkNos.add(userWorkNo)) { + return "第" + index + "行,工号重复"; + } + return null; + }).filter(error -> error != null).collect(Collectors.toList()); + } + /** + * 判断工号在用户表中是否存在 + */ + private boolean isValidWorkNo(String userWorkNo) { + SysUser sysUser = sysUserService.getUserByWorkNo(userWorkNo); + return sysUser != null; + } + + /** + * 下载模板 + */ + @AutoLog(value = "内部工作组人员关联表-下载模板") + @ApiOperation(value="内部工作组人员关联表-下载模板", notes="内部工作组人员关联表-下载模板") + @RequestMapping(value = "/download/template", method = RequestMethod.GET) + public void template(HttpServletResponse response) { + ExcelWriter writer = ExcelUtil.getWriter(true); + List headList = new ArrayList<>(); + headList.add("姓名"); + headList.add("工号"); + headList.add("角色"); + headList.add("岗位"); + //表格高度 + writer.setDefaultRowHeight(18); + //表格宽度 + writer.setColumnWidth(-1, 20); + try { + writer.writeHeadRow(headList).write(Collections.emptyList()); + //设置content—type + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset:utf-8"); + //Content-disposition是MIME协议的扩展,MIME协议指示MIME用户代理如何显示附加的文件。 + response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode("内部工作组人员表模板","UTF-8")+".xlsx"); + ServletOutputStream outputStream= response.getOutputStream(); + //将Writer刷新到OutPut + writer.flush(outputStream,true); + outputStream.close(); + writer.close(); + } catch (Exception e) { + log.error("下载模板失败:", e); + } + } + + //assembleWriter方法和assembleReader方法可以通过实体类加@Alias注解实现,这里为了避免导入导出数据不统一,使用硬编码实现 + private void assembleWriter(ExcelWriter writer) { + writer.addHeaderAlias("userName", "姓名"); + writer.addHeaderAlias("userWorkNo", "工号"); + writer.addHeaderAlias("userRoleName", "角色"); + writer.addHeaderAlias("userPostName", "岗位"); + } + private void assembleReader(ExcelReader reader) { + reader.addHeaderAlias("姓名", "userName"); + reader.addHeaderAlias("工号", "userWorkNo"); + reader.addHeaderAlias("角色", "userRoleName"); + reader.addHeaderAlias("岗位", "userPostName"); + } } diff --git a/laws-modules/src/main/java/com/jero/modules/sys/entity/LawsWorkingGroupUser.java b/laws-modules/src/main/java/com/jero/modules/sys/entity/LawsWorkingGroupUser.java index 7874932d..8cfd1f06 100644 --- a/laws-modules/src/main/java/com/jero/modules/sys/entity/LawsWorkingGroupUser.java +++ b/laws-modules/src/main/java/com/jero/modules/sys/entity/LawsWorkingGroupUser.java @@ -10,7 +10,6 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.EqualsAndHashCode; @@ -37,12 +36,10 @@ public class LawsWorkingGroupUser implements Serializable { private String id; /**人员ID*/ - @Excel(name = "人员ID", width = 15) @ApiModelProperty(value = "人员ID") private String userId; /**内部工作组ID*/ - @Excel(name = "内部工作组ID", width = 15) @ApiModelProperty(value = "内部工作组ID") private String workingGroupId; diff --git a/laws-modules/src/main/java/com/jero/modules/sys/service/impl/LawsWorkingGroupUserServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/sys/service/impl/LawsWorkingGroupUserServiceImpl.java index a5f63e4d..052f8ed9 100644 --- a/laws-modules/src/main/java/com/jero/modules/sys/service/impl/LawsWorkingGroupUserServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/sys/service/impl/LawsWorkingGroupUserServiceImpl.java @@ -2,21 +2,26 @@ package com.jero.modules.sys.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.jero.modules.sys.entity.LawsWorkingGroupUser; import com.jero.modules.sys.mapper.LawsWorkingGroupUserMapper; import com.jero.modules.sys.service.ILawsWorkingGroupUserService; import com.jero.modules.system.entity.SysRole; import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.entity.SysUserRole; import com.jero.modules.system.service.ISysRoleService; +import com.jero.modules.system.service.ISysUserRoleService; import com.jero.modules.system.service.ISysUserService; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.jero.common.exception.JeroBootException; -import java.util.HashMap; import java.util.List; import java.util.Date; +import java.util.Map; +import java.util.function.Function; import java.util.stream.Collectors; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -40,30 +45,39 @@ public class LawsWorkingGroupUserServiceImpl extends ServiceImpl queryPage(LawsWorkingGroupUser lawsWorkingGroupUser, Integer pageNo, Integer pageSize, HttpServletRequest req) { + Page page = new Page<>(pageNo, pageSize); + String userName = lawsWorkingGroupUser.getUserName(); + String userWorkNo = lawsWorkingGroupUser.getUserWorkNo(); + String userRoleName = lawsWorkingGroupUser.getUserRoleName(); + String userPostName = lawsWorkingGroupUser.getUserPostName(); + String workingGroupId = lawsWorkingGroupUser.getWorkingGroupId(); + if (!StringUtils.isAllBlank(userName, userWorkNo, userRoleName, userPostName)){ + List ids = sysUserService.LawsWorkingGroupUserSearch(userName, userWorkNo, userRoleName, userPostName); + if (ids.isEmpty()){ + return new Page<>(); + } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StringUtils.isNotBlank(workingGroupId), LawsWorkingGroupUser::getWorkingGroupId, workingGroupId); + wrapper.eq(LawsWorkingGroupUser::getDelFlag, "0"); + wrapper.in(LawsWorkingGroupUser::getUserId, ids); + return page(page, wrapper); + } + //没选上面四个筛选条件时 QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(lawsWorkingGroupUser, req.getParameterMap()); - Page page = new Page<>(pageNo, pageSize); return page(page, queryWrapper); } /** * 列表查询 - * - * @param lawsWorkingGroupUser - * @param req - * @return */ @Override public List queryList(LawsWorkingGroupUser lawsWorkingGroupUser, HttpServletRequest req) { @@ -72,9 +86,6 @@ public class LawsWorkingGroupUserServiceImpl extends ServiceImpl ids) { @@ -121,9 +123,6 @@ public class LawsWorkingGroupUserServiceImpl extends ServiceImpl list){ - if (list == null || list.size() == 0){ + public void userAssignment(List list) { + if (list == null || list.isEmpty()) { return; } - List collect = list.stream().map(LawsWorkingGroupUser::getUserId).distinct().collect(Collectors.toList()); - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.in(SysUser::getId, collect); - List sysUsers = sysUserService.list(wrapper); - HashMap map = new HashMap<>(); - sysUsers.forEach(user -> map.put(user.getId(), user)); + // 获取用户ID列表 + List userIds = list.stream().map(LawsWorkingGroupUser::getUserId).distinct().collect(Collectors.toList()); + // 批量查询用户信息 + List sysUsers = sysUserService.listByIds(userIds); + // 构建用户ID和用户信息的映射关系 + Map userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getId, Function.identity())); + // 遍历赋值 for (LawsWorkingGroupUser user : list) { - SysUser sysUser = map.get(user.getId()); - if (sysUser == null){ - continue; + SysUser sysUser = userMap.get(user.getUserId()); + if (sysUser != null) { + user.setUserName(sysUser.getRealname()); + user.setUserWorkNo(sysUser.getWorkNo()); + user.setUserPostName("岗位xxx"); + } + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(SysUserRole::getUserId, user.getUserId()); + List sysUserRoles = sysUserRoleService.list(wrapper); + if (sysUserRoles.size() > 0){ + List roles = sysRoleService.listByIds(sysUserRoles.stream().map(SysUserRole::getRoleId).distinct().collect(Collectors.toList())); + String roleNames = roles.stream().map(SysRole::getRoleName).collect(Collectors.joining(",")); + user.setUserRoleName(roleNames); } - user.setUserName(sysUser.getRealname()); - user.setUserWorkNo(sysUser.getWorkNo()); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysRole::getId, user.getId()); - List sysRoles = sysRoleService.list(queryWrapper); - String roleNames = sysRoles.stream().map(SysRole::getRoleName).collect(Collectors.joining(",")); - user.setUserRoleName(roleNames); - user.setUserPostName("岗位xxx"); } } }