diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/PaymentApplicationVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/PaymentApplicationVO.java index 0d74f7f4..d8bc998f 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/PaymentApplicationVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/PaymentApplicationVO.java @@ -46,6 +46,9 @@ public class PaymentApplicationVO extends PaymentApplication { @TableField(exist = false) private Integer attachmentCount; @TableField(exist = false) private String attachmentSyncStatus; @TableField(exist = false) private String attachmentSyncStatusName; + @TableField(exist = false) private String kingdeeLockStatus; + @TableField(exist = false) private String kingdeeLockFailReason; + @TableField(exist = false) private Integer kingdeeTryCount; @TableField(exist = false) private List invoices; @TableField(exist = false) private List paymentRecords; @TableField(exist = false) private List settlements; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/KingdeeBillLockServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/KingdeeBillLockServiceImpl.java index 6198c49e..d3982a09 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/KingdeeBillLockServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/KingdeeBillLockServiceImpl.java @@ -24,12 +24,15 @@ import org.springblade.transport.constant.TransportBusiConstant; import org.springblade.transport.mapper.FormalSettlementMapper; import org.springblade.transport.mapper.InvoiceApplicationMapper; import org.springblade.transport.mapper.KingdeeBillLockMapper; +import org.springblade.transport.mapper.PaymentApplicationMapper; import org.springblade.transport.pojo.entity.FormalSettlement; import org.springblade.transport.pojo.entity.InvoiceApplication; import org.springblade.transport.pojo.entity.KingdeeBillLock; +import org.springblade.transport.pojo.entity.PaymentApplication; import org.springblade.transport.service.IFormalSettlementService; import org.springblade.transport.service.IInvoiceApplicationService; import org.springblade.transport.service.IKingdeeBillLockService; +import org.springblade.transport.service.IPaymentApplicationService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -66,6 +69,7 @@ public class KingdeeBillLockServiceImpl extends ServiceImpl targetBillNos) { @@ -210,6 +214,20 @@ public class KingdeeBillLockServiceImpl extends ServiceImpl { + PaymentApplication application = paymentApplicationMapper.selectById(lockRecord.getSourceBillId()); + if (application == null || Objects.equals(application.getIsDeleted(), 1)) { + log.warn("金蝶删单回调源付款申请不存在:id={}", lockRecord.getSourceBillId()); + return; + } + if (TransportBusiConstant.VOIDED.equals(application.getApprovalStatus())) { + log.info("金蝶删单回调源付款申请[{}]已作废(幂等跳过)", application.getPaymentNo()); + return; + } + // 复用 ADR-0005 解锁口径:不作废源单,kingdeeStatus→生成失败、清编号内码(原值留档), + // 不自动重推,人工核实后重新推送(A103-2 勾稽预检防重复推单) + SpringUtil.getBean(IPaymentApplicationService.class).unlockBill(application.getId(), "金蝶删单回调"); + } default -> log.warn("金蝶删单回调暂不支持的单据类型:targetBillType={}(映射预留)", lockRecord.getTargetBillType()); } } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java index 41efc41b..a82aa259 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java @@ -51,6 +51,7 @@ import org.springblade.thirdparty.bfi.util.BfiUtil; import org.springblade.transport.config.BfiProperties; import org.springblade.transport.constant.KingdeeAttachmentConstant; import org.springblade.transport.constant.KingdeeBfiConstant; +import org.springblade.transport.constant.KingdeeLockConstant; import org.springblade.transport.constant.TransportBusiConstant; import org.springblade.transport.mapper.BillLedgerMapper; import org.springblade.transport.mapper.BillLedgerUsageMapper; @@ -82,6 +83,7 @@ import org.springblade.transport.pojo.entity.FormalSettlement; import org.springblade.transport.pojo.entity.FormalSettlementDetail; import org.springblade.transport.pojo.entity.FormalSettlementPayment; import org.springblade.transport.pojo.entity.FormalSettlementSource; +import org.springblade.transport.pojo.entity.KingdeeBillLock; import org.springblade.transport.pojo.entity.PaymentApplication; import org.springblade.transport.pojo.entity.PaymentApplicationInvoice; import org.springblade.transport.pojo.entity.PaymentApplicationRecord; @@ -93,6 +95,7 @@ import org.springblade.transport.pojo.entity.TemporaryCreditLimit; import org.springblade.transport.pojo.vo.PaymentApplicationReferenceAmountVO; import org.springblade.transport.pojo.vo.PaymentApplicationVO; import org.springblade.transport.service.IFormalSettlementService; +import org.springblade.transport.service.IKingdeeBillLockService; import org.springblade.transport.service.IPaymentApplicationService; import org.springblade.transport.service.KingdeeSyncContext; import org.springblade.transport.support.KingdeeApBillSyncSupport; @@ -155,6 +158,7 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl rows) { + if (Func.isEmpty(rows)) { + return; + } + Map lockMap = kingdeeBillLockService.mapActiveLocks(KingdeeLockConstant.SOURCE_PAY_APPLY, + rows.stream().map(PaymentApplicationVO::getId).toList()); + for (PaymentApplicationVO vo : rows) { + KingdeeBillLock lockRecord = lockMap.get(vo.getId()); + if (lockRecord == null) { + continue; + } + vo.setKingdeeLockStatus(lockRecord.getLockStatus()); + vo.setKingdeeLockFailReason(lockRecord.getFailReason()); + vo.setKingdeeTryCount(lockRecord.getTryCount()); + } + } + @Override public PaymentApplicationVO detail(Long id) { PaymentApplication entity = existing(id); PaymentApplicationVO vo = PaymentApplicationWrapper.build().entityVO(entity); + fillKingdeeLockStatus(List.of(vo)); vo.setInvoices(invoiceMapper.selectList(Wrappers.lambdaQuery() .eq(PaymentApplicationInvoice::getPaymentApplicationId, id).orderByAsc(PaymentApplicationInvoice::getLineNo))); vo.setPaymentRecords(recordMapper.selectList(Wrappers.lambdaQuery() @@ -386,6 +416,8 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl