✨ 业财融合(BFI)客户端对接A103付款申请保存查询与付款处理接口

This commit is contained in:
刘泉佳
2026-09-15 18:48:24 +08:00
parent f54b73364b
commit 81c8567fd7
3 changed files with 183 additions and 0 deletions
@@ -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<List<BfiExchangeRateVO>> 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<BfiBillSaveResultVO> 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<BfiPageVO<BfiPayApplyVO>> payApplyQuery(@RequestHeader(BfiConstant.HEADER_ACCESS_TOKEN) String accessToken,
@RequestParam("pageNo") Integer pageNo,
@RequestParam("pageSize") Integer pageSize,
@RequestParam(value = "awrp_src_code", required = false) List<String> 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<BfiBillSaveResultVO> 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<BfiPageVO<BfiPayBillVO>> 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<String> billno,
@RequestParam("org_number") List<String> orgNumber);
}
@@ -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<BfiExchangeRateVO> queryExchangeRate(LocalDate effectdate, LocalDate effectdateE);
/**
* A103-1 付款申请保存(根据星瀚应付下推付款申请)
*
* @param param 付款申请参数,分录须携带应付单分录id用于下推关联
* @return 保存结果,含成功/失败数量与单据编号
*/
BfiBillSaveResultVO pushPayApply(BfiPayApplyPushDTO param);
/**
* A103-2 付款申请单查询
*
* @param param 查询参数,页码从1开始,修改时间范围不可超过1个月
* @return 付款申请单分页数据
*/
BfiPageVO<BfiPayApplyVO> queryPayApply(BfiPayApplyQueryDTO param);
/**
* A103-3 预付款申请(付款申请保存)
*
* @param param 预付款申请参数,分录付款类型应传预付款编码
* @return 保存结果,含成功/失败数量与单据编号
*/
BfiBillSaveResultVO savePrePayApply(BfiPayApplySaveDTO param);
/**
* A103-4 付款处理查询
*
* @param param 查询参数,业务日期范围不可超过1个月,付款人(公司)编码必填
* @return 付款处理分页数据
*/
BfiPageVO<BfiPayBillVO> queryPayBill(BfiPayBillQueryDTO param);
}
@@ -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<BfiBillSaveResultVO> result = commonCall("付款申请保存(应付下推)", () -> client.payApplyPush(accessToken, body));
return result.getData();
}
@Override
public BfiPageVO<BfiPayApplyVO> queryPayApply(BfiPayApplyQueryDTO param) {
if (param == null || param.getPageNo() == null || param.getPageSize() == null) {
throw new BfiException("查询BFI付款申请单失败,分页参数不能为空");
}
String accessToken = getAccessToken();
BfiResultVO<BfiPageVO<BfiPayApplyVO>> 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<BfiBillSaveResultVO> result = commonCall("预付款申请保存", () -> client.prePayApplySave(accessToken, body));
return result.getData();
}
@Override
public BfiPageVO<BfiPayBillVO> 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<BfiPageVO<BfiPayBillVO>> result = commonCall("付款处理查询", () -> client.payBillQuery(accessToken,
param.getPageNo(), param.getPageSize(), param.getBeginBizdate(), param.getEndBizdate(), param.getBillno(), param.getOrgNumber()));
return result.getData();
}
/**
* 公共调用方法,统一校验响应结果
*