diff --git a/resource/WEB-INF/CBS2ECConfig.xml b/resource/WEB-INF/CBS2ECConfig.xml new file mode 100644 index 000000000..cf16cf4ab --- /dev/null +++ b/resource/WEB-INF/CBS2ECConfig.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + +
+ + +
diff --git a/src/com/engine/salary/mapper/SQLMapper.java b/src/com/engine/salary/mapper/SQLMapper.java index 9afff661a..c3a7f8167 100644 --- a/src/com/engine/salary/mapper/SQLMapper.java +++ b/src/com/engine/salary/mapper/SQLMapper.java @@ -17,4 +17,6 @@ public interface SQLMapper { List runSQL(@Param("sql") String sql); List listLong(@Param("sql") String sql); + + List listString(@Param("sql") String sql); } diff --git a/src/com/engine/salary/mapper/SQLMapper.xml b/src/com/engine/salary/mapper/SQLMapper.xml index b487b3f53..3f67dea38 100644 --- a/src/com/engine/salary/mapper/SQLMapper.xml +++ b/src/com/engine/salary/mapper/SQLMapper.xml @@ -9,4 +9,8 @@ + + diff --git a/src/com/engine/salary/remote/cbs8/config/EBS2ECConfig.java b/src/com/engine/salary/remote/cbs8/config/EBS2ECConfig.java new file mode 100644 index 000000000..dcc3a3fb6 --- /dev/null +++ b/src/com/engine/salary/remote/cbs8/config/EBS2ECConfig.java @@ -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 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 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; + + } + } +} diff --git a/src/com/engine/salary/timer/CBS8GetTransactionDetailJob.java b/src/com/engine/salary/timer/CBS8GetTransactionDetailJob.java index 7d23e311b..07dc0c7bf 100644 --- a/src/com/engine/salary/timer/CBS8GetTransactionDetailJob.java +++ b/src/com/engine/salary/timer/CBS8GetTransactionDetailJob.java @@ -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 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 uniqueDataKeys = getSQLMapper().listString(String.format("select %s from %s", uniqueKey, tableName)); + + for (GetTransactionDetailResponse.Detail detail : list) { + Map 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 fields = new ArrayList() {{ + 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 values = new ArrayList() {{ + 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);