Browse Source

装箱明细导入全部按序号分组

java8
han\hanst 12 months ago
parent
commit
cffdcc1eff
  1. 309
      src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java

309
src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java

@ -118,7 +118,7 @@ public class CoDelServiceImpl implements CoDelService {
if (row.getCell(0) == null ) {
throw new RuntimeException("第" + j + "行的Ready Date不能为空!");
}
if (row.getCell(1) == null) {
if (row.getCell(1) == null || StringUtils.isBlank(row.getCell(1).getStringCellValue())) {
throw new RuntimeException("第" + j + "行的Customer Name不能为空!");
}
if (row.getCell(2) == null) {
@ -580,6 +580,9 @@ public class CoDelServiceImpl implements CoDelService {
if ((inData.getWalMartOrderFlag()==null || inData.getWalMartOrderFlag().equals("N")) && row.getCell(0) == null) {
throw new RuntimeException("第" + j + "行的序号不能为空!");
}
if (row.getCell(1) != null && !inData.getCmcInvoice().equals(row.getCell(1).getStringCellValue())) {
throw new RuntimeException("第" + j + "行的发票号与发货通知单的发票号不一致!");
}
if (row.getCell(4) == null) {
throw new RuntimeException("第" + j + "行的PN不能为空!");
}
@ -610,173 +613,173 @@ public class CoDelServiceImpl implements CoDelService {
excelData.setGrossWeight(getNumericCellValueOrDefault(row, 13));
excelData.setNetWeight(getNumericCellValueOrDefault(row, 14));
List<PartData> checkPart = coDelMapper.checkPart(excelData.getSite(), excelData.getPartNo());
if (checkPart.size() == 0) {
if (checkPart.isEmpty()) {
throw new RuntimeException("导入失败:物料:" + excelData.getPartNo() + "在当前工厂不存在!");
}
excelList.add(excelData);
}
// 如果是沃尔玛订单按照pn分组同一个pn是一个EcssCoDelPalletHeaderData
// 如果是非沃尔玛订单按照序号分组同一个序号是一个EcssCoDelPalletHeaderData
Map<Integer, List<EcssCoDelPalletData>> palletListMap = new HashMap<>();
Map<Integer, List<EcssCoDelPalletData>> palletListMap2 = new HashMap<>();
if (inData.getWalMartOrderFlag()!=null && inData.getWalMartOrderFlag().equals("Y")) {
for (EcssCoDelPalletData itemData : excelList){
if (palletListMap.containsKey(itemData.getSeqNo())) {
palletListMap.get(itemData.getSeqNo()).add(itemData);
} else {
List<EcssCoDelPalletData> palletDataList = new ArrayList<>();
palletDataList.add(itemData);
palletListMap.put(itemData.getSeqNo(),palletDataList);
}
} catch (Exception e) {
throw new RuntimeException("导入失败:" + e.getMessage());
}
// 如果是沃尔玛订单按照pn分组同一个pn是一个EcssCoDelPalletHeaderData
// 如果是非沃尔玛订单按照序号分组同一个序号是一个EcssCoDelPalletHeaderData
Map<Integer, List<EcssCoDelPalletData>> palletListMap = new HashMap<>();
Map<Integer, List<EcssCoDelPalletData>> palletListMap2 = new HashMap<>();
if (inData.getWalMartOrderFlag()!=null && inData.getWalMartOrderFlag().equals("Y")) {
for (EcssCoDelPalletData itemData : excelList){
if (palletListMap.containsKey(itemData.getSeqNo())) {
palletListMap.get(itemData.getSeqNo()).add(itemData);
} else {
List<EcssCoDelPalletData> palletDataList = new ArrayList<>();
palletDataList.add(itemData);
palletListMap.put(itemData.getSeqNo(),palletDataList);
}
} else {
if (excelList.get(0).getPalletQty() == 0 || excelList.get(0).getPalletQty() == null) {
throw new RuntimeException("导入失败:第一行的托数不能为0!");
}
for (EcssCoDelPalletData itemData : excelList){
if (palletListMap2.containsKey(itemData.getSeqNo())) {
palletListMap2.get(itemData.getSeqNo()).add(itemData);
} else {
List<EcssCoDelPalletData> palletDataList = new ArrayList<>();
palletDataList.add(itemData);
palletListMap2.put(itemData.getSeqNo(),palletDataList);
}
}
}
} else {
if (excelList.get(0).getPalletQty() == null || excelList.get(0).getPalletQty() == 0) {
throw new RuntimeException("导入失败:第一行的托数不能为0!");
}
// 关务物料属性
List<PartSubPropertiesValueData> propertiesValues = coDelMapper.getPropertiesListByTypeAndCodeNo(
inData.getSite(), "ECSSPART","BG001",inData.getBuNo());
EcssWalMartOrder task = new EcssWalMartOrder();
List<EcssCoDelPalletHeaderData> headerList = new ArrayList<>();
List<EcssCoDelPalletDetailData> detailList = new ArrayList<>();
int seqNo = 0;
// palletListMap里每一个key生成一个EcssCoDelPalletHeaderData每一个value生成一组EcssCoDelPalletDetailData
for (Map.Entry<Integer, List<EcssCoDelPalletData>> entry : palletListMap.entrySet()) {
seqNo++;
EcssCoDelPalletHeaderData headerData = new EcssCoDelPalletHeaderData();
headerData.setSite(inData.getSite());
headerData.setBuNo(inData.getBuNo());
headerData.setDelNo(inData.getDelNo());
headerData.setSeqNo(seqNo);
headerData.setPalletNo(inData.getDelNo() + "-" + String.format("%03d", seqNo));
headerData.setPalletQty(entry.getValue().get(0).getPalletQty());
headerData.setPalletRemark(entry.getValue().get(0).getPalletRemark());
headerData.setLength(entry.getValue().get(0).getLength());
headerData.setWidth(entry.getValue().get(0).getWidth());
headerData.setHeight(entry.getValue().get(0).getHeight());
headerData.setVolume(entry.getValue().get(0).getVolume());
headerData.setCreateBy(currentUser.getUsername());
int i=0;
BigDecimal totalGrossWeight = new BigDecimal(0);
BigDecimal boxQty = new BigDecimal(0);
for (EcssCoDelPalletData thisData : entry.getValue()) {
EcssCoDelPalletDetailData detailData = new EcssCoDelPalletDetailData();
detailData.setSite(thisData.getSite());
detailData.setBuNo(thisData.getBuNo());
detailData.setDelNo(thisData.getDelNo());
detailData.setSeqNo(seqNo);
detailData.setItemNo(i + 1);
i++;
detailData.setPartNo(thisData.getPartNo());
detailData.setPn(thisData.getPn());
detailData.setQty(thisData.getQty());
task.setSku(detailData.getPn());
task.setQty(detailData.getQty());
List<EcssWalMartOrder> orderDataList = sqlSession.selectList("ecssMapper" + "." + "searchWalMartOrderList", task);
totalGrossWeight = totalGrossWeight.add(orderDataList.isEmpty()? new BigDecimal(0):orderDataList.get(0).getGrossWeight());
detailData.setPoNo(thisData.getPoNo());
if (thisData.getBoxQty()!=null && thisData.getBoxQty().intValue()>0) {
detailData.setBoxQty(thisData.getBoxQty());
} else {
String partNo = thisData.getPartNo();
// 每一个物料加属性对应一个属性用来下面遍历发货通知单明细时获取具体属性值
Map<String, PartSubPropertiesValueData> partNoAndItemNoMap = propertiesValues.stream()
.collect(Collectors.toMap(o -> o.getPartNo() + "$" + o.getPropertiesItemNo(), o -> o));
//PartSubPropertiesValueData propertiesWeight = partNoAndItemNoMap.get(partNo + "$ROLLWEIGHT");//每卷重量
PartSubPropertiesValueData propertiesRollQty = partNoAndItemNoMap.get(partNo + "$ROLLQTY");//每卷数量
PartSubPropertiesValueData propertiesBoxRolls = partNoAndItemNoMap.get(partNo + "$BOXROLLS");//每箱卷数
//PartSubPropertiesValueData propertiesBoxWeight = partNoAndItemNoMap.get(partNo + "$BOXWEIGHT");//箱重量
if (propertiesRollQty==null||propertiesBoxRolls==null) {
throw new RuntimeException("请先维护物料["+detailData.getPn()+"]的每卷数量和每箱卷数!");
}
detailData.setBoxQty(detailData.getQty().divide(
BigDecimal.valueOf(((double) propertiesRollQty.getNumValue().intValue() * propertiesBoxRolls.getNumValue().intValue())),2, BigDecimal.ROUND_HALF_UP));
}
detailData.setRolls(thisData.getRolls());
detailData.setCreateBy(currentUser.getUsername());
detailList.add(detailData);
boxQty = boxQty.add(detailData.getBoxQty()!=null?detailData.getBoxQty():new BigDecimal(0));
for (EcssCoDelPalletData itemData : excelList){
if (palletListMap2.containsKey(itemData.getSeqNo())) {
palletListMap2.get(itemData.getSeqNo()).add(itemData);
} else {
List<EcssCoDelPalletData> palletDataList = new ArrayList<>();
palletDataList.add(itemData);
palletListMap2.put(itemData.getSeqNo(),palletDataList);
}
BigDecimal netWeight = totalGrossWeight.intValue()>0?totalGrossWeight.subtract(boxQty.divide(BigDecimal.valueOf(2),2,RoundingMode.HALF_UP)):new BigDecimal(0);
headerData.setGrossWeight(totalGrossWeight);
headerData.setNetWeight(netWeight);
headerList.add(headerData);
}
for (Map.Entry<Integer, List<EcssCoDelPalletData>> entry : palletListMap2.entrySet()) {
seqNo++;
EcssCoDelPalletHeaderData headerData = new EcssCoDelPalletHeaderData();
headerData.setSite(inData.getSite());
headerData.setBuNo(inData.getBuNo());
headerData.setDelNo(inData.getDelNo());
headerData.setSeqNo(seqNo);
headerData.setPalletNo(inData.getDelNo() + "-" + String.format("%03d", seqNo));
headerData.setPalletQty(entry.getValue().get(0).getPalletQty());
headerData.setPalletRemark(entry.getValue().get(0).getPalletRemark());
headerData.setLength(entry.getValue().get(0).getLength());
headerData.setWidth(entry.getValue().get(0).getWidth());
headerData.setHeight(entry.getValue().get(0).getHeight());
headerData.setVolume(entry.getValue().get(0).getVolume());
headerData.setGrossWeight(entry.getValue().get(0).getGrossWeight());
headerData.setNetWeight(entry.getValue().get(0).getNetWeight());
headerData.setCreateBy(currentUser.getUsername());
headerList.add(headerData);
int i=0;
for (EcssCoDelPalletData thisData : entry.getValue()) {
EcssCoDelPalletDetailData detailData = new EcssCoDelPalletDetailData();
detailData.setSite(thisData.getSite());
detailData.setBuNo(thisData.getBuNo());
detailData.setDelNo(thisData.getDelNo());
detailData.setSeqNo(seqNo);
detailData.setItemNo(i + 1);
i++;
detailData.setPartNo(thisData.getPartNo());
detailData.setPn(thisData.getPn());
detailData.setQty(thisData.getQty());
detailData.setPoNo(thisData.getPoNo());
}
// 关务物料属性
List<PartSubPropertiesValueData> propertiesValues = coDelMapper.getPropertiesListByTypeAndCodeNo(
inData.getSite(), "ECSSPART","BG001",inData.getBuNo());
EcssWalMartOrder task = new EcssWalMartOrder();
List<EcssCoDelPalletHeaderData> headerList = new ArrayList<>();
List<EcssCoDelPalletDetailData> detailList = new ArrayList<>();
int seqNo = 0;
// palletListMap里每一个key生成一个EcssCoDelPalletHeaderData每一个value生成一组EcssCoDelPalletDetailData
for (Map.Entry<Integer, List<EcssCoDelPalletData>> entry : palletListMap.entrySet()) {
seqNo++;
EcssCoDelPalletHeaderData headerData = new EcssCoDelPalletHeaderData();
headerData.setSite(inData.getSite());
headerData.setBuNo(inData.getBuNo());
headerData.setDelNo(inData.getDelNo());
headerData.setSeqNo(seqNo);
headerData.setPalletNo(inData.getDelNo() + "-" + String.format("%03d", seqNo));
headerData.setPalletQty(entry.getValue().get(0).getPalletQty());
headerData.setPalletRemark(entry.getValue().get(0).getPalletRemark());
headerData.setLength(entry.getValue().get(0).getLength());
headerData.setWidth(entry.getValue().get(0).getWidth());
headerData.setHeight(entry.getValue().get(0).getHeight());
headerData.setVolume(entry.getValue().get(0).getVolume());
headerData.setCreateBy(currentUser.getUsername());
int i=0;
BigDecimal totalGrossWeight = new BigDecimal(0);
BigDecimal boxQty = new BigDecimal(0);
for (EcssCoDelPalletData thisData : entry.getValue()) {
EcssCoDelPalletDetailData detailData = new EcssCoDelPalletDetailData();
detailData.setSite(thisData.getSite());
detailData.setBuNo(thisData.getBuNo());
detailData.setDelNo(thisData.getDelNo());
detailData.setSeqNo(seqNo);
detailData.setItemNo(i + 1);
i++;
detailData.setPartNo(thisData.getPartNo());
detailData.setPn(thisData.getPn());
detailData.setQty(thisData.getQty());
task.setSku(detailData.getPn());
task.setQty(detailData.getQty());
List<EcssWalMartOrder> orderDataList = sqlSession.selectList("ecssMapper" + "." + "searchWalMartOrderList", task);
totalGrossWeight = totalGrossWeight.add(orderDataList.isEmpty()? new BigDecimal(0):orderDataList.get(0).getGrossWeight());
detailData.setPoNo(thisData.getPoNo());
if (thisData.getBoxQty()!=null && thisData.getBoxQty().intValue()>0) {
detailData.setBoxQty(thisData.getBoxQty());
detailData.setRolls(thisData.getRolls());
detailData.setCreateBy(currentUser.getUsername());
detailList.add(detailData);
} else {
String partNo = thisData.getPartNo();
// 每一个物料加属性对应一个属性用来下面遍历发货通知单明细时获取具体属性值
Map<String, PartSubPropertiesValueData> partNoAndItemNoMap = propertiesValues.stream()
.collect(Collectors.toMap(o -> o.getPartNo() + "$" + o.getPropertiesItemNo(), o -> o));
//PartSubPropertiesValueData propertiesWeight = partNoAndItemNoMap.get(partNo + "$ROLLWEIGHT");//每卷重量
PartSubPropertiesValueData propertiesRollQty = partNoAndItemNoMap.get(partNo + "$ROLLQTY");//每卷数量
PartSubPropertiesValueData propertiesBoxRolls = partNoAndItemNoMap.get(partNo + "$BOXROLLS");//每箱卷数
//PartSubPropertiesValueData propertiesBoxWeight = partNoAndItemNoMap.get(partNo + "$BOXWEIGHT");//箱重量
if (propertiesRollQty==null||propertiesBoxRolls==null) {
throw new RuntimeException("请先维护物料["+detailData.getPn()+"]的每卷数量和每箱卷数!");
}
detailData.setBoxQty(detailData.getQty().divide(
BigDecimal.valueOf(((double) propertiesRollQty.getNumValue().intValue() * propertiesBoxRolls.getNumValue().intValue())),2, BigDecimal.ROUND_HALF_UP));
}
detailData.setRolls(thisData.getRolls());
detailData.setCreateBy(currentUser.getUsername());
detailList.add(detailData);
boxQty = boxQty.add(detailData.getBoxQty()!=null?detailData.getBoxQty():new BigDecimal(0));
}
for (int i = 0; i < headerList.size(); i++) {
coDelMapper.saveCodelPalletHeader(headerList.get(i));
BigDecimal netWeight = totalGrossWeight.intValue()>0?totalGrossWeight.subtract(boxQty.divide(BigDecimal.valueOf(2),2,RoundingMode.HALF_UP)):new BigDecimal(0);
headerData.setGrossWeight(totalGrossWeight);
headerData.setNetWeight(netWeight);
headerList.add(headerData);
}
for (Map.Entry<Integer, List<EcssCoDelPalletData>> entry : palletListMap2.entrySet()) {
seqNo++;
EcssCoDelPalletHeaderData headerData = new EcssCoDelPalletHeaderData();
headerData.setSite(inData.getSite());
headerData.setBuNo(inData.getBuNo());
headerData.setDelNo(inData.getDelNo());
headerData.setSeqNo(seqNo);
headerData.setPalletNo(inData.getDelNo() + "-" + String.format("%03d", seqNo));
headerData.setPalletQty(entry.getValue().get(0).getPalletQty());
headerData.setPalletRemark(entry.getValue().get(0).getPalletRemark());
headerData.setLength(entry.getValue().get(0).getLength());
headerData.setWidth(entry.getValue().get(0).getWidth());
headerData.setHeight(entry.getValue().get(0).getHeight());
headerData.setVolume(entry.getValue().get(0).getVolume());
headerData.setGrossWeight(entry.getValue().get(0).getGrossWeight());
headerData.setNetWeight(entry.getValue().get(0).getNetWeight());
headerData.setCreateBy(currentUser.getUsername());
headerList.add(headerData);
int i=0;
for (EcssCoDelPalletData thisData : entry.getValue()) {
EcssCoDelPalletDetailData detailData = new EcssCoDelPalletDetailData();
detailData.setSite(thisData.getSite());
detailData.setBuNo(thisData.getBuNo());
detailData.setDelNo(thisData.getDelNo());
detailData.setSeqNo(seqNo);
detailData.setItemNo(i + 1);
i++;
detailData.setPartNo(thisData.getPartNo());
detailData.setPn(thisData.getPn());
detailData.setQty(thisData.getQty());
detailData.setPoNo(thisData.getPoNo());
detailData.setBoxQty(thisData.getBoxQty());
detailData.setRolls(thisData.getRolls());
detailData.setCreateBy(currentUser.getUsername());
detailList.add(detailData);
}
Map<String, BigDecimal> palletDetailMap = new HashMap<>();
for (int i = 0; i < detailList.size(); i++) {
coDelMapper.saveCodelPalletDetail(detailList.get(i));
if (!palletDetailMap.containsKey(detailList.get(i).getPn())) {
palletDetailMap.put(detailList.get(i).getPn(), detailList.get(i).getQty());
} else {
palletDetailMap.put(detailList.get(i).getPn(), palletDetailMap.get(detailList.get(i).getPn()).add(detailList.get(i).getQty()));
}
}
for (EcssCoDelPalletHeaderData ecssCoDelPalletHeaderData : headerList) {
coDelMapper.saveCodelPalletHeader(ecssCoDelPalletHeaderData);
}
Map<String, BigDecimal> palletDetailMap = new HashMap<>();
for (EcssCoDelPalletDetailData ecssCoDelPalletDetailData : detailList) {
coDelMapper.saveCodelPalletDetail(ecssCoDelPalletDetailData);
if (!palletDetailMap.containsKey(ecssCoDelPalletDetailData.getPn())) {
palletDetailMap.put(ecssCoDelPalletDetailData.getPn(), ecssCoDelPalletDetailData.getQty());
} else {
palletDetailMap.put(ecssCoDelPalletDetailData.getPn(), palletDetailMap.get(ecssCoDelPalletDetailData.getPn()).add(ecssCoDelPalletDetailData.getQty()));
}
List<EcssCoDelNotifyDetailData> ecssCoDelNotifyDetail = coDelMapper.searchEcssCoDelNotifyDetail(inData);
Map<String, BigDecimal> notifyDetailMap = new HashMap<>();
for (EcssCoDelNotifyDetailData detailData : ecssCoDelNotifyDetail) {
if (!notifyDetailMap.containsKey(detailData.getPn())) {
notifyDetailMap.put(detailData.getPn(), detailData.getQty());
} else {
notifyDetailMap.put(detailData.getPn(), notifyDetailMap.get(detailData.getPn()).add(detailData.getQty()));
}
}
List<EcssCoDelNotifyDetailData> ecssCoDelNotifyDetail = coDelMapper.searchEcssCoDelNotifyDetail(inData);
Map<String, BigDecimal> notifyDetailMap = new HashMap<>();
for (EcssCoDelNotifyDetailData detailData : ecssCoDelNotifyDetail) {
if (!notifyDetailMap.containsKey(detailData.getPn())) {
notifyDetailMap.put(detailData.getPn(), detailData.getQty());
} else {
notifyDetailMap.put(detailData.getPn(), notifyDetailMap.get(detailData.getPn()).add(detailData.getQty()));
}
for (Map.Entry<String, BigDecimal> entry : palletDetailMap.entrySet()) {
if (notifyDetailMap.get(entry.getKey()).compareTo(entry.getValue())!=0) {
throw new RuntimeException("物料["+entry.getKey()+"]的数量和发货通知单数量不一致!");
}
}
for (Map.Entry<String, BigDecimal> entry : palletDetailMap.entrySet()) {
if (notifyDetailMap.get(entry.getKey()).compareTo(entry.getValue())!=0) {
throw new RuntimeException("物料["+entry.getKey()+"]的数量和发货通知单数量不一致!");
}
} catch (Exception e) {
throw new RuntimeException("导入失败:" + e.getMessage());
}
}

Loading…
Cancel
Save