diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java index f76fe5ca..364dc183 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java +++ b/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 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> palletListMap = new HashMap<>(); - Map> 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 palletDataList = new ArrayList<>(); - palletDataList.add(itemData); - palletListMap.put(itemData.getSeqNo(),palletDataList); - } + } catch (Exception e) { + throw new RuntimeException("导入失败:" + e.getMessage()); + } + // 如果是沃尔玛订单,按照pn分组,同一个pn是一个EcssCoDelPalletHeaderData, + // 如果是非沃尔玛订单,按照序号分组,同一个序号是一个EcssCoDelPalletHeaderData, + Map> palletListMap = new HashMap<>(); + Map> 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 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 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 propertiesValues = coDelMapper.getPropertiesListByTypeAndCodeNo( - inData.getSite(), "ECSSPART","BG001",inData.getBuNo()); - EcssWalMartOrder task = new EcssWalMartOrder(); - List headerList = new ArrayList<>(); - List detailList = new ArrayList<>(); - int seqNo = 0; - // palletListMap里每一个key生成一个EcssCoDelPalletHeaderData,每一个value生成一组EcssCoDelPalletDetailData - for (Map.Entry> 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 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 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 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> 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 propertiesValues = coDelMapper.getPropertiesListByTypeAndCodeNo( + inData.getSite(), "ECSSPART","BG001",inData.getBuNo()); + EcssWalMartOrder task = new EcssWalMartOrder(); + List headerList = new ArrayList<>(); + List detailList = new ArrayList<>(); + int seqNo = 0; + // palletListMap里每一个key生成一个EcssCoDelPalletHeaderData,每一个value生成一组EcssCoDelPalletDetailData + for (Map.Entry> 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 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 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> 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 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 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 ecssCoDelNotifyDetail = coDelMapper.searchEcssCoDelNotifyDetail(inData); - Map 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 ecssCoDelNotifyDetail = coDelMapper.searchEcssCoDelNotifyDetail(inData); + Map 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 entry : palletDetailMap.entrySet()) { - if (notifyDetailMap.get(entry.getKey()).compareTo(entry.getValue())!=0) { - throw new RuntimeException("物料["+entry.getKey()+"]的数量和发货通知单数量不一致!"); - } + } + for (Map.Entry 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()); } }