导入excel处理

This commit is contained in:
jing's 2023-12-03 11:08:19 +08:00
parent bb9c84be60
commit d5a4e1b130
1 changed files with 319 additions and 0 deletions

View File

@ -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<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[] 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<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 (rowField.getCellFirst().trim().equals(rowField.getCellSecond().trim()) && rowField.getCellSecond().trim().equals(rowField.getCellThird().trim())) {
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();
}
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));
}
//检查是否满足条件 除了 物料号不能为空
//保存db
return batchExcelToRepertory(optionalEbomInportExcelDTO);
}
@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()));
}
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<OptionalEbomImportDTO> parentOptionList = ebomImportExcelDTO.getOptionInfo();
//保存选项
for (OptionalEbomImportDTO parentOption : parentOptionList) {
OptionalEbomImportEntity parentOptionEntity = Convert.convert(new TypeReference<OptionalEbomImportEntity>() {
}, 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<OptionalEbomImportDTO> childOptionList = parentOption.getChild();
for (OptionalEbomImportDTO childOption : childOptionList) {
OptionalEbomImportEntity childOptionEntity = Convert.convert(new TypeReference<OptionalEbomImportEntity>() {
}, 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<OptionalEbomImportChildDTO> optionImportChildDtoList = childOption.getChild();
List<OptionalEbomImportChildEntity> optionImportChildEntityList = Convert.convert(new TypeReference<List<OptionalEbomImportChildEntity>>() {
}, 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;
}
}