diff --git a/bms-back/ruoyi-system/src/main/java/com/ruoyi/ar/service/impl/ArBillServiceImpl.java b/bms-back/ruoyi-system/src/main/java/com/ruoyi/ar/service/impl/ArBillServiceImpl.java index d2d32457..86fa98da 100644 --- a/bms-back/ruoyi-system/src/main/java/com/ruoyi/ar/service/impl/ArBillServiceImpl.java +++ b/bms-back/ruoyi-system/src/main/java/com/ruoyi/ar/service/impl/ArBillServiceImpl.java @@ -292,15 +292,11 @@ public class ArBillServiceImpl implements IArBillService bill.getStatus(), "账单状态已发生变化,请刷新后重试", operator, requestId); } - // 账单确认:应收形成,按账单金额占用客户授信额度(账户不存在时仅CNY会自动初始化) - customerMoneyService.occupyCredit(bill.getCustomerId(), bill.getCurrency(), - nvl(bill.getTotalAmount())); + // 账单确认:应收形成,按账单金额占用客户授信额度。 + // 不校验可用额度,兼容历史 used_credit 可高于总额度、外币账户静默跳过的口径。 + customerAccountApi.occupyCredit(buildCreditCommand(bill, "确认应收账单")); recordSuccess(bill, ArLogObjectType.BILL, ArLogOperationType.CONFIRM, "确认应收账单", ArBillStatus.DRAFT.getCode(), ArBillStatus.CONFIRMED.getCode(), requestId, operator); - // 账单确认:应收形成,按账单金额占用客户授信额度(账户不存在时仅CNY会自动初始化)。 - // 不校验可用额度,兼容历史 used_credit 可高于总额度、外币账户静默跳过的口径 - customerAccountApi.occupyCredit(buildCreditCommand(bill)); - recordSuccess(bill, "CONFIRM", "确认应收账单", ArBillStatus.DRAFT.getCode(), ArBillStatus.CONFIRMED.getCode(), requestId, operator); return selectArBillById(arBillId); } @@ -341,11 +337,10 @@ public class ArBillServiceImpl implements IArBillService bill.getStatus(), "账单状态已发生变化,请刷新后重试", operator, requestId); } - // 账单作废:已确认账单占用的授信额度全额释放(可作废的CONFIRMED账单必然零核销) + // 账单作废:已确认账单占用的授信额度全额释放(可作废的CONFIRMED账单必然零核销)。 if (currentStatus == ArBillStatus.CONFIRMED) { - customerMoneyService.releaseCredit(bill.getCustomerId(), bill.getCurrency(), - nvl(bill.getTotalAmount())); + customerAccountApi.releaseCredit(buildCreditCommand(bill, "作废应收账单")); } if (!sourceBillIds.isEmpty()) { @@ -575,6 +570,22 @@ public class ArBillServiceImpl implements IArBillService return new ServiceException(message); } + /** 构造客户资金模块使用的应收账单授信命令,确认和作废共用同一业务标识。 */ + private CreditUsageCommand buildCreditCommand(ArBill bill, String reason) + { + CreditUsageCommand command = new CreditUsageCommand(); + command.setCustomerId(bill.getCustomerId()); + command.setCurrency(bill.getCurrency()); + command.setAmount(nvl(bill.getTotalAmount())); + command.setBizType(CustomerFundBizType.AR_BILL); + command.setBizId(bill.getArBillId()); + command.setBizNo(bill.getBillNo()); + command.setReason(reason + ":" + bill.getBillNo()); + // 应收确认沿用历史口径:允许已用额度暂时超过额度上限;释放场景该字段无意义。 + command.setCheckAvailable(Boolean.FALSE); + return command; + } + private byte[] buildWorkbook(ArBill bill) throws IOException { ClassPathResource resource = new ClassPathResource(EXPORT_TEMPLATE_RESOURCE);