From 42548e6a354b0dd26836e586f8b19cc22270b417 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Sat, 31 Oct 2026 10:16:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=B6=E6=AC=BE=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=BC=80=E6=88=B7=E8=A1=8C=E5=8C=B9=E9=85=8D=E9=87=91=E8=9D=B6?= =?UTF-8?q?=E8=A1=8C=E5=90=8D=E8=A1=8C=E5=8F=B7=E5=B8=A6=E5=87=BA=E8=81=94?= =?UTF-8?q?=E8=A1=8C=E5=8F=B7=E5=B9=B6=E4=BF=9D=E5=AD=98=E5=89=8D=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 A905-3 行名行号查询能力(BfiBankQueryDTO/BfiBankVO/IBfiClient.bebankQuery/IBfiService.queryBank) - 客商档案新增 query-bank 按行名精确匹配(失焦回显联行号)与 query-bank-by-number 按行号校验(保存前拦截,异常上抛便于区分查不到与校验失败) - 清理 BfiServiceImpl 内置发票查询 mock,统一走 BfiClientMock 桩文件 --- .../controller/CustomerArchiveController.java | 21 ++++ .../service/ICustomerArchiveService.java | 17 +++ .../impl/CustomerArchiveServiceImpl.java | 63 ++++++++++ .../thirdparty/bfi/feign/IBfiClient.java | 13 +++ .../bfi/pojo/dto/BfiBankQueryDTO.java | 77 +++++++++++++ .../thirdparty/bfi/pojo/vo/BfiBankVO.java | 109 ++++++++++++++++++ .../thirdparty/bfi/service/IBfiService.java | 10 ++ .../bfi/service/impl/BfiServiceImpl.java | 35 +++--- 8 files changed, 323 insertions(+), 22 deletions(-) create mode 100644 blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/pojo/dto/BfiBankQueryDTO.java create mode 100644 blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/pojo/vo/BfiBankVO.java diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CustomerArchiveController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CustomerArchiveController.java index af801acc..c2c0b7ab 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CustomerArchiveController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CustomerArchiveController.java @@ -38,6 +38,7 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.annotation.PreAuth; import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.thirdparty.bfi.pojo.vo.BfiBankVO; import org.springblade.transport.support.TransportBusinessSupport; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; @@ -208,6 +209,26 @@ public class CustomerArchiveController extends BladeController { return R.data(customerArchiveService.querySupplierCode(creditCode)); } + /** + * 金蝶开户行查询(A905-3,收款信息填写开户行失焦精确匹配联行号用) + */ + @GetMapping("/query-bank") + @ApiOperationSupport(order = 12) + @Operation(summary = "金蝶开户行查询", description = "A905-3 按行名精确匹配金蝶行名行号档案,返回行名与联行号,查不到返回空") + public R queryBank(@Parameter(description = "开户行名称", required = true) @RequestParam String bankName) { + return R.data(customerArchiveService.queryKingdeeBank(bankName)); + } + + /** + * 金蝶联行号校验(A905-3,收款信息保存前校验联行号真实存在用) + */ + @GetMapping("/query-bank-by-number") + @ApiOperationSupport(order = 12) + @Operation(summary = "金蝶联行号校验", description = "A905-3 按行号精确匹配金蝶行名行号档案,查不到返回空,接口异常返回错误") + public R queryBankByNumber(@Parameter(description = "联行号", required = true) @RequestParam String cnapsCode) { + return R.data(customerArchiveService.queryKingdeeBankByNumber(cnapsCode)); + } + /** * 评分明细模板 */ diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/ICustomerArchiveService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/ICustomerArchiveService.java index 8f779ca2..c608c664 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/ICustomerArchiveService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/ICustomerArchiveService.java @@ -25,6 +25,7 @@ package org.springblade.transport.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; +import org.springblade.thirdparty.bfi.pojo.vo.BfiBankVO; import org.springblade.transport.excel.CustomerArchiveExcel; import org.springblade.transport.pojo.entity.CustomerArchive; import org.springblade.transport.pojo.vo.CustomerArchiveVO; @@ -204,6 +205,22 @@ public interface ICustomerArchiveService extends BaseService { */ String querySupplierCode(String unifiedCreditCode); + /** + * A905-3 按行名精确匹配金蝶行名行号档案(收款信息填写开户行后失焦回显联行号用),查不到返回 null + * + * @param bankName 开户行名称(行名全称) + * @return 匹配到的行名行号档案,含联行号 + */ + BfiBankVO queryKingdeeBank(String bankName); + + /** + * A905-3 按行号精确匹配金蝶行名行号档案(收款信息保存前校验联行号真实存在用),查不到返回 null,接口异常上抛由全局异常处理返回 + * + * @param cnapsCode 联行号(行号) + * @return 匹配到的行名行号档案 + */ + BfiBankVO queryKingdeeBankByNumber(String cnapsCode); + /** * 推送失败状态落库(独立事务):推送主事务已回滚,失败状态与原因单独落库供页面展示与手动重推 * 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 a83d23ee..92ed75a8 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 @@ -46,8 +46,10 @@ import org.springblade.system.cache.UserCache; 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.BfiBankQueryDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiCustomerQueryDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiSupplierQueryDTO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiBankVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultErrorVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultItemVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultVO; @@ -672,6 +674,67 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl page = bfiService.queryBank(param); + List rows = page == null ? null : page.getRows(); + if (rows == null || rows.isEmpty()) { + return null; + } + // 金蝶侧按行名过滤若为模糊匹配,本地再按全称精确比对取第一条 + String trimmedName = bankName.trim(); + return rows.stream() + .filter(bank -> trimmedName.equals(bank.getName())) + .findFirst() + .orElse(null); + } catch (Exception exception) { + log.warn("A905-3行名行号查询失败,bankName={}", bankName, exception); + return null; + } + } + + /** + * A905-3 按行号查询金蝶行名行号档案:收款信息保存前校验联行号真实存在,查不到返回 null 由前端拦截保存; + * 与 {@link #queryKingdeeBank(String)} 不同,接口异常不上抛吞掉而是直接抛出,便于前端区分「查不到」与「校验失败」 + */ + @Override + public BfiBankVO queryKingdeeBankByNumber(String cnapsCode) { + if (Func.isEmpty(cnapsCode)) { + return null; + } + BfiBankQueryDTO param = new BfiBankQueryDTO(); + param.setPageNo(1); + param.setPageSize(10); + param.setStatus(BfiConstant.BILL_STATUS_AUDITED); + param.setEnable(BfiConstant.ENABLE_ENABLED); + param.setNumber(List.of(cnapsCode.trim())); + BfiPageVO page = bfiService.queryBank(param); + List rows = page == null ? null : page.getRows(); + if (rows == null || rows.isEmpty()) { + return null; + } + // 金蝶侧按行号过滤若为模糊匹配,本地再按编码精确比对取第一条 + String trimmedCode = cnapsCode.trim(); + return rows.stream() + .filter(bank -> trimmedCode.equals(bank.getNumber())) + .findFirst() + .orElse(null); + } + /** * 金蝶已存在档案时,客商编号(customer_code)采纳金蝶客商编码,后续业务接口沿用客商编号即拿到金蝶编码; * 金蝶编码为空或与当前编号一致时无需处理;同租户下已被其他客商占用时跳过回填,避免违反 uk_customer_archive_code 唯一约束 diff --git a/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/feign/IBfiClient.java b/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/feign/IBfiClient.java index d017ce32..3044f5b0 100644 --- a/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/feign/IBfiClient.java +++ b/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/feign/IBfiClient.java @@ -30,6 +30,7 @@ import org.springblade.thirdparty.bfi.config.BfiFeignClientConfig; import org.springblade.thirdparty.bfi.constant.BfiConstant; import org.springblade.thirdparty.bfi.pojo.dto.BfiApBillSaveBodyDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiArBillSaveBodyDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiBankQueryDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiBillLockDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiBlacklistQueryDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiClaimPushBodyDTO; @@ -50,6 +51,7 @@ import org.springblade.thirdparty.bfi.pojo.dto.BfiWithdrawTokenDTO; import org.springblade.thirdparty.bfi.pojo.vo.BfiApBillVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiArBillVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiAttachmentUploadVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiBankVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBillLockResultVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBlacklistVO; @@ -101,6 +103,7 @@ public interface IBfiClient { String CUSTOMER_QUERY_URL = "${thirdParty.bfi.customerQueryUrl:/ierp/kapi/v2/awrp/basedata/bd_customer/query}"; String CUSTOMER_SAVE_URL = "${thirdParty.bfi.customerSaveUrl:/ierp/kapi/v2/awrp/basedata/bd_customer/save}"; String SUPPLIER_QUERY_URL = "${thirdParty.bfi.supplierQueryUrl:/ierp/kapi/v2/awrp/basedata/bd_supplier/query}"; + String BEBANK_QUERY_URL = "${thirdParty.bfi.bebankQueryUrl:/ierp/kapi/v2/awrp/basedata/bd_bebank/query}"; String AP_BILL_SAVE_URL = "${thirdParty.bfi.apBillSaveUrl:/ierp/kapi/v2/awrp/ap/ap/ap_finapbill/save}"; String AP_BILL_QUERY_URL = "${thirdParty.bfi.apBillQueryUrl:/ierp/kapi/v2/awrp/ap/ap_finapbill/query}"; String AR_BILL_SAVE_URL = "${thirdParty.bfi.arBillSaveUrl:/ierp/kapi/v2/awrp/ar/ar/ar_finarbill/save}"; @@ -295,6 +298,16 @@ public interface IBfiClient { @RequestParam(value = "modifytimeS", required = false) String modifytimeS, @RequestParam(value = "modifytimeE", required = false) String modifytimeE); + /** + * A905-3 行名行号查询 + * + * @param accessToken 访问令牌,通过 getToken 获取 + * @param param 查询参数 + * @return 行名行号分页数据 + */ + @GetMapping(BEBANK_QUERY_URL) + BfiResultVO> bebankQuery(@RequestHeader(BfiConstant.HEADER_ACCESS_TOKEN) String accessToken, @SpringQueryMap BfiBankQueryDTO param); + /** * A102-2 财务应付单保存 * diff --git a/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/pojo/dto/BfiBankQueryDTO.java b/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/pojo/dto/BfiBankQueryDTO.java new file mode 100644 index 00000000..b4c51c6b --- /dev/null +++ b/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/pojo/dto/BfiBankQueryDTO.java @@ -0,0 +1,77 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.thirdparty.bfi.pojo.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * 业财融合(BFI)A905-3 行名行号查询参数 + * + * @author Chill + */ +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class BfiBankQueryDTO implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** + * 【必填】页码,从1开始 + */ + private Integer pageNo; + /** + * 【必填】页数 + */ + private Integer pageSize; + /** + * 数据状态[A:暂存, B:已提交, C:已审核] + */ + private String status; + /** + * 使用状态[0:禁用, 1:可用] + */ + private String enable; + /** + * 名称(行名) + */ + private List name; + /** + * 编码(行号) + */ + private List number; + /** + * 修改时间-开始,格式:yyyy-MM-dd HH:mm:ss,限定时间范围不可超过6个月 + */ + private String modifytimeS; + /** + * 修改时间-结束,格式:yyyy-MM-dd HH:mm:ss + */ + private String modifytimeE; +} diff --git a/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/pojo/vo/BfiBankVO.java b/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/pojo/vo/BfiBankVO.java new file mode 100644 index 00000000..1f602dd0 --- /dev/null +++ b/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/pojo/vo/BfiBankVO.java @@ -0,0 +1,109 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.thirdparty.bfi.pojo.vo; + +import com.fasterxml.jackson.annotation.JsonAlias; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 业财融合(BFI)A905-3 行名行号查询返回结果 + * + * @author Chill + */ +@Data +public class BfiBankVO implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** + * id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + /** + * 编码(行号) + */ + private String number; + /** + * 名称(行名) + */ + private String name; + /** + * 数据状态[A:暂存, B:已提交, C:已审核] + */ + private String status; + /** + * 使用状态[0:禁用, 1:可用] + */ + private String enable; + /** + * 创建时间 + */ + private String createtime; + /** + * 修改时间 + */ + private String modifytime; + /** + * 主数据内码 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long masterid; + /** + * 联行号 + */ + @JsonAlias("union_number") + private String unionNumber; + /** + * Swift Code + */ + @JsonAlias("swift_code") + private String swiftCode; + /** + * 银行类别名称 + */ + private String bankcatename; + /** + * 省份(银企) + */ + private String provincetxt; + /** + * 城市(银企) + */ + private String citytxt; + /** + * 分行代码 + */ + private String branchcode; + /** + * 疑似过期[Y:是, N:否] + */ + private String isoverdue; +} diff --git a/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/service/IBfiService.java b/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/service/IBfiService.java index a8ff0944..3680e198 100644 --- a/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/service/IBfiService.java +++ b/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/service/IBfiService.java @@ -30,6 +30,7 @@ import org.springblade.thirdparty.bfi.pojo.dto.BfiApBillQueryDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiApBillSaveDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiArBillQueryDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiArBillSaveDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiBankQueryDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiBillLockDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiClaimAnnounceQueryDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiClaimPushDTO; @@ -52,6 +53,7 @@ import org.springblade.thirdparty.bfi.pojo.dto.BfiSupplierQueryDTO; import org.springblade.thirdparty.bfi.pojo.vo.BfiApBillVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiArBillVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiAttachmentUploadVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiBankVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBlacklistVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiClaimAnnounceVO; @@ -193,6 +195,14 @@ public interface IBfiService { */ BfiPageVO querySupplier(BfiSupplierQueryDTO param); + /** + * A905-3 行名行号查询 + * + * @param param 查询参数,页码从1开始,修改时间范围不可超过6个月 + * @return 行名行号分页数据 + */ + BfiPageVO queryBank(BfiBankQueryDTO param); + /** * A102-2 财务应付单保存 * diff --git a/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/service/impl/BfiServiceImpl.java b/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/service/impl/BfiServiceImpl.java index f3301b41..e010b0f5 100644 --- a/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/service/impl/BfiServiceImpl.java +++ b/blade-third-party-api/blade-bfi-api/src/main/java/org/springblade/thirdparty/bfi/service/impl/BfiServiceImpl.java @@ -43,6 +43,7 @@ import org.springblade.thirdparty.bfi.pojo.dto.BfiApBillSaveDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiArBillQueryDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiArBillSaveBodyDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiArBillSaveDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiBankQueryDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiBillLockDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiBlacklistQueryDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiClaimAnnounceQueryDTO; @@ -79,6 +80,7 @@ import org.springblade.thirdparty.bfi.pojo.dto.BfiWithdrawTokenDTO; import org.springblade.thirdparty.bfi.pojo.vo.BfiApBillVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiArBillVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiAttachmentUploadVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiBankVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBillLockResultVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultItemVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultVO; @@ -346,6 +348,16 @@ public class BfiServiceImpl implements IBfiService { return result.getData(); } + @Override + public BfiPageVO queryBank(BfiBankQueryDTO param) { + if (param == null || param.getPageNo() == null || param.getPageSize() == null) { + throw new BfiException("查询BFI行名行号失败,分页参数不能为空"); + } + String accessToken = getAccessToken(); + BfiResultVO> result = commonCall("行名行号查询", () -> client.bebankQuery(accessToken, param)); + return result.getData(); + } + @Override public BfiBillSaveResultVO saveApBill(BfiApBillSaveDTO param) { if (param == null || StringUtil.isBlank(param.getAwrpSrcSys()) || StringUtil.isBlank(param.getAwrpSrcCode())) { @@ -474,10 +486,7 @@ public class BfiServiceImpl implements IBfiService { if (param == null || StringUtil.isBlank(param.getSerialNo()) || StringUtil.isBlank(param.getSellerTaxpayerId())) { throw new BfiException("查询BFI开票申请发票失败,单据编号与销方税号不能为空"); } - if (properties.isMockEnabled()) { - log.info("【MOCK】查询BFI开票申请发票,serialNo={}", param.getSerialNo()); - return mockQueryInvoiceApplyInvoice(); - } + // mock 模式由 BfiClientMock 读取桩文件 invoiceApplyOpenApi.json(有桩用桩、无桩透传真实接口),此处不再内置固定响应 // data 原文需序列化为 JSON 后 Base64 编码 String data = Base64.getEncoder().encodeToString(JSONUtil.toJsonStr(param).getBytes(StandardCharsets.UTF_8)); BfiInvoiceApplyOpenApiBodyDTO body = new BfiInvoiceApplyOpenApiBodyDTO(); @@ -767,22 +776,4 @@ public class BfiServiceImpl implements IBfiService { long expireMillis = tokenVO.getExpiresIn() - BfiConstant.TOKEN_EXPIRE_BUFFER_MILLIS; bladeRedis.getValueOps().setIfAbsent(BfiConstant.BFI_TOKEN_CACHE_KEY, tokenVO.getAccessToken(), Duration.ofMillis(expireMillis)); } - - /** - * Mock 开票申请发票查询(开发调试用) - * - * @return mock 发票查询结果 - */ - private BfiOpenApiResultVO> mockQueryInvoiceApplyInvoice() { - String mockData = "W3siaW52b2ljZUxpc3QiOlt7ImFib2xpc2hSZWFzb24iOiIiLCJiaWxsTm8iOiJLUFNRLUpDWlgtMjAyNjAzLTAwMDU4MCIsImJ1eWVyQWRkcmVzc0FuZFRlbCI6IumSpuW3nuW4gumSpuW3nua4r+WvjOa4r+aWsOWfjjMw5qCLMDjoh7MxM+WPt+WSjDMx5qCLMDHoh7MwOeWPt+WVhumTujA3NzctMzY2NTExMSIsImJ1eWVyQmFua0FuZEFjY291bnQiOiLkuK3lm73lhpzkuJrpk7booYzogqHku73mnInpmZDlhazlj7jpkqblt57muK/mlK/ooYwgMjA3NDA0MDEwNDAwMTA3NjYiLCJidXllck5hbWUiOiLlub/opb/moYLlu7rlt6XnqIvotKjph4/mo4DmtYvmnInpmZDlhazlj7giLCJidXllclByb3BlcnR5IjowLCJidXllclJlY2lwaWVudE1haWwiOiIiLCJidXllclJlY2lwaWVudFBob25lIjoiIiwiYnV5ZXJUYXhwYXllcklkIjoiOTE0NTA3MDQwNTEwMDE2ODdRIiwiY2FuUmVkQW1vdW50IjozNjIyLjY0LCJjYW5SZWRUYXhBbW91bnQiOjIxNy4zNiwiY2FuY2VsZXIiOiIiLCJjaGVja0NvZGUiOiIiLCJkZXZpY2VObyI6IiIsImRvd25sb2FkRmxhZyI6MiwiZHJhd2VyIjoi6ZmI5bCP5bCPIiwiZ29vZHMiOlt7ImFtb3VudCI6MzYyMi42NCwiYmlsbFNvdXJjZUlkIjoiIiwiZGV0YWlsSWQiOiIyNDM3OTM3MTA2NTMwNjE5MzkzIiwiZGV0YWlsUm93Tm8iOjEsImdvb2RzTmFtZSI6IirpibTor4Hlkqjor6LmnI3liqEq5qOA5rWL6LS5IiwiaW5jbHVkZVRheEFtb3VudCI6Mzg0MC4wMCwiaW5jbHVkZVRheFByaWNlIjoiMzg0MCIsImxpbmVQcm9wZXJ0eSI6MCwicHJpY2UiOiIzNjIyLjY0MTUwOTQzMzk2IiwicHJpdklsZWdlQ29udGVudCI6IiIsInByaXZpbGVnZUZsYWciOjAsInF1YW50aXR5IjoiMSIsInJlbWFpblJlZEFtb3VudCI6MzYyMi42NCwicmVtYWluUmVkUXVhbnRpdHkiOiIxIiwicmVtYWluUmVkVGF4IjoyMTcuMzYsInJldmVudWVDb2RlIjoiMzA0MDYwMjk5MDAwMDAwMDAwMCIsInJldmVudWVOYW1lIjoiKumJtOivgeWSqOivouacjeWKoSoiLCJzZXEiOjAsInNwZWNpZmljYXRpb24iOiIiLCJ0YXhBbW91bnQiOjIxNy4zNiwidGF4RmxhZyI6IjEiLCJ0YXhSYXRlIjoiMC4wNiIsInVuaXRzIjoi6aG5IiwiemVyb1RheFJhdGVGbGFnIjoiIn1dLCJpZCI6MjQzNzkzNzEwNjUzMDYxOTM5MiwiaW5jbHVkZVRheEFtb3VudCI6Mzg0MC4wMCwiaW52ZW50b3J5RmxhZyI6MCwiaW52b2ljZUNvZGUiOiIiLCJpbnZvaWNlRGF0ZSI6MTc3MzgyNDc2NDAwMCwiaW52b2ljZUZpbGVVcmwiOiJodHRwczovL2FwaS5waWFvem9uZS5jb20vcnBhL2ZyZWUvcHJldmlldy8zNjYxOTQwMDM3ODk2OTEzOTIvOTE0NTAwMDBNQTVRMUcxTTU5LzVORlkyWEZHNlNWV0lXNzJPUDA1P3R5cGU9MSIsImludm9pY2VJbWFnZVVybCI6Imh0dHBzOi8vYXBpLnBpYW96b25lLmNvbS9ycGEvZnJlZS9wcmV2aWV3LzM2NjE5NDAwMzc4OTY5MTM5Mi85MTQ1MDAwME1BNVExRzFNNTkvNU5GWTJYRkc2U1ZXSVc3Mk9QMDU/dHlwZT0yIiwiaW52b2ljZU51bWJlciI6IjI2NDUyMDAwMDAwNDIzMjQwOTE2IiwiaW52b2ljZVBkZkZpbGVVcmwiOiJodHRwczovL2FwaS5waWFvem9uZS5jb20vcnBhL2ZyZWUvcHJldmlldy8zNjYxOTQwMDM3ODk2OTEzOTIvOTE0NTAwMDBNQTVRMUcxTTU5LzVORlkyWEZHNlNWV0lXNzJPUDA1P3R5cGU9MCIsImludm9pY2VQcm9wZXJ0eSI6MCwiaW52b2ljZVNvdXJjZSI6IjQiLCJpbnZvaWNlU3RhdHVzIjowLCJpbnZvaWNlVHlwZSI6IjA4eGRwIiwiaW52b2ljZVhtbEZpbGVVcmwiOiJodHRwczovL2FwaS5waWFvem9uZS5jb20vcnBhL2ZyZWUvcHJldmlldy8zNjYxOTQwMDM3ODk2OTEzOTIvOTE0NTAwMDBNQTVRMUcxTTU5LzVORlkyWEZHNlNWV0lXNzJPUDA1P3R5cGU9MyIsImlzc3VlU3RhdHVzIjoiMCIsIm1lcmdlRGlmZmVyVGF4QW1vdW50IjowLjAwLCJvcmdOYW1lIjoi5bm/6KW/5aOu5peP6Ieq5rK75Yy65bu6562R5bel56iL6LSo6YeP5qOA5rWL5Lit5b+D5pyJ6ZmQ5YWs5Y+4Iiwib3JpZ2luYWxJbnZvaWNlQ29kZSI6IiIsIm9yaWdpbmFsSW52b2ljZU51bWJlciI6IiIsInBheWVlIjoiIiwicHJpbnRGbGFnIjowLCJyZWRJbmZvQmlsbE5vIjoiIiwicmVkUmVhc29uIjoiIiwicmVtYXJrIjoiIiwicmVzdWx0IjoiIiwicmV2aWV3ZXIiOiIiLCJzZWxsZXJBZGRyZXNzQW5kVGVsIjoi5Y2X5a6B5biC6KW/5Lmh5aGY5Yy65YyX6ZmF6LevMeWPtzA3NzEtMzE3OTYwMSIsInNlbGxlckJhbmtBbmRBY2NvdW50Ijoi5bel5ZWG6ZO26KGM5Y2X5a6B5biC5rC45paw5pSv6KGMMjEwMjEwNDAwOTMwMDI5NjA0MSIsInNlbGxlck5hbWUiOiLlub/opb/lo67ml4/oh6rmsrvljLrlu7rnrZHlt6XnqIvotKjph4/mo4DmtYvkuK3lv4PmnInpmZDlhazlj7giLCJzZWxsZXJUYXhwYXllcklkIjoiOTE0NTAwMDBNQTVRMUcxTTU5Iiwic2VyaWFsTm8iOiIyMDBfMjAyNjAzMTgxNzA1NTAwMDFfMDAwMSIsInNrbSI6IiIsInNwZWNpYWxSZWRGbGFnIjowLCJzcGxpdE9yTWVyZ2VGbGFnIjoiMCIsInRheEZsYWciOiIxIiwidGVybWluYWxObyI6IiIsInRvdGFsQW1vdW50IjozNjIyLjY0LCJ0b3RhbFRheEFtb3VudCI6MjE3LjM2fV0sImJpbGxObyI6IktQU1EtSkNaWC0yMDI2MDMtMDAwNTgwIn1d"; - BfiOpenApiResultVO> result = new BfiOpenApiResultVO<>(); - result.setErrorCode("0"); - result.setSuccess(true); - String decodedJson = new String(Base64.getDecoder().decode(mockData), StandardCharsets.UTF_8); - JSONObject decodedObj = JSONUtil.parseObj(decodedJson); - result.setErrorCode(decodedObj.getStr("errorCode")); - result.setSuccess(decodedObj.getBool("success")); - result.setData(decodedObj.getBeanList("data", BfiInvoiceApplyOpenApiBillVO.class)); - return result; - } }