内部工作组导入导出、添加时判断有无重复
This commit is contained in:
+239
-312
@@ -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;
|
||||
|
||||
|
||||
+48
-46
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user