内部工作组导入导出、添加时判断有无重复

This commit is contained in:
caozhen
2023-09-08 13:53:47 +08:00
parent 123cf224ca
commit c8c3ac3593
3 changed files with 287 additions and 361 deletions
@@ -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<LawsWorkingGroupUser, ILawsWorkingGroupUserService> {
@Autowired
private ILawsWorkingGroupUserService lawsWorkingGroupUserService;
@Autowired
private ISysUserService sysUserService;
/**
@@ -77,6 +92,15 @@ public class LawsWorkingGroupUserController extends JeroController<LawsWorkingGr
if (StringUtils.isBlank(lawsWorkingGroupUser.getWorkingGroupId()) || StringUtils.isBlank(lawsWorkingGroupUser.getUserId())){
return Result.error("请选择人员和工作组!");
}
LambdaQueryWrapper<LawsWorkingGroupUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LawsWorkingGroupUser::getDelFlag, "0");
wrapper.eq(LawsWorkingGroupUser::getUserId, lawsWorkingGroupUser.getUserId());
wrapper.eq(LawsWorkingGroupUser::getWorkingGroupId, lawsWorkingGroupUser.getWorkingGroupId());
List<LawsWorkingGroupUser> 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<LawsWorkingGr
/**
* 导出excel
* 通过excel导入数据
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, LawsWorkingGroupUser lawsWorkingGroupUser) {
return super.exportXls(request, lawsWorkingGroupUser, LawsWorkingGroupUser.class, "内部工作组人员关联表");
@AutoLog(value = "内部工作组人员关联表-导入")
@ApiOperation(value="内部工作组人员关联表-导入", notes="内部工作组人员关联表-导入")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> 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<LawsWorkingGroupUser> all;
try {
ExcelReader excelReader = ExcelUtil.getReader(inputStream, "sheet1");
List<Map<String, Object>> 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<LawsWorkingGroupUser> 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<LawsWorkingGroupUser> 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<LawsWorkingGroupUser> queryDataByUserId(String userId) {
return lawsWorkingGroupUserService.listByIds(Arrays.asList(userId.split(",")));
}
private List<LawsWorkingGroupUser> queryDataByConditions(String userName, String userWorkNo, String userRoleName, String userPostName, String workingGroupId) {
List<String> ids = sysUserService.LawsWorkingGroupUserSearch(userName, userWorkNo, userRoleName, userPostName);
List<LawsWorkingGroupUser> list = new ArrayList<>();
if (!ids.isEmpty()) {
LambdaQueryWrapper<LawsWorkingGroupUser> 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<LawsWorkingGroupUser> queryDataByTree(String workingGroupId) {
LambdaQueryWrapper<LawsWorkingGroupUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LawsWorkingGroupUser::getWorkingGroupId, workingGroupId);
wrapper.eq(LawsWorkingGroupUser::getDelFlag, "0");
return lawsWorkingGroupUserService.list(wrapper);
}
/**
* 校验表头,同时映射对象字段
*/
private boolean validateHeader(ExcelReader excelReader) {
List<Map<String, Object>> read = excelReader.read(0, 1, 1);
Map<String, Object> map = read.get(0);
assembleReader(excelReader);
Map<String, String> 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<DutyDetailDO> all;
// try {
// ExcelReader excelReader = ExcelUtil.getReader(inputStream, "sheet1");
// List<Map<String, Object>> 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<Map<String, Object>> read = excelReader.read(0, 1, 1);
// Map<String, Object> map = read.get(0);
// assembleReader(excelReader);
// Map<String, String> headerAlias = excelReader.getHeaderAlias();
// boolean isSameKeys = map.keySet().stream().allMatch(key -> headerAlias.containsKey(key));
// return isSameKeys;
// }
//
// /**
// * 导入数据校验错误信息
// *
// * @param all
// * @return
// */
// private String importExcelCheck(List<DutyDetailDO> 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<String> 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<DutyDetailDO> 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<LawsWorkingGroupUser> all) {
List<String> errorMessages = validateWorkNo(all);
return String.join(";", errorMessages);
}
private List<String> validateWorkNo(List<LawsWorkingGroupUser> all) {
Set<String> 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<String> 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");
}
}
@@ -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;
@@ -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<LawsWorkingGrou
private ISysUserService sysUserService;
@Autowired
private ISysRoleService sysRoleService;
@Autowired
private ISysUserRoleService sysUserRoleService;
/**
* 分页查询
*
* @param lawsWorkingGroupUser
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@Override
public IPage<LawsWorkingGroupUser> queryPage(LawsWorkingGroupUser lawsWorkingGroupUser, Integer pageNo, Integer pageSize,
HttpServletRequest req) {
Page<LawsWorkingGroupUser> 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<String> ids = sysUserService.LawsWorkingGroupUserSearch(userName, userWorkNo, userRoleName, userPostName);
if (ids.isEmpty()){
return new Page<>();
}
LambdaQueryWrapper<LawsWorkingGroupUser> 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<LawsWorkingGroupUser> queryWrapper = QueryGenerator.initQueryWrapper(lawsWorkingGroupUser, req.getParameterMap());
Page<LawsWorkingGroupUser> page = new Page<>(pageNo, pageSize);
return page(page, queryWrapper);
}
/**
* 列表查询
*
* @param lawsWorkingGroupUser
* @param req
* @return
*/
@Override
public List<LawsWorkingGroupUser> queryList(LawsWorkingGroupUser lawsWorkingGroupUser, HttpServletRequest req) {
@@ -72,9 +86,6 @@ public class LawsWorkingGroupUserServiceImpl extends ServiceImpl<LawsWorkingGrou
/**
* 保存
*
* @param lawsWorkingGroupUser
* @return
*/
@Override
public void add(LawsWorkingGroupUser lawsWorkingGroupUser) {
@@ -86,9 +97,6 @@ public class LawsWorkingGroupUserServiceImpl extends ServiceImpl<LawsWorkingGrou
/**
* 更新
*
* @param lawsWorkingGroupUser
* @return
*/
@Override
public void editById(LawsWorkingGroupUser lawsWorkingGroupUser) {
@@ -99,9 +107,6 @@ public class LawsWorkingGroupUserServiceImpl extends ServiceImpl<LawsWorkingGrou
/**
* 通过id删除
*
* @param id
* @return
*/
@Override
public void deleteById(String id) {
@@ -110,9 +115,6 @@ public class LawsWorkingGroupUserServiceImpl extends ServiceImpl<LawsWorkingGrou
/**
* 批量删除
*
* @param ids
* @return
*/
@Override
public void deleteByIds(List<String> ids) {
@@ -121,9 +123,6 @@ public class LawsWorkingGroupUserServiceImpl extends ServiceImpl<LawsWorkingGrou
/**
* 通过id查询
*
* @param id
* @return
*/
@Override
public LawsWorkingGroupUser queryById(String id) {
@@ -134,29 +133,32 @@ public class LawsWorkingGroupUserServiceImpl extends ServiceImpl<LawsWorkingGrou
* 为人员赋值姓名、工号、角色、岗位
*/
@Override
public void userAssignment(List<LawsWorkingGroupUser> list){
if (list == null || list.size() == 0){
public void userAssignment(List<LawsWorkingGroupUser> list) {
if (list == null || list.isEmpty()) {
return;
}
List<String> collect = list.stream().map(LawsWorkingGroupUser::getUserId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
wrapper.in(SysUser::getId, collect);
List<SysUser> sysUsers = sysUserService.list(wrapper);
HashMap<String, SysUser> map = new HashMap<>();
sysUsers.forEach(user -> map.put(user.getId(), user));
// 获取用户ID列表
List<String> userIds = list.stream().map(LawsWorkingGroupUser::getUserId).distinct().collect(Collectors.toList());
// 批量查询用户信息
List<SysUser> sysUsers = sysUserService.listByIds(userIds);
// 构建用户ID和用户信息的映射关系
Map<String, SysUser> 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<SysUserRole> wrapper = Wrappers.lambdaQuery();
wrapper.eq(SysUserRole::getUserId, user.getUserId());
List<SysUserRole> sysUserRoles = sysUserRoleService.list(wrapper);
if (sysUserRoles.size() > 0){
List<SysRole> 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<SysRole> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysRole::getId, user.getId());
List<SysRole> sysRoles = sysRoleService.list(queryWrapper);
String roleNames = sysRoles.stream().map(SysRole::getRoleName).collect(Collectors.joining(","));
user.setUserRoleName(roleNames);
user.setUserPostName("岗位xxx");
}
}
}