🐛 修复付款管理同步金蝶后正式结算单未回写金蝶单据号与同步状态

This commit is contained in:
刘泉佳
2026-09-18 16:31:20 +08:00
parent 10dbd487e1
commit 83cd70df00
@@ -418,6 +418,9 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
}
log.info("付款申请[{}]金蝶财务应付单(A102-2)处理完成({}),单据编号[{}]已回填 kingdeeBillNo",
entity.getPaymentNo(), apBillOutcome.alreadyExist() ? "金蝶已存在,幂等跳过保存" : "本次推送成功", apBillOutcome.billNo());
// A102-2 结果回写关联正式结算单(正常推送与金蝶已存在幂等恢复统一处理):
// 结算单回写财务应付单编号(A102-2 billNo),与付款申请后续回填的付款申请单编号(A103-2)不是同一单据
syncSettlementKingdeeResult(entity, apBillOutcome.billNo(), context);
if (apBillOutcome.alreadyExist()) {
// 应付单已生成说明上次同步已保存成功、在下推或落库环节中断:先经 A103-2 查询付款申请单是否已下推成功,
// 已生成则直接回填单据id与编号并视为同步成功(本地状态因异常回滚未落库),未生成才继续 A103-1 下推,
@@ -792,6 +795,34 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
return existBillNos;
}
/**
* A102-2 结果回写关联正式结算单:金蝶单据编号(财务应付单编号)、同步状态置已同步、同步时间。
* 正式结算单列表据此回显金蝶单据号与单据状态;一个付款申请可能关联多张正式结算单,
* 按结算明细归属的结算单去重后批量回写,结算单已同步时重复回写为幂等更新。
* 注意回写的是财务应付单编号(A102-2 billNo),付款申请表的 kingdeeBillNo 后续由
* A103-2 定时回写任务覆盖为付款申请单编号,两者不是同一单据,禁止混用
*
* @param entity 付款申请实体
* @param apBillBillNo 金蝶财务应付单单据编号(A102-2 返回)
* @param context 金蝶同步上下文(缓存载体)
*/
private void syncSettlementKingdeeResult(PaymentApplication entity, String apBillBillNo, KingdeeSyncContext context) {
if (Func.isEmpty(apBillBillNo)) {
return;
}
List<Long> settlementIds = settlementDetails(entity, context).stream()
.map(FormalSettlementDetail::getFormalSettlementId)
.filter(Objects::nonNull).distinct().toList();
if (Func.isEmpty(settlementIds)) {
return;
}
formalSettlementMapper.update(null, Wrappers.<FormalSettlement>lambdaUpdate()
.in(FormalSettlement::getId, settlementIds)
.set(FormalSettlement::getKingdeeBillNo, apBillBillNo)
.set(FormalSettlement::getKingdeeSyncStatus, KingdeeBfiConstant.KINGDEE_STATUS_SYNCED)
.set(FormalSettlement::getSyncedTime, LocalDateTime.now()));
}
/**
* 查询正式结算单下绑定、单据状态为审核通过(approved)的付款信息(blade_formal_settlement_payment)。
* 付款申请可能关联多张正式结算单,按结算明细归属的结算单汇总去重后查询,创建时间升序