宁波银行交易明细查询接口

2024年7月25日 15:48:44
This commit is contained in:
xiang2lin 2024-07-25 15:48:51 +08:00
parent af5a85b748
commit 93d9fc2224
6 changed files with 899 additions and 0 deletions

View File

@ -0,0 +1,190 @@
package com.hzya.frame.ningboBankTreasury.dto.req;
import java.util.List;
/**
* @Description 交易明细查询请求参数
* @Author xiangerlin
* @Date 2024/7/24 17:52
**/
public class AccTransactionReq {
//客户号 必填
private String custId;
//账号列表 每次对多1000个账号 必填
private List<String> bankAccList;
//增量查询标识0增量查询 1全量查询
private String queryFlag;
//增量查询起始时间 yyyy-MM-dd HH:mm:ss
private String recTime;
//开始日期 yyyy-MM-dd
private String beginDate;
//结束日期 yyyy-MM-dd
private String endDate;
//起始金额
private String beginAmt;
//终止金额
private String endAmt;
//收支方向 0收入 1支出
private String cdSign;
//每页条数
private String pageSize;
//当前页数
private String currentPage;
//查询方式 0分页查询 1下载文件查询
private String queryType;
//账户标识 0统计助手 1实体账户
private String bankAccSign;//
//排序方式asc正序 desc倒序
private String sortType;
//单账号当日明细最大序号
private String singleAccTodayMaxOrderNo;
//币种编码
private String curCode;
//统计编号
private List<String> subBankAccList;
public String getCustId() {
return custId;
}
public void setCustId(String custId) {
this.custId = custId;
}
public List<String> getBankAccList() {
return bankAccList;
}
public void setBankAccList(List<String> bankAccList) {
this.bankAccList = bankAccList;
}
public String getQueryFlag() {
return queryFlag;
}
public void setQueryFlag(String queryFlag) {
this.queryFlag = queryFlag;
}
public String getRecTime() {
return recTime;
}
public void setRecTime(String recTime) {
this.recTime = recTime;
}
public String getBeginDate() {
return beginDate;
}
public void setBeginDate(String beginDate) {
this.beginDate = beginDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public String getBeginAmt() {
return beginAmt;
}
public void setBeginAmt(String beginAmt) {
this.beginAmt = beginAmt;
}
public String getEndAmt() {
return endAmt;
}
public void setEndAmt(String endAmt) {
this.endAmt = endAmt;
}
public String getCdSign() {
return cdSign;
}
public void setCdSign(String cdSign) {
this.cdSign = cdSign;
}
public String getPageSize() {
return pageSize;
}
public void setPageSize(String pageSize) {
this.pageSize = pageSize;
}
public String getCurrentPage() {
return currentPage;
}
public void setCurrentPage(String currentPage) {
this.currentPage = currentPage;
}
public String getQueryType() {
return queryType;
}
public void setQueryType(String queryType) {
this.queryType = queryType;
}
public String getBankAccSign() {
return bankAccSign;
}
public void setBankAccSign(String bankAccSign) {
this.bankAccSign = bankAccSign;
}
public String getSortType() {
return sortType;
}
public void setSortType(String sortType) {
this.sortType = sortType;
}
public String getSingleAccTodayMaxOrderNo() {
return singleAccTodayMaxOrderNo;
}
public void setSingleAccTodayMaxOrderNo(String singleAccTodayMaxOrderNo) {
this.singleAccTodayMaxOrderNo = singleAccTodayMaxOrderNo;
}
public String getCurCode() {
return curCode;
}
public void setCurCode(String curCode) {
this.curCode = curCode;
}
public List<String> getSubBankAccList() {
return subBankAccList;
}
public void setSubBankAccList(List<String> subBankAccList) {
this.subBankAccList = subBankAccList;
}
public AccTransactionReq() {
}
public AccTransactionReq(String custId, List<String> bankAccList) {
this.custId = custId;
this.bankAccList = bankAccList;
}
}

View File

@ -0,0 +1,464 @@
package com.hzya.frame.ningboBankTreasury.dto.res;
/**
* @Description 宁波银行 境内交易明细返回参数
* @Author xiangerlin
* @Date 2024/7/24 16:53
**/
public class AccTransactionRes {
//账号
private String bankAcc;
private String bankSubAcc;
//户名
private String accName;
//开户行名
private String bankName;
//对方户名
private String oppAccName;
//对方账号
private String oppAccNo;
//对方开户行名
private String oppAccBank;
//收支方向 0支出 1支出
private String cdSign;
//业务类型 其他
private String cdSignName;
//交易金额
private String amt;
//明细余额
private String bal;
//时间
private String transTime;
//子流水号
private String subSerialNo;
//交易流水号
private String serialNo;
//币种编号
private String curCode;
//用途
private String uses;
//摘要
private String abs;
//回单匹配号
private String voucherNo;
//银行类别代码
private String bifCode;
//银行类别
private String bankType;
//对方银行类别
private String oppBankType;
//对公对私标志 0对公 1对私
private String isForIndividual;
//流水号 这个字段是唯一的
private String serialId;
//银行交易流水号
private String bankSerialId;
//集团内交易
private String groupTrans;
//资金划拨
private String capitalTrans;
//交易备注
private String postScript;
private String accType;
private String accTypeName;
//现转标识
private String cashTfrFlg;
// 所属 行号
private String chinaDevelopBankNo;
// 所属 账号类型
private String chinaDevelopAccType;
//支付匹配号
private String payBillCode;
//业务基础订单号
private String alipayBaseOrderNumber;
//业务描述
private String alipayBusinessDescription;
//备注1
private String labelValue1;
private String labelValue2;
private String labelValue3;
private String labelValue4;
private String downloadNo;
//排序规则
private String sortRule;
//明细编码
private String orderNo;
//商品名称
private String alipayTradeName;
//回单匹配号
private String matchCode;
//回单个性化描述
private String receiptInfo;
//凭证号
private String billNum;
//明细更新时间
private String recTime;
public String getBankAcc() {
return bankAcc;
}
public void setBankAcc(String bankAcc) {
this.bankAcc = bankAcc;
}
public String getBankSubAcc() {
return bankSubAcc;
}
public void setBankSubAcc(String bankSubAcc) {
this.bankSubAcc = bankSubAcc;
}
public String getAccName() {
return accName;
}
public void setAccName(String accName) {
this.accName = accName;
}
public String getBankName() {
return bankName;
}
public void setBankName(String bankName) {
this.bankName = bankName;
}
public String getOppAccNo() {
return oppAccNo;
}
public void setOppAccNo(String oppAccNo) {
this.oppAccNo = oppAccNo;
}
public String getOppAccBank() {
return oppAccBank;
}
public void setOppAccBank(String oppAccBank) {
this.oppAccBank = oppAccBank;
}
public String getCdSign() {
return cdSign;
}
public void setCdSign(String cdSign) {
this.cdSign = cdSign;
}
public String getCdSignName() {
return cdSignName;
}
public void setCdSignName(String cdSignName) {
this.cdSignName = cdSignName;
}
public String getAmt() {
return amt;
}
public void setAmt(String amt) {
this.amt = amt;
}
public String getBal() {
return bal;
}
public void setBal(String bal) {
this.bal = bal;
}
public String getTransTime() {
return transTime;
}
public void setTransTime(String transTime) {
this.transTime = transTime;
}
public String getSubSerialNo() {
return subSerialNo;
}
public void setSubSerialNo(String subSerialNo) {
this.subSerialNo = subSerialNo;
}
public String getSerialNo() {
return serialNo;
}
public void setSerialNo(String serialNo) {
this.serialNo = serialNo;
}
public String getCurCode() {
return curCode;
}
public void setCurCode(String curCode) {
this.curCode = curCode;
}
public String getUses() {
return uses;
}
public void setUses(String uses) {
this.uses = uses;
}
public String getAbs() {
return abs;
}
public void setAbs(String abs) {
this.abs = abs;
}
public String getVoucherNo() {
return voucherNo;
}
public void setVoucherNo(String voucherNo) {
this.voucherNo = voucherNo;
}
public String getBifCode() {
return bifCode;
}
public void setBifCode(String bifCode) {
this.bifCode = bifCode;
}
public String getBankType() {
return bankType;
}
public void setBankType(String bankType) {
this.bankType = bankType;
}
public String getOppBankType() {
return oppBankType;
}
public void setOppBankType(String oppBankType) {
this.oppBankType = oppBankType;
}
public String getIsForIndividual() {
return isForIndividual;
}
public void setIsForIndividual(String isForIndividual) {
this.isForIndividual = isForIndividual;
}
public String getSerialId() {
return serialId;
}
public void setSerialId(String serialId) {
this.serialId = serialId;
}
public String getBankSerialId() {
return bankSerialId;
}
public void setBankSerialId(String bankSerialId) {
this.bankSerialId = bankSerialId;
}
public String getGroupTrans() {
return groupTrans;
}
public void setGroupTrans(String groupTrans) {
this.groupTrans = groupTrans;
}
public String getCapitalTrans() {
return capitalTrans;
}
public void setCapitalTrans(String capitalTrans) {
this.capitalTrans = capitalTrans;
}
public String getPostScript() {
return postScript;
}
public void setPostScript(String postScript) {
this.postScript = postScript;
}
public String getAccType() {
return accType;
}
public void setAccType(String accType) {
this.accType = accType;
}
public String getAccTypeName() {
return accTypeName;
}
public void setAccTypeName(String accTypeName) {
this.accTypeName = accTypeName;
}
public String getCashTfrFlg() {
return cashTfrFlg;
}
public void setCashTfrFlg(String cashTfrFlg) {
this.cashTfrFlg = cashTfrFlg;
}
public String getChinaDevelopBankNo() {
return chinaDevelopBankNo;
}
public void setChinaDevelopBankNo(String chinaDevelopBankNo) {
this.chinaDevelopBankNo = chinaDevelopBankNo;
}
public String getChinaDevelopAccType() {
return chinaDevelopAccType;
}
public void setChinaDevelopAccType(String chinaDevelopAccType) {
this.chinaDevelopAccType = chinaDevelopAccType;
}
public String getPayBillCode() {
return payBillCode;
}
public void setPayBillCode(String payBillCode) {
this.payBillCode = payBillCode;
}
public String getAlipayBaseOrderNumber() {
return alipayBaseOrderNumber;
}
public void setAlipayBaseOrderNumber(String alipayBaseOrderNumber) {
this.alipayBaseOrderNumber = alipayBaseOrderNumber;
}
public String getAlipayBusinessDescription() {
return alipayBusinessDescription;
}
public void setAlipayBusinessDescription(String alipayBusinessDescription) {
this.alipayBusinessDescription = alipayBusinessDescription;
}
public String getLabelValue1() {
return labelValue1;
}
public void setLabelValue1(String labelValue1) {
this.labelValue1 = labelValue1;
}
public String getLabelValue2() {
return labelValue2;
}
public void setLabelValue2(String labelValue2) {
this.labelValue2 = labelValue2;
}
public String getLabelValue3() {
return labelValue3;
}
public void setLabelValue3(String labelValue3) {
this.labelValue3 = labelValue3;
}
public String getLabelValue4() {
return labelValue4;
}
public void setLabelValue4(String labelValue4) {
this.labelValue4 = labelValue4;
}
public String getDownloadNo() {
return downloadNo;
}
public void setDownloadNo(String downloadNo) {
this.downloadNo = downloadNo;
}
public String getSortRule() {
return sortRule;
}
public void setSortRule(String sortRule) {
this.sortRule = sortRule;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String getAlipayTradeName() {
return alipayTradeName;
}
public void setAlipayTradeName(String alipayTradeName) {
this.alipayTradeName = alipayTradeName;
}
public String getMatchCode() {
return matchCode;
}
public void setMatchCode(String matchCode) {
this.matchCode = matchCode;
}
public String getReceiptInfo() {
return receiptInfo;
}
public void setReceiptInfo(String receiptInfo) {
this.receiptInfo = receiptInfo;
}
public String getBillNum() {
return billNum;
}
public void setBillNum(String billNum) {
this.billNum = billNum;
}
public String getRecTime() {
return recTime;
}
public void setRecTime(String recTime) {
this.recTime = recTime;
}
}

View File

@ -0,0 +1,94 @@
package com.hzya.frame.ningboBankTreasury.dto.res;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import java.util.List;
/**
* @Description 宁波银行查询交易明细
* @Author xiangerlin
* @Date 2024/7/24 16:45
**/
public class AccTrxResponse {
//返回交易码 0000成功0001失败
private String retCode;
//返回信息
private String retMsg;
//每条页数
private String pageSize;
//当前页数
private String currentPage;
//总页数
private String totalPage;
//总条数
private String totalSize;
//收款明细列表
private List<AccTransactionRes> list;
public String getRetCode() {
return retCode;
}
public void setRetCode(String retCode) {
this.retCode = retCode;
}
public String getRetMsg() {
return retMsg;
}
public void setRetMsg(String retMsg) {
this.retMsg = retMsg;
}
public String getPageSize() {
return pageSize;
}
public void setPageSize(String pageSize) {
this.pageSize = pageSize;
}
public String getCurrentPage() {
return currentPage;
}
public void setCurrentPage(String currentPage) {
this.currentPage = currentPage;
}
public String getTotalPage() {
return totalPage;
}
public void setTotalPage(String totalPage) {
this.totalPage = totalPage;
}
public String getTotalSize() {
return totalSize;
}
public void setTotalSize(String totalSize) {
this.totalSize = totalSize;
}
public List<AccTransactionRes> getList() {
return list;
}
public void setList(List<AccTransactionRes> list) {
this.list = list;
}
public static AccTrxResponse valueOf(String str){
if (StrUtil.isNotEmpty(str) && JSONUtil.isTypeJSON(str)){
NingBoResponse ningBoResponse = JSONObject.parseObject(str,NingBoResponse.class);
AccTrxResponse accTrxResponse = ningBoResponse.getData().toJavaObject(AccTrxResponse.class);
return accTrxResponse;
}
return null;
}
}

View File

@ -0,0 +1,23 @@
package com.hzya.frame.ningboBankTreasury.dto.res;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
/**
* @Description 宁波银行返回对象
* @Author xiangerlin
* @Date 2024/7/24 17:46
**/
public class NingBoResponse {
@JSONField(name ="Data")
private JSONObject data;
public JSONObject getData() {
return data;
}
public void setData(JSONObject data) {
this.data = data;
}
}

View File

@ -1,9 +1,14 @@
package com.hzya.frame.ningboBankTreasury.service;
import com.alibaba.fastjson.JSONObject;
import com.hzya.frame.ningboBankTreasury.dto.req.AccTransactionReq;
import com.hzya.frame.ningboBankTreasury.dto.res.AccTransactionRes;
import com.hzya.frame.ningboBankTreasury.dto.res.AccTrxResponse;
import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
import com.hzya.frame.web.entity.JsonResultEntity;
import java.util.List;
public interface INingboBankTreasuryService {
@ -25,4 +30,22 @@ public interface INingboBankTreasuryService {
*
*/
SysExtensionApiEntity doChangeData(SysExtensionApiEntity entity);
/**
* 银行原生方法
* 分页方式 全量查询境内账户交易明细
* accTransactionReq.custId 客户号 必填
* accTransactionReq.bankAccList 账号列表 必填
* @param accTransactionReq
* @return
*/
List<AccTransactionRes> queryAccDetails(AccTransactionReq accTransactionReq);
/**
* esb方法
* 分页方式 全量查询境内账户交易明细
* @param jsonObject
* @return
*/
JsonResultEntity queryAccountDetailsEsb(JSONObject jsonObject);
}

View File

@ -1,8 +1,13 @@
package com.hzya.frame.ningboBankTreasury.service.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.hzya.frame.bip.v3.v2207.dps.service.impl.PayMentServiceImpl;
import com.hzya.frame.ningboBankTreasury.dto.req.AccTransactionReq;
import com.hzya.frame.ningboBankTreasury.dto.res.AccTransactionRes;
import com.hzya.frame.ningboBankTreasury.dto.res.AccTrxResponse;
import com.hzya.frame.ningboBankTreasury.service.INingboBankTreasuryService;
import com.hzya.frame.ningboBankTreasury.util.BingboBankUtil;
import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
import com.hzya.frame.sysnew.application.plugin.entity.SysApplicationPluginEntity;
import com.hzya.frame.util.bipV3.SHA256Util;
@ -16,7 +21,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -81,6 +88,104 @@ public class NingboBankTreasuryServiceImpl implements INingboBankTreasuryService
}
}
/**
* 分页方式 全量查询境内账户交易明细
* accTransactionReq.custId 客户号 必填
* accTransactionReq.bankAccList 账号列表 必填
*
* @param accTransactionReq
* @return
*/
@Override
public List<AccTransactionRes> queryAccDetails(AccTransactionReq accTransactionReq) {
accTransactionReq = defValue(accTransactionReq);
//当前页数
int currentPage = Integer.valueOf(accTransactionReq.getCurrentPage());
//总页数
int totalPage = 0;
JSONObject data = new JSONObject();
List<AccTransactionRes> resList = new ArrayList<>();
try {
do {
ConfigParam configParam = new ConfigParam("MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgTt6OadouxxxSDg/0SZdOIBqtnFGKrpwmL+quEUf+hfSgCgYIKoEcz1UBgi2hRANCAAQGHNN2NO7btp+w1248yk98E0asGC8sG0bmIzdom4M0xp3vc4IfXjmZ8omUz4oVcjzAuyMSSpJM6uPLcU1SH4HZ","http://cz-test.nbcb.com.cn:7070/nbcb/api","54b3e05c-7983-4e6c-8920-f9ab8a0004a6","MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEXAt6fxeKlpREIyXoT3jDwGU7L6JkKrzdOKP1cMB14rtNwwlyaUGLrtuHVoArAHP3x7XN2rUw0GxSngYQwOAsjQ==",10000,20000);
OpenSDK.dynamicInit(configParam,true);
data.put("Data",JSONObject.toJSONString(accTransactionReq));
logger.info("查询交易明细请求参数:{}",data.toString());
String returnData = OpenSDK.send(BingboBankUtil.TMSREPORT,BingboBankUtil.QUERYACCDETAIL,data.toString());
System.out.println(returnData);
logger.info("查询交易明细返回数据:{}",returnData);
AccTrxResponse accTrxResponse = AccTrxResponse.valueOf(returnData);
if (null != accTrxResponse && BingboBankUtil.isSuccess(accTrxResponse.getRetCode())){
totalPage = Integer.valueOf(accTrxResponse.getTotalPage());
resList.addAll(accTrxResponse.getList());
}
currentPage++;//页码自增
accTransactionReq.setCurrentPage(String.valueOf(currentPage));//页码
}while (currentPage <= totalPage);//当前页 <= 总页数 继续循环
} catch (Exception e) {
logger.error("查询账户交易明细出错:{}",e);
}
return resList;
}
/**
* esb方法
* 分页方式 全量查询境内账户交易明细
*
* @param jsonObject
* @return
*/
@Override
public JsonResultEntity queryAccountDetailsEsb(JSONObject jsonObject) {
JSONObject entity = getstrObj("jsonStr", jsonObject);
String dataJson = entity.getJSONObject("Data").getString("Data");
AccTransactionReq accTransactionReq = JSONObject.parseObject(dataJson,AccTransactionReq.class );
accTransactionReq = defValue(accTransactionReq);
//当前页数
int currentPage = Integer.valueOf(accTransactionReq.getCurrentPage());
//总页数
int totalPage = 0;
JSONObject data = new JSONObject();
List<AccTransactionRes> resList = new ArrayList<>();
try {
do {
data.put("Data",JSONObject.toJSONString(accTransactionReq));
entity.put("Data",data);
JSONObject param = new JSONObject();
param.put("jsonStr",entity);
JSONObject returnObj = (JSONObject) sendNbBank(param);
logger.info("查询交易明细返回数据:{}",returnObj.toString());
AccTrxResponse accTrxResponse = AccTrxResponse.valueOf(returnObj.toString());
if (null != accTrxResponse && BingboBankUtil.isSuccess(accTrxResponse.getRetCode())){
totalPage = Integer.valueOf(accTrxResponse.getTotalPage());
resList.addAll(accTrxResponse.getList());
}
currentPage++;//页码自增
accTransactionReq.setCurrentPage(String.valueOf(currentPage));//页码
}while (currentPage <= totalPage);//当前页 <= 总页数 继续循环
} catch (Exception e) {
logger.error("查询账户交易明细出错:{}",e);
return BaseResult.getFailureMessageEntity("查询账户交易明细出错"+e.getMessage());
}
return BaseResult.getSuccessMessageEntity("查询账户交易明细成功",resList);
}
//默认值检查
private AccTransactionReq defValue(AccTransactionReq accTransactionReq){
if (StrUtil.isEmpty(accTransactionReq.getPageSize())){
accTransactionReq.setPageSize("1000");
}
if (StrUtil.isEmpty(accTransactionReq.getCurrentPage())){
accTransactionReq.setCurrentPage("1");
}
if (StrUtil.isEmpty(accTransactionReq.getQueryType())){
accTransactionReq.setQueryType("0");
}
if (StrUtil.isEmpty(accTransactionReq.getCdSign())){
accTransactionReq.setCdSign("0");
}
return accTransactionReq;
}
/**
* @param entity
* @content 此方法获取初始化参数拼接请求参数