交易明细同步
This commit is contained in:
parent
de25d6cdf4
commit
214419e835
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="GB2312"?>
|
||||
|
||||
<config name="CBS字段映射配置">
|
||||
|
||||
<table name="境内账户明细" key="uf_cbsjnmx" modeId="9" uniqueKey = "jylsh">
|
||||
<field name="收款类型" key="sklx" ebsKey="paymentNature"/>
|
||||
<field name="交易流水号" key="jylsh" ebsKey="transactionSerialNumber" unique="true"/>
|
||||
<field name="收到日期" key="sdrq" ebsKey="bankTransactionDate"/>
|
||||
<field name="回款人" key="hkr" ebsKey="unitName"/>
|
||||
<field name="对应开票名" key="dykpm" ebsKey="unitName"/>
|
||||
<field name="收款金额" key="skje" ebsKey="incurredAmount"/>
|
||||
</table>
|
||||
|
||||
|
||||
</config>
|
||||
|
|
@ -17,4 +17,6 @@ public interface SQLMapper {
|
|||
List<Map> runSQL(@Param("sql") String sql);
|
||||
|
||||
List<Long> listLong(@Param("sql") String sql);
|
||||
|
||||
List<String> listString(@Param("sql") String sql);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,4 +9,8 @@
|
|||
<select id="listLong" resultType="long">
|
||||
${sql}
|
||||
</select>
|
||||
|
||||
<select id="listString" resultType="string">
|
||||
${sql}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,63 @@
|
|||
package com.engine.salary.remote.cbs8.config;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||
import com.thoughtworks.xstream.annotations.XStreamImplicit;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@XStreamAlias("config")
|
||||
public class EBS2ECConfig {
|
||||
@XStreamAlias("name")
|
||||
@XStreamAsAttribute
|
||||
private String name;
|
||||
|
||||
@XStreamImplicit(itemFieldName = "table")
|
||||
private List<Table> tables;
|
||||
|
||||
@Data
|
||||
public static class Table {
|
||||
@XStreamAlias("name")
|
||||
@XStreamAsAttribute
|
||||
private String name;
|
||||
|
||||
@XStreamAlias("key")
|
||||
@XStreamAsAttribute
|
||||
private String key;
|
||||
|
||||
@XStreamAlias("modeId")
|
||||
@XStreamAsAttribute
|
||||
private Integer modeId;
|
||||
|
||||
@XStreamImplicit(itemFieldName = "field")
|
||||
private List<Field> fields;
|
||||
|
||||
@Data
|
||||
public static class Field {
|
||||
@XStreamAlias("name")
|
||||
@XStreamAsAttribute
|
||||
private String name;
|
||||
|
||||
@XStreamAlias("key")
|
||||
@XStreamAsAttribute
|
||||
private String key;
|
||||
|
||||
@XStreamAlias("ebsKey")
|
||||
@XStreamAsAttribute
|
||||
private String ebsKey;
|
||||
|
||||
@XStreamAlias("unique")
|
||||
@XStreamAsAttribute
|
||||
private boolean unique;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,16 +2,28 @@ 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.hrm.HrmSnapshotMapper;
|
||||
import com.engine.salary.remote.cbs8.client.AccountManagementClient;
|
||||
import com.engine.salary.remote.cbs8.config.EBS2ECConfig;
|
||||
import com.engine.salary.remote.cbs8.request.GetTransactionDetailRequest;
|
||||
import com.engine.salary.remote.cbs8.response.GetTransactionDetailResponse;
|
||||
import com.engine.salary.util.JsonUtil;
|
||||
import com.engine.salary.util.db.MapperProxyFactory;
|
||||
import com.thoughtworks.xstream.XStream;
|
||||
import com.thoughtworks.xstream.security.AnyTypePermission;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.formmode.setup.ModeRightInfo;
|
||||
import weaver.general.GCONST;
|
||||
import weaver.general.TimeUtil;
|
||||
import weaver.hrm.User;
|
||||
import weaver.interfaces.schedule.BaseCronJob;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Arrays;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
|
|
@ -46,6 +58,10 @@ public class CBS8GetTransactionDetailJob extends BaseCronJob {
|
|||
return MapperProxyFactory.getProxy(HrmSnapshotMapper.class);
|
||||
}
|
||||
|
||||
private SQLMapper getSQLMapper() {
|
||||
return MapperProxyFactory.getProxy(SQLMapper.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
User user = new User();
|
||||
|
|
@ -74,7 +90,81 @@ public class CBS8GetTransactionDetailJob extends BaseCronJob {
|
|||
if (StrUtil.isNotBlank(paymentNatureList)) {
|
||||
requestParam.setPaymentNatureList(Arrays.stream(paymentNatureList.split(",")).collect(Collectors.toList()));
|
||||
}
|
||||
accountManagementClient.transactionDetailQuery(requestParam);
|
||||
GetTransactionDetailResponse getTransactionDetailResponse = accountManagementClient.transactionDetailQuery(requestParam);
|
||||
List<GetTransactionDetailResponse.Detail> list = getTransactionDetailResponse.getData().getList();
|
||||
|
||||
//加载cbs配置
|
||||
XStream xStream = new XStream();
|
||||
String resource = GCONST.getRootPath() + "WEB-INF" + File.separatorChar + "CBS2ECConfig.xml";
|
||||
File file = new File(resource);
|
||||
xStream.addPermission(AnyTypePermission.ANY);
|
||||
xStream.processAnnotations(EBS2ECConfig.class);
|
||||
EBS2ECConfig dto = (EBS2ECConfig) xStream.fromXML(file);
|
||||
EBS2ECConfig.Table table = dto.getTables().get(0);
|
||||
Integer modeId = table.getModeId();
|
||||
String tableName = table.getKey();
|
||||
|
||||
//获取已存在的数据
|
||||
EBS2ECConfig.Table.Field uniqueField = table.getFields().stream().filter(EBS2ECConfig.Table.Field::isUnique).findFirst().orElse(null);
|
||||
if(uniqueField == null){
|
||||
throw new SalaryRunTimeException("未设置唯一标识字段");
|
||||
}
|
||||
String uniqueKey = uniqueField.getKey();
|
||||
String uniqueEbsKey = uniqueField.getEbsKey();
|
||||
List<String> uniqueDataKeys = getSQLMapper().listString(String.format("select %s from %s", uniqueKey, tableName));
|
||||
|
||||
for (GetTransactionDetailResponse.Detail detail : list) {
|
||||
Map<String, String> detailMap = JsonUtil.parseMap(detail, String.class);
|
||||
String uniqueData = detailMap.get(uniqueEbsKey);
|
||||
if (StrUtil.isBlank(uniqueData)) {
|
||||
log.warn("跳过cbs交易数据,唯一标识返回空,uniqueKey:{},uniqueEbsKey:{}", uniqueKey, uniqueEbsKey);
|
||||
continue;
|
||||
}
|
||||
if (uniqueDataKeys.contains(uniqueData)) {
|
||||
log.warn("跳过cbs交易数据,数据已存在,uniqueKey:{},uniqueEbsKey:{},值{}", uniqueKey, uniqueEbsKey, uniqueData);
|
||||
continue;
|
||||
}
|
||||
|
||||
List<String> fields = new ArrayList<String>() {{
|
||||
add("formmodeid");
|
||||
add("modedatacreater");
|
||||
add("modedatacreatertype");
|
||||
add("modedatacreatedate");
|
||||
add("modedatacreatetime");
|
||||
}};
|
||||
String currDate = TimeUtil.getCurrentDateString();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
|
||||
String currTime = sdf.format(new Date());
|
||||
List<Object> values = new ArrayList<Object>() {{
|
||||
add(modeId);
|
||||
add(1);
|
||||
add(0);
|
||||
add(String.format("'%s'", currDate));
|
||||
add(String.format("'%s'", currTime));
|
||||
}};
|
||||
for (EBS2ECConfig.Table.Field field : table.getFields()) {
|
||||
//数据库字段
|
||||
String fieldName = field.getKey();
|
||||
fields.add(fieldName);
|
||||
// 接口值
|
||||
values.add(String.format("'%s'", detailMap.getOrDefault(field.getEbsKey(), "")));
|
||||
}
|
||||
|
||||
String sql = String.format("insert into %s (%s) values (%s)", tableName, String.join(",", fields), values.stream().map(Object::toString).collect(Collectors.joining(",")));
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.execute(sql);
|
||||
|
||||
if (modeId != null) {
|
||||
rs.executeQuery("select max(id) from " + tableName);
|
||||
int mainId = 0;
|
||||
if (rs.next()) {
|
||||
mainId = rs.getInt(1);
|
||||
}
|
||||
ModeRightInfo ModeRightInfo = new ModeRightInfo();
|
||||
ModeRightInfo.setNewRight(true);
|
||||
ModeRightInfo.editModeDataShare(1, modeId, mainId);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("获取CBS交易信息失败", e);
|
||||
throw new SalaryRunTimeException("获取CBS交易信息失败," + e.getMessage(), e);
|
||||
|
|
|
|||
Loading…
Reference in New Issue