diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java index d956a87c..df6a10f3 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java @@ -109,7 +109,7 @@ public class LoadingManageServiceImpl extends BaseServiceImpl oldWaybillIds = new ArrayList<>(); // 新建暂存为草稿;编辑已有单据时保持原业务状态(如待执行),避免被改回草稿 String businessStatus = STATUS_DRAFT; @@ -128,10 +128,14 @@ public class LoadingManageServiceImpl extends BaseServiceImpl oldWaybillIds) { + List newWaybillIds = waybillIds(loadingManage.getWaybillIdsJson()); + if (Func.isNotEmpty(oldWaybillIds)) { + List removedIds = new ArrayList<>(oldWaybillIds); + removedIds.removeAll(newWaybillIds); + releaseAssociatedWaybills(removedIds, STATUS_PENDING); + } + if (Func.isEmpty(newWaybillIds)) { + return; + } + waybillMapper.update(null, Wrappers.lambdaUpdate() + .in(Waybill::getId, newWaybillIds) + .set(Waybill::getLoadingNo, loadingManage.getLoadingNo())); + } + private void releaseAssociatedWaybills(List waybillIds, String status) { if (Func.isEmpty(waybillIds)) { return; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceivablePayableDetailServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceivablePayableDetailServiceImpl.java index 81e8778c..084f85dd 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceivablePayableDetailServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceivablePayableDetailServiceImpl.java @@ -1463,7 +1463,7 @@ public class ReceivablePayableDetailServiceImpl detail.setTransportType(waybill.getTransportType()); detail.setCargoName(waybill.getCargoName()); detail.setCargoType(waybill.getCargoType()); - detail.setTransportQuantity(waybill.getQuantity()); + detail.setTransportQuantity(resolveWaybillTransportQuantity(waybill)); detail.setQuantityUnit(waybill.getQuantityUnit()); detail.setMileage(normalizeGeneratedMileage(waybill.getMileage())); detail.setBatchNo(waybill.getBatchNo()); @@ -1477,6 +1477,21 @@ public class ReceivablePayableDetailServiceImpl return detail; } + /** + * 多货物运单优先按 goodsJson 数量合计作为运输总量,避免主表 quantity 只落了首行。 + */ + private BigDecimal resolveWaybillTransportQuantity(Waybill waybill) { + List> goods = parseList(waybill.getGoodsJson()); + if (goods.size() > 1) { + BigDecimal total = goods.stream().map(item -> decimal(item.get("quantity"))) + .reduce(BigDecimal.ZERO, BigDecimal::add); + if (total.signum() > 0) { + return total; + } + } + return money(waybill.getQuantity()); + } + private ReceivablePayableDetail buildMasterOrderDetail(MasterOrder masterOrder, ContractManage contract, List masterGoods, String settlementType, List fees, BigDecimal unitPrice) { diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java index 9594475f..e92a0df4 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java @@ -1358,6 +1358,8 @@ public class WaybillServiceImpl extends BaseServiceImpl if (isSentinelMinusOne(waybill.getQuantity())) waybill.setQuantity(null); if (isSentinelMinusOne(waybill.getMileage())) waybill.setMileage(null); if (isSentinelMinusOne(waybill.getUnitPrice())) waybill.setUnitPrice(null); + if (isSentinelMinusOne(waybill.getOtherFeeTotal())) waybill.setOtherFeeTotal(null); + syncQuantityFromGoodsJson(waybill); waybill.setWaybillNo(TransportBusinessSupport.trimToNull(waybill.getWaybillNo())); waybill.setProjectName(TransportBusinessSupport.trimToNull(waybill.getProjectName())); waybill.setContractName(TransportBusinessSupport.trimToNull(waybill.getContractName())); @@ -1425,6 +1427,40 @@ public class WaybillServiceImpl extends BaseServiceImpl return value != null && value.compareTo(BigDecimal.ONE.negate()) == 0; } + /** + * 完整录入多货物时,运单主表 quantity 按 goodsJson 数量合计回写,避免只落首行数量。 + */ + private void syncQuantityFromGoodsJson(Waybill waybill) { + if (waybill == null || Func.isEmpty(waybill.getGoodsJson())) { + return; + } + List goodsList; + try { + goodsList = JsonUtil.parseArray(waybill.getGoodsJson(), Map.class); + } catch (Exception exception) { + return; + } + if (Func.isEmpty(goodsList) || goodsList.size() <= 1) { + return; + } + BigDecimal total = BigDecimal.ZERO; + boolean hasQuantity = false; + for (Map goods : goodsList) { + if (goods == null || goods.get("quantity") == null) { + continue; + } + BigDecimal quantity = new BigDecimal(String.valueOf(goods.get("quantity")).trim()); + if (isSentinelMinusOne(quantity)) { + continue; + } + hasQuantity = true; + total = total.add(quantity); + } + if (hasQuantity) { + waybill.setQuantity(total); + } + } + private void validate(Waybill waybill) { TransportBusinessSupport.validateRequired(waybill.getProjectName(), "项目不能为空"); TransportBusinessSupport.validateRequired(waybill.getContractName(), "客户合同不能为空"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/LoadingManageWrapper.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/LoadingManageWrapper.java index af4725c3..b9456046 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/LoadingManageWrapper.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/LoadingManageWrapper.java @@ -12,6 +12,7 @@ import org.springblade.system.cache.UserCache; import org.springblade.transport.pojo.entity.LoadingManage; import org.springblade.transport.pojo.vo.LoadingManageVO; +import java.math.BigDecimal; import java.util.Objects; /** @@ -33,6 +34,11 @@ public class LoadingManageWrapper extends BaseEntityWrapper