:feat: 新增金蝶单据锁定解锁总开关(billLock.enabled,控制推送锁单/解锁回调/补偿重锁)

This commit is contained in:
刘泉佳
2026-10-15 03:21:33 +08:00
parent 94acfc2174
commit e24314d6cb
3 changed files with 25 additions and 0 deletions
@@ -372,6 +372,14 @@ public class BfiProperties {
@Data
public static class BillLock {
/**
* 锁定/解锁总开关(thirdParty.bfi.billLock.enabled):推送后锁定 lockBusiData、
* 金蝶解锁回调 unLockNotifyBusiData、锁定补偿重锁三处共用;
* 默认开启保持既有锁定行为,Nacos 置 false 一键停用
* (推送后不再锁单、解锁回调只应答不处理、补偿跳过),存量锁记录守卫(不可编辑校验)不受影响
*/
private boolean enabled = true;
/**
* 锁定补偿开关,默认关闭(安全兜底)
*/
@@ -73,6 +73,11 @@ public class KingdeeBillLockServiceImpl extends ServiceImpl<KingdeeBillLockMappe
@Override
public String lockAfterPush(String sourceBillType, Long sourceBillId, String sourceBillNo, String targetBillType, List<String> targetBillNos) {
// 总开关关闭:不落锁记录、不调 lockBusiData,返回 null 不影响推送主流程
if (!bfiProperties.getBillLock().isEnabled()) {
log.info("金蝶单据锁定总开关关闭,跳过锁定:源单[{}:{}]", sourceBillType, sourceBillNo);
return null;
}
if (Func.isEmpty(targetBillNos)) {
return null;
}
@@ -145,6 +150,12 @@ public class KingdeeBillLockServiceImpl extends ServiceImpl<KingdeeBillLockMappe
@Override
@Transactional(rollbackFor = Exception.class)
public int onUnlockNotify(BfiBillLockDTO param) {
// 总开关关闭:只应答不处理(返回 0 与「未匹配」同构,金蝶侧不会触发重试)
if (!bfiProperties.getBillLock().isEnabled()) {
log.warn("金蝶单据锁定总开关关闭,跳过解锁回调处理:operationType={},targetBillNo={}",
param == null ? null : param.getOperationType(), param == null ? null : param.getTargetBillNo());
return 0;
}
if (param == null || !KingdeeLockConstant.SYSTEM_XH.equals(param.getSourceSystem())
|| !KingdeeLockConstant.SYSTEM_WLTMS.equals(param.getTargetSystem())
|| !KingdeeLockConstant.ACTION_UNLOCK.equals(param.getLockAction())) {
@@ -265,6 +276,10 @@ public class KingdeeBillLockServiceImpl extends ServiceImpl<KingdeeBillLockMappe
*/
@Override
public String retryFailedLocks() {
// 总开关关闭:定时任务与手动补偿一并跳过
if (!bfiProperties.getBillLock().isEnabled()) {
return "金蝶单据锁定总开关关闭,跳过补偿";
}
List<KingdeeBillLock> failedList = this.list(Wrappers.<KingdeeBillLock>lambdaQuery()
.eq(KingdeeBillLock::getLockStatus, KingdeeLockConstant.STATUS_FAILED)
.lt(KingdeeBillLock::getTryCount, KingdeeLockConstant.RETRY_MAX_COUNT));
+2
View File
@@ -96,6 +96,8 @@ thirdParty:
lockLeaseSeconds: ${BFI_RECEIPT_CLAIM_PUSH_LOCK_LEASE_SECONDS:1800}
# 金蝶单据锁定定时补偿
billLock:
# 锁定/解锁总开关(推送后锁定+解锁回调+补偿重锁共用),默认开启保持既有行为
enabled: ${BFI_BILL_LOCK_ENABLED:true}
# 锁定补偿开关,默认关闭(安全兜底)
retryEnabled: ${BFI_BILL_LOCK_RETRY_ENABLED:false}
# 补偿调度 cron,默认每5分钟(:02 起步,错峰避让其他金蝶任务)