Merge remote-tracking branch 'origin/feature/DM/nflg-bom' into feature/DM/nflg-bom

This commit is contained in:
大米 2023-12-14 19:20:07 +08:00
commit 350c68897b
4 changed files with 571 additions and 51 deletions

View File

@ -20,6 +20,8 @@ public class ImportExcelField{
private String cellThird;
@ExcelProperty(value="",index = 3)
private String cellRemark;

View File

@ -30,7 +30,11 @@ public class ImportExcelHelper<T> {
ImportExcelListener<T> listener = new ImportExcelListener<>(headRowNumber);
try {
EasyExcel.read(inputStream, clazz, listener).extraRead(CellExtraTypeEnum.MERGE).sheet(sheetNo).headRowNumber(headRowNumber).doRead();
EasyExcel.read(inputStream, clazz, listener)
.extraRead(CellExtraTypeEnum.MERGE)
.sheet(sheetNo)
.headRowNumber(headRowNumber)
.doRead();
} catch (Exception e) {
LOGGER.error(e.getMessage());
}

View File

@ -0,0 +1,415 @@
//package com.nflg.product.bomnew.service.aggreg;
//
//import cn.hutool.core.collection.CollectionUtil;
//import cn.hutool.core.convert.Convert;
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.lang.TypeReference;
//import cn.hutool.core.util.StrUtil;
//import cn.hutool.extra.spring.SpringUtil;
//import com.alibaba.fastjson.JSON;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.nflg.product.base.core.conmon.util.SessionUtil;
//import com.nflg.product.base.core.exception.NflgBusinessException;
//import com.nflg.product.bomnew.constant.OptionalBomConstant;
//import com.nflg.product.bomnew.excel.ImportExcelField;
//import com.nflg.product.bomnew.excel.ImportExcelHelper;
//import com.nflg.product.bomnew.pojo.dto.OptionalEbomImportChildDTO;
//import com.nflg.product.bomnew.pojo.dto.OptionalEbomImportDTO;
//import com.nflg.product.bomnew.pojo.dto.OptionalEbomImportExcelDTO;
//import com.nflg.product.bomnew.pojo.dto.OptionalEbomMainDTO;
//import com.nflg.product.bomnew.pojo.entity.OptionalEbomImportChildEntity;
//import com.nflg.product.bomnew.pojo.entity.OptionalEbomImportEntity;
//import com.nflg.product.bomnew.pojo.entity.OptionalEbomMainEntity;
//import com.nflg.product.bomnew.service.MaterialMainService;
//import com.nflg.product.bomnew.service.OptionalEbomImportChildService;
//import com.nflg.product.bomnew.service.OptionalEbomImportService;
//import com.nflg.product.bomnew.service.OptionalEbomMainService;
//import nflg.product.common.constant.STATE;
//import org.apache.commons.lang.StringUtils;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import javax.annotation.Resource;
//import java.io.InputStream;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.concurrent.atomic.AtomicInteger;
//import java.util.stream.Collectors;
//
///**
// * 导入移动破
// */
//
//public class OldOptionalExcelService {
//
// @Resource
// private OptionalEbomMainService optionalEbomMainService;
//
// @Resource
// private OptionalEbomImportChildService optionalEbomImportChildService;
// @Resource
// private OptionalEbomImportService optionalEbomImportService;
//
// private void parsecColumn3(List<ImportExcelField> v1, OptionalEbomImportDTO optionalEbomImportLevel2Dto) {
// AtomicInteger partTypeCount = new AtomicInteger();
//
// //解析第三列
// v1.forEach(item -> {
// //OCE-NFS780DP-037B-OPT加装回料输送机可选
// OptionalEbomImportChildDTO levelDto3 = new OptionalEbomImportChildDTO();
//
// if (CollectionUtil.isEmpty(optionalEbomImportLevel2Dto.getChild())) {
// optionalEbomImportLevel2Dto.setChild(new ArrayList<OptionalEbomImportChildDTO>());
// }
//
// optionalEbomImportLevel2Dto.getChild().add(levelDto3);
// String cloumn3=item.getCellThird().trim();
// String materialName;
// if(cloumn3.contains("")) {
// String[] optionName1 = item.getCellThird().trim().split("");
// materialName = optionName1[1];
// levelDto3.setDrawingNo(optionName1[0]);
//
// }else{
// materialName=cloumn3;
// }
// // levelDto3.setMaterialName(optionName1[1]);
// levelDto3.setLineNo(item.getLineNo());
//
// levelDto3.setPartType(OptionalBomConstant.PartTypeEnum.PART_TYPE_RADIO.getValue());
// //标配 可选
// levelDto3.setTag(materialName.contains(""));
// if (levelDto3.getTag()) {
// levelDto3.setMaterialDesc(levelDto3.getMaterialName());
// }
//
// if (materialName.contains("标配")) {
// levelDto3.setChooseStatus(OptionalBomConstant.ChooseStatusEnum.CHOOSE_STATUS_YES.getValue());
// partTypeCount.getAndIncrement();
// //包含多个标配
// if (partTypeCount.get() > 1) {
// levelDto3.setError(OptionalBomConstant.ExcelErrorTagEnum.REPEAT.getValue());
// optionalEbomImportLevel2Dto.setError(true);
// }
// } else {
// levelDto3.setChooseStatus(OptionalBomConstant.ChooseStatusEnum.CHOOSE_STATUS_NO.getValue());
// }
//
// levelDto3.setMaterialName(materialName.replace("(标配)", "").replace("(可选)", ""));
// levelDto3.setMaterialDesc(levelDto3.getMaterialDesc());
//
// });
// }
//
// private void parsecColumn2(Map<String, List<ImportExcelField>> listMap, OptionalEbomImportDTO optionalEbomImportDTO) {
//
// listMap.forEach((k1, v1) -> {
// OptionalEbomImportDTO optionalEbomImportLevel2Dto = new OptionalEbomImportDTO();
// String[] optionName = k1.trim().split(" ");
//
// optionalEbomImportLevel2Dto.setOptionDrawingNo(optionName[0]);
// optionalEbomImportLevel2Dto.setOptionName(optionName[1]);
// if (CollectionUtil.isEmpty(optionalEbomImportDTO.getChild())) {
// optionalEbomImportDTO.setChild(new ArrayList<OptionalEbomImportDTO>());
// }
// optionalEbomImportDTO.getChild().add(optionalEbomImportLevel2Dto);
// parsecColumn3(v1, optionalEbomImportLevel2Dto);
// });
//
//
// }
//
// private OptionalEbomImportExcelDTO parsecColumn1(List<ImportExcelField> list) {
// OptionalEbomImportExcelDTO optionalEbomInportExcelDTO = new OptionalEbomImportExcelDTO();
// int row = 1;
// ImportExcelField device = list.get(0);
// //设备信息
// String[] deviceInfo = device.getCellFirst().trim().split(" ");
// optionalEbomInportExcelDTO.setDeviceInfo(new OptionalEbomMainDTO());
// optionalEbomInportExcelDTO.getDeviceInfo().setDeviceNo(deviceInfo[0]);
// optionalEbomInportExcelDTO.getDeviceInfo().setDeviceName(deviceInfo[1]);
//
// String name = "";
// //相同类
// List<ImportExcelField> classList = new ArrayList<>();
//
// for (; row < list.size(); row++) {
// ImportExcelField rowField = list.get(row);
// //相同列为根
// if ((row==list.size()-1)||(rowField.getCellFirst().trim().equals(rowField.getCellSecond().trim())
// && rowField.getCellSecond().trim().equals(rowField.getCellThird().trim()))) {
//
//
// if((row==list.size()-1)){
// classList.add(rowField);
// }
//
//
// if (CollectionUtil.isNotEmpty(classList)) {
// String finalName = name;
// Map<String, Map<String, List<ImportExcelField>>> group1 = classList.parallelStream().collect(Collectors.groupingBy(ImportExcelField::getCellFirst, Collectors.groupingBy(ImportExcelField::getCellSecond)));
// //第一列
// group1.forEach((k, v) -> {
// OptionalEbomImportDTO optionalEbomImportDTO = new OptionalEbomImportDTO();
// optionalEbomImportDTO.setOptionName(finalName);
// optionalEbomImportDTO.setOptionDrawingNo(k);
// if (CollectionUtil.isEmpty(optionalEbomInportExcelDTO.getOptionInfo())) {
// optionalEbomInportExcelDTO.setOptionInfo(new ArrayList<OptionalEbomImportDTO>());
// }
// optionalEbomInportExcelDTO.getOptionInfo().add(optionalEbomImportDTO);
//
// parsecColumn2(v, optionalEbomImportDTO);
// });
// classList.clear();
//
// }
// if((row!=list.size()-1)) {
// name = rowField.getCellFirst();
// }
//
// } else {
// classList.add(rowField);
// }
// }
//
// //最后一项处理
//
//
//
//
// return optionalEbomInportExcelDTO;
//
// }
//
//
// public Boolean importExcel(InputStream inputStream) throws NflgBusinessException {
// if (inputStream == null) {
// new NflgBusinessException(STATE.Error, "文件流内容空");
// }
// //解析excel
// ImportExcelHelper<ImportExcelField> helper = new ImportExcelHelper<>();
// List<ImportExcelField> list = helper.getList(inputStream, ImportExcelField.class, 0, 0);
// OptionalEbomImportExcelDTO optionalEbomInportExcelDTO = null;
// if (CollectionUtil.isNotEmpty(list)) {
// optionalEbomInportExcelDTO = parsecColumn1(list);
// }
//
// if (optionalEbomInportExcelDTO != null) {
// optionalEbomInportExcelDTO.getOptionInfo().forEach(item -> {
// List<OptionalEbomImportDTO> listParent = item.getChild();
// for (OptionalEbomImportDTO item1 :
// listParent) {
// List<OptionalEbomImportChildDTO> listChild = item1.getChild();
// SpringUtil.getBean(MaterialMainService.class).initMaterialForDrawdingNoImmul(listChild, OptionalEbomImportChildDTO::getDrawingNo, OptionalEbomImportChildDTO::setMaterialNo, OptionalEbomImportChildDTO::setMaterialDesc);
//
// //构建测试数据 无物料号 用图号代替
// for (OptionalEbomImportChildDTO childDTO : listChild) {
// if (!childDTO.getTag() && StringUtils.isEmpty(childDTO.getMaterialNo())) {
// // childDTO.setMaterialNo(childDTO.getDrawingNo());
// childDTO.setError(childDTO.getError() | OptionalBomConstant.ExcelErrorTagEnum.MATERIA_NO_UNKOWN.getValue());
// item1.setError(true);
// }
// }
//
//
// }
// });
// System.out.println(JSON.toJSON(optionalEbomInportExcelDTO));
//
// }
//
// //检查是否满足条件 除了 物料号不能为空
// String hintMsg = isValiData(optionalEbomInportExcelDTO.getOptionInfo());
// if (StrUtil.isNotEmpty(hintMsg)) {
// throw new NflgBusinessException(STATE.Error, hintMsg);
// }
//
//
// //保存db
// return batchExcelToRepertory(optionalEbomInportExcelDTO);
// }
//
//
// private String isValiData(List<OptionalEbomImportDTO> excelList) {
//
// StringBuffer title = new StringBuffer();
// excelList.forEach(item -> {
// List<OptionalEbomImportDTO> listParent = item.getChild();
// for (OptionalEbomImportDTO item1 : listParent) {
// if (item1.isError()) {
//
// List<OptionalEbomImportChildDTO> listChild = item1.getChild();
// for (OptionalEbomImportChildDTO item2 : listChild) {
// if (item2.getError() == OptionalBomConstant.ExcelErrorTagEnum.REPEAT.getValue()) {
// title.append(String.format("第%d行 %s\n", item2.getLineNo(), OptionalBomConstant.ExcelErrorTagEnum.REPEAT.getDescription()));
// } else if (item2.getError() == OptionalBomConstant.ExcelErrorTagEnum.MATERIA_NO_UNKOWN.getValue()) {
// title.append(String.format("第%d行 %s\n", item2.getLineNo(), OptionalBomConstant.ExcelErrorTagEnum.MATERIA_NO_UNKOWN.getDescription()));
// } else if (item2.getError() == OptionalBomConstant.ExcelErrorTagEnum.ALL.getValue()) {
// title.append(String.format("第%d行 %s\n", item2.getLineNo(), OptionalBomConstant.ExcelErrorTagEnum.ALL.getDescription()));
// }
//
// }
//
//
// }
// }
// });
//
// return title.toString();
// }
//
//
// @Transactional(rollbackFor = Exception.class)
// public Boolean batchExcelToRepertory(OptionalEbomImportExcelDTO ebomImportExcelDTO) {
//
// OptionalEbomMainEntity optionalEbomMainEntity = Convert.convert(new TypeReference<OptionalEbomMainEntity>() {
// }, ebomImportExcelDTO.getDeviceInfo());
//
//
// QueryWrapper<OptionalEbomMainEntity> queryWrapper = new QueryWrapper();
// queryWrapper.lambda().eq(OptionalEbomMainEntity::getDeviceNo, optionalEbomMainEntity.getDeviceNo());
//
// OptionalEbomMainEntity queryDevice = optionalEbomMainService.getOne(queryWrapper);
//// if (ObjectUtil.isNotEmpty(queryDevice)) {
//// throw new NflgBusinessException(STATE.Error, String.format("已存在设备数据%s", optionalEbomMainEntity.getDeviceNo()));
//// }
//
// if (queryDevice == null) {
// optionalEbomMainEntity.setCreatedBy(SessionUtil.getUserCode());
// optionalEbomMainEntity.setRealName(SessionUtil.getRealName());
// optionalEbomMainEntity.setDeptName(SessionUtil.getDepartName());
//
// optionalEbomMainEntity.setCreatedTime(DateUtil.now());
// optionalEbomMainEntity.setDeptRowId(SessionUtil.getPartRowId());
// optionalEbomMainService.save(optionalEbomMainEntity);
//
//
// }else{
// optionalEbomMainEntity=queryDevice;
//
// }
//
// if (optionalEbomMainEntity == null || optionalEbomMainEntity.getRowId() == null) {
// throw new NflgBusinessException(STATE.Error, "保存设备数据失败");
// }
//
//
// List<OptionalEbomImportDTO> parentOptionList = ebomImportExcelDTO.getOptionInfo();
//
// //保存选项
// for (OptionalEbomImportDTO parentOption : parentOptionList) {
//
//
// QueryWrapper<OptionalEbomImportEntity> queryWrapper1 = new QueryWrapper<>();
// queryWrapper1.lambda().eq(OptionalEbomImportEntity::getRootRowId, optionalEbomMainEntity.getRowId());
// queryWrapper1.lambda().eq(OptionalEbomImportEntity::getOptionDrawingNo, parentOption.getOptionDrawingNo());
//
// OptionalEbomImportEntity parentOptionEntity = optionalEbomImportService.getOne(queryWrapper1);
// if (parentOptionEntity == null) {
// parentOptionEntity = Convert.convert(new TypeReference<OptionalEbomImportEntity>() {
// }, parentOption);
// parentOptionEntity.setRootRowId(optionalEbomMainEntity.getRowId());
// parentOptionEntity.setCreatedTime(DateUtil.now());
// parentOptionEntity.setCreatedBy(SessionUtil.getUserCode());
// optionalEbomImportService.save(parentOptionEntity);
// }
//
// if (parentOptionEntity == null || parentOptionEntity.getRowId() == null) {
// throw new NflgBusinessException(STATE.Error, "保存选项数据失败");
// }
//
// List<OptionalEbomImportDTO> childOptionList = parentOption.getChild();
//
// for (OptionalEbomImportDTO childOption : childOptionList) {
//
// QueryWrapper<OptionalEbomImportEntity> queryWrapper2 = new QueryWrapper<>();
// queryWrapper2.lambda().eq(OptionalEbomImportEntity::getRootRowId, optionalEbomMainEntity.getRowId());
// queryWrapper2.lambda().eq(OptionalEbomImportEntity::getOptionDrawingNo, childOption.getOptionDrawingNo());
//
// OptionalEbomImportEntity childOptionEntity = optionalEbomImportService.getOne(queryWrapper2);
// if (childOptionEntity == null) {
// childOptionEntity = Convert.convert(new TypeReference<OptionalEbomImportEntity>() {
// }, childOption);
// childOptionEntity.setCreatedBy(SessionUtil.getUserCode());
// childOptionEntity.setRootRowId(optionalEbomMainEntity.getRowId());
// childOptionEntity.setParentRowId(parentOptionEntity.getRowId());
//
// childOptionEntity.setCreatedTime(DateUtil.now());
// optionalEbomImportService.save(childOptionEntity);
// }
//// else{
//// childOptionEntity.setParentRowId(parentOptionEntity.getRowId());
////
//// optionalEbomImportService.updateById(childOptionEntity);
//// }
//
//
// if (childOptionEntity == null || childOptionEntity.getRowId() == null) {
//
// throw new NflgBusinessException(STATE.Error, "保存选项数据失败");
// }
//
//
// List<OptionalEbomImportChildDTO> optionImportChildDtoList = childOption.getChild();
// List<OptionalEbomImportChildEntity> optionImportChildEntityList = Convert.convert(new TypeReference<List<OptionalEbomImportChildEntity>>() {
// }, optionImportChildDtoList);
//
//
// if (CollectionUtil.isNotEmpty(optionImportChildEntityList)) {
// for (OptionalEbomImportChildEntity item :
// optionImportChildEntityList) {
//
//
// item.setSource(OptionalBomConstant.SourceTypeEnum.SOURCE_EXCEL.getValue());
//
// item.setRootRowId(optionalEbomMainEntity.getRowId());
// item.setParentRowId(childOptionEntity.getRowId());
//
// optionalEbomImportChildService.insertOptionAction(item);
//
//// QueryWrapper<OptionalEbomImportChildEntity> queryWrapper3 = new QueryWrapper<>();
//// // 同一个机型下不可以存在相同的物料信息物料编号如果是的情况需同一个机型+同一个选项来做唯一判断
//// if (StrUtil.isEmpty(item.getMaterialNo()) && item.getMaterialName().equals("")) {
////
//// queryWrapper3.lambda().eq(OptionalEbomImportChildEntity::getRootRowId, optionalEbomMainEntity.getRowId());
//// queryWrapper3.lambda().eq(OptionalEbomImportChildEntity::getParentRowId, childOptionEntity.getParentRowId());
//// queryWrapper3.lambda().eq(OptionalEbomImportChildEntity::getIsDel, 0);
////
//// } else {
//// queryWrapper3.lambda().eq(OptionalEbomImportChildEntity::getRootRowId, optionalEbomMainEntity.getRowId());
//// queryWrapper3.lambda().eq(OptionalEbomImportChildEntity::getMaterialNo, item.getMaterialNo());
//// queryWrapper3.lambda().eq(OptionalEbomImportChildEntity::getIsDel, 0);
//// }
////
////
//// OptionalEbomImportChildEntity childEntity = optionalEbomImportChildService.getOne(queryWrapper3);
//// if (childEntity == null) {
//// item.setParentRowId(childOptionEntity.getRowId());
//// item.setRootRowId(optionalEbomMainEntity.getRowId());
//// item.setCreatedBy(SessionUtil.getUserCode());
//// // item.setCreatedTime(new Date());
//// // item.setUpdatedTime(new Date());
//// optionalEbomImportChildService.save(item);
//// } else {
//// item.setRowId(childEntity.getRowId());
//// optionalEbomImportChildService.updateById(item);
////
//// }
//
// }
// }
//
// }
//
// }
//
// return true;
//
// }
//
//
//}
//
//
//

View File

@ -52,9 +52,21 @@ public class OptionalExcelService {
private void parsecColumn3(List<ImportExcelField> v1, OptionalEbomImportDTO optionalEbomImportLevel2Dto) {
AtomicInteger partTypeCount = new AtomicInteger();
boolean tag=false;
//解析物料
for (ImportExcelField item:
v1) {
if (StrUtil.isEmpty(item.getCellSecond())) {
throw new NflgBusinessException(STATE.Error, StrUtil.format("第{}行, {} {}出现空物料数据", item.getLineNo(), optionalEbomImportLevel2Dto.getOptionName(), optionalEbomImportLevel2Dto.getOptionDrawingNo()));
}
if (StrUtil.isEmpty(item.getCellThird())) {
throw new NflgBusinessException(STATE.Error, StrUtil.format("第{}行,物料信息{}未填写标配/可选", item.getLineNo(), item.getCellSecond()));
}
//解析第三列
v1.forEach(item -> {
//OCE-NFS780DP-037B-OPT加装回料输送机可选
OptionalEbomImportChildDTO levelDto3 = new OptionalEbomImportChildDTO();
@ -62,58 +74,102 @@ public class OptionalExcelService {
optionalEbomImportLevel2Dto.setChild(new ArrayList<OptionalEbomImportChildDTO>());
}
optionalEbomImportLevel2Dto.getChild().add(levelDto3);
String cloumn3=item.getCellThird().trim();
String materialName;
if(cloumn3.contains("")) {
String[] optionName1 = item.getCellThird().trim().split("");
materialName = optionName1[1];
levelDto3.setDrawingNo(optionName1[0]);
}else{
materialName=cloumn3;
String materialDesc = item.getCellSecond().trim();
//替换统一格式
materialDesc = materialDesc.replace(":", "");
if (!materialDesc.contains("")) {
throw new NflgBusinessException(STATE.Error, StrUtil.format("第{}行,格式错误,物料数据未使用:或:分隔,{}", item.getLineNo(), item.getCellSecond()));
}
// levelDto3.setMaterialName(optionName1[1]);
levelDto3.setLineNo(item.getLineNo());
levelDto3.setDrawingNo(StrUtil.sub(materialDesc, 0, materialDesc.indexOf("")));
String materialName = StrUtil.subSuf(materialDesc, materialDesc.indexOf("") + 1);
// if (StrUtil.isEmpty(levelDto3.getDrawingNo())) {
// throw new NflgBusinessException(STATE.Error, StrUtil.format("第{}行,格式错误,解析后不包含物料图号", item.getLineNo(), item.getCellSecond()));
// }
if (StrUtil.isEmpty(materialName)) {
throw new NflgBusinessException(STATE.Error, StrUtil.format("第{}行,格式错误,解析后不包含物料名", item.getLineNo(), item.getCellSecond()));
}
levelDto3.setMaterialName(materialName);
levelDto3.setLineNo(item.getLineNo());
levelDto3.setPartType(OptionalBomConstant.PartTypeEnum.PART_TYPE_RADIO.getValue());
//标配 可选
levelDto3.setTag(materialName.contains(""));
if (levelDto3.getTag()) {
levelDto3.setMaterialDesc(levelDto3.getMaterialName());
}
levelDto3.setMaterialDesc(materialDesc);
//多个无
if (tag && levelDto3.getTag()) {
throw new NflgBusinessException(STATE.Error, StrUtil.format("第{}行,{} {} 包含多个无", item.getLineNo(),optionalEbomImportLevel2Dto.getOptionName(), optionalEbomImportLevel2Dto.getOptionDrawingNo()));
if (materialName.contains("标配")) {
}
tag = levelDto3.getTag();
// if (levelDto3.getTag()) {
// levelDto3.setMaterialDesc(materialName);
// }
if (item.getCellThird().contains("标配")) {
levelDto3.setChooseStatus(OptionalBomConstant.ChooseStatusEnum.CHOOSE_STATUS_YES.getValue());
partTypeCount.getAndIncrement();
//包含多个标配
if (partTypeCount.get() > 1) {
levelDto3.setError(OptionalBomConstant.ExcelErrorTagEnum.REPEAT.getValue());
optionalEbomImportLevel2Dto.setError(true);
throw new NflgBusinessException(STATE.Error, StrUtil.format("第{}行,{} {} 包含多个标配", item.getLineNo(),optionalEbomImportLevel2Dto.getOptionName(), optionalEbomImportLevel2Dto.getOptionDrawingNo()));
}
} else {
levelDto3.setChooseStatus(OptionalBomConstant.ChooseStatusEnum.CHOOSE_STATUS_NO.getValue());
}
levelDto3.setMaterialName(materialName.replace("(标配)", "").replace("(可选)", ""));
levelDto3.setMaterialDesc(levelDto3.getMaterialDesc());
levelDto3.setRemak(item.getCellRemark());
optionalEbomImportLevel2Dto.getChild().add(levelDto3);
// levelDto3.setMaterialName(materialName.replace("(标配)", "").replace("(可选)", ""));
// levelDto3.setMaterialDesc(levelDto3.getMaterialDesc());
});
}
}
private void parsecColumn2(Map<String, List<ImportExcelField>> listMap, OptionalEbomImportDTO optionalEbomImportDTO) {
listMap.forEach((k1, v1) -> {
OptionalEbomImportDTO optionalEbomImportLevel2Dto = new OptionalEbomImportDTO();
String[] optionName = k1.trim().split(" ");
//子项
listMap.forEach((k, v) -> {
if(CollectionUtil.isEmpty(v)){
throw new NflgBusinessException(STATE.Error,StrUtil.format("{} {} 下无物料数据",optionalEbomImportDTO.getOptionDrawingNo(),optionalEbomImportDTO.getOptionName()));
}
int optionChildPos=k.indexOf(" ");
if(optionChildPos<0){
throw new NflgBusinessException(STATE.Error,StrUtil.format("第{}行,格式错误,选项使用空格分隔名称和图号",v.get(0).getLineNo()));
}
OptionalEbomImportDTO optionalEbomImportL2 = new OptionalEbomImportDTO();
optionalEbomImportL2.setOptionDrawingNo(StrUtil.sub(k,0,optionChildPos));
optionalEbomImportL2.setOptionName(StrUtil.subSuf(k,optionChildPos+1));
if (StrUtil.isEmpty(optionalEbomImportL2.getOptionDrawingNo())) {
throw new NflgBusinessException(STATE.Error, StrUtil.format("第{}行,格式错误,解析后没有图号", v.get(0).getLineNo()));
}
if (StrUtil.isEmpty(optionalEbomImportL2.getOptionName())) {
throw new NflgBusinessException(STATE.Error, StrUtil.format("第{}行,格式错误,解析后没有选项名", v.get(0).getLineNo()));
}
optionalEbomImportLevel2Dto.setOptionDrawingNo(optionName[0]);
optionalEbomImportLevel2Dto.setOptionName(optionName[1]);
if (CollectionUtil.isEmpty(optionalEbomImportDTO.getChild())) {
optionalEbomImportDTO.setChild(new ArrayList<OptionalEbomImportDTO>());
}
optionalEbomImportDTO.getChild().add(optionalEbomImportLevel2Dto);
parsecColumn3(v1, optionalEbomImportLevel2Dto);
optionalEbomImportDTO.getChild().add(optionalEbomImportL2);
parsecColumn3(v, optionalEbomImportL2);
});
@ -121,13 +177,29 @@ public class OptionalExcelService {
private OptionalEbomImportExcelDTO parsecColumn1(List<ImportExcelField> list) {
OptionalEbomImportExcelDTO optionalEbomInportExcelDTO = new OptionalEbomImportExcelDTO();
int row = 1;
int row = 2;
ImportExcelField device = list.get(0);
if(StrUtil.isEmpty(device.getCellFirst())){
throw new NflgBusinessException(STATE.Error,"机型数据不能为空");
}
String deviceInfo = device.getCellFirst();
int deviceSplitPos=deviceInfo.indexOf(" ");
//设备信息
String[] deviceInfo = device.getCellFirst().trim().split(" ");
if(deviceSplitPos<0 ){
throw new NflgBusinessException(STATE.Error,"第1行机型设备型号格式异常,使用空格分隔设备编号和名称");
}
optionalEbomInportExcelDTO.setDeviceInfo(new OptionalEbomMainDTO());
optionalEbomInportExcelDTO.getDeviceInfo().setDeviceNo(deviceInfo[0]);
optionalEbomInportExcelDTO.getDeviceInfo().setDeviceName(deviceInfo[1]);
optionalEbomInportExcelDTO.getDeviceInfo().setDeviceNo(StrUtil.sub(deviceInfo,0 ,deviceSplitPos ));
optionalEbomInportExcelDTO.getDeviceInfo().setDeviceName(StrUtil.subSuf(deviceInfo, deviceSplitPos+1 ));
if(StrUtil.isEmpty( optionalEbomInportExcelDTO.getDeviceInfo().getDeviceName())){
throw new NflgBusinessException(STATE.Error,"第1行格式错误解析后不包含设备名称");
}
optionalEbomInportExcelDTO.getDeviceInfo().setDeviceName( optionalEbomInportExcelDTO.getDeviceInfo().getDeviceName() .replace("\n",""));
String name = "";
//相同类
@ -135,9 +207,15 @@ public class OptionalExcelService {
for (; row < list.size(); row++) {
ImportExcelField rowField = list.get(row);
//第一选项未合并单元格
if (StrUtil.isEmpty(rowField.getCellThird()) && !rowField.getCellFirst().equals(rowField.getCellSecond())){
throw new NflgBusinessException(STATE.Error,StrUtil.format("第{}行,请保持相同格式,{} 未合并单元格 ",rowField.getLineNo(),rowField.getCellFirst()));
}
//相同列为根
if ((row==list.size()-1)||(rowField.getCellFirst().trim().equals(rowField.getCellSecond().trim())
&& rowField.getCellSecond().trim().equals(rowField.getCellThird().trim()))) {
if ((row==list.size()-1)||(rowField.getCellFirst().equals(rowField.getCellSecond())
&& StrUtil.isEmpty(rowField.getCellThird() ) )) {
if((row==list.size()-1)){
@ -147,24 +225,45 @@ public class OptionalExcelService {
if (CollectionUtil.isNotEmpty(classList)) {
String finalName = name;
Map<String, Map<String, List<ImportExcelField>>> group1 = classList.parallelStream().collect(Collectors.groupingBy(ImportExcelField::getCellFirst, Collectors.groupingBy(ImportExcelField::getCellSecond)));
//第一列
group1.forEach((k, v) -> {
OptionalEbomImportDTO optionalEbomImportDTO = new OptionalEbomImportDTO();
optionalEbomImportDTO.setOptionName(finalName);
optionalEbomImportDTO.setOptionDrawingNo(k);
if (CollectionUtil.isEmpty(optionalEbomInportExcelDTO.getOptionInfo())) {
optionalEbomInportExcelDTO.setOptionInfo(new ArrayList<OptionalEbomImportDTO>());
}
optionalEbomInportExcelDTO.getOptionInfo().add(optionalEbomImportDTO);
//黄色根部选项解析
int optionParentPos=finalName.indexOf(" ");
if(optionParentPos<0){
throw new NflgBusinessException(STATE.Error,StrUtil.format("选项格式错误未使用空格分隔,{}",finalName));
}
OptionalEbomImportDTO optionalEbomImportL1 = new OptionalEbomImportDTO();
optionalEbomImportL1.setOptionDrawingNo(StrUtil.sub(finalName,0,optionParentPos));
optionalEbomImportL1.setOptionName(StrUtil.subSuf(finalName,optionParentPos+1));
if (CollectionUtil.isEmpty(optionalEbomInportExcelDTO.getOptionInfo())) {
optionalEbomInportExcelDTO.setOptionInfo(new ArrayList<OptionalEbomImportDTO>());
}
optionalEbomInportExcelDTO.getOptionInfo().add(optionalEbomImportL1);
Map<String, List<ImportExcelField> > group1 = classList.parallelStream()
.collect(Collectors.groupingBy(ImportExcelField::getCellFirst,LinkedHashMap::new,Collectors.toList()));
if(group1==null || CollectionUtil.isEmpty(group1)){
throw new NflgBusinessException(STATE.Error,StrUtil.format("转换{}选项下数据异常",name));
}
parsecColumn2(group1, optionalEbomImportL1);
parsecColumn2(v, optionalEbomImportDTO);
});
classList.clear();
}
if((row!=list.size()-1)) {
name = rowField.getCellFirst();
if(StrUtil.isEmpty(name)){
throw new NflgBusinessException(STATE.Error,StrUtil.format("第{}行,选项数据不能为空",rowField.getLineNo()));
}
if(!name.contains(" ")){
throw new NflgBusinessException(STATE.Error,StrUtil.format("第{}行,格式错误,选项使用空格分隔名称和图号",rowField.getLineNo()));
}
}
} else {
@ -224,9 +323,9 @@ public class OptionalExcelService {
throw new NflgBusinessException(STATE.Error, hintMsg);
}
// return true;
//保存db
return batchExcelToRepertory(optionalEbomInportExcelDTO);
return batchExcelToRepertory(optionalEbomInportExcelDTO);
}
@ -241,11 +340,11 @@ public class OptionalExcelService {
List<OptionalEbomImportChildDTO> listChild = item1.getChild();
for (OptionalEbomImportChildDTO item2 : listChild) {
if (item2.getError() == OptionalBomConstant.ExcelErrorTagEnum.REPEAT.getValue()) {
title.append(String.format("第%d行 %s\n", item2.getLineNo(), OptionalBomConstant.ExcelErrorTagEnum.REPEAT.getDescription()));
title.append(String.format("第%d行 %s ", item2.getLineNo(), OptionalBomConstant.ExcelErrorTagEnum.REPEAT.getDescription()));
} else if (item2.getError() == OptionalBomConstant.ExcelErrorTagEnum.MATERIA_NO_UNKOWN.getValue()) {
title.append(String.format("第%d行 %s\n", item2.getLineNo(), OptionalBomConstant.ExcelErrorTagEnum.MATERIA_NO_UNKOWN.getDescription()));
title.append(String.format("第%d行 %s ", item2.getLineNo(), OptionalBomConstant.ExcelErrorTagEnum.MATERIA_NO_UNKOWN.getDescription()));
} else if (item2.getError() == OptionalBomConstant.ExcelErrorTagEnum.ALL.getValue()) {
title.append(String.format("第%d行 %s\n", item2.getLineNo(), OptionalBomConstant.ExcelErrorTagEnum.ALL.getDescription()));
title.append(String.format("第%d行 %s ", item2.getLineNo(), OptionalBomConstant.ExcelErrorTagEnum.ALL.getDescription()));
}
}