导入excel处理
This commit is contained in:
parent
bb9c84be60
commit
d5a4e1b130
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue