From 0e1517df9c4dfd2196139ec0b8b9d751baac5749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Fri, 30 Oct 2026 20:34:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=A2=E5=95=86=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BE=9B=E5=BA=94=E5=95=86=E7=BC=96=E7=A0=81?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=B9=B6=E8=90=BD=E5=BA=93=E9=87=91=E8=9D=B6?= =?UTF-8?q?A901-1=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/entity/CustomerArchive.java | 3 ++ .../transport/excel/CustomerArchiveExcel.java | 3 ++ .../impl/CustomerArchiveServiceImpl.java | 48 ++++++++++++++++++- .../impl/InvoiceApplicationServiceImpl.java | 17 +++---- .../impl/PaymentApplicationServiceImpl.java | 2 +- .../support/KingdeeApBillSyncSupport.java | 32 +++---------- .../support/KingdeeArBillSyncSupport.java | 5 +- .../KingdeeReceivedInvoiceSyncSupport.java | 2 +- ...mer_archive_add_supplier_code_20261030.sql | 16 +++++++ 9 files changed, 85 insertions(+), 43 deletions(-) create mode 100644 doc/sql/transport/lqj/temp/blade_customer_archive_add_supplier_code_20261030.sql diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerArchive.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerArchive.java index 4ada80e1..e35d1051 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerArchive.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerArchive.java @@ -52,6 +52,9 @@ public class CustomerArchive extends TenantEntity { @Schema(description = "客商编号") private String customerCode; + @Schema(description = "供应商编码(金蝶A901-1供应商查询返回number,建档/同步时落库)") + private String supplierCode; + @Schema(description = "客商简称") private String shortName; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/CustomerArchiveExcel.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/CustomerArchiveExcel.java index ebe4eec2..8c25f3f1 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/CustomerArchiveExcel.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/CustomerArchiveExcel.java @@ -51,6 +51,9 @@ public class CustomerArchiveExcel implements Serializable { @ExcelProperty("客商编号") private String customerCode; + @ExcelProperty("供应商编码") + private String supplierCode; + @ExcelProperty("客商简称") private String shortName; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java index 10d92f1b..d670531e 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java @@ -47,12 +47,14 @@ import org.springblade.transport.constant.HcsSyncConstant; import org.springblade.transport.excel.CustomerArchiveExcel; import org.springblade.thirdparty.bfi.constant.BfiConstant; import org.springblade.thirdparty.bfi.pojo.dto.BfiCustomerQueryDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiSupplierQueryDTO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultErrorVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultItemVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBlacklistVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiCustomerVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiPageVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiSupplierVO; import org.springblade.thirdparty.bfi.service.IBfiService; import org.springblade.thirdparty.bfi.util.BfiUtil; import org.springblade.system.cache.SysCache; @@ -282,6 +284,12 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl page = bfiService.querySupplier(param); + List rows = page == null ? null : page.getRows(); + return rows == null || rows.isEmpty() ? null : rows.get(0).getNumber(); + } catch (Exception exception) { + log.warn("A901-1供应商查询金蝶客商编码失败,unifiedCreditCode={}", unifiedCreditCode, exception); + return null; + } + } + + /** + * 供应商编码落库:A901-1 按统一社会信用代码查金蝶供应商档案取 number,查到才覆盖(查不到/接口异常保留原值,不影响同步主流程) + */ + private void fillSupplierCode(CustomerArchive customer, CustomerArchive after) { + String supplierCode = this.queryKingdeeSupplierNumber(customer.getUnifiedCreditCode()); + if (Func.isNotEmpty(supplierCode)) { + after.setSupplierCode(supplierCode); + } + } + /** * 金蝶已存在档案时,客商编号(customer_code)采纳金蝶客商编码,后续业务接口沿用客商编号即拿到金蝶编码; * 金蝶编码为空或与当前编号一致时无需处理;同租户下已被其他客商占用时跳过回填,避免违反 uk_customer_archive_code 唯一约束 @@ -772,10 +814,11 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl savedBillNos = new ArrayList<>(); @@ -872,7 +867,7 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl items) { BfiInvoiceApplySaveDTO param = new BfiInvoiceApplySaveDTO(); // ==================== 以下为【必填】字段(BfiInvoiceApplySaveDTO 标注),非必填字段先注释保留 ==================== @@ -985,8 +980,8 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpllambdaQuery() .and(wrapper -> wrapper.eq(CustomerArchive::getFullName, partyB).or().eq(CustomerArchive::getShortName, partyB)) .eq(CustomerArchive::getIsDeleted, 0).last("limit 1")); - if (customer == null || Func.isBlank(customer.getUnifiedCreditCode())) { + if (customer == null) { return null; } - return this.queryKingdeeSupplierNumber(customer.getUnifiedCreditCode().trim()); - } - - /** A901-1 按统一社会信用代码查询金蝶供应商档案,仅取已审核且可用的档案,返回值 number 即金蝶客商编码,无数据返回 null(开票申请受票方复用) */ - public String queryKingdeeSupplierNumber(String unifiedCreditCode) { - BfiSupplierQueryDTO param = new BfiSupplierQueryDTO(); - param.setPageNo(1); - param.setPageSize(1); - // param.setStatus(BfiConstant.BILL_STATUS_AUDITED); - param.setEnable(BfiConstant.ENABLE_ENABLED); - param.setSocietycreditcode(List.of(unifiedCreditCode)); - BfiPageVO page = bfiService.querySupplier(param); - List rows = page == null ? null : page.getRows(); - return rows == null || rows.isEmpty() ? null : rows.get(0).getNumber(); + return Func.isBlank(customer.getSupplierCode()) ? customer.getCustomerCode() : customer.getSupplierCode(); } /** diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/KingdeeArBillSyncSupport.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/KingdeeArBillSyncSupport.java index 5a000afb..f9e214c1 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/KingdeeArBillSyncSupport.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/KingdeeArBillSyncSupport.java @@ -202,15 +202,14 @@ public class KingdeeArBillSyncSupport { String currency = kingdeeApBillSyncSupport.bfiCurrency(contract); // 单据日期:yyyy-MM-dd HH:mm:ss(各接口统一格式),以同步当日作为应收单据日期 String billDateText = kingdeeApBillSyncSupport.bfiDateTimeText(LocalDate.now()); - // 往来户.编码:应收结算单付款方(客户)关联客商档案取统一社会信用代码,经 A901-1 供应商查询取金蝶客商编码 + // 往来户.编码:应收结算单付款方(客户)关联客商档案客商编码 String payerName = settlement.getPayerName(); if (Func.isBlank(payerName)) { throw new ServiceException("推送金蝶财务应收单失败,结算单付款方不能为空,请检查正式结算单[" + Func.toStr(subject) + "]付款方信息"); } String customerCode = context.customerCodeCache().computeIfAbsent(payerName.trim(), kingdeeApBillSyncSupport::queryCustomerCode); if (Func.isBlank(customerCode)) { - throw new ServiceException("推送金蝶财务应收单失败,结算单付款方[" + payerName - + "]未在客商档案中维护统一社会信用代码或金蝶侧未查到对应供应商档案,请补充后重试"); + throw new ServiceException("推送金蝶财务应收单失败,结算单付款方[" + payerName + "]未在客商档案中维护客商编码,请补充后重试"); } BfiArBillSaveDTO param = new BfiArBillSaveDTO(); // 【必填】单据类型.编码 diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/KingdeeReceivedInvoiceSyncSupport.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/KingdeeReceivedInvoiceSyncSupport.java index 04e0fdd3..48a74c14 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/KingdeeReceivedInvoiceSyncSupport.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/KingdeeReceivedInvoiceSyncSupport.java @@ -189,7 +189,7 @@ public class KingdeeReceivedInvoiceSyncSupport { param.setOrgNumber(kingdeeApBillSyncSupport.bfiOrgNumber(contract, context)); // 【必填】结算币别:合同结算币种 param.setCurrencyNumber(kingdeeApBillSyncSupport.bfiCurrency(contract)); - // 【必填】往来户.编码:合同乙方(开票供应商)统一社会信用代码经 A901-1 供应商查询取金蝶客商编码 + // 【必填】往来户.编码:合同乙方(开票供应商)客商编码 param.setReceivablessuppNumber(kingdeeApBillSyncSupport.bfiAsstactNumber(contract, context)); // 【必填】汇率表.编码 param.setExratetableNumber(BfiConstant.EXRATE_TABLE_DEFAULT); diff --git a/doc/sql/transport/lqj/temp/blade_customer_archive_add_supplier_code_20261030.sql b/doc/sql/transport/lqj/temp/blade_customer_archive_add_supplier_code_20261030.sql new file mode 100644 index 00000000..8c696089 --- /dev/null +++ b/doc/sql/transport/lqj/temp/blade_customer_archive_add_supplier_code_20261030.sql @@ -0,0 +1,16 @@ +-- 客商档案:新增供应商编码字段 +-- 新增 supplier_code:金蝶A901-1供应商查询返回number,新增/同步客商时落库,金蝶单据推送直接复用,不再实时查接口 + +-- 以下结构升级支持重复执行 +SET @ddl_sql = ( + SELECT IF(COUNT(*) = 0, + 'ALTER TABLE `blade_customer_archive` ADD COLUMN `supplier_code` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ''供应商编码(金蝶A901-1供应商查询返回number)'' AFTER `customer_code`', + 'SELECT 1') + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'blade_customer_archive' + AND COLUMN_NAME = 'supplier_code' +); +PREPARE ddl_stmt FROM @ddl_sql; +EXECUTE ddl_stmt; +DEALLOCATE PREPARE ddl_stmt;