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 a8ccb1c6..b9932447 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 @@ -2324,7 +2324,10 @@ public class CoDelServiceImpl implements CoDelService { Optional palletHeaderData = palletHeaderDataList.isEmpty()? Optional.empty() :palletHeaderDataList.stream().max(Comparator.comparing(EcssCoDelPalletHeaderData::getHeight)); // 总托数 - Integer totalPlt = palletHeaderDataList.isEmpty()?0:palletHeaderDataList.get(0).getPalletQty(); + Integer totalPlt = palletHeaderDataList.stream() + .map(EcssCoDelPalletHeaderData::getPalletQty) + .filter(Objects::nonNull) // 防止空指针 + .reduce(0, Integer::sum); // 发货通知单明细 List detailList = coDelMapper.exportEcssCoDelNotifyDetail(data); // 获取poNo @@ -2467,13 +2470,20 @@ public class CoDelServiceImpl implements CoDelService { template.addVar("Shipping_Mark", stringInput(data.getShippingMark())); // 体积计算:优先使用栈板体积,栈板不存在时根据装箱明细的物料计算体积 BigDecimal totalVolume = BigDecimal.ZERO; - if (palletHeaderData.isPresent()) { - // 使用栈板体积计算 - totalVolume = palletHeaderData.get().getLength() - .multiply(palletHeaderData.get().getWidth()) - .multiply(palletHeaderData.get().getHeight()) - .multiply(BigDecimal.valueOf(totalPlt)) - .setScale(2, RoundingMode.HALF_UP); + if (!palletHeaderDataList.isEmpty()) { + // 计算所有栈板的体积总和 + for (EcssCoDelPalletHeaderData palletHeader : palletHeaderDataList) { + if (palletHeader.getLength() != null && palletHeader.getWidth() != null + && palletHeader.getHeight() != null && palletHeader.getPalletQty() != null) { + // 单个栈板体积 = 长 * 宽 * 高 * 数量 + BigDecimal singlePalletVolume = palletHeader.getLength() + .multiply(palletHeader.getWidth()) + .multiply(palletHeader.getHeight()) + .multiply(BigDecimal.valueOf(palletHeader.getPalletQty())); + totalVolume = totalVolume.add(singlePalletVolume); + } + } + totalVolume = totalVolume.setScale(2, RoundingMode.HALF_UP); } else { // 栈板不存在时,根据装箱明细的物料计算体积 totalVolume = calculateVolumeByMaterials(notifyHeader); @@ -2557,24 +2567,55 @@ public class CoDelServiceImpl implements CoDelService { palletHeaderDataList.stream().max(Comparator.comparing(EcssCoDelPalletHeaderData::getHeight)); // 需要计算的 // 总托数 - int totalPlt = palletHeaderDataList.isEmpty()?0:palletHeaderDataList.get(0).getPalletQty(); + Integer totalPlt = palletHeaderDataList.stream() + .map(EcssCoDelPalletHeaderData::getPalletQty) + .filter(Objects::nonNull) // 防止空指针 + .reduce(0, Integer::sum); template.addVar("quantity", ecHeader!=null?(totalPlt==0?ecHeader.getBoxQty()+"CTN("+ecHeader.getBoxQty()+"CTN)": totalPlt+"PLT("+ecHeader.getBoxQty()+"CTN)"):""); template.addVar("price", ttlAmount.setScale(2, RoundingMode.HALF_UP)); template.addVar("total_qty", totalQty); - template.addVar("net_weight", netWeight.setScale(2, RoundingMode.HALF_UP)); - template.addVar("gross_weight", grossWeight.setScale(2, RoundingMode.HALF_UP)); + //BigDecimal grossWeight = ecHeader.getGrossWeight() != null ? ecHeader.getGrossWeight() : BigDecimal.ZERO; + //template.addVar("grossWeight", (grossWeight.add(palletWeight)).setScale(2, RoundingMode.HALF_UP)); + //template.addVar("netWeight", ecHeader.getNetWeight() != null ? ecHeader.getNetWeight().setScale(2, RoundingMode.HALF_UP) : ""); + // 托盘重量=根据每个pallet的重量*数量累加 + BigDecimal palletWeight = BigDecimal.ZERO; + for (EcssCoDelPalletHeaderData palletHeader : palletHeaderDataList) { + if (palletHeader.getPallet() != null && !palletHeader.getPallet().isEmpty()) { + // 根据pallet编号查询EcssPallet信息 + List palletDataList = coDelMapper.getPallet(notifyHeader.getSite(), notifyHeader.getBuNo(), palletHeader.getPallet()); + if (!palletDataList.isEmpty()) { + EcssPalletData palletData = palletDataList.get(0); + if (palletData.getPalletWeight() != null && palletHeader.getPalletQty() != null) { + // 栈板重量 = 单个栈板重量 * 数量 + BigDecimal singlePalletWeight = palletData.getPalletWeight().multiply(BigDecimal.valueOf(palletHeader.getPalletQty())); + palletWeight = palletWeight.add(singlePalletWeight); + } + } + } + } + template.addVar("net_weight", (ecHeader!=null&&ecHeader.getNetWeight() != null ? ecHeader.getNetWeight() : BigDecimal.ZERO). + setScale(2, RoundingMode.HALF_UP)); + template.addVar("gross_weight", (ecHeader!=null&&ecHeader.getGrossWeight() != null ? ecHeader.getGrossWeight() : BigDecimal.ZERO). + add(palletWeight).setScale(2, RoundingMode.HALF_UP)); // 体积计算:优先使用栈板体积,栈板不存在时根据装箱明细的物料计算体积 BigDecimal totalVolume = BigDecimal.ZERO; - if (palletHeaderData.isPresent()) { - // 使用栈板体积计算 - totalVolume = palletHeaderData.get().getLength() - .multiply(palletHeaderData.get().getWidth()) - .multiply(palletHeaderData.get().getHeight()) - .multiply(BigDecimal.valueOf(totalPlt)) - .setScale(2, RoundingMode.HALF_UP); + if (!palletHeaderDataList.isEmpty()) { + // 计算所有栈板的体积总和 + for (EcssCoDelPalletHeaderData palletHeader : palletHeaderDataList) { + if (palletHeader.getLength() != null && palletHeader.getWidth() != null + && palletHeader.getHeight() != null && palletHeader.getPalletQty() != null) { + // 单个栈板体积 = 长 * 宽 * 高 * 数量 + BigDecimal singlePalletVolume = palletHeader.getLength() + .multiply(palletHeader.getWidth()) + .multiply(palletHeader.getHeight()) + .multiply(BigDecimal.valueOf(palletHeader.getPalletQty())); + totalVolume = totalVolume.add(singlePalletVolume); + } + } + totalVolume = totalVolume.setScale(2, RoundingMode.HALF_UP); } else { // 栈板不存在时,根据装箱明细的物料计算体积 totalVolume = calculateVolumeByMaterials(notifyHeader);