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)); .eq(InvoiceApplicationSettlement::getInvoiceApplicationId, id));
if (Func.isEmpty(relations)) throw new ServiceException("推送金蝶开票申请失败:开票申请未关联正式结算单"); if (Func.isEmpty(relations)) throw new ServiceException("推送金蝶开票申请失败:开票申请未关联正式结算单");
List<String> arSrcCodes = new ArrayList<>(); List<String> arSrcCodes = new ArrayList<>();
String firstArBillNo = null;
Map<String, String> settlementNoBySrcCode = new LinkedHashMap<>(); Map<String, String> settlementNoBySrcCode = new LinkedHashMap<>();
for (InvoiceApplicationSettlement relation : relations) { for (InvoiceApplicationSettlement relation : relations) {
FormalSettlement settlement = formalSettlementMapper.selectById(relation.getFormalSettlementId()); FormalSettlement settlement = formalSettlementMapper.selectById(relation.getFormalSettlementId());
@@ -573,9 +572,6 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl<InvoiceApplic
String srcCode = kingdeeArBillSyncSupport.arBillSrcCode(settlement, details); String srcCode = kingdeeArBillSyncSupport.arBillSrcCode(settlement, details);
arSrcCodes.add(srcCode); arSrcCodes.add(srcCode);
settlementNoBySrcCode.put(srcCode, Func.toStr(settlement.getFormalSettlementNo())); settlementNoBySrcCode.put(srcCode, Func.toStr(settlement.getFormalSettlementNo()));
if (firstArBillNo == null) {
firstArBillNo = settlement.getKingdeeBillNo();
}
} }
Map<String, String> existArNos = kingdeeArBillSyncSupport.queryArBillExistNos(arSrcCodes); Map<String, String> existArNos = kingdeeArBillSyncSupport.queryArBillExistNos(arSrcCodes);
for (Map.Entry<String, String> entry : settlementNoBySrcCode.entrySet()) { 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() List<InvoiceApplicationSheet> sheets = sheetMapper.selectList(Wrappers.<InvoiceApplicationSheet>lambdaQuery()
.eq(InvoiceApplicationSheet::getInvoiceApplicationId, id).orderByAsc(InvoiceApplicationSheet::getSheetNo)); .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, 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=[{}],价税合计=[{}],分录{}条", log.info("金蝶开票申请推送:开票申请[{}]发票张[{}],billno=[{}],价税合计=[{}],分录{}条",
entity.getApplicationNo(), sheet.getSheetNo(), sheetBillNo, sheet.getInvoiceAmount(), items.size()); entity.getApplicationNo(), sheet.getSheetNo(), sheetBillNo, sheet.getInvoiceAmount(), items.size());
BfiBillSaveResultVO saveResult = bfiService.saveInvoiceApply(param); BfiBillSaveResultVO saveResult = bfiService.saveInvoiceApply(param);
@@ -729,10 +728,12 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl<InvoiceApplic
/** /**
* 组装 A303-1 单张开票申请单入参(字段映射见设计文档 6.3/6.4), * 组装 A303-1 单张开票申请单入参(字段映射见设计文档 6.3/6.4),
* 购销方等主表公共字段随开票申请取数,价税合计与单据体分录取本张发票 * 购销方等主表公共字段随开票申请取数,价税合计与单据体分录取本张发票
*
* @param firstArBillNo 上游来源单据号:首张关联结算单的金蝶应收单单据编号(多张结算单取第一张)
*/ */
private BfiInvoiceApplySaveDTO buildInvoiceApplyParam(InvoiceApplication entity, String billNo, private BfiInvoiceApplySaveDTO buildInvoiceApplyParam(InvoiceApplication entity, String billNo,
CustomerArchive seller, String salerAddr, String salerBank, Dept dept, CustomerArchive customer, 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 param = new BfiInvoiceApplySaveDTO();
// ==================== 以下为【必填】字段(BfiInvoiceApplySaveDTO 标注),非必填字段先注释保留 ==================== // ==================== 以下为【必填】字段(BfiInvoiceApplySaveDTO 标注),非必填字段先注释保留 ====================
// 【必填】组织.编码:申请部门 deptId → 金蝶组织编码 // 【必填】组织.编码:申请部门 deptId → 金蝶组织编码
@@ -790,10 +791,10 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl<InvoiceApplic
// param.setTotaltax(totaltax); // param.setTotaltax(totaltax);
// 数据来源:固定 3 // 数据来源:固定 3
// param.setBillsource("3"); // param.setBillsource("3");
// 来源单据:ar_finarbill 财务应收单 // 来源单据:ar_finarbill 财务应收单(金蝶联调确认开票申请须挂上游应收单)
// param.setAwrpSrcBt(KingdeeBfiConstant.BFI_AR_BILL_SRC_BT); param.setAwrpSrcBt(KingdeeBfiConstant.BFI_AR_BILL_SRC_BT);
// 上游外部系统单据号:第一张关联结算单的金蝶应收单号(多张拼接规则待联调确认) // 上游单据号:首张关联结算单的金蝶应收单单据编号(金蝶确认传单据编号口径,A302-4 预检已确认存在)
// param.setAwrpSrcConNo(firstArBillNo); param.setAwrpSrcConNo(firstArBillNo);
// 数据来源系统 // 数据来源系统
param.setSystemsource(bfiProperties.getSrcSys()); param.setSystemsource(bfiProperties.getSrcSys());
@@ -4,7 +4,7 @@
> 对接系统:金蝶云·星瀚(业财融合 BFI,经 iPaaS 网关) > 对接系统:金蝶云·星瀚(业财融合 BFI,经 iPaaS 网关)
> 覆盖接口:A302-2 财务应收单保存、A302-4 财务应收单查询、A303-1 开票申请单新增、A303-4 开票申请单查询、A303-5 开票申请发票查询 > 覆盖接口: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-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 | 客户.编码 | 是 | 受票方客商档案客商编码(未维护报错) | 客商档案「客商编号」 | | customnameid_number | 客户.编码 | 是 | 受票方客商档案客商编码(未维护报错) | 客商档案「客商编号」 |
| awrp_project_number | 项目.项目编码 | 是 | 联调期 999 | — | | awrp_project_number | 项目.项目编码 | 是 | 联调期 999 | — |
| billsource | 数据来源 | 是 | 固定 3 | 无 | | billsource | 数据来源 | 是 | 固定 3 | 无 |
| awrp_src_bt / awrp_src_con_no | 上游来源单据/单号 | 是 | ar_finarbill / 关联结算单金蝶应收单号(多张取第一张,拼接规则联调确认) | 环节一回写的「金蝶单据编号」 | | awrp_src_bt / awrp_src_con_no | 上游来源单据/单号 | 是 | ar_finarbill / 首张关联结算单的金蝶应收单**单据编号**(金蝶联调确认传单据编号,取 A302-4 预检查询结果为准,多张取第一张) | 环节一回写的「金蝶单据编号」 |
| systemsource | 系统来源 | 否 | 暂不传(联调校准项) | — | | systemsource | 系统来源 | 否 | thirdParty.bfi.srcSys(默认 WLTMS) | 无(后端配置) |
分录(sim_original_bill_item,逐「开票内容」商品行一条,按发票张次+张内行号平铺):取数口径即商品行落库值,**不回查开票项目主数据、不按开票明细→费用行展开分摊**(实现见 `InvoiceApplicationServiceImpl.resolveInvoiceApplyEntries`,仅查张次与商品行两张表): 分录(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` 有默认值无需配置 | | 2 | Nacos 配置 | 仅需已有 `thirdParty.bfi.srcSys`(默认 WLTMS)与任务开关/`cron`;`invoiceApply.salerName/salerTaxNo/taxratecode` **已取消**,`invoiceApply.srcType` 有默认值无需配置 |
| 3 | 客商档案 | 我方开票单位(结算单收款方)与受票方客户均须入客商档案:我方须维护**统一社会信用代码**(销方税号),受票方须维护**客商编码**;受票方另需维护客商开票信息(税号、邮箱等) | | 3 | 客商档案 | 我方开票单位(结算单收款方)与受票方客户均须入客商档案:我方须维护**统一社会信用代码**(销方税号),受票方须维护**客商编码**;受票方另需维护客商开票信息(税号、邮箱等) |
| 4 | 主数据 | 开票项目须维护税收分类编码(新增开票内容选择即快照);货物类型档案货物编码;部门编码 | | 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` 验证回写 | | 6 | 联调顺序 | 应收结算单同步(①)→ 开票申请同步(②)→ 手动触发 `sync-kingdee-ar-result` / `sync-kingdee-invoice-result` 验证回写 |
--- ---