From 2bb562372e106e03cefdaaa1897c8c5574f447dc Mon Sep 17 00:00:00 2001 From: wuweihua <88888888> Date: Fri, 23 Oct 2026 17:43:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=A1=E8=B4=B9=E8=A7=84?= =?UTF-8?q?=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bms/price/enums/BillOrderStatus.java | 11 ++++++++++- .../service/impl/PrcBillingTaskServiceImpl.java | 15 +++++++++++++++ .../bms/price/task/TabOrderSyncAsyncRunner.java | 4 ++-- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/bms-back/bms-system/src/main/java/com/bms/price/enums/BillOrderStatus.java b/bms-back/bms-system/src/main/java/com/bms/price/enums/BillOrderStatus.java index acd1a731..8395fc5f 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/enums/BillOrderStatus.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/enums/BillOrderStatus.java @@ -3,11 +3,14 @@ package com.bms.price.enums; /** * Snapshot of prc_order_bill.order_status (aligned with upstream TAB_ORDER). * Fee refund sets {@link #REFUNDED} (9 / 已退件). + * Upstream 9/10 trigger billType=REFUND when billing pulls Oracle. */ public enum BillOrderStatus { /** Upstream: returned package; also set after billing-list fee refund. */ - REFUNDED(9); + REFUNDED(9), + /** Upstream: cancelled / deleted. */ + CANCELLED(10); private final int code; @@ -31,6 +34,12 @@ public enum BillOrderStatus return status != null && status.intValue() == code; } + /** Upstream ORDER_STATUS 9/10 -> fee refund path. */ + public static boolean requiresFeeRefund(Integer status) + { + return REFUNDED.matches(status) || CANCELLED.matches(status); + } + public static BillOrderStatus of(Integer status) { if (status == null) diff --git a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcBillingTaskServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcBillingTaskServiceImpl.java index bcfe5d03..71fd3884 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcBillingTaskServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcBillingTaskServiceImpl.java @@ -21,6 +21,7 @@ import com.bms.price.domain.vo.BillingTaskSubmitRequest; import com.bms.price.domain.vo.TmsPriceBillRequest; import com.bms.price.domain.vo.TmsPriceQuoteResult; import com.bms.price.enums.BillBillingFailStatus; +import com.bms.price.enums.BillOrderStatus; import com.bms.price.enums.BillTaskFailCode; import com.bms.price.enums.BillTaskSuccessStatus; import com.bms.price.enums.BillTaskType; @@ -293,6 +294,20 @@ public class PrcBillingTaskServiceImpl implements IPrcBillingTaskService { throw new ServiceException("Oracle order mapped orderNo empty"); } + // Upstream ORDER_STATUS 9/10 -> REFUND (even if task was submitted as PENDING/REBILL). + if (BillOrderStatus.requiresFeeRefund(billReq.getOrderStatus())) + { + String refundOrderNo = StringUtils.isNotEmpty(billReq.getOrderNo()) + ? billReq.getOrderNo().trim() + : resolveRefundOrderNo(task); + log.info("billing task upstream status {} -> REFUND path taskId={} orderNo={}", + billReq.getOrderStatus(), taskId, refundOrderNo); + task.setBillType(BillTaskType.REFUND.getCode()); + fillCustomerCodeFromBill(task, refundOrderNo); + refundWithDbRetry(taskId, refundOrderNo); + deleteTaskAfterBillSaved(task); + return; + } if (StringUtils.isEmpty(billReq.getCustomerCode())) { throw new ServiceException("Oracle order mapped customerCode empty"); diff --git a/bms-back/bms-system/src/main/java/com/bms/price/task/TabOrderSyncAsyncRunner.java b/bms-back/bms-system/src/main/java/com/bms/price/task/TabOrderSyncAsyncRunner.java index 714ce498..44766201 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/task/TabOrderSyncAsyncRunner.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/task/TabOrderSyncAsyncRunner.java @@ -511,9 +511,9 @@ public class TabOrderSyncAsyncRunner { req.setBillType(billType.trim()); } - else if (BillOrderStatus.REFUNDED.matches(row.getOrderStatus())) + else if (BillOrderStatus.requiresFeeRefund(row.getOrderStatus())) { - // Upstream 已退件 (ORDER_STATUS=9) -> fee refund task + // Upstream 已退件(9) / 已取消(10) -> fee refund task req.setBillType(BillTaskType.REFUND.getCode()); } return req;