diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelField.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelField.java index cc1fb94d..1f2d4a6a 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelField.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelField.java @@ -20,6 +20,8 @@ public class ImportExcelField{ private String cellThird; + @ExcelProperty(value="",index = 3) + private String cellRemark; diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelHelper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelHelper.java index 22ca39af..c72f5876 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelHelper.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelHelper.java @@ -30,7 +30,11 @@ public class ImportExcelHelper { ImportExcelListener 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()); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/aggreg/OldOptionalExcelService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/aggreg/OldOptionalExcelService.java new file mode 100644 index 00000000..5b681398 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/aggreg/OldOptionalExcelService.java @@ -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 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()); +// } +// +// 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> 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.getChild().add(optionalEbomImportLevel2Dto); +// parsecColumn3(v1, optionalEbomImportLevel2Dto); +// }); +// +// +// } +// +// private OptionalEbomImportExcelDTO parsecColumn1(List 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 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>> 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()); +// } +// 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 helper = new ImportExcelHelper<>(); +// List 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 listParent = item.getChild(); +// for (OptionalEbomImportDTO item1 : +// listParent) { +// List 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 excelList) { +// +// StringBuffer title = new StringBuffer(); +// excelList.forEach(item -> { +// List listParent = item.getChild(); +// for (OptionalEbomImportDTO item1 : listParent) { +// if (item1.isError()) { +// +// List 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() { +// }, ebomImportExcelDTO.getDeviceInfo()); +// +// +// QueryWrapper 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 parentOptionList = ebomImportExcelDTO.getOptionInfo(); +// +// //保存选项 +// for (OptionalEbomImportDTO parentOption : parentOptionList) { +// +// +// QueryWrapper 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() { +// }, 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 childOptionList = parentOption.getChild(); +// +// for (OptionalEbomImportDTO childOption : childOptionList) { +// +// QueryWrapper 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() { +// }, 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 optionImportChildDtoList = childOption.getChild(); +// List optionImportChildEntityList = Convert.convert(new TypeReference>() { +// }, 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 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; +// +// } +// +// +//} +// +// +// diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/aggreg/OptionalExcelService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/aggreg/OptionalExcelService.java index 7af80e7e..7ceccd0f 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/aggreg/OptionalExcelService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/aggreg/OptionalExcelService.java @@ -52,9 +52,21 @@ public class OptionalExcelService { private void parsecColumn3(List 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()); } - 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> 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.getChild().add(optionalEbomImportLevel2Dto); - parsecColumn3(v1, optionalEbomImportLevel2Dto); + optionalEbomImportDTO.getChild().add(optionalEbomImportL2); + + + + parsecColumn3(v, optionalEbomImportL2); }); @@ -121,13 +177,29 @@ public class OptionalExcelService { private OptionalEbomImportExcelDTO parsecColumn1(List 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>> 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()); - } - 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()); + } + optionalEbomInportExcelDTO.getOptionInfo().add(optionalEbomImportL1); + + Map > 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 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())); } }