diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InvoiceApplicationServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InvoiceApplicationServiceImpl.java index 7b74830e..5de8ea1e 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InvoiceApplicationServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InvoiceApplicationServiceImpl.java @@ -823,8 +823,13 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl savedBillNos = new ArrayList<>(); @@ -852,7 +857,7 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl items) { BfiInvoiceApplySaveDTO param = new BfiInvoiceApplySaveDTO(); // ==================== 以下为【必填】字段(BfiInvoiceApplySaveDTO 标注),非必填字段先注释保留 ==================== @@ -965,8 +970,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")); - return customer == null ? null : customer.getCustomerCode(); + if (customer == null || Func.isBlank(customer.getUnifiedCreditCode())) { + return null; + } + return this.queryKingdeeSupplierNumber(customer.getUnifiedCreditCode().trim()); + } + + /** A901-1 按统一社会信用代码查询金蝶供应商档案,取返回值 number 即金蝶客商编码,无数据返回 null(开票申请受票方复用); + * shortcut: 查询未过滤 status=C(已审核)/enable=1,暂存/禁用档案的 number 也会返回,金蝶侧拒收时再补过滤 */ + public String queryKingdeeSupplierNumber(String unifiedCreditCode) { + BfiSupplierQueryDTO param = new BfiSupplierQueryDTO(); + param.setPageNo(1); + param.setPageSize(1); + 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(); } /** 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 f9e214c1..5a000afb 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,14 +202,15 @@ 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 48a74c14..04e0fdd3 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);