diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelServiceImpl.java b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelServiceImpl.java index a94152d7..191faa98 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelServiceImpl.java @@ -1659,23 +1659,24 @@ public class CoDelExcelServiceImpl implements CoDelExcelService { boxListData.setItemNo(seqNo+""); // 箱数:取第一条记录的箱数(同一箱内所有明细的箱数都相同) - BigDecimal boxQty = entry.getValue().get(0).getBoxQty(); + BigDecimal boxQty = entry.getValue().getFirst().getBoxQty(); + requireValidBoxNumeric(boxQty, "箱数", seqNo); boxListData.setBoxQty(boxQty); // 毛重:如果是合箱,则毛重已经在合并单元格中,直接取第一条记录的毛重 // 如果不是合箱,每行有各自的毛重,不需要汇总(因为一行就是一个箱子) - BigDecimal grossWeight = entry.getValue().get(0).getGrossWeight(); + BigDecimal grossWeight = entry.getValue().getFirst().getGrossWeight(); + requireValidBoxNumeric(grossWeight, "毛重", seqNo); boxListData.setGrossWeight(grossWeight.setScale(2, RoundingMode.HALF_UP)); // 卷数:如果是合箱,则毛重已经在合并单元格中,直接取第一条记录的卷数 // 如果不是合箱,每行有各自的卷数,不需要汇总(因为一行就是一个箱子) - BigDecimal totalRolls = entry.getValue().get(0).getRolls(); + BigDecimal totalRolls = entry.getValue().getFirst().getRolls(); + requireValidBoxNumeric(totalRolls, "卷数", seqNo); boxListData.setRolls(totalRolls); // 净重计算:净重 = 毛重 - 箱数/2 BigDecimal netWeight = BigDecimal.ZERO; - if (boxQty != null) { - netWeight = grossWeight.subtract(boxQty.divide(new BigDecimal("2"), 2, RoundingMode.HALF_UP)); - } + netWeight = grossWeight.subtract(boxQty.divide(new BigDecimal("2"), 2, RoundingMode.HALF_UP)); boxListData.setNetWeight(netWeight.setScale(2, RoundingMode.HALF_UP)); boxListData.setCreateBy(currentUser.getUsername()); @@ -1721,6 +1722,16 @@ public class CoDelExcelServiceImpl implements CoDelExcelService { coDelMapper.updateEcssDelDetailForModify(inData); } + /** + * 装箱导入:校验箱数、毛重、卷数必须为有效数字类型(非空且为 BigDecimal 数值) + */ + private void requireValidBoxNumeric(BigDecimal value, String fieldLabel, int boxSeqNo) { + if (value == null) { + throw new RuntimeException("导入失败:第" + boxSeqNo + "行「" + fieldLabel + + "」不能为空或不是有效数字,请检查 Excel 中对应列是否为数字格式(勿使用文本、布尔等非数字类型)。"); + } + } + /** * 验证导入数据的序号和数量是否与发货通知单明细匹配 * 规则:导入数据中同一个序号的数量总和必须等于发货通知单明细中该序号的数量