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 new file mode 100644 index 00000000..305a7e51 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/aggreg/OptionalExcelService.java @@ -0,0 +1,319 @@ +package com.nflg.product.bomnew.service.aggreg; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.lang.TypeReference; +import cn.hutool.core.util.ObjectUtil; +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.Date; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * 导入移动破 + */ +@Service +public class OptionalExcelService { + + @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[] optionName1 = item.getCellThird().trim().split(":"); + String materialName = optionName1[1]; + levelDto3.setDrawingNo(optionName1[0]); + // 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 (rowField.getCellFirst().trim().equals(rowField.getCellSecond().trim()) && rowField.getCellSecond().trim().equals(rowField.getCellThird().trim())) { + 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(); + + } + + 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)); + + } + + //检查是否满足条件 除了‘无’ ,物料号不能为空 + + + + + //保存db + return batchExcelToRepertory(optionalEbomInportExcelDTO); + } + + @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())); + } + + + optionalEbomMainEntity.setCreatedBy(SessionUtil.getUserCode()); + optionalEbomMainEntity.setDeptName(SessionUtil.getDepartName()); + optionalEbomMainEntity.setCreatedTime(new Date()); + optionalEbomMainEntity.setUpdatedTime(new Date()); + optionalEbomMainEntity.setDeptRowId(SessionUtil.getPartRowId()); + boolean row0 = optionalEbomMainService.save(optionalEbomMainEntity); + if (!row0) { + throw new NflgBusinessException(STATE.Error, "保存设备数据失败"); + } + List parentOptionList = ebomImportExcelDTO.getOptionInfo(); + + //保存选项 + for (OptionalEbomImportDTO parentOption : parentOptionList) { + + + OptionalEbomImportEntity parentOptionEntity = Convert.convert(new TypeReference() { + }, parentOption); + parentOptionEntity.setRootRowId(optionalEbomMainEntity.getRowId()); + parentOptionEntity.setCreatedTime(new Date()); + parentOptionEntity.setCreatedBy(SessionUtil.getUserCode()); + + + boolean row1; + try { + row1 = optionalEbomImportService.save(parentOptionEntity); + if (!row1) { + throw new Exception (""); + } + }catch (Exception e){ + throw new NflgBusinessException(STATE.Error, "保存选项数据失败"); + } + +// if (!row1) { +// throw new NflgBusinessException(STATE.Error, "保存选项数据失败"); +// } + //子选项 + List childOptionList = parentOption.getChild(); + + for (OptionalEbomImportDTO childOption : childOptionList) { + OptionalEbomImportEntity childOptionEntity = Convert.convert(new TypeReference() { + }, childOption); + childOptionEntity.setCreatedBy(SessionUtil.getUserCode()); + childOptionEntity.setRootRowId(optionalEbomMainEntity.getRowId()); + childOptionEntity.setParentRowId(parentOptionEntity.getRowId()); + childOptionEntity.setCreatedTime(new Date()); + + boolean row2 ; + try { + row2= optionalEbomImportService.save(childOptionEntity); + if (!row2) { + throw new Exception (""); + } + + }catch (Exception e){ + throw new NflgBusinessException(STATE.Error, "保存选项数据失败"); + } + + List optionImportChildDtoList = childOption.getChild(); + + List optionImportChildEntityList = Convert.convert(new TypeReference>() { + }, optionImportChildDtoList); + optionImportChildEntityList.forEach(item -> { + item.setParentRowId(childOptionEntity.getRowId()); + item.setRootRowId(optionalEbomMainEntity.getRowId()); + item.setCreatedBy(SessionUtil.getUserCode()); + item.setCreatedTime(new Date()); + item.setUpdatedTime(new Date()); + + }); + try { + boolean row3 = optionalEbomImportChildService.saveOrUpdateBatch(optionImportChildEntityList); + if (!row3) { + throw new Exception (""); + } + }catch (Exception e){ + throw new NflgBusinessException(STATE.Error, "保存选配数据失败"+e.getMessage()); + } + + + + } + + } + + return true; + + } + + + + +} + + +