diff --git a/resource/WEB-INF/CBS2ECConfig.xml b/resource/WEB-INF/CBS2ECConfig.xml
index c8af3283c..e6bde94e6 100644
--- a/resource/WEB-INF/CBS2ECConfig.xml
+++ b/resource/WEB-INF/CBS2ECConfig.xml
@@ -22,4 +22,15 @@
+
+
+
diff --git a/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java b/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java
index 5d7abfa35..d8b7ab560 100644
--- a/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java
+++ b/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java
@@ -56,6 +56,55 @@ public class SyncCBSAccountDetailsJob extends BaseCronJob {
*/
private String paymentNatureList;
+ /**
+ * 鏃ユ湡绫诲瀷 0-浜ゆ槗鏃ユ湡
+ */
+ private String dateType;
+ /**
+ * 璐︽埛鍒楄〃 鏌ヨ璐︽埛鍒楄〃锛屼笉浼犻粯璁よ繑鍥炲叏閮
+ */
+ private String accountNoList;
+ /**
+ * 閾惰绫诲瀷鍒楄〃 渚嬪鎷涜CMB锛岄摱琛岀被鍨嬫灇涓捐闄勫綍4.1.5
+ */
+ private String bankTypeList;
+ /**
+ * 甯佺鍒楄〃 瑙侀檮褰曞竵绉嶆灇涓撅紝4.1.1
+ */
+ private String currencyList;
+ /**
+ * 鏄庣粏鏉ユ簮
+ * B锛氶摱琛岋紝鍗抽摱琛岀洿鑱
+ * U锛氱敤鎴凤紝鍗虫墜宸/ERP鎺ュ彛瀵煎叆
+ * 涓嶄紶榛樿鏌ュ叏閮
+ */
+ private String detailedSources;
+ /**
+ * 鏄庣粏绫诲瀷 1-褰撴棩鏄庣粏 2-鍘嗗彶鏄庣粏 涓庢槑缁嗘棩鏈熸棤鍏筹紝浠呮爣璇嗘暟鎹潵婧愰摱琛岀殑涓嶅悓鎺ュ彛
+ */
+ private String currentFlag;
+
+ /**
+ * 璐︽埛鎬ц川鍒楄〃 瀹㈡埛鍦ㄥ叕鍏辫缃>鍩虹淇℃伅>璐︽埛鎬ц川鏌ヨ鑷畾涔夊唴瀹癸紝渚嬪AA-缁煎悎鎴凤紝姝ゅ浼犲尖淎A鈥
+ */
+ private String accountNatureList;
+ /**
+ * 閾惰娴佹按鍙 閾惰娴佹按鍙
+ */
+ private String bankSerialNumber;
+ /**
+ * 浜ゆ槗娴佹按鍙 浜ゆ槗娴佹按鍙凤紝鐢盋BS8瀹氫箟鐢熸垚鐨勫敮涓鏍囪瘑
+ */
+ private Long transactionSerialNumber;
+ /**
+ * 鍗曚綅缂栫爜鍒楄〃 瀹㈡埛鍦ㄥ叕鍏辫缃>鍩虹淇℃伅>缁勭粐鏈烘瀯缁存姢锛屼緥濡0001-XX绉戞妧鏈夐檺鍏徃锛屾澶勪紶0001
+ */
+ private String unitCodeList;
+ /**
+ * ERP涓氬姟鍙傝冨彿 erpSerialNumber
+ */
+ private String erpSerialNumber;
+
private SQLMapper getSQLMapper() {
return MapperProxyFactory.getProxy(SQLMapper.class);
}
@@ -82,13 +131,19 @@ public class SyncCBSAccountDetailsJob extends BaseCronJob {
requestParam.setStartDate(nowDate);
requestParam.setEndDate(nowDate);
}
- requestParam.setDateType("0");
- if (StrUtil.isNotBlank(loanType)) {
- requestParam.setLoanType(loanType);
- }
- if (StrUtil.isNotBlank(paymentNatureList)) {
- requestParam.setPaymentNatureList(Arrays.stream(paymentNatureList.split(",")).collect(Collectors.toList()));
- }
+ requestParam.setLoanType(loanType);
+ requestParam.setPaymentNatureList(paymentNatureList == null ? null :Arrays.stream(paymentNatureList.split(",")).collect(Collectors.toList()));
+ requestParam.setDateType(dateType);
+ requestParam.setAccountNoList(accountNoList== null ? null :Arrays.stream(accountNoList.split(",")).collect(Collectors.toList()));
+ requestParam.setBankTypeList(bankTypeList== null ? null :Arrays.stream(bankTypeList.split(",")).collect(Collectors.toList()));
+ requestParam.setCurrencyList(currencyList== null ? null :Arrays.stream(currencyList.split(",")).collect(Collectors.toList()));
+ requestParam.setDetailedSources(detailedSources);
+ requestParam.setCurrentFlag(currentFlag);
+ requestParam.setAccountNatureList(accountNatureList== null ? null :Arrays.stream(accountNatureList.split(",")).collect(Collectors.toList()));
+ requestParam.setBankSerialNumber(bankSerialNumber);
+ requestParam.setTransactionSerialNumber(transactionSerialNumber);
+ requestParam.setUnitCodeList(unitCodeList== null ? null :Arrays.stream(unitCodeList.split(",")).collect(Collectors.toList()));
+ requestParam.setErpSerialNumber(erpSerialNumber);
//鏌ヨ鍓1000鏉℃暟鎹
AccountManagementClient accountManagementClient = new AccountManagementClient();
diff --git a/src/com/engine/salary/timer/SyncCBSBillPoolJob.java b/src/com/engine/salary/timer/SyncCBSBillPoolJob.java
new file mode 100644
index 000000000..48d885ec3
--- /dev/null
+++ b/src/com/engine/salary/timer/SyncCBSBillPoolJob.java
@@ -0,0 +1,311 @@
+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.remote.cbs8.client.BillManagementClient;
+import com.engine.salary.remote.cbs8.config.EBS2ECConfig;
+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.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.general.Util;
+import weaver.hrm.User;
+import weaver.interfaces.schedule.BaseCronJob;
+
+import java.io.File;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 鑾峰彇绁ㄦ嵁姹
+ * Copyright: Copyright (c) 2024
+ * Company: 娉涘井杞欢
+ *
+ * @author qiantao
+ * @version 1.0
+ **/
+@Slf4j
+public class SyncCBSBillPoolJob extends BaseCronJob {
+
+ /**
+ * 鎸佺エ浜哄崟浣嶇紪鐮 澶氶夈傚~鍦╟bs绯荤粺鍏叡璁剧疆>鍩虹淇℃伅>缁勭粐鏈烘瀯缁存姢鐨勫崟浣嶇紪鐮
+ */
+ private String displayHoldOrganizationCodeList;
+ /**
+ * 鎸佺エ浜鸿处鍙 澶氶夈
+ */
+ private String holdAccountList;
+
+ /**
+ * 绯荤粺绁ㄦ嵁绫诲瀷 澶氶夈傛寜闄勫綍4.1.3绁ㄦ嵁绫诲瀷-绁ㄦ嵁鐘舵-娴侀氭爣蹇楃骇鑱斿叧绯昏〃閫夋嫨鍚庢寜椤哄簭濉啓銆傜郴缁熺エ鎹被鍨嬫灇涓捐闄勫綍4.1.3銆傜エ鎹姸鎬佹灇涓捐闄勫綍4.1.4銆傛祦閫氭爣蹇楁灇涓捐闄勫綍4.1.5銆
+ */
+ private String billVarietyList;
+
+ /**
+ * 鍑虹エ鏃ユ湡璧 鏍煎紡涓簓yyy-mm-dd锛屽嚭绁ㄦ棩鏈熻捣姝笉鍏佽涓杈规湁鍊间竴杈规棤鍊硷紝鏃ユ湡闂撮殧鏈澶т负涓骞
+ */
+ private String issueDateStart;
+
+ /**
+ * 鍑虹エ鏃ユ湡姝 鏍煎紡涓簓yyy-mm-dd锛屽嚭绁ㄦ棩鏈熻捣姝笉鍏佽涓杈规湁鍊间竴杈规棤鍊硷紝鏃ユ湡闂撮殧鏈澶т负涓骞
+ */
+ private String issueDateEnd;
+
+
+ /**
+ * 鍒版湡鏃ユ湡璧 鏍煎紡涓簓yyy-mm-dd锛屽埌鏈熸棩鏈熻捣姝笉鍏佽涓杈规湁鍊间竴杈规棤鍊硷紝鏃ユ湡闂撮殧鏈澶т负涓骞
+ */
+ private String dueDateStart;
+ /**
+ * 鍒版湡鏃ユ湡姝 鏍煎紡涓簓yyy-mm-dd锛屽埌鏈熸棩鏈熻捣姝笉鍏佽涓杈规湁鍊间竴杈规棤鍊硷紝鏃ユ湡闂撮殧鏈澶т负涓骞
+ */
+ private String dueDateEnd;
+ /**
+ * 绁ㄦ嵁绉嶇被 AC01-閾舵壙锛孉C02-鍟嗘壙
+ */
+ private String billType;
+ /**
+ * 绁ㄦ嵁鏉ユ簮 澶氶夈1-鐩磋仈浜ゆ槗锛2-鍙拌处浜ゆ槗锛3-鍙拌处鐧昏锛4-鎸戠エ鍚屾锛5-浠诲姟鍚屾
+ */
+ private String draftSourceList;
+ /**
+ * 鎸佺エ閾惰绫诲瀷 澶氶夈傝闄勫綍4.1.1.閾惰绫诲瀷鏋氫妇
+ */
+ private String holdBankTypeList;
+
+ /**
+ * 鎸佺エ绛炬敹鏃ユ湡璧 鏍煎紡涓簓yyy-mm-dd锛屾寔绁ㄧ鏀舵棩鏈熻捣姝笉鍏佽涓杈规湁鍊间竴杈规棤鍊硷紝鏃ユ湡闂撮殧鏈澶т负涓骞
+ */
+ private String holdSignDateStart;
+ /**
+ * 鎸佺エ绛炬敹鏃ユ湡姝 鏍煎紡涓簓yyy-mm-dd锛屾寔绁ㄧ鏀舵棩鏈熻捣姝笉鍏佽涓杈规湁鍊间竴杈规棤鍊硷紝鏃ユ湡闂撮殧鏈澶т负涓骞
+ */
+ private String holdSignDateEnd;
+ /**
+ * 绯荤粺绁ㄦ嵁缂栧彿
+ */
+ private String draftNbr;
+ /**
+ * 绁ㄦ嵁(鍖)鍙
+ */
+ private String billNbr;
+
+ /**
+ * 绁ㄦ嵁閲戦璧 澶т簬绛変簬0,鏈澶氫负涓や綅灏忔暟涓旀暣鏁颁綅涓婇檺涓13浣嶃傜エ鎹噾棰濊捣姝笉鍏佽涓杈规湁鍊间竴杈规棤鍊笺傚崟浣嶏紙鍏冿級
+ */
+ private BigDecimal billAmountStart;
+
+ /**
+ * 绁ㄦ嵁閲戦姝 澶т簬绛変簬0,鏈澶氫负涓や綅灏忔暟涓旀暣鏁颁綅涓婇檺涓13浣嶃傜エ鎹噾棰濊捣姝笉鍏佽涓杈规湁鍊间竴杈规棤鍊笺傚崟浣嶏紙鍏冿級
+ */
+ private BigDecimal billAmountEnd;
+
+ /**
+ * 瀛愮エ鍖洪棿璧 瀛愮エ鍖洪棿璧锋涓嶅厑璁镐竴杈规湁鍊间竴杈规棤鍊硷紝鏈澶12浣
+ */
+ private String subBillIntervalStart;
+ /**
+ * 瀛愮エ鍖洪棿姝 瀛愮エ鍖洪棿璧锋涓嶅厑璁镐竴杈规湁鍊间竴杈规棤鍊,鏈澶12浣
+ */
+ private String subBillIntervalEnd;
+
+ /**
+ * 绁ㄦ嵁鐘舵
+ */
+ private String billStsList;
+ /**
+ * 娴侀氭爣蹇
+ */
+ private String billTrsStsList;
+ /**
+ * 搴撳瓨鐘舵 1-宸插叆搴擄紝2-宸插嚭搴撱 涓虹┖鏃堕粯璁ゆ煡璇㈠叏閮ㄦ暟鎹
+ */
+ private String stockFlag;
+ /**
+ * 鍑哄簱鏂瑰紡 0-绌猴紝2-鑳屼功锛3-璐ㄦ娂锛4-瑙h川锛5-璐寸幇锛6-鍒嗗寘锛7-缁撴竻, 8-浣滃簾銆 涓虹┖鏃堕粯璁ゆ煡璇㈠叏閮ㄦ暟鎹
+ */
+ private String outInvType;
+ /**
+ * 璁板綍鐘舵 NOR-姝e父锛孶SE-鍗犵敤锛孌EL-鍒犻櫎 SUC-瀹屾垚銆備负绌烘椂榛樿鏌ヨ鍏ㄩ儴鏁版嵁
+ */
+ private String lockFlag;
+
+
+ private SQLMapper getSQLMapper() {
+ return MapperProxyFactory.getProxy(SQLMapper.class);
+ }
+
+ @Override
+ public void execute() {
+ User user = new User();
+ user.setUid(1);
+ user.setLoginid("sysadmin");
+
+ try {
+ GetDtaRequest requestParam = new GetDtaRequest();
+ requestParam.setCurrentPage(1);
+ requestParam.setPageSize(1000);
+
+ if (StrUtil.isBlank(displayHoldOrganizationCodeList)) {
+ throw new SalaryRunTimeException("鎸佺エ浜哄崟浣嶇紪鐮佷负绌猴紝璇峰湪璁″垝浠诲姟閰嶇疆姝ら」锛");
+ }
+ requestParam.setDisplayHoldOrganizationCodeList(Arrays.stream(displayHoldOrganizationCodeList.split(",")).collect(Collectors.toList()));
+
+ if (StrUtil.isBlank(holdAccountList)) {
+ throw new SalaryRunTimeException("鎸佺エ浜鸿处鍙蜂负绌猴紝璇峰湪璁″垝浠诲姟閰嶇疆姝ら」锛");
+ }
+ requestParam.setHoldAccountList(Arrays.stream(holdAccountList.split(",")).collect(Collectors.toList()));
+
+ if (StrUtil.isNotBlank(issueDateStart) && StrUtil.isNotBlank(issueDateEnd)) {
+ requestParam.setIssueDateStart(issueDateStart);
+ requestParam.setIssueDateEnd(issueDateEnd);
+ } else {
+ String nowDate = LocalDate.now().toString();
+ requestParam.setIssueDateStart(nowDate);
+ requestParam.setIssueDateEnd(nowDate);
+ }
+
+ //绯荤粺绁ㄦ嵁绫诲瀷
+ requestParam.setBillVarietyList(Arrays.stream(Util.null2String(billVarietyList).split(",")).collect(Collectors.toList()));
+
+ requestParam.setDueDateStart(dueDateStart);
+ requestParam.setDueDateEnd(dueDateEnd);
+ requestParam.setBillType(billType);
+ requestParam.setDraftSourceList(draftSourceList==null ? null :Arrays.stream(draftSourceList.split(",")).collect(Collectors.toList()));
+ requestParam.setHoldBankTypeList(holdBankTypeList==null ? null :Arrays.stream(holdBankTypeList.split(",")).collect(Collectors.toList()));
+ requestParam.setHoldSignDateStart(holdSignDateStart);
+ requestParam.setHoldSignDateEnd(holdSignDateEnd);
+ requestParam.setDraftNbr(draftNbr);
+ requestParam.setBillNbr(billNbr);
+ requestParam.setBillAmountStart(billAmountStart);
+ requestParam.setBillAmountEnd(billAmountEnd);
+ requestParam.setSubBillIntervalStart(subBillIntervalStart);
+ requestParam.setSubBillIntervalEnd(subBillIntervalEnd);
+ requestParam.setBillStsList(billStsList==null ? null :Arrays.stream(billStsList.split(",")).collect(Collectors.toList()));
+ requestParam.setBillTrsStsList(billTrsStsList==null ? null :Arrays.stream(billTrsStsList.split(",")).collect(Collectors.toList()));
+ requestParam.setStockFlag(stockFlag);
+ requestParam.setOutInvType(outInvType);
+ requestParam.setLockFlag(lockFlag);
+
+ //鏌ヨ鍓1000鏉℃暟鎹
+ BillManagementClient bailManagementClient = new BillManagementClient();
+ GetDtaResponse response = bailManagementClient.dtaQuery(requestParam);
+ List list = response.getData().getList();
+
+ //鍒ゆ柇鏄惁杩樺瓨鍦ㄦ暟鎹紝閫掑綊鏌ヨ
+ boolean hasNextPage = response.getData().isHasNextPage();
+ int nextPage = response.getData().getNextPage();
+ while (hasNextPage) {
+ requestParam.setCurrentPage(nextPage);
+ GetDtaResponse nextPageResponse = bailManagementClient.dtaQuery(requestParam);
+ List pageData = nextPageResponse.getData().getList();
+ list.addAll(pageData);
+ hasNextPage = nextPageResponse.getData().isHasNextPage();
+ nextPage = nextPageResponse.getData().getNextPage();
+ }
+
+ //鍔犺浇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(2);
+ 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 (GetDtaResponse.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