Merge remote-tracking branch 'origin/master'

This commit is contained in:
wangzhijiang
2022-04-21 09:09:58 +08:00
5 changed files with 806 additions and 20 deletions
@@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
@@ -182,13 +183,19 @@ public class DummyInventoryInfoEOController extends JeroController<DummyInventor
/**
* 导入数据
*
* @param request
* @param response
* @param file
* @param dummyInventoryInfoEO
* @return
*/
@RequestMapping(value = "/importData", method = RequestMethod.POST)
public Result<?> importData(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, DummyInventoryInfoEO.class);
public Result<?> importData(@RequestParam(value = "file", required = false) MultipartFile file,
DummyInventoryInfoEO dummyInventoryInfoEO) {
try {
dummyInventoryInfoEOService.importData(file,dummyInventoryInfoEO);
} catch (Exception e) {
return Result.error("导入失败");
}
return Result.OK("导入成功");
}
@ApiOperation(value = "模板下载")
@@ -3,6 +3,7 @@ package com.jero.modules.dummy.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.dummy.entity.DummyInventoryInfoEO;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -81,4 +82,11 @@ public interface IDummyInventoryInfoEOService extends IService<DummyInventoryInf
* @param request
*/
void exportTemplate(DummyInventoryInfoEO dummyInventoryInfoEO, HttpServletResponse response, HttpServletRequest request);
/**
* 数据导入
* @param file
* @param dummyInventoryInfoEO
*/
void importData(MultipartFile file, DummyInventoryInfoEO dummyInventoryInfoEO);
}
@@ -1,5 +1,6 @@
package com.jero.modules.dummy.service.impl;
import com.alibaba.fastjson.JSON;
import com.aliyuncs.utils.IOUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.util.DateUtils;
import com.jero.modules.document.entity.BussDocumentLibraryEO;
import com.jero.modules.document.service.IBussDocumentLibraryEOService;
import com.jero.modules.dummy.entity.DummyInventoryInfoEO;
@@ -16,31 +18,50 @@ import com.jero.modules.dummy.mapper.DummyInventoryInfoEOMapper;
import com.jero.modules.dummy.service.IDummyInventoryInfoEOService;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.modules.split.common.FileUnZip;
import com.jero.modules.system.entity.SysCategory;
import com.jero.modules.system.entity.SysDictItem;
import com.jero.modules.system.service.impl.SysCategoryServiceImpl;
import com.jero.modules.system.service.impl.SysDictItemServiceImpl;
import lombok.SneakyThrows;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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.Sheet;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
@@ -61,6 +82,8 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
private SysCategoryServiceImpl sysCategoryService;
@Autowired
private IOSSFileService iOSSFileService;
@Autowired
private SysDictItemServiceImpl sysDictItemServiceImpl;
@Value(value = "${jero.path.upload}")
private String uploadpath;
@@ -274,14 +297,17 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
String titleOne = "";
String titleTwo = "";
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
titleOne = "编号,标题,子标题,适用范围,状态,对应标准,实施类别,新车实施日期,在产车实施日期,WVTA ID,认证类型,认证级别,技术领域," +
"责任领域,适用地区,备注,设计符合性确认,Pre-homo确认,验证符合性确认";
titleOne = "编号,标题,子标题,适用范围,状态,对应标准,实施类别,新车实施日期,在产车实施日期,WVTA ID,认证类型," +
"认证级别,技术领域," +
"责任领域,适用地区,备注," +
"设计符合性确认,Pre-homo确认,验证符合性确认";
titleTwo = "交付物类型,交付物模板,发起人,责任人,交付物类型,交付物模板,发起人,责任人,交付物类型,交付物模板,发起人,责任人";
}else{
titleOne = "serial number,title,subtitle,scope of application,state,corresponding standard,implementation category," +
"new car implementation date,on the production vehicle implementation date,WVTA ID,certification type," +
"certification level,technical field," +
"area of responsibility,zone of application,remarks,design compliance check,pre-homo check,validation compliance chech";
"new car implementation date,on the production vehicle implementation date,WVTA ID,certification type," +
"area of responsibility,zone of application,remarks," +
"design compliance check,pre-homo check,validation compliance chech";
titleTwo = "type of deliverables,deliverable template,initiator,person liable," +
"type of deliverables,deliverable template,initiator,person liable," +
"type of deliverables,deliverable template,initiator,person liable";
@@ -375,6 +401,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
}
/**
* 技术领域数据字典处理
* @param dummyInventoryInfoEO
@@ -509,4 +536,746 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
}
return sbStr;
}
@SneakyThrows
@Override
public void importData(MultipartFile file, DummyInventoryInfoEO dummyInventoryInfoEO) {
String title = "";
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
title = "编号,标题,子标题,适用范围,状态,对应标准,实施类别,新车实施日期,在产车实施日期,WVTA ID,认证类型,认证级别,技术领域,责任领域,适用地区,备注," +
"设计交付物类型,设计交付物模板,设计发起人,设计责任人,pre交付物类型,pre交付物模板,pre发起人,pre责任人,验证交付物类型,验证交付物模板,验证发起人,验证责任人";
}else{
}
int pos = file.getOriginalFilename().lastIndexOf(".");
String str = file.getOriginalFilename().substring(pos + 1).toLowerCase();
String filenameorg = file.getOriginalFilename().substring(0, pos);
//判断上传文件必须是zip
if (!str.equals("zip")) {
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
throw new JeroBootException("请上传zip格式的文件或rar格式的文件");
}else{
throw new JeroBootException("Please upload a zip file or rar file");
}
}
String path = uploadpath + File.separator + "modal" + File.separator + filenameorg + System.currentTimeMillis();
File saveDirectory = new File(path);
if (!saveDirectory.isDirectory()) {
saveDirectory.mkdir();
}
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path + File.separator + file.getOriginalFilename()));
//解压缩
String zipEntryName = "";
if (str.equals("zip")) {
zipEntryName = FileUnZip.unZipFiles(path + File.separator + file.getOriginalFilename(), path);
}
//判断压缩包下是否只有一个文件夹
File fileTemp = new File(path);
int length = fileTemp.listFiles().length;
if (length > 2) {
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
throw new JeroBootException("压缩包中必须有且仅有一个文件夹,请重新上传");
}else{
throw new JeroBootException("There must be only one folder in the compressed package Please upload it again");
}
}
File fileNew = new File(zipEntryName);
List<File> fileList = new ArrayList<>();
for (File file1 : fileNew.listFiles()) {
if (file1.getName().contains(".xls") || file1.getName().contains(".xlsx")) {
fileList.add(file1);
}
}
if (fileList.size() == 0) {
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
throw new JeroBootException("压缩包根目录下没有excel作为导入数据,请重新上传");
}else{
throw new JeroBootException("Excel does not exist in the root directory of the compressed package Please upload it again");
}
} else if (fileList.size() > 1) {
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
throw new JeroBootException("压缩包根目录下仅能存在一个excel为导入数据,请重新上传");
}else{
throw new JeroBootException("Only one Excel file can be imported in the compressed package root directory. Please upload data again");
}
}
// 数据相关处理,
// 1.获取其中的Excel,
List<File> excelfilelist = FileUnZip.readImpExcelFile(zipEntryName);
System.gc();
if (excelfilelist.size() < 1) {
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
throw new JeroBootException("压缩包内没有上传Excel数据");
}else{
throw new JeroBootException("No Excel data is uploaded in the compressed package");
}
} else if (excelfilelist.size() > 1) {
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
throw new JeroBootException("压缩包内有多个Excel数据源");
}else{
throw new JeroBootException("There are multiple Excel data sources in the zip package");
}
}
List<DummyInventoryInfoEO> datas = new ArrayList<>();
File excelFile = excelfilelist.get(0);
Workbook workbook = WorkbookFactory.create(excelFile);
List<Map<String, String>> dataList = new ArrayList<>();
if (workbook != null) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Sheet sheet = workbook.getSheetAt(0);
if (sheet != null) {
StringBuilder headerSb = new StringBuilder();
int rowNos = sheet.getLastRowNum();// 得到excel的总记录条数
for (int i = 0; i <= rowNos; i++) {
// if (i == 1) {
// continue;
// }
Row row = sheet.getRow(i);
Row headerRow = sheet.getRow(i);
boolean isBlank = isRowEmpty(row);
String key = "";
if (row != null && !isBlank) {
int columNos = headerRow.getLastCellNum();// 表头总共的列数
Map<String, String> rowList = new LinkedHashMap<>();
for (int j = 0; j < columNos; j++) {
Cell cell = row.getCell(j);
Cell headerCell = headerRow.getCell(j);
if (cell != null) {
if (i == 0) {
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
headerSb.append(cell.getStringCellValue() + ",");
if(j == 15){
break;
}
}else if(i == 1){
if(j > 15){
String flag = "";
if(15 < j && j < 20){
flag ="设计";
key = flag + headerCell.getStringCellValue();
}
if(19 < j && j < 24){
flag ="pre";
key = flag + headerCell.getStringCellValue();
}
if(23 < j && j < 28){
flag ="验证";
key = flag + headerCell.getStringCellValue();
}
headerSb.append(key + ",");
}
} else {
List<String> headList = Arrays.asList(headerSb.toString().split(","));
String field ="";
if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType() && HSSFDateUtil.isCellDateFormatted(cell)) {
Date d = cell.getDateCellValue();
field = fieldConvert(headList.get(j));
rowList.put(field, df.format(d));
} else {
field = fieldConvert(headList.get(j));
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
String stringCellValue = cell.getStringCellValue();
if (StringUtils.isNotBlank(stringCellValue)) {
String replace = stringCellValue.replace("", ",");
rowList.put(field, replace);
} else {
rowList.put(field, "");
}
}
}
} else {
if (i != 0 && i != 1) {
rowList.put(headerCell.getStringCellValue(), "");
}
}
}
if (i != 0 && i != 1) {
dataList.add(rowList);
}
}
}
if (dataList.size() == 0) {
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
throw new JeroBootException("请填写必填字段内容,带*的为必填");
}else{
throw new JeroBootException("Please fill in the required fields marked with *");
}
}else{
//数据转换 JSON.parseObject(JSON.toJSONString(map), MyUser.class)
for (Map<String, String> stringStringMap : dataList) {
DummyInventoryInfoEO dummyInventoryInfoEOTemp = JSON.parseObject(JSON.toJSONString(stringStringMap), DummyInventoryInfoEO.class);
dummyInventoryInfoEOTemp.setCut(dummyInventoryInfoEO.getCut());
datas.add(dummyInventoryInfoEOTemp);
}
}
// 校验头部是否符合模板
String substring = headerSb.toString();
if (substring.endsWith(",") || substring.endsWith("")){
substring = headerSb.substring(0, headerSb.length() - 1);
}
String excelHeader = substring.toString();
if (!title.equals(excelHeader)) {
workbook.close();
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
throw new JeroBootException("读取失败,请严格按照模板文件导入数据");
}else{
throw new JeroBootException("The data fails to be read. Import data strictly according to the template file");
}
}
}
}
workbook.close();
// //树形数据字典
List<SysCategory> categoryList = sysCategoryService.list();
//普通数据字典
List<SysDictItem> dictItemList = sysDictItemServiceImpl.selectItemsAll();
importDatas(datas, categoryList, dictItemList, zipEntryName,saveDirectory,dummyInventoryInfoEO.getCut());
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
}
private void importDatas(List<DummyInventoryInfoEO> dataList,
List<SysCategory> categoryList,
List<SysDictItem> dictItemList,
String zipEntryName,
File saveDirectory,
String cut) {
int i = 2;
List<String> msgList = new ArrayList<>();
String value = "";
boolean flag = true;
//编号验重
List<BussDocumentLibraryEO> bussDocumentLibraryEOList = verifySerialNumber(dataList);
for (DummyInventoryInfoEO dummyInventoryInfoEO : dataList) {
i++;
String errorMsg = "";
if(CutEnum.CN.getValue().equals(cut)){
errorMsg = "" + i + "行:";
}else{
errorMsg = i + " line";
}
//编号
String serialNumber = dummyInventoryInfoEO.getSerialNumber();
//标题
String title = dummyInventoryInfoEO.getTitle();
//子标题
String subtitle = dummyInventoryInfoEO.getSubtitle();
//对应标准
String correspondingStandard = dummyInventoryInfoEO.getCorrespondingStandard();
//状态
String state = dummyInventoryInfoEO.getState();
//认证级别
String attestationRank = dummyInventoryInfoEO.getAttestationRank();
//责任领域
String dutyTerritory = dummyInventoryInfoEO.getDutyTerritory();
//适用范围
String shi4Yong4Fan4Wei2 = dummyInventoryInfoEO.getShi4Yong4Fan4Wei2();
//认证类型
String attestationType = dummyInventoryInfoEO.getAttestationType();
//责任领域
//认证级别
//实施类别
String implementType = dummyInventoryInfoEO.getImplementType();
//适用地区
String region = dummyInventoryInfoEO.getRegion();
//设计交付物类型
String designDeliverableType = dummyInventoryInfoEO.getDesignDeliverableType();
//设计发起人
String designInitiator = dummyInventoryInfoEO.getDesignInitiator();
//设计责任人
String designDuty = dummyInventoryInfoEO.getDesignDuty();
//pre交付物类型
String prehomoDeliverableType = dummyInventoryInfoEO.getPrehomoDeliverableType();
//pre发起人
String prehomoInitiator = dummyInventoryInfoEO.getPrehomoInitiator();
//pre责任人
String prehomoDuty = dummyInventoryInfoEO.getPrehomoDuty();
//确认交付物类型
String verifyDeliverableType = dummyInventoryInfoEO.getVerifyDeliverableType();
//确认发起人
String verifyInitiator = dummyInventoryInfoEO.getVerifyInitiator();
//确认责任人
String verifyDuty = dummyInventoryInfoEO.getVerifyDuty();
//技术领域
String technologyTerritory = dummyInventoryInfoEO.getTechnologyTerritory();
//新车型实施日期
Date xin1Che1Xing2Shi2Shi1Ri4Qi1 = dummyInventoryInfoEO.getXin1Che1Xing2Shi2Shi1Ri4Qi1();
//在产车实施日期
Date implementTime = dummyInventoryInfoEO.getImplementTime();
//文件
String designDeliverableTemplate = dummyInventoryInfoEO.getDesignDeliverableTemplate();
String prehomoDeliverableTemplate = dummyInventoryInfoEO.getPrehomoDeliverableTemplate();
String verifyDeliverableTemplate = dummyInventoryInfoEO.getVerifyDeliverableTemplate();
//编号(输入框必填)
flag = must(dummyInventoryInfoEO, errorMsg, msgList, serialNumber, "编号", "serial number");
//标题(输入框必填)
if(StringUtils.isBlank(title)){
//必填验证
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
errorMsg += "标题为必填项,不能为空";
}else{
errorMsg += "title this parameter is mandatory and cannot be empty";
}
msgList.add(errorMsg);
}
//适用范围(多选不必填)
value = pullMore(dictItemList, dummyInventoryInfoEO, errorMsg, shi4Yong4Fan4Wei2,msgList,"适用范围","scope of application");;
if (StringUtils.isNotBlank(value)) {
dummyInventoryInfoEO.setShi4Yong4Fan4Wei2(value);
}
//状态(单选必填)
flag = must(dummyInventoryInfoEO, errorMsg, msgList, state, "状态", "state");
if(flag){
value = pullSingle(dictItemList, dummyInventoryInfoEO, errorMsg, state, msgList, "状态", "state");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setState(value);
}
}
//对应标准
flag = must(dummyInventoryInfoEO, errorMsg, msgList, correspondingStandard,"对应标准","corresponding standard");
if(flag){
StringBuilder sb = new StringBuilder();
for (String s : correspondingStandard.split(",")) {
List<BussDocumentLibraryEO> collect = bussDocumentLibraryEOList.stream()
.filter(e -> s.equals(e.getSerialNumber())).collect(Collectors.toList());
if(collect.size() == 0){
sb.append(s+",");
}else{
sb.append(collect.get(0).getId()+",");
}
}
if(StringUtils.isNotBlank(sb)){
String substring = sb.substring(0, sb.length() - 1);
dummyInventoryInfoEO.setCorrespondingStandard(substring);
}
}
//实施类别(单选不必填)
value = pullSingle(dictItemList, dummyInventoryInfoEO, errorMsg, implementType,msgList,"实施类别","implementation category");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setImplementType(value);
}
//新车实施日期 xin1Che1Xing2Shi2Shi1Ri4Qi1
flag = dateVerify(dummyInventoryInfoEO, errorMsg, xin1Che1Xing2Shi2Shi1Ri4Qi1,msgList,"新车实施日期","new car implementation date");
if(flag){
dummyInventoryInfoEO.setXin1Che1Xing2Shi2Shi1Ri4Qi1(xin1Che1Xing2Shi2Shi1Ri4Qi1);
}
//在产车实施日期 implementTime
flag = dateVerify(dummyInventoryInfoEO, errorMsg, implementTime,msgList,"在产车实施日期","on the production vehicle implementation date");
if(flag){
dummyInventoryInfoEO.setImplementTime(implementTime);
}
//认证类型(单选不必填)
value = pullSingle(dictItemList, dummyInventoryInfoEO, errorMsg, attestationType,msgList,"认证类型","certification type");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setAttestationType(value);
}
//认证级别(单选必填)
flag = must(dummyInventoryInfoEO, errorMsg, msgList, attestationRank,"认证级别","certification level");
if(flag){
value = pullSingle(dictItemList, dummyInventoryInfoEO, errorMsg, attestationRank,msgList,"认证级别","certification level");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setAttestationRank(value);
}
}
//技术领域
tree(categoryList,msgList, dummyInventoryInfoEO, errorMsg, technologyTerritory);
//责任领域(多选必填)
flag = must(dummyInventoryInfoEO, errorMsg, msgList, dutyTerritory,"责任领域","area of responsibility");
if(flag){
value = pullMore(dictItemList, dummyInventoryInfoEO, errorMsg, dutyTerritory,msgList,"责任领域","area of responsibility");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setDutyTerritory(value);
}
}
//适用地区(多选不必填)
value = pullMore(dictItemList, dummyInventoryInfoEO, errorMsg, region,msgList,"适用地区","zone of application");;
if (StringUtils.isNotBlank(value)) {
dummyInventoryInfoEO.setRegion(value);
}
//备注
//设计
//交付物类型
value = pullSingle(dictItemList, dummyInventoryInfoEO, errorMsg, designDeliverableType,msgList,"交付物类型","type of deliverables");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setDesignDeliverableType(value);
}
//交付物模板
value = template(zipEntryName, dummyInventoryInfoEO, errorMsg, designDeliverableTemplate,msgList,"交付物模板","deliverable template");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setDesignDeliverableTemplate(value);
}
//发起人
value = pullSingle(dictItemList, dummyInventoryInfoEO, errorMsg, designInitiator,msgList,"发起人","initiator");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setDesignInitiator(value);
}
//责任人
value = pullSingle(dictItemList, dummyInventoryInfoEO, errorMsg, designDuty,msgList,"责任人","person liable");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setDesignDuty(value);
}
//pre
//交付物类型
value = pullSingle(dictItemList, dummyInventoryInfoEO, errorMsg, prehomoDeliverableType,msgList,"交付物类型","type of deliverables");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setPrehomoDeliverableType(value);
}
//交付物模板
value = template(zipEntryName, dummyInventoryInfoEO, errorMsg, prehomoDeliverableTemplate,msgList,"交付物模板","deliverable template");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setPrehomoDeliverableTemplate(value);
}
//发起人
value = pullSingle(dictItemList, dummyInventoryInfoEO, errorMsg, prehomoInitiator,msgList,"发起人","initiator");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setPrehomoInitiator(value);
}
//责任人
value = pullSingle(dictItemList, dummyInventoryInfoEO, errorMsg, prehomoDuty,msgList,"责任人","person liable");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setPrehomoDuty(value);
}
//确认
//交付物类型
value = pullSingle(dictItemList, dummyInventoryInfoEO, errorMsg, verifyDeliverableType,msgList,"交付物类型","type of deliverables");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setVerifyDeliverableType(value);
}
//交付物模板
value = template(zipEntryName, dummyInventoryInfoEO, errorMsg, verifyDeliverableTemplate,msgList,"交付物模板","deliverable template");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setVerifyDeliverableTemplate(value);
}
//发起人
value = pullSingle(dictItemList, dummyInventoryInfoEO, errorMsg, verifyInitiator,msgList,"发起人","initiator");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setVerifyInitiator(value);
}
//责任人
value = pullSingle(dictItemList, dummyInventoryInfoEO, errorMsg, verifyDuty,msgList,"责任人","person liable");
if(StringUtils.isNotBlank(value)){
dummyInventoryInfoEO.setVerifyDuty(value);
}
}
if (msgList.size() > 0) {
//返回报错信息
String html = "";
for (String s : msgList) {
html += s + "</br>";
}
FileUnZip.deleteDir(saveDirectory);
throw new JeroBootException(html);
} else {
if (dataList.size() != 0) {
this.saveBatch(dataList);
}
}
}
private List<BussDocumentLibraryEO> verifySerialNumber(List<DummyInventoryInfoEO> dataList) {
List<String> correspondingStandardIdList = dataList.stream().map(DummyInventoryInfoEO::getCorrespondingStandard).collect(Collectors.toList());
List<String> serialNumberList = dataList.stream().map(DummyInventoryInfoEO::getSerialNumber).collect(Collectors.toList());
LambdaQueryWrapper<BussDocumentLibraryEO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(BussDocumentLibraryEO::getId,correspondingStandardIdList);
List<BussDocumentLibraryEO> bussDocumentLibraryEOList = iBussDocumentLibraryEOService.list(wrapper);
LambdaQueryWrapper<DummyInventoryInfoEO> wrapperTemp = new LambdaQueryWrapper<>();
wrapperTemp.in(DummyInventoryInfoEO::getSerialNumber,serialNumberList);
List<DummyInventoryInfoEO> dummyInventoryInfoEOList = this.list(wrapperTemp);
if(dummyInventoryInfoEOList.size() > 0){
if(CutEnum.CN.getValue().equals(dataList.get(0).getCut())){
throw new JeroBootException(StringUtils.join(serialNumberList,",")+"已存在,不能重复添加");
}else{
throw new JeroBootException(StringUtils.join(serialNumberList,",")+" already exists and cannot be added again");
}
}
return bussDocumentLibraryEOList;
}
private String template(String zipEntryName, DummyInventoryInfoEO dummyInventoryInfoEO,
String errorMsg, String designDeliverableTemplate,List<String> msgList,
String nameCn,String nameEn) {
String value = "";
if (StringUtils.isNotBlank(designDeliverableTemplate)) {
StringBuilder sb = new StringBuilder();
for (String fileName : designDeliverableTemplate.split(",")) {
List<File> nowFileList = FileUnZip.readFileByFilename(zipEntryName, fileName);
if (nowFileList.size() == 0) {
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
errorMsg += "压缩包中没有" + fileName + "文件; ";
}else{
errorMsg += " Not in the zip package" + fileName + "file; ";
}
msgList.add(errorMsg);
} else {
try {
FileInputStream input = new FileInputStream(nowFileList.get(0));
MultipartFile multipartFile =
new MockMultipartFile(nowFileList.get(0).getName(), nowFileList.get(0).getName(), "text/plain", input);
//文件存入文件表
OSSFile ossFile = iOSSFileService.uploadLocal(multipartFile, "", null,null);
if (ObjectUtils.isNotEmpty(ossFile)) {
sb.append(ossFile.getId() + ",");
}
} catch (IOException e) {
log.error("虚拟清单导入"+e.getMessage());
}
}
}
if (StringUtils.isNotBlank(sb)) {
value = sb.substring(0, sb.length() - 1);
}
}
return value;
}
private boolean dateVerify(DummyInventoryInfoEO dummyInventoryInfoEO, String errorMsg,
Date field,List<String> msgList,
String nameCn,String nameEn) {
//判断格式是否正确
boolean flag = true;
if(ObjectUtils.isNotEmpty(field)){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String format = sdf.format(field);
if (!DateUtils.isValidDate(format)) {
flag = false;
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
errorMsg += nameCn + "格式不正确,正确格式如:yyyy/m/d、yyyy-MM-dd、yyyy年MM月dd日";
}else{
errorMsg += nameEn + " Incorrect format correct format is:yyyy/m/d、yyyy-MM-dd、yyyy年MM月dd日";
}
msgList.add(errorMsg);
}
}
return flag;
}
private void tree(List<SysCategory> categoryList, List<String> msgList, DummyInventoryInfoEO dummyInventoryInfoEO, String errorMsg, String technologyTerritory) {
if(StringUtils.isNotBlank(technologyTerritory)){
if(technologyTerritory.contains(",")){
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
errorMsg += "技术领域" + " 为单选项";
}else{
errorMsg += " technical field" + " is multiple Choice";
}
msgList.add(errorMsg);
}else{
List<SysCategory> collect = categoryList.stream().filter(e -> technologyTerritory.equals(e.getName())).collect(Collectors.toList());
if(collect.size() == 0){
if (CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())) {
errorMsg += "技术领域中的" + technologyTerritory + "与数据字典不匹配";
} else {
errorMsg += " In the field of technology " + technologyTerritory + " does not match the data dictionary";
}
msgList.add(errorMsg);
}else{
dummyInventoryInfoEO.setTechnologyTerritory(collect.get(0).getId());
}
}
}
}
private String pullSingle(List<SysDictItem> dictItemList, DummyInventoryInfoEO dummyInventoryInfoEO,
String errorMsg, String value,List<String> msgList,
String nameCn,String nameEn) {
if(StringUtils.isNotBlank(value)){
if(value.contains(",")){
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
errorMsg += nameCn + " 为单选项";
}else{
errorMsg += nameEn + " Is multiple Choice";
}
msgList.add(errorMsg);
}else{
List<SysDictItem> collect = dictItemList.stream().filter(e -> value.equals(e.getItemText())).collect(Collectors.toList());
if (collect.size() == 0) {
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
errorMsg += nameCn + "中的" + value + "与数据字典不匹配";
}else{
errorMsg += nameEn +" "+ value + " does not match the data dictionary";
}
msgList.add(errorMsg);
}else{
return collect.get(0).getItemValue();
}
}
}
return null;
}
private String pullMore(List<SysDictItem> dictItemList, DummyInventoryInfoEO dummyInventoryInfoEO,
String errorMsg, String value,List<String> msgList,
String nameCn,String nameEn) {
List<String> valueList = new ArrayList<>();
if (StringUtils.isNotBlank(value)) {
List<String> list = Arrays.asList(value.split(","));
List<SysDictItem> collect = dictItemList.stream().filter(e -> list.contains(e.getItemText())).collect(Collectors.toList());
if(list.size() == collect.size()){
valueList = collect.stream().map(SysDictItem::getItemValue).collect(Collectors.toList());
}else{
//数据中有与数据字典不匹配的值
List<String> finalValueList = valueList;
List<String> diffList = list.stream().filter(e -> !finalValueList.contains(e)).collect(Collectors.toList());
if (CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())) {
errorMsg += nameCn + "中的" + StringUtils.join(diffList,",") + "与数据字典不匹配";
} else {
errorMsg += nameEn + " " + StringUtils.join(diffList,",") + " does not match the data dictionary";
}
msgList.add(errorMsg);
}
}
return StringUtils.join(valueList,",");
}
private boolean must(DummyInventoryInfoEO dummyInventoryInfoEO, String errorMsg,
List<String> msgList, String serialNumber,String nameCn,String nameEn) {
int errorCount = 0;
if(StringUtils.isBlank(serialNumber)){
errorCount ++;
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
errorMsg += "编号为必填项,不能为空";
}else{
errorMsg += "serial number this parameter is mandatory and cannot be empty";
}
msgList.add(errorMsg);
}
if(errorCount == 0){
return true;
}else{
return false;
}
}
private String fieldConvert(String field){
if (field == null) return null;
switch (field) {
case "编号": return "serialNumber";
case "标题": return "title";
case "子标题": return "subtitle";
case "适用范围": return "shi4Yong4Fan4Wei2";
case "状态": return "state";
case "对应标准": return "correspondingStandard";
case "实施类别": return "implementType";
case "新车实施日期": return "xin1Che1Xing2Shi2Shi1Ri4Qi1";
case "在产车实施日期": return "implementTime";
case "WVTA ID": return "wvtaId";
case "认证类型": return "attestationType";
case "认证级别": return "attestationRank";
case "技术领域": return "technologyTerritory";
case "责任领域": return "dutyTerritory";
case "适用地区": return "region";
case "备注": return "remark";
case "设计交付物类型": return "designDeliverableType";
case "设计交付物模板": return "designDeliverableTemplate";
case "设计发起人": return "designInitiator";
case "设计责任人": return "designDuty";
case "pre交付物类型": return "prehomoDeliverableType";
case "pre交付物模板": return "prehomoDeliverableTemplate";
case "pre发起人": return "prehomoInitiator";
case "pre责任人": return "prehomoDuty";
case "验证交付物类型": return "verifyDeliverableType";
case "验证交付物模板": return "verifyDeliverableTemplate";
case "验证发起人": return "verifyInitiator";
case "验证责任人": return "verifyDuty";
default: return null;
}
}
//判断row是否为空 空返回true
public boolean isRowEmpty(Row row) {
if (null == row) {
return true;
}
int firstCellNum = row.getFirstCellNum(); //第一个列位置
int lastCellNum = row.getLastCellNum(); //最后一列位置
int nullCellNum = 0; //空列数量
for (int c = firstCellNum; c < lastCellNum; c++) {
Cell cell = row.getCell(c);
if (null == cell) {
nullCellNum++;
continue;
}
String value = "";
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
//如果为时间格式的内容
value = String.valueOf(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串
value = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
value = cell.getBooleanCellValue() + "";
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
value = cell.getCellFormula() + "";
break;
default:
break;
}
if (org.apache.commons.lang.StringUtils.isEmpty(value)) {
nullCellNum++;
}
}
//所有列都为空
if (nullCellNum == (lastCellNum - firstCellNum)) {
return true;
}
return false;
}
}
@@ -145,10 +145,8 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
return result;
}
public void disposeData(List<ProjectLibraryBase> records){
for (ProjectLibraryBase projectLibraryBase:records) {
public void disposeData(List<ProjectLibraryBase> records) {
for (ProjectLibraryBase projectLibraryBase : records) {
List<SysUser> sysUsers = new ArrayList<>();
//认证工程师多个id查询
if (StringUtils.isNotEmpty(projectLibraryBase.getCertificationEngineer())) {
@@ -163,20 +161,20 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
if (CollectionUtils.isNotEmpty(sysUsers)) {
String certificationEngineerId = projectLibraryBase.getCertificationEngineer();
String certificationEngineerName = null;
StringBuilder certificationName = new StringBuilder();
for (String data : certificationEngineerIdList) {
if (StringUtils.isNotEmpty(certificationEngineerId)) {
certificationEngineerName = sysUsers.stream().filter(e -> data.equals(e.getId()))
.map(sysUser -> sysUser.getUsername()).collect(Collectors.joining(","));
}
certificationName.append(certificationEngineerName).append(" ");
}
projectLibraryBase.setCertificationEngineerName(certificationEngineerName);
projectLibraryBase.setCertificationEngineerName(certificationName.toString());
}
}
}
}
}
@@ -157,14 +157,15 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
if(CollectionUtils.isNotEmpty(lawEngineerUsers)) {
String lawEngineerId = projectRelatedPersonnel.getLawEngineer();
String lawEngineerName = null;
StringBuilder lawName = new StringBuilder();
for (String data : lawEngineerIdList) {
if (StringUtils.isNotEmpty(lawEngineerId)) {
lawEngineerName = lawEngineerUsers.stream().filter(e -> data.equals(e.getId()))
.map(sysUser -> sysUser.getUsername()).collect(Collectors.joining(","));
}
lawName.append(lawEngineerName).append(" ");
}
projectRelatedPersonnel.setLawEngineerName(lawEngineerName);
projectRelatedPersonnel.setLawEngineerName(lawName.toString());
}
}
@@ -181,14 +182,16 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
if (CollectionUtils.isNotEmpty(engineeringInterfacePersonUsers)) {
String engineeringInterfacePersonId = projectRelatedPersonnel.getEngineeringInterfacePerson();
String engineeringInterfacePersonName = null;
StringBuilder engineeringName = new StringBuilder();
for (String data : engineeringInterfacePersonIdList) {
if (StringUtils.isNotEmpty(engineeringInterfacePersonId)) {
engineeringInterfacePersonName = engineeringInterfacePersonUsers.stream().filter(e -> data.equals(e.getId()))
.map(sysUser -> sysUser.getUsername()).collect(Collectors.joining(","));
}
engineeringName.append(engineeringInterfacePersonName).append(" ");
}
projectRelatedPersonnel.setEngineeringInterfacePersonName(engineeringInterfacePersonName);
projectRelatedPersonnel.setEngineeringInterfacePersonName(engineeringName.toString());
}
}
@@ -205,14 +208,15 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
if(CollectionUtils.isNotEmpty(certificationEngineerUsers)) {
String certificationEngineerId = projectRelatedPersonnel.getCertificationEngineer();
String certificationEngineerName = null;
StringBuilder certificationName = new StringBuilder();
for (String data : certificationEngineerIdList) {
if (StringUtils.isNotEmpty(certificationEngineerId)) {
certificationEngineerName = certificationEngineerUsers.stream().filter(e -> data.equals(e.getId()))
.map(sysUser -> sysUser.getUsername()).collect(Collectors.joining(","));
}
certificationName.append(certificationEngineerName).append(" ");
}
projectRelatedPersonnel.setCertificationEngineerName(certificationEngineerName);
projectRelatedPersonnel.setCertificationEngineerName(certificationName.toString());
}
}