From d14994e10797ce5bc0d29668d358f7c5274dcc5b Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期三, 15 四月 2026 15:46:17 +0800
Subject: [PATCH] 新增调用外部接口api
---
service/src/main/java/com/ruoyi/cwgl/mapper/FundFlowMapper.java | 8
service/src/main/java/com/ruoyi/cwgl/controller/FundFlowController.java | 23 +
service/src/main/resources/private.sm2 | 15
ui/admin-ui3/src/api/cwgl/fundFlow.ts | 11
service/src/main/java/com/ruoyi/cwgl/domain/Q7517Response.java | 320 ++++++++++++++++
service/src/main/resources/lib/cmbs-client-3.3-RELEASE.jar | 0
service/src/main/resources/lib/gson-2.8.0.jar | 0
ui/admin-ui3/src/views/cwgl/fundFlow/index.vue | 68 +++
service/src/main/resources/gateway.properties | 37 +
service/src/main/resources/mapper/cwgl/FundFlowMapper.xml | 81 ++++
service/src/main/java/com/ruoyi/cwgl/test/GatewayConfigUtils.java | 105 +++++
service/src/main/resources/cmbs.cer | 3
service/src/main/java/com/ruoyi/cwgl/service/impl/CmbsBankSyncServiceImpl.java | 219 +++++++++++
service/src/main/resources/minsheng.pfx | 0
service/src/main/resources/lib/SADK-CMBCNew-3.1.5.0.jar | 0
service/src/main/java/com/ruoyi/cwgl/domain/Q7517Request.java | 84 ++++
service/src/main/java/com/ruoyi/cwgl/service/ICmbsBankSyncService.java | 20 +
service/src/main/resources/lib/logback-cfca-jdk1.6-3.1.0.0.jar | 0
service/src/main/java/com/ruoyi/cwgl/domain/FundFlow.java | 104 +++++
service/src/main/resources/lib/cryptokit.jni-1.0.jar | 0
20 files changed, 1,092 insertions(+), 6 deletions(-)
diff --git a/service/src/main/java/com/ruoyi/cwgl/controller/FundFlowController.java b/service/src/main/java/com/ruoyi/cwgl/controller/FundFlowController.java
index 337782d..7a1bda6 100644
--- a/service/src/main/java/com/ruoyi/cwgl/controller/FundFlowController.java
+++ b/service/src/main/java/com/ruoyi/cwgl/controller/FundFlowController.java
@@ -18,6 +18,7 @@
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.cwgl.domain.FundFlow;
import com.ruoyi.cwgl.service.IFundFlowService;
+import com.ruoyi.cwgl.service.ICmbsBankSyncService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.core.page.TableDataInfo;
@@ -35,8 +36,30 @@
@Autowired
private IFundFlowService fundFlowService;
+ @Autowired
+ private ICmbsBankSyncService cmbsBankSyncService;
+
+ /**
+ * 浠嶤MBS鍚屾閾惰娴佹按鍒拌祫閲戞祦姘磋〃
+ *
+ * @param acctNum 璐﹀彿
+ * @param startDate 寮�濮嬫棩鏈� yyyy-MM-dd
+ * @param endDate 缁撴潫鏃ユ湡 yyyy-MM-dd
+ */
+ @PreAuthorize("@ss.hasPermi('cwgl:fundFlow:sync')")
+ @Log(title = "CMBS閾惰娴佹按鍚屾", businessType = BusinessType.OTHER)
+ @PostMapping("/syncFromCmbs")
+ public AjaxResult syncFromCmbs(String acctNum, String startDate, String endDate)
+ {
+ try {
+ String result = cmbsBankSyncService.syncFromCmbs(acctNum, startDate, endDate);
+ return AjaxResult.success(result);
+ } catch (Exception e) {
+ return AjaxResult.error("鍚屾澶辫触: " + e.getMessage());
+ }
+ }
/**
* 鏌ヨ璧勯噾娴佹按鍒楄〃
*/
diff --git a/service/src/main/java/com/ruoyi/cwgl/domain/FundFlow.java b/service/src/main/java/com/ruoyi/cwgl/domain/FundFlow.java
index 6d8e61f..e52da7b 100644
--- a/service/src/main/java/com/ruoyi/cwgl/domain/FundFlow.java
+++ b/service/src/main/java/com/ruoyi/cwgl/domain/FundFlow.java
@@ -37,7 +37,7 @@
/** 鏈柟璐﹀彿 */
- @Excel(name = "鏈柟璐﹀彿")
+ @Excel(name = "鏈柟璐︽埛")
@TableField("our_account")
private String ourAccount;
@@ -51,7 +51,7 @@
/** 鏀舵敮鏍囪瘑鍊熻捶鏍囧織 0-鏀� 1-鏀� */
- @Excel(name = "鏀舵敮鏍囪瘑", readConverterExp = "0=搴旀敹锛�1=搴斾粯")
+// @Excel(name = "鏀舵敮鏍囪瘑", readConverterExp = "0=搴旀敹锛�1=搴斾粯")
@TableField("income_expense_flag")
private Integer incomeExpenseFlag;
@@ -156,4 +156,104 @@
@TableField("bill_type")
private Integer billType;
+
+ /** 浜ゆ槗璐︽埛瀛愯处鎴峰簭鍙� */
+ @Excel(name = "浜ゆ槗璐︽埛瀛愯处鎴峰簭鍙�")
+
+ @TableField("sub_account_no")
+ private String subAccountNo;
+
+
+ /** 浜ゆ槗瀵规墜琛� */
+ @Excel(name = "浜ゆ槗瀵规墜琛�")
+
+ @TableField("counterparty_bank")
+ private String counterpartyBank;
+
+
+ /** 璐︽埛浣欓 */
+ @Excel(name = "璐︽埛浣欓")
+
+ @TableField("account_balance")
+ private BigDecimal accountBalance;
+
+
+ /** 浜ゆ槗娓犻亾 */
+ @Excel(name = "浜ゆ槗娓犻亾")
+
+ @TableField("transaction_channel")
+ private String transactionChannel;
+
+
+ /** 閾惰涓婚敭URID */
+ @Excel(name = "閾惰涓婚敭")
+
+ @TableField("urid")
+ private String urid;
+
+
+ /** 浼佷笟缂栧彿 */
+ @Excel(name = "浼佷笟缂栧彿")
+
+ @TableField("org_no")
+ private String orgNo;
+
+
+ /** 鏈柟鎴峰悕 */
+ @Excel(name = "鏈柟鎴峰悕")
+
+ @TableField("payer_acct_name")
+ private String payerAcctName;
+
+
+ /** 璧锋伅鏃ユ湡 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "璧锋伅鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+
+ @TableField("value_date")
+ private Date valueDate;
+
+
+ /** 娆鹃」鎬ц川 */
+ @Excel(name = "娆鹃」鎬ц川")
+
+ @TableField("nature_names")
+ private String natureNames;
+
+
+ /** 璁拌处鏃ユ湡 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "璁拌处鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+
+ @TableField("postdate")
+ private Date postdate;
+
+
+ /** 鏄惁閫�姹囷細1-鏄� 0-鍚� */
+ @Excel(name = "鏄惁閫�姹�")
+
+ @TableField("is_return")
+ private String isReturn;
+
+
+ /** 绗笁鏂规祦姘村彿 */
+ @Excel(name = "绗笁鏂规祦姘村彿")
+
+ @TableField("customized_serial_num")
+ private String customizedSerialNum;
+
+
+ /** 鍗曟嵁鍞竴鏍囪瘑鍙� */
+ @Excel(name = "鍗曟嵁鍞竴鏍囪瘑鍙�")
+
+ @TableField("src_note_code")
+ private String srcNoteCode;
+
+
+ /** 甯佺缂栧彿 */
+ @Excel(name = "甯佺缂栧彿")
+
+ @TableField("curr_no")
+ private String currNo;
+
}
diff --git a/service/src/main/java/com/ruoyi/cwgl/domain/Q7517Request.java b/service/src/main/java/com/ruoyi/cwgl/domain/Q7517Request.java
new file mode 100644
index 0000000..a7ace88
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/domain/Q7517Request.java
@@ -0,0 +1,84 @@
+package com.ruoyi.cwgl.domain;
+
+/**
+ * CMBS_Q7517 閾惰璐︽埛浜ゆ槗鏄庣粏鏌ヨ - 璇锋眰鍙傛暟
+ */
+public class Q7517Request {
+
+ /** 浼佷笟缂栧彿锛堝彲閫夛級 */
+ private String orgNo;
+
+ /** 璐﹀彿锛堝繀濉級 */
+ private String acctNum;
+
+ /** 浜ゆ槗鏂瑰悜锛堝彲閫夛級锛�1-鏀嚭 2-鏀跺叆锛屼笉浼犻粯璁ゆ煡鎵�鏈� */
+ private String moneyWay;
+
+ /** 浜ゆ槗鏃ユ湡寮�濮嬶紙蹇呭~锛夛紝鏍煎紡锛歽yyy-MM-dd */
+ private String tradeStartDate;
+
+ /** 浜ゆ槗鏃ユ湡缁撴潫锛堝繀濉級锛屾牸寮忥細yyyy-MM-dd */
+ private String tradeEndDate;
+
+ /** 鏌ヨ椤电爜锛堝彲閫夛級锛岄粯璁ゅ�� 1 */
+ private Integer currentPage;
+
+ /** 姣忛〉鏉℃暟锛堝彲閫夛級锛岄粯璁ゅ�� 15锛屾渶澶у�� 100 */
+ private Integer pageSize;
+
+ public String getOrgNo() {
+ return orgNo;
+ }
+
+ public void setOrgNo(String orgNo) {
+ this.orgNo = orgNo;
+ }
+
+ public String getAcctNum() {
+ return acctNum;
+ }
+
+ public void setAcctNum(String acctNum) {
+ this.acctNum = acctNum;
+ }
+
+ public String getMoneyWay() {
+ return moneyWay;
+ }
+
+ public void setMoneyWay(String moneyWay) {
+ this.moneyWay = moneyWay;
+ }
+
+ public String getTradeStartDate() {
+ return tradeStartDate;
+ }
+
+ public void setTradeStartDate(String tradeStartDate) {
+ this.tradeStartDate = tradeStartDate;
+ }
+
+ public String getTradeEndDate() {
+ return tradeEndDate;
+ }
+
+ public void setTradeEndDate(String tradeEndDate) {
+ this.tradeEndDate = tradeEndDate;
+ }
+
+ public Integer getCurrentPage() {
+ return currentPage;
+ }
+
+ public void setCurrentPage(Integer currentPage) {
+ this.currentPage = currentPage;
+ }
+
+ public Integer getPageSize() {
+ return pageSize;
+ }
+
+ public void setPageSize(Integer pageSize) {
+ this.pageSize = pageSize;
+ }
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/domain/Q7517Response.java b/service/src/main/java/com/ruoyi/cwgl/domain/Q7517Response.java
new file mode 100644
index 0000000..27eae70
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/domain/Q7517Response.java
@@ -0,0 +1,320 @@
+package com.ruoyi.cwgl.domain;
+
+import java.util.List;
+
+/**
+ * CMBS_Q7517 閾惰璐︽埛浜ゆ槗鏄庣粏鏌ヨ - 鍝嶅簲鏁版嵁
+ */
+public class Q7517Response {
+
+ /** 姹囨�婚噾棰� */
+ private Number totalAmount;
+
+ /** 褰撳墠椤垫煡璇㈢瑪鏁� */
+ private Number pageSize;
+
+ /** 鏌ヨ椤电爜 */
+ private Number currentPage;
+
+ /** 鏌ヨ鎬荤瑪鏁� */
+ private Number totalNum;
+
+ /** 鏄庣粏鍒楄〃 */
+ private List<BatchInfo> batchInfo;
+
+ public Number getTotalAmount() {
+ return totalAmount;
+ }
+
+ public void setTotalAmount(Number totalAmount) {
+ this.totalAmount = totalAmount;
+ }
+
+ public Number getPageSize() {
+ return pageSize;
+ }
+
+ public void setPageSize(Number pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ public Number getCurrentPage() {
+ return currentPage;
+ }
+
+ public void setCurrentPage(Number currentPage) {
+ this.currentPage = currentPage;
+ }
+
+ public Number getTotalNum() {
+ return totalNum;
+ }
+
+ public void setTotalNum(Number totalNum) {
+ this.totalNum = totalNum;
+ }
+
+ public List<BatchInfo> getBatchInfo() {
+ return batchInfo;
+ }
+
+ public void setBatchInfo(List<BatchInfo> batchInfo) {
+ this.batchInfo = batchInfo;
+ }
+
+ public static class BatchInfo {
+
+ /** 涓婚敭锛堝彲浣滀负閾惰娴佹按鍞竴鏍¢獙鍙傛暟锛� */
+ private String urid;
+
+ /** 浼佷笟缂栧彿 */
+ private String orgNo;
+
+ /** 鎴戞柟璐﹀彿 */
+ private String payerAcctNo;
+
+ /** 鎴峰悕 */
+ private String payerAcctName;
+
+ /** 浜ゆ槗鏃ユ湡锛屾牸寮忥細yyyy-MM-dd */
+ private String tradeDate;
+
+ /** 浜ゆ槗鏃堕棿锛屾牸寮忥細yyyy-MM-dd HH:mm:ss */
+ private String tradeTime;
+
+ /** 璧锋伅鏃ユ湡 */
+ private String valueDate;
+
+ /** 浜ゆ槗鏂瑰悜锛�1-鏀嚭 2-鏀跺叆 */
+ private String moneyWay;
+
+ /** 閲戦 */
+ private Number transAmount;
+
+ /** 浜ゆ槗鍚庝綑棰� */
+ private Number currentBalance;
+
+ /** 鐢ㄩ�� */
+ private String purpose;
+
+ /** 鎽樿 */
+ private String memo;
+
+ /** 瀵规柟璐﹀彿 */
+ private String payeeAcctNo;
+
+ /** 瀵规柟鎴峰悕 */
+ private String payeeAcctName;
+
+ /** 瀵规柟閾惰 */
+ private String payeeBankNo;
+
+ /** 閾惰娴佹按鍙� */
+ private String bankSerialNumber;
+
+ /** 鍗曟嵁鍞竴鏍囪瘑鍙� */
+ private String srcNoteCode;
+
+ /** 娆鹃」鎬ц川 */
+ private String natureNames;
+
+ /** 甯佺缂栧彿 */
+ private String currNo;
+
+ /** 甯佺 */
+ private String currName;
+
+ /** 璁拌处鏃ユ湡 */
+ private String postdate;
+
+ /** 鏄惁閫�姹囷細1-鏄� 0-鍚� */
+ private String isReturn;
+
+ /** 绗笁鏂规祦姘村彿 */
+ private String customizedSerialNum;
+
+ public String getUrid() {
+ return urid;
+ }
+
+ public void setUrid(String urid) {
+ this.urid = urid;
+ }
+
+ public String getOrgNo() {
+ return orgNo;
+ }
+
+ public void setOrgNo(String orgNo) {
+ this.orgNo = orgNo;
+ }
+
+ public String getPayerAcctNo() {
+ return payerAcctNo;
+ }
+
+ public void setPayerAcctNo(String payerAcctNo) {
+ this.payerAcctNo = payerAcctNo;
+ }
+
+ public String getPayerAcctName() {
+ return payerAcctName;
+ }
+
+ public void setPayerAcctName(String payerAcctName) {
+ this.payerAcctName = payerAcctName;
+ }
+
+ public String getTradeDate() {
+ return tradeDate;
+ }
+
+ public void setTradeDate(String tradeDate) {
+ this.tradeDate = tradeDate;
+ }
+
+ public String getTradeTime() {
+ return tradeTime;
+ }
+
+ public void setTradeTime(String tradeTime) {
+ this.tradeTime = tradeTime;
+ }
+
+ public String getValueDate() {
+ return valueDate;
+ }
+
+ public void setValueDate(String valueDate) {
+ this.valueDate = valueDate;
+ }
+
+ public String getMoneyWay() {
+ return moneyWay;
+ }
+
+ public void setMoneyWay(String moneyWay) {
+ this.moneyWay = moneyWay;
+ }
+
+ public Number getTransAmount() {
+ return transAmount;
+ }
+
+ public void setTransAmount(Number transAmount) {
+ this.transAmount = transAmount;
+ }
+
+ public Number getCurrentBalance() {
+ return currentBalance;
+ }
+
+ public void setCurrentBalance(Number currentBalance) {
+ this.currentBalance = currentBalance;
+ }
+
+ public String getPurpose() {
+ return purpose;
+ }
+
+ public void setPurpose(String purpose) {
+ this.purpose = purpose;
+ }
+
+ public String getMemo() {
+ return memo;
+ }
+
+ public void setMemo(String memo) {
+ this.memo = memo;
+ }
+
+ public String getPayeeAcctNo() {
+ return payeeAcctNo;
+ }
+
+ public void setPayeeAcctNo(String payeeAcctNo) {
+ this.payeeAcctNo = payeeAcctNo;
+ }
+
+ public String getPayeeAcctName() {
+ return payeeAcctName;
+ }
+
+ public void setPayeeAcctName(String payeeAcctName) {
+ this.payeeAcctName = payeeAcctName;
+ }
+
+ public String getPayeeBankNo() {
+ return payeeBankNo;
+ }
+
+ public void setPayeeBankNo(String payeeBankNo) {
+ this.payeeBankNo = payeeBankNo;
+ }
+
+ public String getBankSerialNumber() {
+ return bankSerialNumber;
+ }
+
+ public void setBankSerialNumber(String bankSerialNumber) {
+ this.bankSerialNumber = bankSerialNumber;
+ }
+
+ public String getSrcNoteCode() {
+ return srcNoteCode;
+ }
+
+ public void setSrcNoteCode(String srcNoteCode) {
+ this.srcNoteCode = srcNoteCode;
+ }
+
+ public String getNatureNames() {
+ return natureNames;
+ }
+
+ public void setNatureNames(String natureNames) {
+ this.natureNames = natureNames;
+ }
+
+ public String getCurrNo() {
+ return currNo;
+ }
+
+ public void setCurrNo(String currNo) {
+ this.currNo = currNo;
+ }
+
+ public String getCurrName() {
+ return currName;
+ }
+
+ public void setCurrName(String currName) {
+ this.currName = currName;
+ }
+
+ public String getPostdate() {
+ return postdate;
+ }
+
+ public void setPostdate(String postdate) {
+ this.postdate = postdate;
+ }
+
+ public String getIsReturn() {
+ return isReturn;
+ }
+
+ public void setIsReturn(String isReturn) {
+ this.isReturn = isReturn;
+ }
+
+ public String getCustomizedSerialNum() {
+ return customizedSerialNum;
+ }
+
+ public void setCustomizedSerialNum(String customizedSerialNum) {
+ this.customizedSerialNum = customizedSerialNum;
+ }
+ }
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/mapper/FundFlowMapper.java b/service/src/main/java/com/ruoyi/cwgl/mapper/FundFlowMapper.java
index 955871e..dde6d49 100644
--- a/service/src/main/java/com/ruoyi/cwgl/mapper/FundFlowMapper.java
+++ b/service/src/main/java/com/ruoyi/cwgl/mapper/FundFlowMapper.java
@@ -92,4 +92,12 @@
* @return 璧勯噾娴佹按
*/
public FundFlow selectFundFlowByBankFlowNo(String bankFlowNo);
+
+ /**
+ * 鏍规嵁閾惰涓婚敭URID鏌ヨ璧勯噾娴佹按
+ *
+ * @param urid 閾惰涓婚敭URID
+ * @return 璧勯噾娴佹按
+ */
+ public FundFlow selectFundFlowByUrid(String urid);
}
diff --git a/service/src/main/java/com/ruoyi/cwgl/service/ICmbsBankSyncService.java b/service/src/main/java/com/ruoyi/cwgl/service/ICmbsBankSyncService.java
new file mode 100644
index 0000000..0717c01
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/service/ICmbsBankSyncService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.cwgl.service;
+
+/**
+ * CMBS閾惰娴佹按鍚屾Service鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2026-04-15
+ */
+public interface ICmbsBankSyncService {
+
+ /**
+ * 浠嶤MBS鍚屾鎸囧畾璐﹀彿鐨勪氦鏄撴槑缁嗗埌璧勯噾娴佹按琛�
+ *
+ * @param acctNum 璐﹀彿
+ * @param startDate 寮�濮嬫棩鏈� yyyy-MM-dd
+ * @param endDate 缁撴潫鏃ユ湡 yyyy-MM-dd
+ * @return 鍚屾缁撴灉淇℃伅
+ */
+ String syncFromCmbs(String acctNum, String startDate, String endDate);
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/service/impl/CmbsBankSyncServiceImpl.java b/service/src/main/java/com/ruoyi/cwgl/service/impl/CmbsBankSyncServiceImpl.java
new file mode 100644
index 0000000..f7e5397
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/service/impl/CmbsBankSyncServiceImpl.java
@@ -0,0 +1,219 @@
+package com.ruoyi.cwgl.service.impl;
+
+import com.cmbs.client.header.ClientConfig;
+import com.cmbs.client.util.OutBoundServiceUtils;
+import com.google.gson.Gson;
+import com.ruoyi.cwgl.domain.FundFlow;
+import com.ruoyi.cwgl.mapper.FundFlowMapper;
+import com.ruoyi.cwgl.service.ICmbsBankSyncService;
+import com.ruoyi.cwgl.test.GatewayConfigUtils;
+import com.ruoyi.cwgl.domain.Q7517Request;
+import com.ruoyi.cwgl.domain.Q7517Response;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * CMBS閾惰娴佹按鍚屾Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2026-04-15
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class CmbsBankSyncServiceImpl implements ICmbsBankSyncService {
+
+ protected final Logger logger = LoggerFactory.getLogger(getClass());
+
+ @Resource
+ private FundFlowMapper fundFlowMapper;
+
+ @Override
+ public String syncFromCmbs(String acctNum, String startDate, String endDate) {
+ if (acctNum == null || acctNum.trim().isEmpty()) {
+ throw new RuntimeException("璐﹀彿涓嶈兘涓虹┖");
+ }
+ if (startDate == null || endDate == null) {
+ throw new RuntimeException("鏃ユ湡鑼冨洿涓嶈兘涓虹┖");
+ }
+
+ ClientConfig clientConfig = GatewayConfigUtils.getClientConfig();
+ Gson gson = new Gson();
+ int totalSynced = 0;
+ int totalSkipped = 0;
+ int currentPage = 1;
+ int pageSize = 100;
+
+ try {
+ while (true) {
+ // 鏋勫缓璇锋眰鍙傛暟
+ Q7517Request request = new Q7517Request();
+ request.setAcctNum(acctNum);
+ request.setTradeStartDate(startDate);
+ request.setTradeEndDate(endDate);
+ request.setCurrentPage(currentPage);
+ request.setPageSize(pageSize);
+
+ String queryBody = gson.toJson(request);
+ String reqSeq = generateReqSeq();
+
+ String response = OutBoundServiceUtils.execute(clientConfig, queryBody,
+ "", "CMBS_Q7517", reqSeq);
+ logger.info("CMBS Q7517 鍝嶅簲 [椤祘}]: {}", currentPage, response);
+
+ Q7517Response resp = gson.fromJson(response, Q7517Response.class);
+ if (resp == null || resp.getBatchInfo() == null || resp.getBatchInfo().isEmpty()) {
+ break;
+ }
+
+ List<Q7517Response.BatchInfo> batchInfoList = resp.getBatchInfo();
+ List<FundFlow> toInsert = new ArrayList<>();
+
+ for (Q7517Response.BatchInfo info : batchInfoList) {
+ // 鎸塙RID鍘婚噸
+ if (info.getUrid() != null && !info.getUrid().isEmpty()) {
+ FundFlow existing = fundFlowMapper.selectFundFlowByUrid(info.getUrid());
+ if (existing != null) {
+ totalSkipped++;
+ continue;
+ }
+ }
+
+ FundFlow fundFlow = convertToFundFlow(info, acctNum);
+ toInsert.add(fundFlow);
+ }
+
+ if (!toInsert.isEmpty()) {
+ fundFlowMapper.insertFundFlowBatch(toInsert);
+ totalSynced += toInsert.size();
+ }
+
+ // 鍒ゆ柇鏄惁杩樻湁涓嬩竴椤�
+ Number totalNum = resp.getTotalNum();
+ if (totalNum != null && currentPage * pageSize >= totalNum.intValue()) {
+ break;
+ }
+ currentPage++;
+ }
+
+ return String.format("鍚屾瀹屾垚锛氭柊澧� %d 鏉★紝璺宠繃锛堝凡瀛樺湪锛� %d 鏉�", totalSynced, totalSkipped);
+ } catch (Exception e) {
+ logger.error("CMBS閾惰娴佹按鍚屾澶辫触", e);
+ throw new RuntimeException("CMBS閾惰娴佹按鍚屾澶辫触: " + e.getMessage(), e);
+ }
+ }
+
+ /**
+ * 灏� Q7517 鍝嶅簲鏁版嵁杞崲涓� FundFlow 瀹炰綋
+ */
+ private FundFlow convertToFundFlow(Q7517Response.BatchInfo info, String acctNum) {
+ FundFlow fundFlow = new FundFlow();
+
+ // 閾惰涓婚敭
+ fundFlow.setUrid(info.getUrid());
+ // 浼佷笟缂栧彿
+ fundFlow.setOrgNo(info.getOrgNo());
+ // 閾惰娴佹按鍙�
+ fundFlow.setBankFlowNo(info.getBankSerialNumber());
+ // 鏈柟璐﹀彿
+ fundFlow.setOurAccount(info.getPayerAcctNo());
+ // 鏈柟鎴峰悕
+ fundFlow.setPayerAcctName(info.getPayerAcctName());
+ // 瀵规柟璐﹀彿
+ fundFlow.setCounterpartyAccount(info.getPayeeAcctNo());
+ // 瀵规柟鎴峰悕
+ fundFlow.setCounterpartyName(info.getPayeeAcctName());
+ // 瀵规柟閾惰
+ fundFlow.setCounterpartyBank(info.getPayeeBankNo());
+ // 浜ゆ槗閲戦
+ if (info.getTransAmount() != null) {
+ fundFlow.setTransactionAmount(new BigDecimal(info.getTransAmount().toString()));
+ }
+ // 璐︽埛浣欓
+ if (info.getCurrentBalance() != null) {
+ fundFlow.setAccountBalance(new BigDecimal(info.getCurrentBalance().toString()));
+ }
+ // 浜ゆ槗甯佺
+ fundFlow.setCurrency(info.getCurrName());
+ // 甯佺缂栧彿
+ fundFlow.setCurrNo(info.getCurrNo());
+ // 鐢ㄩ��
+ fundFlow.setPurpose(info.getPurpose());
+ // 鎽樿
+ fundFlow.setSummary(info.getMemo());
+ // 娆鹃」鎬ц川
+ fundFlow.setNatureNames(info.getNatureNames());
+ // 鍗曟嵁鍞竴鏍囪瘑鍙�
+ fundFlow.setSrcNoteCode(info.getSrcNoteCode());
+ // 鏄惁閫�姹�
+ fundFlow.setIsReturn(info.getIsReturn());
+ // 绗笁鏂规祦姘村彿
+ fundFlow.setCustomizedSerialNum(info.getCustomizedSerialNum());
+
+ // 浜ゆ槗鏂瑰悜杞崲锛歈7517(1-鏀嚭 2-鏀跺叆) 鈫� FundFlow(1-鏀� 0-鏀�)
+ if ("1".equals(info.getMoneyWay())) {
+ fundFlow.setIncomeExpenseFlag(1);
+ } else if ("2".equals(info.getMoneyWay())) {
+ fundFlow.setIncomeExpenseFlag(0);
+ }
+
+ // 浜ゆ槗鏃ユ湡锛氬悎骞� tradeDate + tradeTime
+ try {
+ if (info.getTradeTime() != null && !info.getTradeTime().isEmpty()) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ fundFlow.setTransactionDate(sdf.parse(info.getTradeTime()));
+ } else if (info.getTradeDate() != null && !info.getTradeDate().isEmpty()) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ fundFlow.setTransactionDate(sdf.parse(info.getTradeDate()));
+ }
+ } catch (Exception e) {
+ logger.warn("瑙f瀽浜ゆ槗鏃ユ湡澶辫触: tradeDate={}, tradeTime={}", info.getTradeDate(), info.getTradeTime());
+ }
+
+ // 璧锋伅鏃ユ湡
+ try {
+ if (info.getValueDate() != null && !info.getValueDate().isEmpty()) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ fundFlow.setValueDate(sdf.parse(info.getValueDate()));
+ }
+ } catch (Exception e) {
+ logger.warn("瑙f瀽璧锋伅鏃ユ湡澶辫触: {}", info.getValueDate());
+ }
+
+ // 璁拌处鏃ユ湡
+ try {
+ if (info.getPostdate() != null && !info.getPostdate().isEmpty()) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ fundFlow.setPostdate(sdf.parse(info.getPostdate()));
+ }
+ } catch (Exception e) {
+ logger.warn("瑙f瀽璁拌处鏃ユ湡澶辫触: {}", info.getPostdate());
+ }
+
+ // 鐘舵�侊細榛樿璁剧疆涓�"0"姝e父锛堣崏绋匡級
+ fundFlow.setStatus("0");
+ // 鍒犻櫎鏍囧織
+ fundFlow.setDelFlag("0");
+
+ return fundFlow;
+ }
+
+ /**
+ * 鐢熸垚璇锋眰娴佹按鍙凤細10浣嶅晢鎴峰彿 + 14浣嶆椂闂� + 8浣嶅簭鍙�
+ */
+ private String generateReqSeq() {
+ String merchantNum = "zjjr";
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = sdf.format(new Date());
+ String seq = String.format("%08d", (int) (Math.random() * 100000000));
+ return merchantNum + dateTime + seq;
+ }
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/test/GatewayConfigUtils.java b/service/src/main/java/com/ruoyi/cwgl/test/GatewayConfigUtils.java
new file mode 100644
index 0000000..410959a
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/test/GatewayConfigUtils.java
@@ -0,0 +1,105 @@
+package com.ruoyi.cwgl.test;
+
+
+import com.cmbs.client.header.ClientConfig;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+public class GatewayConfigUtils {
+
+ static Properties gatewayProperties;
+
+ static {
+ InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("gateway.properties");
+ gatewayProperties = loadProperties(is);
+ }
+
+ public static ClientConfig getClientConfig() {
+
+ ClientConfig clientConfig = new ClientConfig();
+
+ // 鍟嗘埛鍙�
+ clientConfig.setMerchantNum(gatewayProperties.getProperty("merchantNum"));
+
+ // 绯荤粺缂栫爜
+ clientConfig.setSystemCode(gatewayProperties.getProperty("plantFormCode"));
+
+ //浜掕仈缃慼ttps璇锋眰SSL鍙屽悜璁よ瘉
+ clientConfig.setPostUrl(gatewayProperties.getProperty("url"));
+
+ //https鍙屽悜璁よ瘉璇佷功
+ clientConfig.setSslClientCertPath(getCertFilePath("sslPath", "minsheng.pfx"));
+
+ //https鍙屽悜璁よ瘉璇佷功瀵嗙爜
+ clientConfig.setSslClientPassword(gatewayProperties.getProperty("sslPassword"));
+
+ //姘戠敓绉戞妧鐨勫叕閽�
+ clientConfig.setBankCertPath(getCertFilePath("publicCertPath", "cmbs.cer"));
+
+ // 娴嬭瘯鐜鍟嗘埛绉侀挜锛岀敓浜х幆澧冮渶瑕佹浛鎹�(鍘绘皯鐢熺綉绔欎笅杞藉晢鎴疯嚜宸辩殑绉侀挜)
+ clientConfig.setOwnSm2Path(getCertFilePath("sm2Path", "private.sm2"));
+
+ //鍟嗘埛绉侀挜瀵嗙爜
+ clientConfig.setOwnSm2Pwd(gatewayProperties.getProperty("sm2Password"));
+ return clientConfig;
+ }
+
+ public static ClientConfig getClientConfig2() {
+
+ ClientConfig clientConfig = new ClientConfig();
+
+ // 鍟嗘埛鍙�
+ clientConfig.setMerchantNum("zjjr");
+
+ // 绯荤粺缂栫爜
+ clientConfig.setSystemCode("620");
+
+ //浜掕仈缃慼ttps璇锋眰SSL鍙屽悜璁よ瘉
+ clientConfig.setPostUrl("https://tmc-demo.cmbc.com.cn/mop/ecp/httpMhtInVtFwd");
+
+ //https鍙屽悜璁よ瘉璇佷功
+ clientConfig.setSslClientCertPath("C:\\Users\\w\\minsheng.pfx");
+
+ //https鍙屽悜璁よ瘉璇佷功瀵嗙爜
+ clientConfig.setSslClientPassword("cfca1234");
+
+ //姘戠敓绉戞妧鐨勫叕閽�
+ clientConfig.setBankCertPath("C:\\Users\\w\\cmbs.cer");
+
+ // 娴嬭瘯鐜鍟嗘埛绉侀挜锛岀敓浜х幆澧冮渶瑕佹浛鎹�(鍘绘皯鐢熺綉绔欎笅杞藉晢鎴疯嚜宸辩殑绉侀挜)
+ clientConfig.setOwnSm2Path("C:\\Users\\w\\private.sm2");
+
+ //鍟嗘埛绉侀挜瀵嗙爜
+ clientConfig.setOwnSm2Pwd("11111111");
+ return clientConfig;
+ }
+
+ private static Properties loadProperties(InputStream is){
+ Properties properties = new Properties();
+ try {
+ properties.load(is);
+ } catch (IOException e) {
+ System.out.println("properties閰嶇疆鏂囦欢澶辫触");
+ } finally {
+ if (is != null) {
+ try {
+ is.close();
+ } catch (Exception e) {
+ System.out.println("鏁版嵁澶勭悊寮傚父");
+ }
+ }
+ }
+ return properties;
+ }
+
+ private static String getCertFilePath(String key, String fileName){
+ String filePath = gatewayProperties.getProperty(key, "");
+ if (filePath.equals("")){
+ String gatewayPath = Thread.currentThread().getContextClassLoader().getResource("gateway.properties").getPath();
+ return gatewayPath.replace("gateway.properties", "") + fileName;
+ }
+ return filePath;
+ }
+}
diff --git a/service/src/main/resources/cmbs.cer b/service/src/main/resources/cmbs.cer
new file mode 100644
index 0000000..ddc8950
--- /dev/null
+++ b/service/src/main/resources/cmbs.cer
@@ -0,0 +1,3 @@
+-----BEGIN CERTIFICATE-----
+MIICuzCCAmCgAwIBAgIFEDhkeFcwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMTkxMTE5MDMzNDIzWhcNMjExMTE5MDMzNDIzWjB1MQswCQYDVQQGEwJDTjEXMBUGA1UECgwOQ0ZDQSBURVNUIE9DQTExDTALBgNVBAsMBExDQUUxGTAXBgNVBAsMEE9yZ2FuaXphdGlvbmFsLTExIzAhBgNVBAMMGjA1MUDmsJHnlJ/np5HmioBAWjY2NjY2NkAxMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEZ/vFc/oE1nUyouIhfQaiupQ/6/RVTCyS7li7oTbimabAu+gB2BMSylfpgVSLCw83HTB6qgwvKf5CRVIUZITtjqOB8zCB8DAfBgNVHSMEGDAWgBRr/hjaj0I6prhtsy6Igzo0osEw4TBIBgNVHSAEQTA/MD0GCGCBHIbvKgEBMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTQuaHRtMDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly91Y3JsLmNmY2EuY29tLmNuL1NNMi9jcmw3MzU1LmNybDALBgNVHQ8EBAMCA+gwHQYDVR0OBBYEFNzhEITNVnufiCi+fGPHbwP/g0F6MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAMBggqgRzPVQGDdQUAA0cAMEQCIAH5fWLQY+qJKQxhZ0zIyY5vTHIB8acrZvhEvRyIBeSkAiAIVylkjzMJOZjPUC0iMsDqE35TEc20vl0DSH08J3ohlw==
+-----END CERTIFICATE-----
\ No newline at end of file
diff --git a/service/src/main/resources/gateway.properties b/service/src/main/resources/gateway.properties
new file mode 100644
index 0000000..bfd5c40
--- /dev/null
+++ b/service/src/main/resources/gateway.properties
@@ -0,0 +1,37 @@
+#\u5546\u6237\u53F7 \u4E0A\u7EBF\u65F6\u66FF\u6362\u4E3A \u5546\u6237\u53F7(\u95EE\u8D22\u8D44\u7684\u8FD0\u8425\u4EBA\u5458\u7D22\u8981\u5373\u53EF)\uFF0C\u6D4B\u8BD5\u65F6\u4E3Azjjr
+merchantNum=zjjr
+
+#\u5546\u6237\u79C1\u94A5\u5BC6\u7801 \u8BC1\u4E66\u4E0B\u8F7D\u65F6\u4F1A\u8BBE\u7F6E\u4E00\u4E2A\u5BC6\u7801\uFF0C\u5C31\u7528\u90A3\u4E2A
+sm2Password=11111111
+
+#\u6D4B\u8BD5\u73AF\u5883\u5199620 \u751F\u4EA7\u73AF\u5883\u5199107
+plantFormCode=620
+
+#\u8BF7\u6C42\u5730\u5740 \u6309\u9700\u8981\u4FEE\u6539
+url=https://tmc-demo.cmbc.com.cn/mop/ecp/httpMhtInVtFwd
+#\u6B63\u5F0F\u73AF\u5883\u4E3A https://mop.cmbc.com.cn:9443/mop/ecp/httpMhtInVtFwd
+#\u6D4B\u8BD5\u73AF\u5883\u4E3A https://tmc-demo.cmbc.com.cn/mop/ecp/httpMhtInVtFwd
+
+##https\u53CC\u5411\u8BA4\u8BC1\u8BC1\u4E66 \u8BF7\u6B63\u786E\u586B\u5199\u8DEF\u5F84\u548C\u6587\u4EF6\u540D\u79F0
+sslPath=C:\\Users\\w\\minsheng.pfx
+
+##\u6C11\u751F\u79D1\u6280\u7684\u516C\u94A5 \u8BF7\u6B63\u786E\u586B\u5199\u8DEF\u5F84\u548C\u6587\u4EF6\u540D\u79F0
+publicCertPath=C:\\Users\\w\\cmbs.cer
+
+##\u4F01\u4E1A\u7684\u79C1\u94A5 \u8BF7\u6B63\u786E\u586B\u5199\u8DEF\u5F84\u548C\u6587\u4EF6\u540D\u79F0
+sm2Path=C:\\Users\\w\\private.sm2
+
+
+####################### \u65E0\u9700\u6539\u53D8 ############################
+sslPassword=cfca1234
+
+
+
+
+
+
+
+
+
+
+
diff --git a/service/src/main/resources/lib/SADK-CMBCNew-3.1.5.0.jar b/service/src/main/resources/lib/SADK-CMBCNew-3.1.5.0.jar
new file mode 100644
index 0000000..dfabb34
--- /dev/null
+++ b/service/src/main/resources/lib/SADK-CMBCNew-3.1.5.0.jar
Binary files differ
diff --git a/service/src/main/resources/lib/cmbs-client-3.3-RELEASE.jar b/service/src/main/resources/lib/cmbs-client-3.3-RELEASE.jar
new file mode 100644
index 0000000..bac153f
--- /dev/null
+++ b/service/src/main/resources/lib/cmbs-client-3.3-RELEASE.jar
Binary files differ
diff --git a/service/src/main/resources/lib/cryptokit.jni-1.0.jar b/service/src/main/resources/lib/cryptokit.jni-1.0.jar
new file mode 100644
index 0000000..0a528a7
--- /dev/null
+++ b/service/src/main/resources/lib/cryptokit.jni-1.0.jar
Binary files differ
diff --git a/service/src/main/resources/lib/gson-2.8.0.jar b/service/src/main/resources/lib/gson-2.8.0.jar
new file mode 100644
index 0000000..1235f63
--- /dev/null
+++ b/service/src/main/resources/lib/gson-2.8.0.jar
Binary files differ
diff --git a/service/src/main/resources/lib/logback-cfca-jdk1.6-3.1.0.0.jar b/service/src/main/resources/lib/logback-cfca-jdk1.6-3.1.0.0.jar
new file mode 100644
index 0000000..e5da926
--- /dev/null
+++ b/service/src/main/resources/lib/logback-cfca-jdk1.6-3.1.0.0.jar
Binary files differ
diff --git a/service/src/main/resources/mapper/cwgl/FundFlowMapper.xml b/service/src/main/resources/mapper/cwgl/FundFlowMapper.xml
index 791e3a5..f41096f 100644
--- a/service/src/main/resources/mapper/cwgl/FundFlowMapper.xml
+++ b/service/src/main/resources/mapper/cwgl/FundFlowMapper.xml
@@ -27,10 +27,24 @@
<result property="updateTime" column="update_time" />
<result property="delFlag" column="del_flag" />
<result property="billType" column="bill_type" />
+ <result property="subAccountNo" column="sub_account_no" />
+ <result property="counterpartyBank" column="counterparty_bank" />
+ <result property="accountBalance" column="account_balance" />
+ <result property="transactionChannel" column="transaction_channel" />
+ <result property="urid" column="urid" />
+ <result property="orgNo" column="org_no" />
+ <result property="payerAcctName" column="payer_acct_name" />
+ <result property="valueDate" column="value_date" />
+ <result property="natureNames" column="nature_names" />
+ <result property="postdate" column="postdate" />
+ <result property="isReturn" column="is_return" />
+ <result property="customizedSerialNum" column="customized_serial_num" />
+ <result property="srcNoteCode" column="src_note_code" />
+ <result property="currNo" column="curr_no" />
</resultMap>
<sql id="selectFundFlowVo">
- select thisTab.id, thisTab.bank_flow_no, thisTab.company, thisTab.our_account, thisTab.our_bank_name, thisTab.income_expense_flag, thisTab.transaction_amount, thisTab.currency, thisTab.counterparty_account, thisTab.counterparty_name, thisTab.transaction_date, thisTab.purpose, thisTab.summary, thisTab.remarks, thisTab.status, thisTab.claimed_amount, thisTab.create_by, thisTab.create_time, thisTab.update_by, thisTab.update_time, thisTab.del_flag , thisTab.bill_type from fund_flow AS thisTab
+ select thisTab.id, thisTab.bank_flow_no, thisTab.company, thisTab.our_account, thisTab.our_bank_name, thisTab.income_expense_flag, thisTab.transaction_amount, thisTab.currency, thisTab.counterparty_account, thisTab.counterparty_name, thisTab.transaction_date, thisTab.purpose, thisTab.summary, thisTab.remarks, thisTab.status, thisTab.claimed_amount, thisTab.create_by, thisTab.create_time, thisTab.update_by, thisTab.update_time, thisTab.del_flag , thisTab.bill_type, thisTab.sub_account_no, thisTab.counterparty_bank, thisTab.account_balance, thisTab.transaction_channel, thisTab.urid, thisTab.org_no, thisTab.payer_acct_name, thisTab.value_date, thisTab.nature_names, thisTab.postdate, thisTab.is_return, thisTab.customized_serial_num, thisTab.src_note_code, thisTab.curr_no from fund_flow AS thisTab
</sql>
<sql id="selectFundFlowVoCount">
select count(0) from fund_flow as thisTab
@@ -100,6 +114,20 @@
<if test="updateTime != null">update_time,</if>
<if test="delFlag != null">del_flag,</if>
<if test="billType != null">bill_type,</if>
+ <if test="subAccountNo != null">sub_account_no,</if>
+ <if test="counterpartyBank != null">counterparty_bank,</if>
+ <if test="accountBalance != null">account_balance,</if>
+ <if test="transactionChannel != null">transaction_channel,</if>
+ <if test="urid != null">urid,</if>
+ <if test="orgNo != null">org_no,</if>
+ <if test="payerAcctName != null">payer_acct_name,</if>
+ <if test="valueDate != null">value_date,</if>
+ <if test="natureNames != null">nature_names,</if>
+ <if test="postdate != null">postdate,</if>
+ <if test="isReturn != null">is_return,</if>
+ <if test="customizedSerialNum != null">customized_serial_num,</if>
+ <if test="srcNoteCode != null">src_note_code,</if>
+ <if test="currNo != null">curr_no,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="bankFlowNo != null and bankFlowNo != ''">#{bankFlowNo},</if>
@@ -123,17 +151,31 @@
<if test="updateTime != null">#{updateTime},</if>
<if test="delFlag != null">#{delFlag},</if>
<if test="billType != null">#{billType},</if>
+ <if test="subAccountNo != null">#{subAccountNo},</if>
+ <if test="counterpartyBank != null">#{counterpartyBank},</if>
+ <if test="accountBalance != null">#{accountBalance},</if>
+ <if test="transactionChannel != null">#{transactionChannel},</if>
+ <if test="urid != null">#{urid},</if>
+ <if test="orgNo != null">#{orgNo},</if>
+ <if test="payerAcctName != null">#{payerAcctName},</if>
+ <if test="valueDate != null">#{valueDate},</if>
+ <if test="natureNames != null">#{natureNames},</if>
+ <if test="postdate != null">#{postdate},</if>
+ <if test="isReturn != null">#{isReturn},</if>
+ <if test="customizedSerialNum != null">#{customizedSerialNum},</if>
+ <if test="srcNoteCode != null">#{srcNoteCode},</if>
+ <if test="currNo != null">#{currNo},</if>
</trim>
</insert>
<insert id="insertFundFlowBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
insert into fund_flow
<trim prefix="(" suffix=") values" suffixOverrides=",">
- id,bank_flow_no,company,our_account,our_bank_name,income_expense_flag,transaction_amount,currency,counterparty_account,counterparty_name,transaction_date,purpose,summary,remarks,status,claimed_amount,create_by,create_time,update_by,update_time,del_flag,
+ id,bank_flow_no,company,our_account,our_bank_name,income_expense_flag,transaction_amount,currency,counterparty_account,counterparty_name,transaction_date,purpose,summary,remarks,status,claimed_amount,create_by,create_time,update_by,update_time,del_flag,sub_account_no,counterparty_bank,account_balance,transaction_channel,urid,org_no,payer_acct_name,value_date,nature_names,postdate,is_return,customized_serial_num,src_note_code,curr_no,
</trim>
<foreach item="item" index="index" collection="list" separator=",">
<trim prefix="(" suffix=")" suffixOverrides=",">
- #{item.id},#{item.bankFlowNo},#{item.company},#{item.ourAccount},#{item.ourBankName},#{item.incomeExpenseFlag},#{item.transactionAmount},#{item.currency},#{item.counterpartyAccount},#{item.counterpartyName},#{item.transactionDate},#{item.purpose},#{item.summary},#{item.remarks},#{item.status},#{item.claimedAmount},#{item.createBy},#{item.createTime},#{item.updateBy},#{item.updateTime},#{item.delFlag},
+ #{item.id},#{item.bankFlowNo},#{item.company},#{item.ourAccount},#{item.ourBankName},#{item.incomeExpenseFlag},#{item.transactionAmount},#{item.currency},#{item.counterpartyAccount},#{item.counterpartyName},#{item.transactionDate},#{item.purpose},#{item.summary},#{item.remarks},#{item.status},#{item.claimedAmount},#{item.createBy},#{item.createTime},#{item.updateBy},#{item.updateTime},#{item.delFlag},#{item.subAccountNo},#{item.counterpartyBank},#{item.accountBalance},#{item.transactionChannel},#{item.urid},#{item.orgNo},#{item.payerAcctName},#{item.valueDate},#{item.natureNames},#{item.postdate},#{item.isReturn},#{item.customizedSerialNum},#{item.srcNoteCode},#{item.currNo},
</trim>
</foreach>
</insert>
@@ -163,6 +205,20 @@
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if>
<if test="billType != null">bill_type = #{billType},</if>
+ <if test="subAccountNo != null">sub_account_no = #{subAccountNo},</if>
+ <if test="counterpartyBank != null">counterparty_bank = #{counterpartyBank},</if>
+ <if test="accountBalance != null">account_balance = #{accountBalance},</if>
+ <if test="transactionChannel != null">transaction_channel = #{transactionChannel},</if>
+ <if test="urid != null">urid = #{urid},</if>
+ <if test="orgNo != null">org_no = #{orgNo},</if>
+ <if test="payerAcctName != null">payer_acct_name = #{payerAcctName},</if>
+ <if test="valueDate != null">value_date = #{valueDate},</if>
+ <if test="natureNames != null">nature_names = #{natureNames},</if>
+ <if test="postdate != null">postdate = #{postdate},</if>
+ <if test="isReturn != null">is_return = #{isReturn},</if>
+ <if test="customizedSerialNum != null">customized_serial_num = #{customizedSerialNum},</if>
+ <if test="srcNoteCode != null">src_note_code = #{srcNoteCode},</if>
+ <if test="currNo != null">curr_no = #{currNo},</if>
</trim>
where id = #{id}
</update>
@@ -190,6 +246,20 @@
<if test="item.updateBy != null">update_by = #{item.updateBy},</if>
<if test="item.updateTime != null">update_time = #{item.updateTime},</if>
<if test="item.delFlag != null">del_flag = #{item.delFlag},</if>
+ <if test="item.subAccountNo != null">sub_account_no = #{item.subAccountNo},</if>
+ <if test="item.counterpartyBank != null">counterparty_bank = #{item.counterpartyBank},</if>
+ <if test="item.accountBalance != null">account_balance = #{item.accountBalance},</if>
+ <if test="item.transactionChannel != null">transaction_channel = #{item.transactionChannel},</if>
+ <if test="item.urid != null">urid = #{item.urid},</if>
+ <if test="item.orgNo != null">org_no = #{item.orgNo},</if>
+ <if test="item.payerAcctName != null">payer_acct_name = #{item.payerAcctName},</if>
+ <if test="item.valueDate != null">value_date = #{item.valueDate},</if>
+ <if test="item.natureNames != null">nature_names = #{item.natureNames},</if>
+ <if test="item.postdate != null">postdate = #{item.postdate},</if>
+ <if test="item.isReturn != null">is_return = #{item.isReturn},</if>
+ <if test="item.customizedSerialNum != null">customized_serial_num = #{item.customizedSerialNum},</if>
+ <if test="item.srcNoteCode != null">src_note_code = #{item.srcNoteCode},</if>
+ <if test="item.currNo != null">curr_no = #{item.currNo},</if>
</trim>
where id = #{item.id}
</foreach>
@@ -211,4 +281,9 @@
where thisTab.bank_flow_no = #{bankFlowNo}
</select>
+ <select id="selectFundFlowByUrid" parameterType="String" resultMap="FundFlowResult">
+ <include refid="selectFundFlowVo"/>
+ where thisTab.urid = #{urid}
+ </select>
+
</mapper>
\ No newline at end of file
diff --git a/service/src/main/resources/minsheng.pfx b/service/src/main/resources/minsheng.pfx
new file mode 100644
index 0000000..6f2b402
--- /dev/null
+++ b/service/src/main/resources/minsheng.pfx
Binary files differ
diff --git a/service/src/main/resources/private.sm2 b/service/src/main/resources/private.sm2
new file mode 100644
index 0000000..ae38eb7
--- /dev/null
+++ b/service/src/main/resources/private.sm2
@@ -0,0 +1,15 @@
+MIIDIgIBATBHBgoqgRzPVQYBBAIBBgcqgRzPVQFoBDDrjRiluqzadTP8f5YyCXAKVzrEu++VsvnA
+f3XX0ib0JAWxdJ0BBxMp49qee1AnOkowggLSBgoqgRzPVQYBBAIBBIICwjCCAr4wggJioAMCAQIC
+BRA4ZHhIMAwGCCqBHM9VAYN1BQAwXDELMAkGA1UEBhMCQ04xMDAuBgNVBAoMJ0NoaW5hIEZpbmFu
+Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwSQ0ZDQSBURVNUIFNNMiBPQ0Ex
+MB4XDTE5MTExOTAzMjk1OFoXDTIxMTExOTAzMjk1OFowdzELMAkGA1UEBhMCQ04xFzAVBgNVBAoM
+DkNGQ0EgVEVTVCBPQ0ExMQ0wCwYDVQQLDARMQ0FFMRkwFwYDVQQLDBBPcmdhbml6YXRpb25hbC0x
+MSUwIwYDVQQDDBwwNTFA5rWL6K+V5LyB5LiaQFo4ODg4ODg4OEAxMFkwEwYHKoZIzj0CAQYIKoEc
+z1UBgi0DQgAEp3Cy3Xs5ntOajXwZQLP4Dtpp2czZIVS3OyxAkfKw/bhXe1oIzV9OPh9ydIQeAmAt
+nPrm4WnNHP1Y3/XlWK/zi6OB8zCB8DAfBgNVHSMEGDAWgBRr/hjaj0I6prhtsy6Igzo0osEw4TBI
+BgNVHSAEQTA/MD0GCGCBHIbvKgEBMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20u
+Y24vdXMvdXMtMTQuaHRtMDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly91Y3JsLmNmY2EuY29tLmNu
+L1NNMi9jcmw3MzU1LmNybDALBgNVHQ8EBAMCA+gwHQYDVR0OBBYEFOgpYvNN0aU6Y/EehqXsy4jc
+kuzMMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAMBggqgRzPVQGDdQUAA0gAMEUCIQCY
+kwgmmtamo2IHSv6IlAWFnJJuJWJTrsHJ2Qa4ctwtIwIgbednqMQtQNDyVVxDFEH9uabA7N1KzRDS
+TDmAVnPOqWs=
\ No newline at end of file
diff --git a/ui/admin-ui3/src/api/cwgl/fundFlow.ts b/ui/admin-ui3/src/api/cwgl/fundFlow.ts
index 5828699..83f2f9c 100644
--- a/ui/admin-ui3/src/api/cwgl/fundFlow.ts
+++ b/ui/admin-ui3/src/api/cwgl/fundFlow.ts
@@ -81,4 +81,15 @@
method: 'post',
data
})
+}
+
+/**
+ * 浠嶤MBS鍚屾閾惰娴佹按
+ */
+export const syncFromCmbs:requestType = (data) => {
+ return request({
+ url: '/cwgl/fundFlow/syncFromCmbs',
+ method: 'post',
+ params: data
+ })
}
\ No newline at end of file
diff --git a/ui/admin-ui3/src/views/cwgl/fundFlow/index.vue b/ui/admin-ui3/src/views/cwgl/fundFlow/index.vue
index a92bfc0..462f371 100644
--- a/ui/admin-ui3/src/views/cwgl/fundFlow/index.vue
+++ b/ui/admin-ui3/src/views/cwgl/fundFlow/index.vue
@@ -17,6 +17,9 @@
<el-button type="warning" plain icon="Upload" @click="handleImport"
v-hasPermi="['cwgl:fundFlow:import']">瀵煎叆
</el-button>
+ <el-button type="primary" plain icon="Refresh" @click="handleSync"
+ v-hasPermi="['cwgl:fundFlow:sync']">鍚屾閾惰娴佹按
+ </el-button>
</template>
<template #menu="{ size, row, index }">
<el-link v-if="row.status == '0'" class="link-btn" type="primary" icon="Edit" :underline="false" :size="size"
@@ -50,10 +53,31 @@
:open="pageF.importOpen" @submit="importSubmit" @cancel="pageF.importOpen = false" />
<ClaimBillDialog ref="claimDialogRef" @submit="handleClaimSubmit" />
+
+ <!-- 鍚屾閾惰娴佹按瀵硅瘽妗� -->
+ <el-dialog title="鍚屾閾惰娴佹按" v-model="syncDialogVisible" width="500px" append-to-body>
+ <el-form ref="syncFormRef" :model="syncForm" :rules="syncRules" label-width="100px">
+ <el-form-item label="璐﹀彿" prop="acctNum">
+ <el-input v-model="syncForm.acctNum" placeholder="璇疯緭鍏ラ摱琛岃处鍙�" clearable />
+ </el-form-item>
+ <el-form-item label="寮�濮嬫棩鏈�" prop="startDate">
+ <el-date-picker v-model="syncForm.startDate" type="date" value-format="YYYY-MM-DD"
+ placeholder="璇烽�夋嫨寮�濮嬫棩鏈�" style="width: 100%" />
+ </el-form-item>
+ <el-form-item label="缁撴潫鏃ユ湡" prop="endDate">
+ <el-date-picker v-model="syncForm.endDate" type="date" value-format="YYYY-MM-DD"
+ placeholder="璇烽�夋嫨缁撴潫鏃ユ湡" style="width: 100%" />
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <el-button @click="syncDialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="handleSyncSubmit" :loading="syncLoading">纭� 瀹�</el-button>
+ </template>
+ </el-dialog>
</template>
<script setup name="fundFlow" lang="ts">
-import { FundFlowI, addFundFlow, delFundFlow, addFundFlowClaimDetailClaim, exportFundFlow, confirmFundFlow, getFundFlow, listFundFlow, updateFundFlow } from "@/api/cwgl/fundFlow";
+import { FundFlowI, addFundFlow, delFundFlow, addFundFlowClaimDetailClaim, exportFundFlow, confirmFundFlow, getFundFlow, listFundFlow, updateFundFlow, syncFromCmbs } from "@/api/cwgl/fundFlow";
import useCurrentInstance from "@/utils/useCurrentInstance";
import { listFundFlowLog} from "@/api/cwgl/fundFlowLog";
@@ -320,5 +344,47 @@
pageF.importOpen = false;
onLoad(page.value);
};
+
+// 鍚屾閾惰娴佹按
+const syncDialogVisible = ref(false);
+const syncLoading = ref(false);
+const syncFormRef = ref();
+const syncForm = reactive({
+ acctNum: '',
+ startDate: '',
+ endDate: ''
+});
+const syncRules = {
+ acctNum: [{ required: true, message: '璇疯緭鍏ラ摱琛岃处鍙�', trigger: 'blur' }],
+ startDate: [{ required: true, message: '璇烽�夋嫨寮�濮嬫棩鏈�', trigger: 'change' }],
+ endDate: [{ required: true, message: '璇烽�夋嫨缁撴潫鏃ユ湡', trigger: 'change' }]
+};
+
+const handleSync = () => {
+ syncForm.acctNum = '';
+ syncForm.startDate = '';
+ syncForm.endDate = '';
+ syncDialogVisible.value = true;
+};
+
+const handleSyncSubmit = () => {
+ syncFormRef.value?.validate((valid: boolean) => {
+ if (!valid) return;
+ syncLoading.value = true;
+ syncFromCmbs(syncForm).then((response: any) => {
+ syncLoading.value = false;
+ if (response.code === 200) {
+ proxy.$modal.msgSuccess(response.msg || '鍚屾鎴愬姛');
+ syncDialogVisible.value = false;
+ onLoad(page.value);
+ } else {
+ proxy.$modal.msgError(response.msg || '鍚屾澶辫触');
+ }
+ }).catch((err) => {
+ syncLoading.value = false;
+ proxy.$modal.msgError('鍚屾澶辫触: ' + (err.msg || err.message || ''));
+ });
+ });
+};
/* listFundFlowClaimDetail */
</script>
--
Gitblit v1.8.0