|
|
|
@ -2465,9 +2465,20 @@ public class CoDelServiceImpl implements CoDelService { |
|
|
|
template.addVar("sellerLabel", "Name of seller Checkpoint Commercial (Shanghai) Co.. Ltd."); |
|
|
|
} |
|
|
|
template.addVar("Shipping_Mark", stringInput(data.getShippingMark())); |
|
|
|
template.addVar("Measurement", !palletHeaderData.isPresent()?"":palletHeaderData.get().getLength(). |
|
|
|
multiply(palletHeaderData.get().getWidth()).multiply(palletHeaderData.get().getHeight()). |
|
|
|
multiply(BigDecimal.valueOf(totalPlt)).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); |
|
|
|
} else { |
|
|
|
// 栈板不存在时,根据装箱明细的物料计算体积 |
|
|
|
totalVolume = calculateVolumeByMaterials(notifyHeader); |
|
|
|
} |
|
|
|
template.addVar("Measurement", totalVolume); |
|
|
|
template.addListVarAll(exportList); |
|
|
|
} |
|
|
|
|
|
|
|
@ -2555,9 +2566,20 @@ public class CoDelServiceImpl implements CoDelService { |
|
|
|
template.addVar("net_weight", netWeight.setScale(2, RoundingMode.HALF_UP)); |
|
|
|
template.addVar("gross_weight", grossWeight.setScale(2, RoundingMode.HALF_UP)); |
|
|
|
|
|
|
|
template.addVar("volume", palletHeaderData.isPresent() ?palletHeaderData.get().getLength(). |
|
|
|
multiply(palletHeaderData.get().getWidth()).multiply(palletHeaderData.get().getHeight()). |
|
|
|
multiply(BigDecimal.valueOf(totalPlt)).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); |
|
|
|
} else { |
|
|
|
// 栈板不存在时,根据装箱明细的物料计算体积 |
|
|
|
totalVolume = calculateVolumeByMaterials(notifyHeader); |
|
|
|
} |
|
|
|
template.addVar("volume", totalVolume); |
|
|
|
template.addVar("highest", palletHeaderData.isPresent() ?palletHeaderData.map(ecssCoDelPalletHeaderData -> |
|
|
|
ecssCoDelPalletHeaderData.getLength().setScale(2, RoundingMode.HALF_UP) |
|
|
|
+ "*" + ecssCoDelPalletHeaderData.getWidth().setScale(2, RoundingMode.HALF_UP) + "*" |
|
|
|
@ -2592,6 +2614,120 @@ public class CoDelServiceImpl implements CoDelService { |
|
|
|
template.addListVarAll(notifyDetailGroup); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 根据装箱明细的物料计算体积 |
|
|
|
* 每种物料(每个pn是一种物料)维护的箱子的长*宽*高*箱数 |
|
|
|
* |
|
|
|
* @return 总体积 |
|
|
|
*/ |
|
|
|
private BigDecimal calculateVolumeByMaterials(EcssCoDelNotifyHeaderData notifyHeader) { |
|
|
|
List<Map> palletDetailList = coDelMapper.getCoDelPalletDetailGroupByPn(notifyHeader); |
|
|
|
|
|
|
|
if (palletDetailList == null || palletDetailList.isEmpty()) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
// 获取所有物料编号 |
|
|
|
List<String> pns = palletDetailList.stream() |
|
|
|
.map(detail -> (String) detail.get("pn")) |
|
|
|
.filter(Objects::nonNull) |
|
|
|
.distinct() |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
if (pns.isEmpty()) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
|
|
|
|
// 根据物料编号获取packageNo |
|
|
|
List<Map> packageNoList = coDelMapper.getPackageNoByPn(notifyHeader.getSite(), pns); |
|
|
|
Map<String, String> partNoToPackageNoMap = packageNoList.stream() |
|
|
|
.collect(Collectors.toMap( |
|
|
|
map -> (String) map.get("pn"), |
|
|
|
map -> (String) map.get("packageNo"), |
|
|
|
(existing, replacement) -> existing // 处理重复key的情况 |
|
|
|
)); |
|
|
|
|
|
|
|
// 获取所有packageNo对应的包装信息 |
|
|
|
List<String> packageNos = packageNoList.stream() |
|
|
|
.map(map -> (String) map.get("packageNo")) |
|
|
|
.filter(Objects::nonNull) |
|
|
|
.distinct() |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
if (packageNos.isEmpty()) { |
|
|
|
log.warn("未找到物料对应的包装信息,物料编号: {}", pns); |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
|
|
|
|
// 获取包装信息(长宽高) |
|
|
|
List<EcssPackageData> packageDataList = coDelMapper.getPackageList(notifyHeader.getSite(), notifyHeader.getBuNo(), packageNos); |
|
|
|
Map<String, EcssPackageData> packageNoToDataMap = packageDataList.stream() |
|
|
|
.collect(Collectors.toMap( |
|
|
|
EcssPackageData::getPackageNo, |
|
|
|
packageData -> packageData, |
|
|
|
(existing, replacement) -> existing |
|
|
|
)); |
|
|
|
|
|
|
|
// 计算总体积 |
|
|
|
BigDecimal totalVolume = BigDecimal.ZERO; |
|
|
|
for (Map detail : palletDetailList) { |
|
|
|
String pn = (String) detail.get("pn"); |
|
|
|
Object boxQtyObj = detail.get("box_qty"); |
|
|
|
|
|
|
|
if (pn == null || boxQtyObj == null) { |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// 获取箱数 |
|
|
|
BigDecimal boxQty; |
|
|
|
if (boxQtyObj instanceof BigDecimal) { |
|
|
|
boxQty = (BigDecimal) boxQtyObj; |
|
|
|
} else { |
|
|
|
boxQty = new BigDecimal(boxQtyObj.toString()); |
|
|
|
} |
|
|
|
|
|
|
|
// 获取包装信息 |
|
|
|
String packageNo = partNoToPackageNoMap.get(pn); |
|
|
|
if (packageNo == null) { |
|
|
|
log.warn("物料 {} 未维护packageNo", pn); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
EcssPackageData packageData = packageNoToDataMap.get(packageNo); |
|
|
|
if (packageData == null) { |
|
|
|
log.warn("包装编号 {} 未找到对应的包装信息", packageNo); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// 检查长宽高是否都有值 |
|
|
|
if (packageData.getLength() == null || packageData.getWidth() == null || packageData.getHeight() == null) { |
|
|
|
log.warn("包装编号 {} 的长宽高信息不完整", packageNo); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// 计算该物料的体积:长*宽*高*箱数 |
|
|
|
BigDecimal materialVolume = packageData.getLength() |
|
|
|
.multiply(packageData.getWidth()) |
|
|
|
.multiply(packageData.getHeight()) |
|
|
|
.multiply(boxQty); |
|
|
|
|
|
|
|
totalVolume = totalVolume.add(materialVolume); |
|
|
|
|
|
|
|
log.debug("物料 {} 包装 {} 箱数 {} 单箱体积 {} 总体积 {}", |
|
|
|
pn, packageNo, boxQty, |
|
|
|
packageData.getLength().multiply(packageData.getWidth()).multiply(packageData.getHeight()), |
|
|
|
materialVolume); |
|
|
|
} |
|
|
|
|
|
|
|
return totalVolume.setScale(2, RoundingMode.HALF_UP); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
log.error("计算物料体积时发生异常", e); |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 计算FSC纸重量 |
|
|
|
*/ |
|
|
|
|