From 8d189eb0d57da30a3ca30939bcaba14761dd2e91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Thu, 5 Nov 2026 00:16:38 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E9=87=91=E8=9D=B6=E8=B4=A2?= =?UTF-8?q?=E5=8A=A1=E5=BA=94=E4=BB=98=E5=8D=95=E5=88=86=E5=BD=95=E9=80=81?= =?UTF-8?q?=E7=A8=8E=E7=8E=87=E7=BC=96=E7=A0=81(taxrateid=5Fnumber)?= =?UTF-8?q?=EF=BC=8C=E7=A8=8E=E7=8E=87=E6=98=A0=E5=B0=84Nacos=E5=8F=AF?= =?UTF-8?q?=E7=BB=B4=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../transport/config/BfiProperties.java | 14 +++++++++++ .../support/KingdeeApBillSyncSupport.java | 24 +++++++++++++++++++ .../bfi/pojo/dto/BfiApBillSaveEntryDTO.java | 2 +- doc/nacos/blade-dev.yaml | 11 +++++++++ doc/nacos/third-party-api.yaml | 11 +++++++++ 5 files changed, 61 insertions(+), 1 deletion(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/config/BfiProperties.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/config/BfiProperties.java index 213e316a..11a8c2dc 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/config/BfiProperties.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/config/BfiProperties.java @@ -148,6 +148,20 @@ public class BfiProperties { */ private Material material = new Material(); + /** + * 金蝶税率编码映射(A102-2 财务应付单分录 taxrateid_number):税率数值 -> 金蝶税率.编码(如 9 -> V9), + * 键为税率数值文本(如 "9"、"6.5"),推送时按分录税率查表;未维护该税率时直接拦截报错; + * 分录无税率(计费方案未配置税率组/残差组/手动结算合计费用行)时税率与税率编码均不送 + */ + private Map taxrate = new LinkedHashMap<>() {{ + put("0", "V0"); + put("1", "V1"); + put("3", "V3"); + put("6", "V6"); + put("9", "V9"); + put("13", "V13"); + }}; + /** * 付款申请推送配置项 */ diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/KingdeeApBillSyncSupport.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/KingdeeApBillSyncSupport.java index 82e0b0e3..5455c2d8 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/KingdeeApBillSyncSupport.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/KingdeeApBillSyncSupport.java @@ -383,6 +383,8 @@ public class KingdeeApBillSyncSupport { entry.setEAmount(entryGroup.amountNoTax()); // 税率(%):合同计费方案规则税率(按税率拆行维度),未配置税率/结算合计费用项行不送,金蝶按默认带出 entry.setTaxrate(entryGroup.taxRate()); + // 税率编码(taxrateid_number):thirdparty.bfi.taxrate 配置 税率数值->编码,未维护该税率拦截报错 + entry.setTaxrateidNumber(taxrateCode(entryGroup.taxRate())); // 【必填】项目.项目编码:开关开启取项目档案真实编码(金蝶档案须已存在且编码一致),未关联项目兜底 999 entry.setProjectNumber(this.kingdeeProjectNumber(settlement.getProjectId(), context)); // 【必填】外部系统来源分录标识(候选键):结算明细行取单据号,结算合计费用项行取结算单号-费用类型-费用项拼接 @@ -655,6 +657,28 @@ public class KingdeeApBillSyncSupport { return text != null && text.contains("国际"); } + /** + * 金蝶税率编码(taxrateid_number):thirdparty.bfi.taxrate 配置 税率数值 -> 编码(如 9 -> V9), + * 税率为空(无税率组/手动结算合计费用行)返回 null 不送;配置未维护该税率时直接拦截报错 + * (与物料映射拦截口径一致),税率数值键去除尾零精确匹配(9.00 按 "9" 匹配) + * + * @param taxRate 分录税率(百分数,来自合同计费方案规则) + * @return 金蝶税率.编码,无税率为 null + */ + private String taxrateCode(BigDecimal taxRate) { + if (taxRate == null) { + return null; + } + String rateKey = taxRate.stripTrailingZeros().toPlainString(); + String code = bfiProperties.getTaxrate() == null ? null : bfiProperties.getTaxrate().get(rateKey); + if (Func.isBlank(code)) { + throw new ServiceException("推送金蝶财务应付单失败:税率[" + rateKey + "%]未在配置 thirdparty.bfi.taxrate 中维护税率编码,请补充后重试"); + } + // 税率编码映射判定依据(联调排查:税率 -> 金蝶税率档案编码) + log.info("金蝶税率编码映射: 税率[{}%] -> 编码[{}]", rateKey, code); + return code.trim(); + } + /** * 合同计费方案规则税率解析:费用类型/费用项 -> 税率(取首个配置了税率的规则, * 计费方案 JSON 解析失败按未配置处理,由税率分组处兜底为无税率组) diff --git a/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/pojo/dto/BfiApBillSaveEntryDTO.java b/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/pojo/dto/BfiApBillSaveEntryDTO.java index 1ef2004e..53f71b83 100644 --- a/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/pojo/dto/BfiApBillSaveEntryDTO.java +++ b/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/pojo/dto/BfiApBillSaveEntryDTO.java @@ -98,7 +98,7 @@ public class BfiApBillSaveEntryDTO implements Serializable { */ private Boolean ispresent = Boolean.FALSE; /** - * 税率.编码,城矿传 V13(BfiConstant.TAX_RATE_V13) + * 税率.编码,按 thirdparty.bfi.taxrate 配置的 税率数值->编码 映射取值(如 9 -> V9),未维护该税率拦截报错 */ @JsonProperty("taxrateid_number") private String taxrateidNumber; diff --git a/doc/nacos/blade-dev.yaml b/doc/nacos/blade-dev.yaml index f214c5e1..4bfa61ec 100644 --- a/doc/nacos/blade-dev.yaml +++ b/doc/nacos/blade-dev.yaml @@ -190,6 +190,17 @@ thirdParty: # 仓储大类、手动添加仓储费用物料编码(仓储) warehouse: ${BFI_MATERIAL_WAREHOUSE:XDWL11002001} + # 金蝶税率编码映射(A102-2 财务应付单分录 taxrateid_number):税率数值 -> 税率.编码(如 9 -> V9), + # 键为税率数值文本(含小数税率如 "[6.5]"),未维护该税率时推送拦截报错; + # 分录无税率(计费方案未配置税率组/残差组/手动结算合计费用行)时税率与税率编码均不送 + taxrate: + "[0]": ${BFI_TAXRATE_0:V0} + "[1]": ${BFI_TAXRATE_1:V1} + "[3]": ${BFI_TAXRATE_3:V3} + "[6]": ${BFI_TAXRATE_6:V6} + "[9]": ${BFI_TAXRATE_9:V9} + "[13]": ${BFI_TAXRATE_13:V13} + # 付款申请推送配置(A103-3 付款申请保存) payApply: # 单据类型编码:ap_payapply_BT_S 采购付款申请、ap_payapply_oth_BT_S 其他付款申请 diff --git a/doc/nacos/third-party-api.yaml b/doc/nacos/third-party-api.yaml index 145ef35e..a44464a0 100644 --- a/doc/nacos/third-party-api.yaml +++ b/doc/nacos/third-party-api.yaml @@ -91,6 +91,17 @@ thirdParty: loading: ${BFI_MATERIAL_LOADING:XDWL11002004} # 仓储大类、手动添加仓储费用物料编码(仓储) warehouse: ${BFI_MATERIAL_WAREHOUSE:XDWL11002001} + + # 金蝶税率编码映射(A102-2 财务应付单分录 taxrateid_number):税率数值 -> 税率.编码(如 9 -> V9), + # 键为税率数值文本(含小数税率如 "[6.5]"),未维护该税率时推送拦截报错; + # 分录无税率(计费方案未配置税率组/残差组/手动结算合计费用行)时税率与税率编码均不送 + taxrate: + "[0]": ${BFI_TAXRATE_0:V0} + "[1]": ${BFI_TAXRATE_1:V1} + "[3]": ${BFI_TAXRATE_3:V3} + "[6]": ${BFI_TAXRATE_6:V6} + "[9]": ${BFI_TAXRATE_9:V9} + "[13]": ${BFI_TAXRATE_13:V13} # 付款申请推送配置(A103-3 付款申请保存) payApply: # 单据类型编码:ap_payapply_BT_S 采购付款申请、ap_payapply_oth_BT_S 其他付款申请