1、递归查询分页逻辑

2、票据收款承兑逻辑
This commit is contained in:
钱涛 2025-03-03 18:10:02 +08:00
parent 28b5ee71f6
commit 848ce0a62d
3 changed files with 71 additions and 15 deletions

View File

@ -16,7 +16,7 @@ public class GetDtaResponse extends CBS8BaseResponse {
private Body data;
@Data
public static class Body {
public static class Body extends CBS8PageInfo{
/**
* 明细列表
*/

View File

@ -71,9 +71,6 @@ public class SyncCBSAccountDetailsJob extends BaseCronJob {
user.setLoginid("sysadmin");
try {
AccountManagementClient accountManagementClient = new AccountManagementClient();
GetTransactionDetailRequest requestParam = new GetTransactionDetailRequest();
requestParam.setCurrentPage(1);
requestParam.setPageSize(1000);
@ -92,12 +89,15 @@ public class SyncCBSAccountDetailsJob extends BaseCronJob {
if (StrUtil.isNotBlank(paymentNatureList)) {
requestParam.setPaymentNatureList(Arrays.stream(paymentNatureList.split(",")).collect(Collectors.toList()));
}
GetTransactionDetailResponse getTransactionDetailResponse = accountManagementClient.transactionDetailQuery(requestParam);
List<GetTransactionDetailResponse.Detail> list = getTransactionDetailResponse.getData().getList();
//查询前1000条数据
AccountManagementClient accountManagementClient = new AccountManagementClient();
GetTransactionDetailResponse response = accountManagementClient.transactionDetailQuery(requestParam);
List<GetTransactionDetailResponse.Detail> list = response.getData().getList();
//判断是否还存在数据递归查询
boolean hasNextPage = getTransactionDetailResponse.getData().isHasNextPage();
int nextPage = getTransactionDetailResponse.getData().getNextPage();
boolean hasNextPage = response.getData().isHasNextPage();
int nextPage = response.getData().getNextPage();
while (hasNextPage) {
requestParam.setCurrentPage(nextPage);
GetTransactionDetailResponse nextPageResponse = accountManagementClient.transactionDetailQuery(requestParam);

View File

@ -3,11 +3,14 @@ package com.engine.salary.timer;
import cn.hutool.core.util.StrUtil;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.SQLMapper;
import com.engine.salary.mapper.cbs.UfHkrdzbMapper;
import com.engine.salary.remote.cbs8.client.BillManagementClient;
import com.engine.salary.remote.cbs8.config.EBS2ECConfig;
import com.engine.salary.remote.cbs8.po.UfHkrdzbPO;
import com.engine.salary.remote.cbs8.request.GetDtaRequest;
import com.engine.salary.remote.cbs8.response.GetDtaResponse;
import com.engine.salary.util.JsonUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.db.MapperProxyFactory;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.security.AnyTypePermission;
@ -64,6 +67,10 @@ public class SyncCBSPayDetailsJob extends BaseCronJob {
return MapperProxyFactory.getProxy(SQLMapper.class);
}
private UfHkrdzbMapper getUfHkrdzbMapper() {
return MapperProxyFactory.getProxy(UfHkrdzbMapper.class);
}
@Override
public void execute() {
User user = new User();
@ -93,10 +100,22 @@ public class SyncCBSPayDetailsJob extends BaseCronJob {
requestParam.setHoldAccountList(Arrays.stream(holdAccountList.split(",")).collect(Collectors.toList()));
requestParam.setBillVarietyList(Arrays.stream(billVarietyList.split(",")).collect(Collectors.toList()));
//查询前1000条数据
BillManagementClient bailManagementClient = new BillManagementClient();
GetDtaResponse getDtaResponse = bailManagementClient.dtaQuery(requestParam);
GetDtaResponse response = bailManagementClient.dtaQuery(requestParam);
List<GetDtaResponse.Detail> list = response.getData().getList();
List<GetDtaResponse.Detail> list = getDtaResponse.getData().getList();
//判断是否还存在数据递归查询
boolean hasNextPage = response.getData().isHasNextPage();
int nextPage = response.getData().getNextPage();
while (hasNextPage) {
requestParam.setCurrentPage(nextPage);
GetDtaResponse nextPageResponse = bailManagementClient.dtaQuery(requestParam);
List<GetDtaResponse.Detail> pageData = nextPageResponse.getData().getList();
list.addAll(pageData);
hasNextPage = nextPageResponse.getData().isHasNextPage();
nextPage = nextPageResponse.getData().getNextPage();
}
//加载cbs配置
XStream xStream = new XStream();
@ -118,6 +137,11 @@ public class SyncCBSPayDetailsJob extends BaseCronJob {
String uniqueEbsKey = uniqueField.getEbsKey();
List<String> uniqueDataKeys = getSQLMapper().listString(String.format("select %s from %s", uniqueKey, tableName));
//获取汇款人与办事处的对照数据
List<UfHkrdzbPO> ufHkrdzbPOS = getUfHkrdzbMapper().listAll();
Map<String, Integer> customerDepartmentMap = SalaryEntityUtil.convert2Map(ufHkrdzbPOS, UfHkrdzbPO::getKhmc, UfHkrdzbPO::getDepartmentId);
for (GetDtaResponse.Detail detail : list) {
Map<String, String> detailMap = JsonUtil.parseMap(detail, String.class);
String uniqueData = detailMap.get(uniqueEbsKey);
@ -136,8 +160,6 @@ public class SyncCBSPayDetailsJob extends BaseCronJob {
add("modedatacreatertype");
add("modedatacreatedate");
add("modedatacreatetime");
//业务逻辑字段收款类型
add("sklx");
}};
String currDate = TimeUtil.getCurrentDateString();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
@ -148,16 +170,50 @@ public class SyncCBSPayDetailsJob extends BaseCronJob {
add(0);
add(String.format("'%s'", currDate));
add(String.format("'%s'", currTime));
//业务逻辑字段收款类型银承商承
add("AC01".equals(detailMap.get("billType")) ? 0 : 1);
}};
String hkr = "";
for (EBS2ECConfig.Table.Field field : table.getFields()) {
//数据库字段
String fieldName = field.getKey();
fields.add(fieldName);
// 接口值
values.add(String.format("'%s'", detailMap.getOrDefault(field.getEbsKey(), "")));
String value = detailMap.getOrDefault(field.getEbsKey(), "");
values.add(String.format("'%s'", value));
//汇款人
if ("hkr".equals(fieldName)) {
hkr = value;
}
}
//业务逻辑字段收款类型
fields.add("sklx");
values. add("AC01".equals(detailMap.get("billType")) ? 0 : 1);
/*
* 认领逻辑
* 根据汇款人去表里匹配汇款人与办事处的对照表
* 如果能匹配到数据则状态改为已自动认领同时把办事处部门的值同步到办事处字段中是否系统自动认领同步为是
* 如对照标准无数据则状态为未认领
*/
Integer departmentId = customerDepartmentMap.get(hkr);
if(departmentId!=null){
//认领
fields.add("zt");
values.add(1);
//是否系统认领
fields.add("sfxtzdrl");
values.add(1);
//办事处
fields.add("szbm");
values.add(departmentId);
}else {
//未认领
fields.add("zt");
values.add(0);
}
String sql = String.format("insert into %s (%s) values (%s)", tableName, String.join(",", fields), values.stream().map(Object::toString).collect(Collectors.joining(",")));