diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/FormalSettlementController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/FormalSettlementController.java index 313fe1e0..dce2d006 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/FormalSettlementController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/FormalSettlementController.java @@ -36,6 +36,7 @@ import org.springblade.transport.excel.FormalSettlementExcel; import org.springblade.transport.pojo.vo.PreSettlementVO; import org.springblade.transport.service.IFormalSettlementService; import org.springblade.transport.service.IInvoiceReceiptService; +import org.springblade.transport.service.IKingdeeBillLockService; import org.springblade.transport.service.IPreSettlementService; import org.springblade.transport.service.IReceiptFlowService; import org.springframework.web.bind.annotation.GetMapping; @@ -62,6 +63,7 @@ import java.math.RoundingMode; @Tag(name = "正式结算单", description = "正式结算单管理") public class FormalSettlementController extends BladeController { private final IFormalSettlementService formalSettlementService; + private final IKingdeeBillLockService kingdeeBillLockService; private final IPreSettlementService preSettlementService; private final IReceiptFlowService receiptFlowService; private final IInvoiceReceiptService invoiceReceiptService; @@ -216,6 +218,13 @@ public class FormalSettlementController extends BladeController { @Operation(summary = "手动勾稽金蝶应收单(A302-4 回写纠偏)") public R syncKingdeeArResult() { return R.data(formalSettlementService.syncKingdeeArResult()); } + @PostMapping("/retry-kingdee-bill-lock") + @ApiOperationSupport(order = 17) + @Operation(summary = "手动补偿金蝶单据锁定(扫锁定失败锁记录重调lockBusiData,应付/应收/开票通用)") + public R retryKingdeeBillLock() { + return R.data(kingdeeBillLockService.retryFailedLocks()); + } + @GetMapping("/detail-fees") @ApiOperationSupport(order = 16) @Operation(summary = "正式结算货物费用快照") diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IKingdeeBillLockService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IKingdeeBillLockService.java index b025f4d8..4385f234 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IKingdeeBillLockService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IKingdeeBillLockService.java @@ -24,7 +24,7 @@ public interface IKingdeeBillLockService extends IService { /** * 推送金蝶成功后锁单(由各推送链路在主单事务提交后调用): * 每张金蝶目标单一行锁记录(先落 failed 再调 lockBusiData,成功翻 locked); - * 同源单的目标单合并为一次调用(编号逗号拼接批量传参);已 locked 幂等跳过,failed 原地重锁; + * 同源单的目标单合并为一次调用(编号逗号拼接批量传参);已 locked 幂等跳过,failed 原地重锁并重置补偿计数; * 异常独立捕获,不影响主单同步状态 * * @param sourceBillType WLTMS 单据类型(SETTLEMENT/INVOICE_APPLY) @@ -32,8 +32,9 @@ public interface IKingdeeBillLockService extends IService { * @param sourceBillNo WLTMS 单号 * @param targetBillType 金蝶目标单据类型 * @param targetBillNos 金蝶单据编号集合(开票申请为多张) + * @return 锁定失败的金蝶单号摘要(逗号拼接),全部锁定成功返回 null;调用方可拼入页面提示 */ - void lockAfterPush(String sourceBillType, Long sourceBillId, String sourceBillNo, String targetBillType, List targetBillNos); + String lockAfterPush(String sourceBillType, Long sourceBillId, String sourceBillNo, String targetBillType, List targetBillNos); /** * 金蝶解锁回调(unLockNotifyBusiData):校验来源/目标系统与 lockAction, diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/FormalSettlementServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/FormalSettlementServiceImpl.java index 683bb681..3febe7b9 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/FormalSettlementServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/FormalSettlementServiceImpl.java @@ -600,11 +600,13 @@ public class FormalSettlementServiceImpl extends BaseServiceImpl targetBillNos) { + public String lockAfterPush(String sourceBillType, Long sourceBillId, String sourceBillNo, String targetBillType, List targetBillNos) { if (Func.isEmpty(targetBillNos)) { - return; + return null; } String operator = operatorName(); // 待锁目标单:已 locked 幂等跳过(人工重推「同步金蝶」幂等命中路径不会重复锁); @@ -80,7 +80,7 @@ public class KingdeeBillLockServiceImpl extends ServiceImpl