🐛 修复付款管理同步金蝶后正式结算单未回写金蝶单据号与同步状态
This commit is contained in:
+31
@@ -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)。
|
||||
* 付款申请可能关联多张正式结算单,按结算明细归属的结算单汇总去重后查询,创建时间升序
|
||||
|
||||
Reference in New Issue
Block a user