导入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