
# 一、交易明细分页
AbstractDetailImpl抽象交易明细分页查询流程:
```java
@Override
public EBBankDetailResponse doBiz(BankDetailRequest request) {
EBBankDetailResponse response;
if(isSupportPage()){
response = doBizWithPage(request);
}else{
response = process(request);
}
return response;
}
public EBBankDetailResponse doBizWithPage(BankDetailRequest request) {
List<DetailInfo> detailList = new ArrayList<>(16);
setCurrentPage("0");
setLastPage(false);
try{
do{
EBBankDetailResponse response = process(request);
//解析数据
detailList.addAll(response.getDetails());
}while(isLastPage());
return new EBBankDetailResponse(detailList);
}catch(Exception e){
throw EBExceiptionUtil.serviceException(e);
}
}
// 是否支持分页查询
public boolean isSupportPage(){
return false;
}
```
在银行插件查询明细实现类中,编写打包和解析报文的方法,同时将isSupportPage()进行重写,返回值改为true就能够支持分页查询,在对响应报文解析时,注意设置下一页或者最后一页。
开发样例(历史明细):
```java
private void processPageTag(String responseStr){
int pagetag = Integer.parseInt(getCurrentPage());
String encoding = RequestContextUtils.getCharset();
Element root = JDomUtils.string2Root(responseStr, encoding);
Element Body = root.getChild("Body");
if((Body.getChildTextTrim("RecordNumber")).length() <= 0
|| Body.getChildTextTrim("RecordNumber") == null){
setLastPage(true);
}
int turnPageShowNum = 100;
int turnPageTotalNum = Integer.parseInt(Body.getChildTextTrim("RecordNumber"));
if((pagetag - 1 + turnPageShowNum) >= turnPageTotalNum){
setLastPage(true);
}else{
setCurrentPage(pagetag + 100);
setLastPage(false);
}
}
// 是否支持分页查询
@Override
public boolean isSupportPage(){
return true;
}
@Override
public EBBankDetailResponse hisDetail(BankDetailRequest request) {
return doBiz(request);
}
```
分页查询使用到的接口如下:
|接口名称|说明|
|-|-|
|setCurrentPage|设置下次查询明细的起始页码或序号|
|getCurrentPage| 获取查询明细的起始页码或序号|
|setLastPage| 设置是否为最后一页|
|isLastPage| 读取是否为最后一页|
|pack| 银行请求报文打包|
|parse |银行响应报文解析|
|isSupportPage| 声明当前接口能否支持分页查询|
# 二、交易明细主键设置
交易明细主键设置,能够提高从银行拉取数据与数据库中记录匹配的效率,也能实现交易明细的防重。
1、 与银行方沟通,哪些字段能唯一标识一笔交易明细,一般为交易账号,交易日期,流水号。
2、 在对应银行的MetaDataImpl类里,重写getDetailUniqueRule()方法,设置组件组成的规则。
```java
public class MocTestMetaDataImpl
extends FBEMetaDataTemplate implements BankMetaDataCollector {
/**
* 设置交易明细唯一主键,需