OMS订单费用修改
This commit is contained in:
+19
-12
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user