fix: 付款特批未完成时跳过金蝶同步,特批通过后自动补推

This commit is contained in:
刘泉佳
2026-10-22 14:02:20 +08:00
parent 2b581b7305
commit 5b9a55d1b7
2 changed files with 27 additions and 0 deletions
@@ -22,7 +22,9 @@ package org.springblade.transport.listener;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.transport.config.BfiProperties;
import org.springblade.transport.constant.HcsSyncConstant;
import org.springblade.transport.event.KingdeeBillApprovedEvent;
import org.springblade.transport.pojo.entity.PaymentApplication;
import org.springblade.transport.service.IFormalSettlementService;
import org.springblade.transport.service.IInvoiceApplicationService;
import org.springblade.transport.service.IInvoiceReceiptService;
@@ -115,6 +117,15 @@ public class KingdeeApprovalSyncListener {
if (!bfiProperties.getAutoSync().isPayment()) {
return;
}
// 付款特批未完成(高风险/黑名单/额度超额)时金蝶必然拒推:跳过而非置失败,
// 特批通过后由 HcsPaymentSyncSupport 重新发布本事件自动补推
PaymentApplication payment = paymentApplicationService.getById(id);
if (payment != null && payment.getHcsSpecStatus() != null
&& List.of(HcsSyncConstant.SPEC_STATUS_NEED, HcsSyncConstant.SPEC_STATUS_PUSHING,
HcsSyncConstant.SPEC_STATUS_PROCESSING).contains(payment.getHcsSpecStatus())) {
log.info("付款申请[{}]审批通过自动同步金蝶跳过(付款特批未完成):hcsSpecStatus={}", id, payment.getHcsSpecStatus());
return;
}
log.info("付款申请[{}]审批通过自动同步金蝶开始", id);
String kingdeeBillId = paymentApplicationService.syncKingdee(id);
log.info("付款申请[{}]审批通过自动同步金蝶完成:kingdeeBillId={}", id, kingdeeBillId);
@@ -34,8 +34,10 @@ import org.springblade.hcs.config.HcsProperties;
import org.springblade.hcs.dto.HcsLegalResultDTO;
import org.springblade.transport.constant.HcsSyncConstant;
import org.springblade.transport.constant.TransportBusiConstant;
import org.springblade.transport.event.KingdeeBillApprovedEvent;
import org.springblade.transport.mapper.PaymentApplicationMapper;
import org.springblade.transport.pojo.entity.PaymentApplication;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@@ -66,6 +68,7 @@ public class HcsPaymentSyncSupport {
private final HcsProperties hcsProperties;
private final HcsSpecPaySyncSupport hcsSpecPaySyncSupport;
private final HcsPerfRecordSyncSupport hcsPerfRecordSyncSupport;
private final ApplicationEventPublisher eventPublisher;
/**
* 推送付款申请到 HCS:特批(如需)→ 履约记录(新建/更新)→ 回填整体同步状态
@@ -140,6 +143,7 @@ public class HcsPaymentSyncSupport {
syncPaymentOnSpecResult(payment, HcsSyncConstant.SPEC_STATUS_APPROVED.equals(result));
payment.setHcsSpecStatus(result);
paymentApplicationMapper.updateById(payment);
publishKingdeeAutoSyncOnSpecApproved(payment, result);
log.info("HCS特批结果人工确认:paymentNo={},specFdId={},结果={}", payment.getPaymentNo(), payment.getHcsSpecFdId(), result);
return "特批结果已确认:" + result;
}
@@ -179,10 +183,22 @@ public class HcsPaymentSyncSupport {
syncPaymentOnSpecResult(payment, HcsSyncConstant.SPEC_STATUS_APPROVED.equals(status));
payment.setHcsSpecStatus(status);
paymentApplicationMapper.updateById(payment);
publishKingdeeAutoSyncOnSpecApproved(payment, status);
log.info("付款特批结果推送处理完成:paymentNo={},结果={},reason={}", payment.getPaymentNo(), status, param.getReason());
return "特批结果已处理:" + status;
}
/**
* 特批通过后自动补推金蝶:审批通过时因特批挂起已跳过同步(见 KingdeeApprovalSyncListener),
* 此处重新发布审批通过事件复用同一条自动推送链(开关、失败落库与重推兜底口径不变)
*/
private void publishKingdeeAutoSyncOnSpecApproved(PaymentApplication payment, String specStatus) {
if (!HcsSyncConstant.SPEC_STATUS_APPROVED.equals(specStatus)) {
return;
}
eventPublisher.publishEvent(new KingdeeBillApprovedEvent(KingdeeBillApprovedEvent.BIZ_PAYMENT_APPLICATION, payment.getId()));
}
/**
* 特批结果联动付款审批状态(handleLegalResult 与 confirmSpecResult 共用,仅改字段,随 updateById 落库):
* approved 恢复"审批通过"展示并放行(审批状态保持 approved,金蝶推送门禁解除);