bug51965 发布未被订阅修改

This commit is contained in:
xiejunyu
2022-05-13 17:00:34 +08:00
parent 48964b9c34
commit bacc0494ed
3 changed files with 337 additions and 229 deletions
@@ -9,13 +9,16 @@ import com.jero.modules.system.entity.SysUser;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -158,17 +161,16 @@ public class ProjectRelatedPersonnelController extends JeroController<ProjectRel
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@AutoLog(value = "项目库-相关人员维护表-通过excel导入数据")
@ApiOperation(value="项目库-相关人员维护表-通过excel导入数据", notes="项目库-相关人员维护表-通过excel导入数据")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response,
@RequestParam(name="projectId",required=true) String projectId,
@RequestParam(name="cut",required=true) String cut) {
return projectRelatedPersonnelService.importExcel(request, response, ProjectRelatedPersonnel.class,projectId,cut);
public Result<?> importExcel(MultipartFile file,
@RequestParam(name="projectId",required=true) String projectId,
@RequestParam(name="cut",required=true) String cut) throws IOException, InvalidFormatException {
String message = projectRelatedPersonnelService.importExcel(file, ProjectRelatedPersonnel.class, projectId, cut);
return Result.OK(message);
}
/**
@@ -1,12 +1,14 @@
package com.jero.modules.project.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.common.api.vo.Result;
import com.jero.modules.project.entity.ProjectRelatedPersonnel;
import com.jero.modules.system.entity.SysUser;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@@ -78,10 +80,10 @@ public interface IProjectRelatedPersonnelService extends IService<ProjectRelated
/**设置导出模板*/
void exportTemplate(ProjectRelatedPersonnel projectRelatedPersonnel, HttpServletResponse response, HttpServletRequest request);
Result<?> importExcel(HttpServletRequest request, HttpServletResponse response, Class<ProjectRelatedPersonnel> clazz, String projectId,String cut);
String importExcel(MultipartFile file, Class<ProjectRelatedPersonnel> clazz, String projectId, String cut) throws IOException, InvalidFormatException;
List<ProjectRelatedPersonnel> oppositeDisposeData(List<ProjectRelatedPersonnel> records,String projectId,String cut);
String oppositeDisposeData(List<ProjectRelatedPersonnel> records, String projectId, String cut);
ProjectRelatedPersonnel queryByProjectIdAndDutyTerritory(String projectId, String dutyTerritory);
@@ -1,14 +1,12 @@
package com.jero.modules.project.service.impl;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.dummy.service.impl.DummyInventoryInfoEOServiceImpl;
import com.jero.modules.enums.DictCodeEnum;
import com.jero.modules.project.entity.ProjectRelatedPersonnel;
import com.jero.modules.project.mapper.ProjectRelatedPersonnelMapper;
@@ -27,17 +25,14 @@ import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -75,6 +70,9 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
@Value(value = "${jero.path.upload}")
private String uploadpath;
@Autowired
private DummyInventoryInfoEOServiceImpl dummyInventoryInfoEOService;
/**
* 保存
*
@@ -485,7 +483,7 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
if(CutEnum.CN.getValue().equals(cut)){
explainInfo = "填写说明\n" +
"1.导入数据从第行开始\n" +
"1.导入数据从第行开始\n" +
"2.所有带*号的字段必须填写\n"+
"3.认证类型,认证级别,实施类别,交付物类型,发起人,责任人,字段是单选属性,必须和系统中的对应字段选项相匹配\n" +
"4.责任领域,字段是多选属性,必须和系统中的对应字段选项相匹配,填写多个时采用英文或中文逗号分割\n" +
@@ -493,7 +491,7 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
"6.交付物模板字段为文件属性,填写时需要在本文件同级目录下以标准号为名称建立文件夹,并在文件夹下放置文件,假设在AAA标准号下放置了B.docx,则应填写AAA/B.docx";
}else{
explainInfo = "filling explanation\n" +
"1.import data starts at the fourth line\n" +
"1.import data starts at the third line\n" +
"2.all fields marked with * must be filled in\n"+
"3.certification type,certification level,implementation category,type of deliverables,initiator,person liable,Fields are radio attributes that must match the corresponding field option in the system\n" +
"4.area of responsibility, field is a multi-select attribute and must match the corresponding field in the system. If multiple fields are filled in, separate them by commas (,)\n" +
@@ -550,89 +548,97 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
*/
@Override
public void exportTemplate(ProjectRelatedPersonnel projectRelatedPersonnel, HttpServletResponse response, HttpServletRequest request) {
OutputStream os = null;
HSSFWorkbook workbook = new HSSFWorkbook();
String fileOriName = "法规清单导入模板.xls";
String filePath = uploadpath + File.separator + fileOriName;
try {
String titleOne = "";
if(CutEnum.CN.getValue().equals(projectRelatedPersonnel.getCut())){
titleOne = "*责任领域,*法规工程师,*工程接口人,*认证工程师,备注";
}else{
titleOne = "*Responsible Field,*Regulation Engineer,*Engineering Interface,*Homologation Engineer,Comments";
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
if (sysUser != null) {
OutputStream os = null;
HSSFWorkbook workbook = new HSSFWorkbook();
String fileOriName = "";
String filePath = uploadpath + File.separator + fileOriName;
try {
String titleOne = "";
if (CutEnum.CN.getValue().equals(projectRelatedPersonnel.getCut())) {
titleOne = "*责任领域,*法规工程师,*工程接口人,*认证工程师,备注";
fileOriName = "相关人员导入模板.xls";
} else {
titleOne = "*Responsible Field,*Regulation Engineer,*Engineering Interface,*Homologation Engineer,Comments";
fileOriName = "Import template of related personnel.xls";
}
//创建临时文件夹
File nowFile = new File(filePath);
if (nowFile.exists()) {
nowFile.delete();
}
nowFile.mkdirs();
HSSFSheet sheet = workbook.createSheet("虚拟清单导入模板");
sheet.setDefaultColumnWidth(16);//列宽
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setWrapText(true);//自动换行
cellStyle.setAlignment(HorizontalAlignment.CENTER);//垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//水平居中
HSSFCellStyle cellStyleTemp = workbook.createCellStyle();
cellStyleTemp.setWrapText(true);//自动换行
int startLine = 0;
int endLine = 4;
//合并单元格
CellRangeAddress region1 =
new CellRangeAddress(1, 1, startLine, endLine); //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
sheet.addMergedRegion(region1);
String explainInfo = null;
if (CutEnum.CN.getValue().equals(projectRelatedPersonnel.getCut())) {
explainInfo = "填写说明\n" +
"1.导入数据从第三行开始\n" +
"2.所有带*号的字段必须填写\n" +
"3.认证类型,认证级别,实施类别,交付物类型,发起人,责任人,字段是单选属性,必须和系统中的对应字段选项相匹配\n" +
"4.责任领域,字段是多选属性,必须和系统中的对应字段选项相匹配,填写多个时采用英文或中文逗号分割\n" +
"5.编号,子标题,WVTA ID,备注,填写文本内容\n" +
"6.交付物模板字段为文件属性,填写时需要在本文件同级目录下以标准号为名称建立文件夹,并在文件夹下放置文件,假设在AAA标准号下放置了B.docx,则应填写AAA/B.docx";
} else {
explainInfo = "filling explanation\n" +
"1.import data starts at the third line\n" +
"2.all fields marked with * must be filled in\n" +
"3.certification type,certification level,implementation category,type of deliverables,initiator,person liable,Fields are radio attributes that must match the corresponding field option in the system\n" +
"4.area of responsibility, field is a multi-select attribute and must match the corresponding field in the system. If multiple fields are filled in, separate them by commas (,)\n" +
"5.serial number,subtitle,WVTA ID,remarks,Fill in the text\n" +
"6.deliverable template,When filling in the field, you need to create a folder in the directory of the same level as the file with the name of the standard number and place the file in the folder. If b. diocx is stored under the AAA standard number, enter AAA/B. diocx";
}
HSSFRichTextString explain = new HSSFRichTextString(explainInfo);
//表头
Row row = sheet.createRow(0);//开始创建标题行
String[] headerArr = titleOne.split(",");
for (int m = 0; m < headerArr.length; m++) {
row.createCell(m).setCellValue(headerArr[m]);
}
Row rowExplain = sheet.createRow(1);
short height = (short) (7 * 252);
rowExplain.setHeight((short) height);
Cell cell = rowExplain.createCell(0);
cell.setCellValue(explain);
cell.setCellStyle(cellStyleTemp);
response.setHeader("Content-Disposition",
"attachment; filename=\"" + fileOriName + ".xls");
response.setContentType("application/force-download");
response.flushBuffer();
os = response.getOutputStream();
workbook.write(os);
} catch (Exception e) {
e.printStackTrace();
throw new JeroBootException("下载文件失败,请重试");
} finally {
IOUtils.closeQuietly(os);
}
//创建临时文件夹
File nowFile = new File(filePath);
if (nowFile.exists()) {
nowFile.delete();
}
nowFile.mkdirs();
HSSFSheet sheet = workbook.createSheet("虚拟清单导入模板");
sheet.setDefaultColumnWidth(16);//列宽
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setWrapText(true);//自动换行
cellStyle.setAlignment(HorizontalAlignment.CENTER);//垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//水平居中
HSSFCellStyle cellStyleTemp = workbook.createCellStyle();
cellStyleTemp.setWrapText(true);//自动换行
int startLine = 0;
int endLine = 4;
//合并单元格
CellRangeAddress region1 =
new CellRangeAddress(1, 1, startLine, endLine); //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
sheet.addMergedRegion(region1);
String explainInfo= null;
if(CutEnum.CN.getValue().equals(projectRelatedPersonnel.getCut())){
explainInfo = "填写说明\n" +
"1.导入数据从第四行开始\n" +
"2.所有带*号的字段必须填写\n"+
"3.认证类型,认证级别,实施类别,交付物类型,发起人,责任人,字段是单选属性,必须和系统中的对应字段选项相匹配\n" +
"4.责任领域,字段是多选属性,必须和系统中的对应字段选项相匹配,填写多个时采用英文或中文逗号分割\n" +
"5.编号,子标题,WVTA ID,备注,填写文本内容\n" +
"6.交付物模板字段为文件属性,填写时需要在本文件同级目录下以标准号为名称建立文件夹,并在文件夹下放置文件,假设在AAA标准号下放置了B.docx,则应填写AAA/B.docx";
}else{
explainInfo = "filling explanation\n" +
"1.import data starts at the fourth line\n" +
"2.all fields marked with * must be filled in\n"+
"3.certification type,certification level,implementation category,type of deliverables,initiator,person liable,Fields are radio attributes that must match the corresponding field option in the system\n" +
"4.area of responsibility, field is a multi-select attribute and must match the corresponding field in the system. If multiple fields are filled in, separate them by commas (,)\n" +
"5.serial number,subtitle,WVTA ID,remarks,Fill in the text\n" +
"6.deliverable template,When filling in the field, you need to create a folder in the directory of the same level as the file with the name of the standard number and place the file in the folder. If b. diocx is stored under the AAA standard number, enter AAA/B. diocx";
}
HSSFRichTextString explain=new HSSFRichTextString(explainInfo);
//表头
Row row = sheet.createRow(0);//开始创建标题行
String[] headerArr = titleOne.split(",");
for (int m = 0; m < headerArr.length; m++) {
row.createCell(m).setCellValue(headerArr[m]);
}
Row rowExplain = sheet.createRow(1);
short height = (short) (7 * 252);
rowExplain.setHeight((short) height);
Cell cell = rowExplain.createCell(0);
cell.setCellValue(explain);
cell.setCellStyle(cellStyleTemp);
response.setHeader("Content-Disposition",
"attachment; filename=\"" + fileOriName + ".xls");
response.setContentType("application/force-download");
response.flushBuffer();
os = response.getOutputStream();
workbook.write(os);
} catch (Exception e) {
e.printStackTrace();
throw new JeroBootException("下载文件失败,请重试");
} finally {
IOUtils.closeQuietly(os);
}
}
@@ -642,106 +648,204 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
/**
* 导入excel数据
*
* @param request
* @return
*/
@Override
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response,
Class<ProjectRelatedPersonnel> clazz,String projectId,String cut) {
Result<ProjectRelatedPersonnel> result=new Result<>();
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
MultipartFile file = entity.getValue();// 获取上传文件对象
ImportParams params = new ImportParams();
params.setTitleRows(1);
params.setHeadRows(1);
params.setNeedSave(true);
try {
//接收导入数据
List<ProjectRelatedPersonnel> records = ExcelImportUtil.importExcel(file.getInputStream(), clazz, params);
if(CollectionUtils.isNotEmpty(records)) {
oppositeDisposeData(records,projectId,cut);
public String importExcel(MultipartFile file,
Class<ProjectRelatedPersonnel> clazz, String projectId, String cut) throws IOException, InvalidFormatException {
//中英切换提示语
if(CutEnum.CN.getValue().equals(cut)) {
result.success("文件导入成功!数据行数:" + records.size());
String explainInfo= null;
String titleOne = "";
if(CutEnum.CN.getValue().equals(cut)){
titleOne = "*责任领域,*法规工程师,*工程接口人,*认证工程师,备注";
explainInfo = "填写说明\n" +
"1.导入数据从第三行开始\n" +
"2.所有带*号的字段必须填写\n"+
"3.认证类型,认证级别,实施类别,交付物类型,发起人,责任人,字段是单选属性,必须和系统中的对应字段选项相匹配\n" +
"4.责任领域,字段是多选属性,必须和系统中的对应字段选项相匹配,填写多个时采用英文或中文逗号分割\n" +
"5.编号,子标题,WVTA ID,备注,填写文本内容\n" +
"6.交付物模板字段为文件属性,填写时需要在本文件同级目录下以标准号为名称建立文件夹,并在文件夹下放置文件,假设在AAA标准号下放置了B.docx,则应填写AAA/B.docx";
}else{
titleOne = "*Responsible Field,*Regulation Engineer,*Engineering Interface,*Homologation Engineer,Comments";
explainInfo = "filling explanation\n" +
"1.import data starts at the third line\n" +
"2.all fields marked with * must be filled in\n"+
"3.certification type,certification level,implementation category,type of deliverables,initiator,person liable,Fields are radio attributes that must match the corresponding field option in the system\n" +
"4.area of responsibility, field is a multi-select attribute and must match the corresponding field in the system. If multiple fields are filled in, separate them by commas (,)\n" +
"5.serial number,subtitle,WVTA ID,remarks,Fill in the text\n" +
"6.deliverable template,When filling in the field, you need to create a folder in the directory of the same level as the file with the name of the standard number and place the file in the folder. If b. diocx is stored under the AAA standard number, enter AAA/B. diocx";
}
List<String> titleOneList = Arrays.asList(titleOne.split(","));
// 获取文件名
String fileName = file.getOriginalFilename();
// 获取文件后缀
String prefix = fileName.substring(fileName.lastIndexOf("."));
File excelFile = File.createTempFile(fileName, prefix);
file.transferTo(excelFile);
Workbook workbook = WorkbookFactory.create(excelFile);
List<ProjectRelatedPersonnel> list = new ArrayList<>();
if (workbook != null) {
Sheet sheet = workbook.getSheetAt(0);
if (sheet != null) {
int rowNos = sheet.getPhysicalNumberOfRows();// 得到excel的总记录条数
for (int i = 0; i < rowNos ; i++) {
Row row = sheet.getRow(i);
Row headerRow = sheet.getRow(i);
boolean isBlank = dummyInventoryInfoEOService.isRowEmpty(row);
if (row != null && !isBlank) {
int columNos = headerRow.getLastCellNum();// 表头总共的列数
if (columNos == 5) {//列数对
for (int j = 0; j < columNos; j++) {
Cell cell = row.getCell(j,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
if (i == 0){
if (i == 0 && !cell.getStringCellValue().equals(titleOneList.get(j))) {//检查表头
if (CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("读取失败.请检查第 " + (i+1) + " 行表头,请严格按照模板文件导入数据");
} else {
throw new JeroBootException("The data fails to be read.Please check header in line " + (i+1) + " .Import data strictly according to the template file.");
}
}
}
}
}else if((i!=1 && columNos != 5) || (i==2 && columNos !=1)){
if (CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("导入的列数不对,请检查");
} else {
throw new JeroBootException("The number of imported columns is wrong. Please check!");
}
}
}else{
result.success("File import succeeded! Number of data rows" + records.size());
if (CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("导入的数据不能为空,请检查");
} else {
throw new JeroBootException("The imported data of cannot be empty. Please check!");
}
}
}else{
//中英切换提示语
if(CutEnum.CN.getValue().equals(cut)) {
result.error500("数据为空,请检查");
}else {
result.error500("The data is empty, please check!");
if (i == 1) {//校验填写说明
row = sheet.getRow(i);
int columNos = row.getLastCellNum();
if(columNos != 1 /*|| (!row.getCell(0).getStringCellValue().equals(explainInfo))*/){
if (CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("填写说明列数不对,请严格按照模板文件导入数据");
}else{
throw new JeroBootException("The number of columns of filling explanation is wrong. Please import data strictly according to the template file.");
}
}
}
if (i > 1) {//读取数据
//获取每一行数据
row = sheet.getRow(i);
ProjectRelatedPersonnel projectRelatedPersonnel = new ProjectRelatedPersonnel();
//责任领域不能为空
String dutyTerritory = row.getCell(0).toString();
if(StringUtils.isNotBlank(dutyTerritory)) {
projectRelatedPersonnel.setDutyTerritory(row.getCell(0).toString());
}else{//责任领域不能为空,报错
if(CutEnum.CN.getValue().equals(cut)){
throw new JeroBootException("请填写责任领域,带*的为必填.请检查第 "+ (i+1) + "");
}else{
throw new JeroBootException("Please fill in the Responsible Field and those marked with * are required. .Please check line" + (i+1));
}
}
String lawEngineerName = row.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).toString();
String engineeringInterfacePersonName = row.getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).toString();
String certificationEngineerName = row.getCell(3,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).toString();
//除了责任领域全有值->可以
if(StringUtils.isNotBlank(lawEngineerName) && StringUtils.isNotBlank(engineeringInterfacePersonName) && StringUtils.isNotBlank(certificationEngineerName)) {
projectRelatedPersonnel.setLawEngineerName(lawEngineerName);
projectRelatedPersonnel.setEngineeringInterfacePersonName(engineeringInterfacePersonName);
projectRelatedPersonnel.setCertificationEngineerName(certificationEngineerName);
}else if(StringUtils.isBlank(lawEngineerName) && StringUtils.isBlank(engineeringInterfacePersonName) && StringUtils.isBlank(certificationEngineerName)) {
//除了责任领域,带*的全为空->可以
projectRelatedPersonnel.setLawEngineerName("");
projectRelatedPersonnel.setEngineeringInterfacePersonName("");
projectRelatedPersonnel.setCertificationEngineerName("");
}else {//除了责任领域,备注,有一个为空都报错
if(CutEnum.CN.getValue().equals(cut)){
throw new JeroBootException("请填写必填字段内容,带*的为必填.请检查第 "+ (i+1) + "");
}else{
throw new JeroBootException("Please fill in the required fields marked with * .Please check line" + (i+1));
}
}
String remark = row.getCell(4, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).toString();
if(StringUtils.isNotEmpty(row.getCell(4).toString())) {
projectRelatedPersonnel.setRemark(remark);
}
list.add(projectRelatedPersonnel);
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
result.error500(e.getMessage());
} finally {
try {
file.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
workbook.close();
//把数据翻译成id,并保存
String message = oppositeDisposeData(list, projectId, cut);
return message;
}
/**
* 把导入的数据翻译成对应的id,校验
* 把导入的数据翻译成对应的id,校验,不存
* 若除责任领域外的导入数据不能为空
* @return
*/
@Override
public List<ProjectRelatedPersonnel> oppositeDisposeData(List<ProjectRelatedPersonnel> records,String projectId,String cut) {
int row=1;
public String oppositeDisposeData(List<ProjectRelatedPersonnel> records, String projectId, String cut) {
int row=3;
StringBuilder message = new StringBuilder();
for (ProjectRelatedPersonnel projectRelatedPersonnel:records) {
//查标签内容里的责任领域数据
List<String> sysDictItemValueList = sysDictItemMapper.selectItemValueByDictCode(DictCodeEnum.DUTY_TERRITORY.getValue());
if(!sysDictItemValueList.contains(projectRelatedPersonnel.getDutyTerritory())){
if (CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("该责任领域不存在.请检查第" + row + "");
}else{
throw new JeroBootException("The area of responsibility does not exist. Please check line " + row);
}
List<SysDictItem> sysDictItemList = sysDictItemMapper.selectItemsByDictCode(DictCodeEnum.DUTY_TERRITORY.getValue());
List<String> dutyTerritoryValueList = new ArrayList<>();
//按照责任领域名,查value
if (CutEnum.CN.getValue().equals(cut)) {
dutyTerritoryValueList = sysDictItemList.stream().filter(f -> f.getItemText().equals(projectRelatedPersonnel.getDutyTerritory())).map(e -> e.getItemValue()).collect(Collectors.toList());
} else {
dutyTerritoryValueList = sysDictItemList.stream().filter(f -> f.getEnName().equals(projectRelatedPersonnel.getDutyTerritory())).map(e -> e.getItemValue()).collect(Collectors.toList());
}
//责任领域
if(!projectRelatedPersonnel.getDutyTerritory().isEmpty()) {
//导入的一条数据,只能有一个责任领域
if (projectRelatedPersonnel.getDutyTerritory().contains(",")) {
//中英切换提示语
if (CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("导入的责任领域只能填一个.请检查第" + row + "");
message.append("导入的责任领域只能填一个.请检查第" + row + ". ");
} else {
throw new JeroBootException("Only one duty territory can be filled in for import. Please check line " + row);
message.append("Only one duty territory can be filled in for import. Please check line " + row);
}
} else {
String dictItemValue = sysDictService.queryDictItemByValue(DictCodeEnum.DUTY_TERRITORY.getValue(), projectRelatedPersonnel.getDutyTerritory(), cut);
if (StringUtils.isBlank(dictItemValue)) {
if (CollectionUtils.isEmpty(dutyTerritoryValueList)) {//导入的责任领域不对
//中英切换提示语
if (CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("导入的责任领域不存在.请检查第" + row + "");
message.append("导入的责任领域不存在.请检查第" + row + "");
} else {
throw new JeroBootException("The imported duty territory does not exist. Please check line " + row);
message.append("The imported duty territory does not exist. Please check line " + row);
}
}else {
projectRelatedPersonnel.setDutyTerritory(dutyTerritoryValueList.get(0));
QueryWrapper<ProjectRelatedPersonnel> queryWrapper = new QueryWrapper<>();
List<ProjectRelatedPersonnel> idList = list(queryWrapper.select("id").eq("duty_territory", projectRelatedPersonnel.getDutyTerritory()).eq("project_id",projectId));
List<ProjectRelatedPersonnel> idList = list(queryWrapper.select("id").eq("duty_territory", dutyTerritoryValueList.get(0)).eq("project_id",projectId));
projectRelatedPersonnel.setId(idList.get(0).getId());
}
}
}else{
//中英切换提示语
if(CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("导入的责任领域不能为空.请检查第" + row + "");
message.append("导入的责任领域不能为空.请检查第" + row + "");
}else{
throw new JeroBootException("The imported duty territory cannot be empty.Please check line " + row );
message.append("The imported duty territory cannot be empty.Please check line " + row );
}
}
@@ -755,9 +859,9 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
if(lawEngineerUsers.size()!=lawEngineerNameList.size()){
//中英切换提示语
if(CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("导入的法规工程师姓名有误,请检查第" + row + "");
message.append("导入的法规工程师姓名有误,请检查第" + row + "");
}else{
throw new JeroBootException("The imported law engineer is wrong.Please check line " + row );
message.append("The imported law engineer is wrong.Please check line " + row );
}
}
}
@@ -776,12 +880,7 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
projectRelatedPersonnel.setLawEngineer(midId.substring(0,midId.toString().length()-1));
}
}else{
//中英切换提示语
if(CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("导入的法规工程师姓名不能为空,请检查第" + row + "");
}else{
throw new JeroBootException("The imported law engineer cannot be empty.Please check line " + row );
}
projectRelatedPersonnel.setLawEngineer("");
}
//工程接口人
@@ -794,9 +893,9 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
if(engineeringInterfacePersonUsers.size()!=engineeringInterfacePersonNameList.size()){
//中英切换提示语
if(CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("导入的工程接口人姓名有误,请检查第" + row + "");
message.append("导入的工程接口人姓名有误,请检查第" + row + "");
}else{
throw new JeroBootException("The imported engineering interface person is wrong.Please check line " + row );
message.append("The imported engineering interface person is wrong.Please check line " + row );
}
}
}
@@ -815,12 +914,7 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
projectRelatedPersonnel.setEngineeringInterfacePerson(midId.substring(0,midId.toString().length()-1));
}
}else{
//中英切换提示语
if(CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("导入的工程接口人姓名不能为空,请检查第" + row + "");
}else{
throw new JeroBootException("The imported engineering interface person cannot be empty.Please check line " + row );
}
projectRelatedPersonnel.setEngineeringInterfacePerson("");
}
//认证工程师
@@ -833,9 +927,9 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
if(certificationEngineerUsers.size()!=certificationEngineerNameList.size()){
//中英切换提示语
if(CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("导入的认证工程师姓名有误,请检查第" + row + "");
message.append("导入的认证工程师姓名有误,请检查第" + row + "");
}else {
throw new JeroBootException("The imported certification engineer is wrong.Please check line " + row );
message.append("The imported certification engineer is wrong.Please check line " + row );
}
}
}
@@ -854,18 +948,28 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
projectRelatedPersonnel.setCertificationEngineer(midId.substring(0,midId.toString().length()-1));
}
}else{
//中英切换提示语
if(CutEnum.CN.getValue().equals(cut)) {
throw new JeroBootException("导入的认证工程师姓名不能为空,请检查第" + row + "");
}else {
throw new JeroBootException("The imported certification engineer cannot be empty.Please check line " + row );
}
projectRelatedPersonnel.setCertificationEngineer("");
}
projectRelatedPersonnel.setProjectId(projectId);
Date now = new Date();
projectRelatedPersonnel.setUpdateTime(now);
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
projectRelatedPersonnel.setUpdateBy(sysUser.getUsername());
//
row++;
updateDataById(projectRelatedPersonnel);
}
return records;
//中英切换提示语,message为空 = 之前的数据没错
if(StringUtils.isBlank(message.toString())) {
saveOrUpdateBatch(records);
if (CutEnum.CN.getValue().equals(cut)) {
message.append("导入成功");
} else {
message.append("Import succeeded.");
}
}
return message.toString();
}
@Override
@@ -876,50 +980,50 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
return getOne(queryWrapper);
}
//导入时,把传入的数据,拼到原来数据后面
private void updateDataById(ProjectRelatedPersonnel projectRelatedPersonnel) {
List<ProjectRelatedPersonnel> records = projectRelatedPersonnelMapper.queryById(projectRelatedPersonnel.getId());
for (ProjectRelatedPersonnel data : records) {
//法规工程师
String lawString = projectRelatedPersonnel.getLawEngineer();
//去重
if(StringUtils.isNotBlank(lawString)) {
List<String> lawList = Arrays.asList(lawString.split(","));
String lawDistinct = lawList.stream().distinct().collect(Collectors.joining(","));
projectRelatedPersonnel.setLawEngineer(lawDistinct);
}
//工程接口人
String interfaceString = projectRelatedPersonnel.getEngineeringInterfacePerson();
//去重
if(StringUtils.isNotBlank(interfaceString)) {
List<String> interfaceList = Arrays.asList(interfaceString.split(","));
String interfaceDistinct = interfaceList.stream().distinct().collect(Collectors.joining(","));
projectRelatedPersonnel.setEngineeringInterfacePerson(interfaceDistinct);
}
// 工程接口人
String certificationString = projectRelatedPersonnel.getCertificationEngineer();
//去重
if(StringUtils.isNotBlank(certificationString)) {
List<String> certificationList = Arrays.asList(certificationString.split(","));
String certificationDistinct = certificationList.stream().distinct().collect(Collectors.joining(","));
projectRelatedPersonnel.setCertificationEngineer(certificationDistinct);
}
if (StringUtils.isBlank(data.getRemark())) {//数据库里备注是空的
projectRelatedPersonnel.setRemark(projectRelatedPersonnel.getRemark());
} else {
projectRelatedPersonnel.setRemark("");
}
Date now = new Date();
projectRelatedPersonnel.setUpdateTime(now);
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
projectRelatedPersonnel.setUpdateBy(sysUser.getUsername());
updateById(projectRelatedPersonnel);
}
}
// //导入-更新数据
// private void updateDataById(List<ProjectRelatedPersonnel> records) {
//// List<ProjectRelatedPersonnel> records = projectRelatedPersonnelMapper.queryById(projectRelatedPersonnel.getId());
// for (ProjectRelatedPersonnel projectRelatedPersonnel : records) {
//// //法规工程师
//// String lawString = projectRelatedPersonnel.getLawEngineer();
//// //去重
//// if(StringUtils.isNotBlank(lawString)) {
//// List<String> lawList = Arrays.asList(lawString.split(","));
//// String lawDistinct = lawList.stream().distinct().collect(Collectors.joining(","));
//// projectRelatedPersonnel.setLawEngineer(lawDistinct);
//// }
////
//// //工程接口人
//// String interfaceString = projectRelatedPersonnel.getEngineeringInterfacePerson();
//// //去重
//// if(StringUtils.isNotBlank(interfaceString)) {
//// List<String> interfaceList = Arrays.asList(interfaceString.split(","));
//// String interfaceDistinct = interfaceList.stream().distinct().collect(Collectors.joining(","));
//// projectRelatedPersonnel.setEngineeringInterfacePerson(interfaceDistinct);
//// }
////
////// 工程接口人
//// String certificationString = projectRelatedPersonnel.getCertificationEngineer();
//// //去重
//// if(StringUtils.isNotBlank(certificationString)) {
//// List<String> certificationList = Arrays.asList(certificationString.split(","));
//// String certificationDistinct = certificationList.stream().distinct().collect(Collectors.joining(","));
//// projectRelatedPersonnel.setCertificationEngineer(certificationDistinct);
//// }
////
//// if (StringUtils.isBlank(data.getRemark())) {//数据库里备注是空的
//// projectRelatedPersonnel.setRemark(projectRelatedPersonnel.getRemark());
//// } else {
//// projectRelatedPersonnel.setRemark("");
//// }
//
// Date now = new Date();
// projectRelatedPersonnel.setUpdateTime(now);
// LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
// projectRelatedPersonnel.setUpdateBy(sysUser.getUsername());
// updateById(projectRelatedPersonnel);
// }
// }
@Override
public List<SysUser> queryCertificationEngineer(String projectId) {