From 81c8567fd725a6e7a5ab15125511a0bf1c5fa78f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Tue, 15 Sep 2026 18:48:24 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E4=B8=9A=E8=B4=A2=E8=9E=8D?= =?UTF-8?q?=E5=90=88=EF=BC=88BFI=EF=BC=89=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5A103=E4=BB=98=E6=AC=BE=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=9F=A5=E8=AF=A2=E4=B8=8E=E4=BB=98=E6=AC=BE?= =?UTF-8?q?=E5=A4=84=E7=90=86=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thirdparty/bfi/feign/IBfiClient.java | 74 +++++++++++++++++++ .../thirdparty/bfi/service/IBfiService.java | 40 ++++++++++ .../bfi/service/impl/BfiServiceImpl.java | 69 +++++++++++++++++ 3 files changed, 183 insertions(+) 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 25f241a5..964d4d95 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 @@ -27,11 +27,18 @@ package org.springblade.thirdparty.bfi.feign; import org.springblade.thirdparty.bfi.config.BfiFeignClientConfig; import org.springblade.thirdparty.bfi.constant.BfiConstant; +import org.springblade.thirdparty.bfi.pojo.dto.BfiPayApplyPushBodyDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiPayApplyQueryDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiPayApplySaveBodyDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiExchangeRateQueryDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiTokenDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiVerifyTokenDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiWithdrawTokenDTO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiExchangeRateVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiPageVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiPayApplyVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiPayBillVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiResultVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiTokenVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiVerifyTokenVO; @@ -40,6 +47,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -55,6 +63,10 @@ public interface IBfiClient { String VERIFY_TOKEN_URL = "${thirdParty.bfi.verifyTokenUrl:/ierp/kapi/oauth2/verifyToken}"; String WITHDRAW_TOKEN_URL = "${thirdParty.bfi.withdrawTokenUrl:/ierp/kapi/oauth2/withdrawToken}"; String FOREX_QUERY_URL = "${thirdParty.bfi.forexQueryUrl:/ierp/kapi/v2/awrp/base/bd_exrate_tree/Forexquery}"; + String PAY_APPLY_PUSH_URL = "${thirdParty.bfi.payApplyPushUrl:/ierp/kapi/v2/awrp/ap/ap/ap_finapbill/push}"; + String PAY_APPLY_QUERY_URL = "${thirdParty.bfi.payApplyQueryUrl:/ierp/kapi/v2/awrp/ap/ap_payapply/query}"; + String PRE_PAY_APPLY_SAVE_URL = "${thirdParty.bfi.prePayApplySaveUrl:/ierp/kapi/v2/awrp/ap/ap/ap_payapply/save}"; + String PAY_BILL_QUERY_URL = "${thirdParty.bfi.payBillQueryUrl:/ierp/kapi/v2/awrp/cas/cas_paybill/query}"; /** * A100-1 获取令牌 @@ -92,4 +104,66 @@ public interface IBfiClient { */ @GetMapping(FOREX_QUERY_URL) BfiResultVO> forexQuery(@RequestHeader(BfiConstant.HEADER_ACCESS_TOKEN) String accessToken, @RequestBody BfiExchangeRateQueryDTO param); + + /** + * A103-1 付款申请保存(根据星瀚应付下推付款申请) + * + * @param accessToken 访问令牌,通过 getToken 获取 + * @param param 请求参数 + * @return 保存结果 + */ + @PostMapping(PAY_APPLY_PUSH_URL) + BfiResultVO payApplyPush(@RequestHeader(BfiConstant.HEADER_ACCESS_TOKEN) String accessToken, @RequestBody BfiPayApplyPushBodyDTO param); + + /** + * A103-2 付款申请单查询 + * + * @param accessToken 访问令牌,通过 getToken 获取 + * @param pageNo 页码,从1开始 + * @param pageSize 页数 + * @param awrpSrcCode 来源单据号 + * @param awrpSrcSys 系统编号 + * @param modifytimeS 修改时间-开始 + * @param modifytimeE 修改时间-结束 + * @return 付款申请单分页数据 + */ + @GetMapping(PAY_APPLY_QUERY_URL) + BfiResultVO> payApplyQuery(@RequestHeader(BfiConstant.HEADER_ACCESS_TOKEN) String accessToken, + @RequestParam("pageNo") Integer pageNo, + @RequestParam("pageSize") Integer pageSize, + @RequestParam(value = "awrp_src_code", required = false) List awrpSrcCode, + @RequestParam(value = "awrp_src_sys", required = false) String awrpSrcSys, + @RequestParam(value = "modifytimeS", required = false) String modifytimeS, + @RequestParam(value = "modifytimeE", required = false) String modifytimeE); + + /** + * A103-3 预付款申请(付款申请保存) + * + * @param accessToken 访问令牌,通过 getToken 获取 + * @param param 请求参数 + * @return 保存结果 + */ + @PostMapping(PRE_PAY_APPLY_SAVE_URL) + BfiResultVO prePayApplySave(@RequestHeader(BfiConstant.HEADER_ACCESS_TOKEN) String accessToken, @RequestBody BfiPayApplySaveBodyDTO param); + + /** + * A103-4 付款处理查询 + * + * @param accessToken 访问令牌,通过 getToken 获取 + * @param pageNo 页码,从1开始 + * @param pageSize 页数 + * @param beginBizdate 开始业务日期 + * @param endBizdate 结束业务日期 + * @param billno 单据编号 + * @param orgNumber 付款人(公司).编码 + * @return 付款处理分页数据 + */ + @GetMapping(PAY_BILL_QUERY_URL) + BfiResultVO> payBillQuery(@RequestHeader(BfiConstant.HEADER_ACCESS_TOKEN) String accessToken, + @RequestParam("pageNo") Integer pageNo, + @RequestParam("pageSize") Integer pageSize, + @RequestParam("begin_bizdate") String beginBizdate, + @RequestParam("end_bizdate") String endBizdate, + @RequestParam(value = "billno", required = false) List billno, + @RequestParam("org_number") List orgNumber); } 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 08418e3d..0d3b0e01 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 @@ -25,7 +25,15 @@ */ package org.springblade.thirdparty.bfi.service; +import org.springblade.thirdparty.bfi.pojo.dto.BfiPayApplyPushDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiPayApplyQueryDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiPayApplySaveDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiPayBillQueryDTO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiExchangeRateVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiPageVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiPayApplyVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiPayBillVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiTokenVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiVerifyTokenVO; @@ -86,4 +94,36 @@ public interface IBfiService { * @return 汇率列表 */ List queryExchangeRate(LocalDate effectdate, LocalDate effectdateE); + + /** + * A103-1 付款申请保存(根据星瀚应付下推付款申请) + * + * @param param 付款申请参数,分录须携带应付单分录id用于下推关联 + * @return 保存结果,含成功/失败数量与单据编号 + */ + BfiBillSaveResultVO pushPayApply(BfiPayApplyPushDTO param); + + /** + * A103-2 付款申请单查询 + * + * @param param 查询参数,页码从1开始,修改时间范围不可超过1个月 + * @return 付款申请单分页数据 + */ + BfiPageVO queryPayApply(BfiPayApplyQueryDTO param); + + /** + * A103-3 预付款申请(付款申请保存) + * + * @param param 预付款申请参数,分录付款类型应传预付款编码 + * @return 保存结果,含成功/失败数量与单据编号 + */ + BfiBillSaveResultVO savePrePayApply(BfiPayApplySaveDTO param); + + /** + * A103-4 付款处理查询 + * + * @param param 查询参数,业务日期范围不可超过1个月,付款人(公司)编码必填 + * @return 付款处理分页数据 + */ + BfiPageVO queryPayBill(BfiPayBillQueryDTO param); } 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 4d497cfc..c86979fa 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 @@ -36,10 +36,20 @@ import org.springblade.thirdparty.bfi.constant.BfiConstant; import org.springblade.thirdparty.bfi.exception.BfiException; import org.springblade.thirdparty.bfi.feign.IBfiClient; import org.springblade.thirdparty.bfi.pojo.dto.BfiExchangeRateQueryDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiPayApplyPushBodyDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiPayApplyPushDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiPayApplyQueryDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiPayApplySaveBodyDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiPayApplySaveDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiPayBillQueryDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiTokenDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiVerifyTokenDTO; import org.springblade.thirdparty.bfi.pojo.dto.BfiWithdrawTokenDTO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiExchangeRateVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiPageVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiPayApplyVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiPayBillVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiResultVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiTokenVO; import org.springblade.thirdparty.bfi.pojo.vo.BfiVerifyTokenVO; @@ -50,6 +60,7 @@ import org.springframework.stereotype.Service; import java.time.Duration; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.function.Supplier; @@ -163,6 +174,64 @@ public class BfiServiceImpl implements IBfiService { return queryExchangeRate(effectdate.format(DATE_FORMATTER), effectdateE.format(DATE_FORMATTER)); } + @Override + public BfiBillSaveResultVO pushPayApply(BfiPayApplyPushDTO param) { + if (param == null || StringUtil.isBlank(param.getAwrpSrcCode()) || StringUtil.isBlank(param.getAwrpSrcSys())) { + throw new BfiException("推送BFI付款申请失败,外部系统编号与来源单据号不能为空"); + } + if (param.getEntry() == null || param.getEntry().isEmpty()) { + throw new BfiException("推送BFI付款申请失败,付款申请分录不能为空"); + } + String accessToken = getAccessToken(); + BfiPayApplyPushBodyDTO body = new BfiPayApplyPushBodyDTO(); + body.setData(Collections.singletonList(param)); + BfiResultVO result = commonCall("付款申请保存(应付下推)", () -> client.payApplyPush(accessToken, body)); + return result.getData(); + } + + @Override + public BfiPageVO queryPayApply(BfiPayApplyQueryDTO param) { + if (param == null || param.getPageNo() == null || param.getPageSize() == null) { + throw new BfiException("查询BFI付款申请单失败,分页参数不能为空"); + } + String accessToken = getAccessToken(); + BfiResultVO> result = commonCall("付款申请单查询", () -> client.payApplyQuery(accessToken, + param.getPageNo(), param.getPageSize(), param.getAwrpSrcCode(), param.getAwrpSrcSys(), param.getModifytimeS(), param.getModifytimeE())); + return result.getData(); + } + + @Override + public BfiBillSaveResultVO savePrePayApply(BfiPayApplySaveDTO param) { + if (param == null || StringUtil.isBlank(param.getAwrpSrcCode()) || StringUtil.isBlank(param.getAwrpSrcSys())) { + throw new BfiException("保存BFI预付款申请失败,外部系统编号与来源单据号不能为空"); + } + if (param.getEntry() == null || param.getEntry().isEmpty()) { + throw new BfiException("保存BFI预付款申请失败,付款申请分录不能为空"); + } + String accessToken = getAccessToken(); + BfiPayApplySaveBodyDTO body = new BfiPayApplySaveBodyDTO(); + body.setData(Collections.singletonList(param)); + BfiResultVO result = commonCall("预付款申请保存", () -> client.prePayApplySave(accessToken, body)); + return result.getData(); + } + + @Override + public BfiPageVO queryPayBill(BfiPayBillQueryDTO param) { + if (param == null || param.getPageNo() == null || param.getPageSize() == null) { + throw new BfiException("查询BFI付款处理失败,分页参数不能为空"); + } + if (StringUtil.isBlank(param.getBeginBizdate()) || StringUtil.isBlank(param.getEndBizdate())) { + throw new BfiException("查询BFI付款处理失败,业务日期范围不能为空"); + } + if (param.getOrgNumber() == null || param.getOrgNumber().isEmpty()) { + throw new BfiException("查询BFI付款处理失败,付款人(公司)编码不能为空"); + } + String accessToken = getAccessToken(); + BfiResultVO> result = commonCall("付款处理查询", () -> client.payBillQuery(accessToken, + param.getPageNo(), param.getPageSize(), param.getBeginBizdate(), param.getEndBizdate(), param.getBillno(), param.getOrgNumber())); + return result.getData(); + } + /** * 公共调用方法,统一校验响应结果 *