OMS订单费用修改

This commit is contained in:
秦鸿展
2026-09-10 20:42:16 +08:00
parent cd4ceecf98
commit 60381ad7c9
@@ -48,8 +48,15 @@ import java.util.stream.Collectors;
* 2. 费用数据源 = 前端回传的费用明细 business_order_account(feeDetailList)
* 主表金额 deliveryFreight 为其 amount 合计(冗余汇总,后端自动算)。
* 3. 是否需审核:一旦任一「金额」发生变化
* = feeDetailList 明细 amount 变化,或主表金额列变化 -> 走业务主管审核;
* = feeDetailList 明细 amount 变化,或主表金额/费用列变化 -> 走业务主管审核;
* 否则(仅改非金额字段) -> 直通。
* 「金额/费用」字段涵盖: deliveryFreight / collectedFreight / uncollectedFreight /
* collectLessFreight / transportationUnitPrice / infoFee / freightUnitPrice /
* cargoInsuranceAmount / freightCharges / freightFee / unloadingFee / customsFee /
* shortageFee / miscellaneousFee / otherFee / detentionFee,以及 settlementCurrency /
* paymentAccountId / accountName / accountInformation(结算币种+收款账户任一变化即视为费用变更)。
* 判定口径: 以后端兜底比对为准(主表金额/费用列 + 明细 amount 合计)
* 前端 amountChanged 仅作提示;后端比对结果与前端 OR 运算,避免前端误传 false 绕过审核。
* 4. 涉及金额提交 -> 仅把业务单 review_status 置为「调整待审核(3)」;主记录 AUDIT_STATUS=0(待审核)
* 不更新业务单数据,不影响其它状态(order_status / execute_status 不动)。
* 5. 审核通过 -> 覆盖业务单(金额) + 替换费用明细;review_status 一律置为 1(已审核)
@@ -57,7 +64,6 @@ import java.util.stream.Collectors;
* 审核驳回 -> 不更新业务单数据,review_status 还原为调整前值(主记录 before_review_status),可再次调整。
* 6. 直通(未改金额) -> 覆盖业务单可编辑字段 + deliveryFreight(明细合计),并替换 business_order_account
* (逻辑删旧 is_delete=1 + 插新 is_delete=0);不改动任何审核/执行状态。
* 7. 前端以 amountChanged 告知是否改金额(默认前端判定);未传时后端兜底比对。
*
* 说明:review_status 原枚举 0未审/1通过/2驳回,新增 3=调整待审核;不改变原有用例。
*
@@ -72,12 +78,17 @@ public class BusinessDocumentOrderAdjustService {
private static final Integer AUDIT_PASS = 1; // 调整记录:审核通过
private static final Integer AUDIT_REJECT = 2; // 调整记录:驳回
/** 主表金额(费用)字段,任一变化触发审核 */
/** 主表金额(费用)字段,任一变化触发审核
* 含: 运费相关 8 项 + 其他费用 8 项 + 结算币种 + 收款账户(3 字段)
* 任意一项变化即需要审核(对应前端"费用合计 / 运费 / 装卸费 / 仓租及柜租(走明细) /
* 保险 / 压车(走明细) / 运输处理费(走明细) / 报关费 / 其他 / 费用合计 / 结算币种 / 收款账户") */
private static final List<String> FEE_FIELDS = Arrays.asList(
"deliveryFreight", "collectedFreight", "uncollectedFreight", "collectLessFreight",
"transportationUnitPrice", "infoFee", "freightUnitPrice", "cargoInsuranceAmount",
"freightCharges", "freightFee", "unloadingFee", "customsFee", "shortageFee",
"miscellaneousFee", "otherFee", "detentionFee");
"miscellaneousFee", "otherFee", "detentionFee",
// 结算币种 + 收款账户 任一变化也视为费用变更,需审核
"settlementCurrency", "paymentAccountId", "accountName", "accountInformation");
/** 不允许被前端调整覆盖的系统字段 */
private static final List<String> PROTECTED_FIELDS = Arrays.asList(
@@ -159,14 +170,10 @@ public class BusinessDocumentOrderAdjustService {
afterOrder.setDeliveryFreight(sum);
}
// 5. 判定是否修改了金额:以前端 amountChanged 为准(前端整单回传已自行判定)
// 前端未传则后端兜底比对(主表金额列 或 明细 amount 变化)
boolean amountChanged;
if (dto.getAmountChanged() != null) {
amountChanged = dto.getAmountChanged();
} else {
amountChanged = isAmountChanged(dbOrder, front, hasFeeDetail, dbFeeList, newFeeList);
}
// 5. 判定是否修改了金额:以后端兜底比对为准,避免前端误传 false 绕过审核
// 前端传 true 也尊重;后端比对结果与前端 OR 运算(任一为真则需审核)。
boolean backendChanged = isAmountChanged(dbOrder, front, hasFeeDetail, dbFeeList, newFeeList);
boolean amountChanged = backendChanged || Boolean.TRUE.equals(dto.getAmountChanged());
// 6. 写主记录
LoginUser loginUser = SecurityUtils.getLoginUser();