fix: A303-1 开票申请推送放开上游来源单据字段,awrp_src_con_no 传首张结算单金蝶应收单编号(金蝶确认单据编号口径,取 A302-4 查询结果)

This commit is contained in:
刘泉佳
2026-10-01 22:23:41 +08:00
parent ab64d28251
commit d78757b64c
2 changed files with 15 additions and 14 deletions
@@ -558,7 +558,6 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl<InvoiceApplic
.eq(InvoiceApplicationSettlement::getInvoiceApplicationId, id));
if (Func.isEmpty(relations)) throw new ServiceException("推送金蝶开票申请失败:开票申请未关联正式结算单");
List<String> arSrcCodes = new ArrayList<>();
String firstArBillNo = null;
Map<String, String> settlementNoBySrcCode = new LinkedHashMap<>();
for (InvoiceApplicationSettlement relation : relations) {
FormalSettlement settlement = formalSettlementMapper.selectById(relation.getFormalSettlementId());
@@ -573,9 +572,6 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl<InvoiceApplic
String srcCode = kingdeeArBillSyncSupport.arBillSrcCode(settlement, details);
arSrcCodes.add(srcCode);
settlementNoBySrcCode.put(srcCode, Func.toStr(settlement.getFormalSettlementNo()));
if (firstArBillNo == null) {
firstArBillNo = settlement.getKingdeeBillNo();
}
}
Map<String, String> existArNos = kingdeeArBillSyncSupport.queryArBillExistNos(arSrcCodes);
for (Map.Entry<String, String> entry : settlementNoBySrcCode.entrySet()) {
@@ -584,6 +580,9 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl<InvoiceApplic
+ "]财务应收单未在金蝶生成,请先在正式付款单页面同步金蝶");
}
}
// 上游来源单据号(awrp_src_con_no):首张关联结算单的金蝶应收单单据编号(金蝶确认传单据编号口径),
// 以 A302-4 查询结果为准(存量本地单号缺失也能取到),多张结算单取第一张
String firstArBillNo = existArNos.get(arSrcCodes.get(0));
// 加载发票张次与商品行:每张发票张次对应一张金蝶开票申请单(按张次拆分开票)
List<InvoiceApplicationSheet> sheets = sheetMapper.selectList(Wrappers.<InvoiceApplicationSheet>lambdaQuery()
.eq(InvoiceApplicationSheet::getInvoiceApplicationId, id).orderByAsc(InvoiceApplicationSheet::getSheetNo));
@@ -681,7 +680,7 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl<InvoiceApplic
+ "]无商品行,无法组装分录");
}
BfiInvoiceApplySaveDTO param = this.buildInvoiceApplyParam(entity, sheetBillNo, seller, salerAddr, salerBank,
dept, customer, money(sheet.getInvoiceAmount()), items);
dept, customer, firstArBillNo, money(sheet.getInvoiceAmount()), items);
log.info("金蝶开票申请推送:开票申请[{}]发票张[{}],billno=[{}],价税合计=[{}],分录{}条",
entity.getApplicationNo(), sheet.getSheetNo(), sheetBillNo, sheet.getInvoiceAmount(), items.size());
BfiBillSaveResultVO saveResult = bfiService.saveInvoiceApply(param);
@@ -729,10 +728,12 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl<InvoiceApplic
/**
* 组装 A303-1 单张开票申请单入参(字段映射见设计文档 6.3/6.4),
* 购销方等主表公共字段随开票申请取数,价税合计与单据体分录取本张发票
*
* @param firstArBillNo 上游来源单据号:首张关联结算单的金蝶应收单单据编号(多张结算单取第一张)
*/
private BfiInvoiceApplySaveDTO buildInvoiceApplyParam(InvoiceApplication entity, String billNo,
CustomerArchive seller, String salerAddr, String salerBank, Dept dept, CustomerArchive customer,
BigDecimal sheetAmount, List<BfiInvoiceApplySaveEntryDTO> items) {
String firstArBillNo, BigDecimal sheetAmount, List<BfiInvoiceApplySaveEntryDTO> items) {
BfiInvoiceApplySaveDTO param = new BfiInvoiceApplySaveDTO();
// ==================== 以下为【必填】字段(BfiInvoiceApplySaveDTO 标注),非必填字段先注释保留 ====================
// 【必填】组织.编码:申请部门 deptId → 金蝶组织编码
@@ -790,10 +791,10 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl<InvoiceApplic
// param.setTotaltax(totaltax);
// 数据来源:固定 3
// param.setBillsource("3");
// 来源单据:ar_finarbill 财务应收单
// param.setAwrpSrcBt(KingdeeBfiConstant.BFI_AR_BILL_SRC_BT);
// 上游外部系统单据号:第一张关联结算单的金蝶应收单号(多张拼接规则待联调确认)
// param.setAwrpSrcConNo(firstArBillNo);
// 来源单据:ar_finarbill 财务应收单(金蝶联调确认开票申请须挂上游应收单)
param.setAwrpSrcBt(KingdeeBfiConstant.BFI_AR_BILL_SRC_BT);
// 上游单据号:首张关联结算单的金蝶应收单单据编号(金蝶确认传单据编号口径,A302-4 预检已确认存在)
param.setAwrpSrcConNo(firstArBillNo);
// 数据来源系统
param.setSystemsource(bfiProperties.getSrcSys());
@@ -4,7 +4,7 @@
> 对接系统:金蝶云·星瀚(业财融合 BFI,经 iPaaS 网关)
> 覆盖接口:A302-2 财务应收单保存、A302-4 财务应收单查询、A303-1 开票申请单新增、A303-4 开票申请单查询、A303-5 开票申请发票查询
> 关联文档:`2026-09-20-应收结算与开票申请同步金蝶设计.md`(设计口径与遗留清单)、`2026-09-20-应付单与付款申请同步金蝶全链路业务流程(A102-2保存-A102-4查询-A103-1下推-A103-2回写).md`(应付侧对称链路)
> 最后更新:2026-09-21(按当前代码梳理;销方名称/销方税号/税收分类编码已改为随单据取数,不再使用 Nacos 配置)
> 最后更新:2026-10-01(A303-1 上游来源单据放开传值:awrp_src_bt=ar_finarbill + awrp_src_con_no=首张结算单金蝶应收单编号;2026-09-21 按当前代码梳理,销方名称/销方税号/税收分类编码随单据取数)
---
@@ -156,8 +156,8 @@ kingdeeSyncStatus:unsynced ──A302-2成功──> synced(终态)
| customnameid_number | 客户.编码 | 是 | 受票方客商档案客商编码(未维护报错) | 客商档案「客商编号」 |
| awrp_project_number | 项目.项目编码 | 是 | 联调期 999 | — |
| billsource | 数据来源 | 是 | 固定 3 | 无 |
| awrp_src_bt / awrp_src_con_no | 上游来源单据/单号 | 是 | ar_finarbill / 关联结算单金蝶应收单号(多张取第一张,拼接规则联调确认) | 环节一回写的「金蝶单据编号」 |
| systemsource | 系统来源 | 否 | 暂不传(联调校准项) | — |
| awrp_src_bt / awrp_src_con_no | 上游来源单据/单号 | 是 | ar_finarbill / 首张关联结算单的金蝶应收单**单据编号**(金蝶联调确认传单据编号,取 A302-4 预检查询结果为准,多张取第一张) | 环节一回写的「金蝶单据编号」 |
| systemsource | 系统来源 | 否 | thirdParty.bfi.srcSys(默认 WLTMS) | 无(后端配置) |
分录(sim_original_bill_item,逐「开票内容」商品行一条,按发票张次+张内行号平铺):取数口径即商品行落库值,**不回查开票项目主数据、不按开票明细→费用行展开分摊**(实现见 `InvoiceApplicationServiceImpl.resolveInvoiceApplyEntries`,仅查张次与商品行两张表):
@@ -223,7 +223,7 @@ kingdeeStatus:unsynced ──A303-1成功──> synced ──A303-5查到发
| 2 | Nacos 配置 | 仅需已有 `thirdParty.bfi.srcSys`(默认 WLTMS)与任务开关/`cron`;`invoiceApply.salerName/salerTaxNo/taxratecode` **已取消**,`invoiceApply.srcType` 有默认值无需配置 |
| 3 | 客商档案 | 我方开票单位(结算单收款方)与受票方客户均须入客商档案:我方须维护**统一社会信用代码**(销方税号),受票方须维护**客商编码**;受票方另需维护客商开票信息(税号、邮箱等) |
| 4 | 主数据 | 开票项目须维护税收分类编码(新增开票内容选择即快照);货物类型档案货物编码;部门编码 |
| 5 | 联调校准项 | A302-2:单据类型/款项性质 1001/CASH/src_type 文案、物料 SP0324+计量 TON+项目 999 临时值(`pushArBill` 调试块);A303-1:rowtype、systemsource、多结算单上游单号拼接;A303-5:原文字段名收敛 |
| 5 | 联调校准项 | A302-2:单据类型/款项性质 1001/CASH/src_type 文案、物料 SP0324+计量 TON+项目 999 临时值(`pushArBill` 调试块);A303-1:rowtype(systemsource 已传 srcSys、上游单据号已放开传首张结算单金蝶应收单编号);A303-5:原文字段名收敛 |
| 6 | 联调顺序 | 应收结算单同步(①)→ 开票申请同步(②)→ 手动触发 `sync-kingdee-ar-result` / `sync-kingdee-invoice-result` 验证回写 |
---