From 333904fc99e3ad1a9c63112dca4410944fe1516e Mon Sep 17 00:00:00 2001
From: lvleigang <957075182@qq.com>
Date: Sat, 14 Sep 2024 09:17:10 +0800
Subject: [PATCH] =?UTF-8?q?fw-cbs=E5=88=86=E6=94=AF=E7=BB=93=E6=9E=84?=
 =?UTF-8?q?=E4=B8=8A=E4=BC=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 base-webapp/pom.xml                           |  10 +-
 fw-cbs/pom.xml                                |  48 +
 .../cbs8/dto/req/AgentPayRequestDTO.java      |  32 +
 .../dto/req/AgentPayResultRequestDTO.java     |  20 +
 .../frame/cbs8/dto/req/ElecRequestDTO.java    | 134 +++
 .../frame/cbs8/dto/req/PayRequestDTO.java     | 272 ++++++
 .../cbs8/dto/req/PayResultRequestDTO.java     |  44 +
 .../cbs8/dto/req/PaymentApplyAgentDTO.java    | 132 +++
 .../dto/req/PaymentApplySubmitReqDTO.java     | 245 +++++
 .../cbs8/dto/req/TransactionDetailReqDTO.java | 164 ++++
 .../frame/cbs8/dto/res/AgentPayQueryDTO.java  | 280 ++++++
 .../cbs8/dto/res/AgentPayResultResDTO.java    | 450 +++++++++
 .../frame/cbs8/dto/res/CbsResDataDTO.java     | 458 +++++++++
 .../frame/cbs8/dto/res/CbsResponseDTO.java    |  44 +
 .../frame/cbs8/dto/res/ElecResponseDTO.java   | 305 ++++++
 .../frame/cbs8/dto/res/PayResponseDTO.java    |  73 ++
 .../frame/cbs8/dto/res/PayResultResDTO.java   | 890 ++++++++++++++++++
 .../cbs8/dto/res/TransactionDetailDTO.java    | 207 ++++
 .../hzya/frame/cbs8/entity/PaymentEntity.java | 327 +++++++
 .../frame/cbs8/service/ICbs8ExtService.java   |  60 ++
 .../hzya/frame/cbs8/service/ICbs8Service.java |  65 ++
 .../cbs8/service/impl/Cbs8ExtServiceImpl.java | 216 +++++
 .../cbs8/service/impl/Cbs8ServiceImpl.java    | 269 ++++++
 .../com/hzya/frame/cbs8/util/CBSUtil.java     | 187 ++++
 .../hzya/frame/cbs8/util/CbsAccessToken.java  | 140 +++
 .../hzya/frame/cbs8/util/CurrencyEnum.java    | 137 +++
 .../com/hzya/frame/cbs8/util/PayState.java    |  73 ++
 .../com/hzya/frame/cbs8/util/SM2Util.java     | 237 +++++
 fw-cbs/src/main/webapp/WEB-INF/web.xml        |   6 +
 pom.xml                                       |   2 +-
 30 files changed, 5521 insertions(+), 6 deletions(-)
 create mode 100644 fw-cbs/pom.xml
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayRequestDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayResultRequestDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/ElecRequestDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayRequestDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayResultRequestDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplyAgentDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplySubmitReqDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/TransactionDetailReqDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayQueryDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayResultResDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResDataDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResponseDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/ElecResponseDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResponseDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResultResDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/TransactionDetailDTO.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/entity/PaymentEntity.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8ExtService.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8Service.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ExtServiceImpl.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ServiceImpl.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CBSUtil.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CbsAccessToken.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CurrencyEnum.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/util/PayState.java
 create mode 100644 fw-cbs/src/main/java/com/hzya/frame/cbs8/util/SM2Util.java
 create mode 100644 fw-cbs/src/main/webapp/WEB-INF/web.xml

diff --git a/base-webapp/pom.xml b/base-webapp/pom.xml
index 79bd4cf9..c423ca54 100644
--- a/base-webapp/pom.xml
+++ b/base-webapp/pom.xml
@@ -23,11 +23,11 @@
 <!--            <artifactId>fw-bip</artifactId>-->
 <!--            <version>${revision}</version>-->
 <!--        </dependency>-->
-<!--        <dependency>-->
-<!--            <groupId>com.hzya.frame</groupId>-->
-<!--            <artifactId>fw-cbs</artifactId>-->
-<!--            <version>${revision}</version>-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>com.hzya.frame</groupId>
+            <artifactId>fw-cbs</artifactId>
+            <version>${revision}</version>
+        </dependency>
 <!--        <dependency>-->
 <!--            <groupId>com.hzya.frame</groupId>-->
 <!--            <artifactId>fw-dd</artifactId>-->
diff --git a/fw-cbs/pom.xml b/fw-cbs/pom.xml
new file mode 100644
index 00000000..4bdeaccc
--- /dev/null
+++ b/fw-cbs/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>kangarooDataCenterV3</artifactId>
+        <groupId>com.hzya.frame</groupId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>fw-cbs</artifactId>
+    <packaging>jar</packaging>
+    <version>${revision}</version>
+
+    <dependencies>
+            <dependency>
+                <groupId>com.hzya.frame</groupId>
+                <artifactId>base-service</artifactId>
+                <version>${revision}</version>
+            </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>${mysql-connector-java}</version>
+        </dependency>
+
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <mainClass>none</mainClass>     <!-- 取消查找本项目下的Main方法:为了解决Unable to find main class的问题 -->
+                    <classifier>execute</classifier>    <!-- 为了解决依赖模块找不到此模块中的类或属性 -->
+                    <skip>true</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayRequestDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayRequestDTO.java
new file mode 100644
index 00000000..1a906cba
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayRequestDTO.java
@@ -0,0 +1,32 @@
+package com.hzya.frame.cbs8.dto.req;
+
+import java.util.List;
+
+/**
+ * @Description 代发代扣请求参数
+ * @Author xiangerlin
+ * @Date 2024/6/18 16:20
+ **/
+public class AgentPayRequestDTO {
+
+    //代发表头
+    private PaymentApplySubmitReqDTO paymentApplySubmitReqDTO;
+    //代发明细
+    private List<PaymentApplyAgentDTO> paymentApplyAgentDTO;
+
+    public PaymentApplySubmitReqDTO getPaymentApplySubmitReqDTO() {
+        return paymentApplySubmitReqDTO;
+    }
+
+    public void setPaymentApplySubmitReqDTO(PaymentApplySubmitReqDTO paymentApplySubmitReqDTO) {
+        this.paymentApplySubmitReqDTO = paymentApplySubmitReqDTO;
+    }
+
+    public List<PaymentApplyAgentDTO> getPaymentApplyAgentDTO() {
+        return paymentApplyAgentDTO;
+    }
+
+    public void setPaymentApplyAgentDTO(List<PaymentApplyAgentDTO> paymentApplyAgentDTO) {
+        this.paymentApplyAgentDTO = paymentApplyAgentDTO;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayResultRequestDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayResultRequestDTO.java
new file mode 100644
index 00000000..a4ef80c8
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayResultRequestDTO.java
@@ -0,0 +1,20 @@
+package com.hzya.frame.cbs8.dto.req;
+
+/**
+ * @Description 代发代扣详情查询请求参数
+ * @Author xiangerlin
+ * @Date 2024/6/18 17:40
+ **/
+public class AgentPayResultRequestDTO {
+
+    //申请单编号。 代发代扣支付接口会返回这个单号的
+    private String busNum;
+
+    public String getBusNum() {
+        return busNum;
+    }
+
+    public void setBusNum(String busNum) {
+        this.busNum = busNum;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/ElecRequestDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/ElecRequestDTO.java
new file mode 100644
index 00000000..f318d279
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/ElecRequestDTO.java
@@ -0,0 +1,134 @@
+package com.hzya.frame.cbs8.dto.req;
+
+import java.util.List;
+
+/**
+ * @Description 电子回单查询请求参数
+ * @Author xiangerlin
+ * @Date 2024/1/4 17:08
+ **/
+public class ElecRequestDTO {
+    // 开始日期
+    private String startDate;
+
+    // 结束日期
+    private String endDate;
+
+    // 账号
+    private String accountNo;
+
+    // 币种列表
+    private List<String> currencyList;
+
+    // 银行类型列表
+    private List<String> bankTypeList;
+
+    // 回单文件状态 1-已取回 0-未取回
+    private String billStatus;
+
+    // 借贷 1-借 2-贷
+    private String loanType;
+
+    // 单位编码列表
+    private List<String> unitCodeList;
+
+    // 对账码列表
+    private List<String> checkCodeList;
+
+    // ERP业务参考号
+    private String settleBusinessReferenceCode;
+
+    public ElecRequestDTO(String settleBusinessReferenceCode) {
+        this.settleBusinessReferenceCode = settleBusinessReferenceCode;
+    }
+
+    public ElecRequestDTO(String startDate, String endDate, String settleBusinessReferenceCode) {
+        this.startDate = startDate;
+        this.endDate = endDate;
+        this.settleBusinessReferenceCode = settleBusinessReferenceCode;
+    }
+
+    public ElecRequestDTO() {
+
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getAccountNo() {
+        return accountNo;
+    }
+
+    public void setAccountNo(String accountNo) {
+        this.accountNo = accountNo;
+    }
+
+    public List<String> getCurrencyList() {
+        return currencyList;
+    }
+
+    public void setCurrencyList(List<String> currencyList) {
+        this.currencyList = currencyList;
+    }
+
+    public List<String> getBankTypeList() {
+        return bankTypeList;
+    }
+
+    public void setBankTypeList(List<String> bankTypeList) {
+        this.bankTypeList = bankTypeList;
+    }
+
+    public String getBillStatus() {
+        return billStatus;
+    }
+
+    public void setBillStatus(String billStatus) {
+        this.billStatus = billStatus;
+    }
+
+    public String getLoanType() {
+        return loanType;
+    }
+
+    public void setLoanType(String loanType) {
+        this.loanType = loanType;
+    }
+
+    public List<String> getUnitCodeList() {
+        return unitCodeList;
+    }
+
+    public void setUnitCodeList(List<String> unitCodeList) {
+        this.unitCodeList = unitCodeList;
+    }
+
+    public List<String> getCheckCodeList() {
+        return checkCodeList;
+    }
+
+    public void setCheckCodeList(List<String> checkCodeList) {
+        this.checkCodeList = checkCodeList;
+    }
+
+    public String getSettleBusinessReferenceCode() {
+        return settleBusinessReferenceCode;
+    }
+
+    public void setSettleBusinessReferenceCode(String settleBusinessReferenceCode) {
+        this.settleBusinessReferenceCode = settleBusinessReferenceCode;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayRequestDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayRequestDTO.java
new file mode 100644
index 00000000..957d18ad
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayRequestDTO.java
@@ -0,0 +1,272 @@
+package com.hzya.frame.cbs8.dto.req;
+
+/**
+ * @Description 经办支付请求DTO
+ * @Author xiangerlin
+ * @Date 2024/1/3 09:02
+ **/
+public class PayRequestDTO {
+    private String referenceNum;//业务参考号,必填
+    private String busType;//业务类型 必填
+    private String amount;//金额 必填
+    private String currency;//币种编码,必填
+    private String payAccount;//付款账号,非集中支付模式必填
+    private String revAccount;//收款账号 必填
+    private String revAccountName;//收款方户名 必填
+    private String revBankType;//收款银行类型编码,必填
+    private String revBankName;//收款开户行名称
+    private String cnapsCode;//联行号 必填
+    private String purpose;//支付用途 必填
+
+    private String innerAccount;//内部账号
+    private String revBankArea;//收款银行地区名称
+    private String revProvince;//收款人省
+    private String revCity;//收款人市
+    private String bankNum;//收款地区码|银行号
+    private String summary;//该笔支付备注
+    private String expectTime;//期望支付时间
+    private String personalFlag;//公私标记 1对私 0对公
+    private String urgentTag;//加急,1加急0不加2特急
+    private String realTimeTag;//是否实时 1实时0落地
+    private String cityFlag;//同城标志 0同城1异地
+    private String payChannel;//支付渠道
+    private String busiStep;//业务步数 集中支付需要传1,其他不用传
+    private String applyUnitCode;//申请人单位号,集中支付必传
+    private String displayApplyUnitCode;//申请人单位号(前端显示),集中支付如果传了,会将其转化为applyUnitCode
+
+    private String erpExtend1;//客户备用字段1
+    private String erpExtend2;//客户备用字段2
+    private String erpExtend3;//客户备用字段3
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getRevAccount() {
+        return revAccount;
+    }
+
+    public void setRevAccount(String revAccount) {
+        this.revAccount = revAccount;
+    }
+
+    public String getRevAccountName() {
+        return revAccountName;
+    }
+
+    public void setRevAccountName(String revAccountName) {
+        this.revAccountName = revAccountName;
+    }
+
+    public String getRevBankType() {
+        return revBankType;
+    }
+
+    public void setRevBankType(String revBankType) {
+        this.revBankType = revBankType;
+    }
+
+    public String getRevBankName() {
+        return revBankName;
+    }
+
+    public void setRevBankName(String revBankName) {
+        this.revBankName = revBankName;
+    }
+
+    public String getCnapsCode() {
+        return cnapsCode;
+    }
+
+    public void setCnapsCode(String cnapsCode) {
+        this.cnapsCode = cnapsCode;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getInnerAccount() {
+        return innerAccount;
+    }
+
+    public void setInnerAccount(String innerAccount) {
+        this.innerAccount = innerAccount;
+    }
+
+    public String getRevBankArea() {
+        return revBankArea;
+    }
+
+    public void setRevBankArea(String revBankArea) {
+        this.revBankArea = revBankArea;
+    }
+
+    public String getRevProvince() {
+        return revProvince;
+    }
+
+    public void setRevProvince(String revProvince) {
+        this.revProvince = revProvince;
+    }
+
+    public String getRevCity() {
+        return revCity;
+    }
+
+    public void setRevCity(String revCity) {
+        this.revCity = revCity;
+    }
+
+    public String getBankNum() {
+        return bankNum;
+    }
+
+    public void setBankNum(String bankNum) {
+        this.bankNum = bankNum;
+    }
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    public String getExpectTime() {
+        return expectTime;
+    }
+
+    public void setExpectTime(String expectTime) {
+        this.expectTime = expectTime;
+    }
+
+    public String getPersonalFlag() {
+        return personalFlag;
+    }
+
+    public void setPersonalFlag(String personalFlag) {
+        this.personalFlag = personalFlag;
+    }
+
+    public String getUrgentTag() {
+        return urgentTag;
+    }
+
+    public void setUrgentTag(String urgentTag) {
+        this.urgentTag = urgentTag;
+    }
+
+    public String getRealTimeTag() {
+        return realTimeTag;
+    }
+
+    public void setRealTimeTag(String realTimeTag) {
+        this.realTimeTag = realTimeTag;
+    }
+
+    public String getCityFlag() {
+        return cityFlag;
+    }
+
+    public void setCityFlag(String cityFlag) {
+        this.cityFlag = cityFlag;
+    }
+
+    public String getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(String payChannel) {
+        this.payChannel = payChannel;
+    }
+
+    public String getBusiStep() {
+        return busiStep;
+    }
+
+    public void setBusiStep(String busiStep) {
+        this.busiStep = busiStep;
+    }
+
+    public String getApplyUnitCode() {
+        return applyUnitCode;
+    }
+
+    public void setApplyUnitCode(String applyUnitCode) {
+        this.applyUnitCode = applyUnitCode;
+    }
+
+    public String getDisplayApplyUnitCode() {
+        return displayApplyUnitCode;
+    }
+
+    public void setDisplayApplyUnitCode(String displayApplyUnitCode) {
+        this.displayApplyUnitCode = displayApplyUnitCode;
+    }
+
+    public String getErpExtend1() {
+        return erpExtend1;
+    }
+
+    public void setErpExtend1(String erpExtend1) {
+        this.erpExtend1 = erpExtend1;
+    }
+
+    public String getErpExtend2() {
+        return erpExtend2;
+    }
+
+    public void setErpExtend2(String erpExtend2) {
+        this.erpExtend2 = erpExtend2;
+    }
+
+    public String getErpExtend3() {
+        return erpExtend3;
+    }
+
+    public void setErpExtend3(String erpExtend3) {
+        this.erpExtend3 = erpExtend3;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayResultRequestDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayResultRequestDTO.java
new file mode 100644
index 00000000..8180c6f0
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayResultRequestDTO.java
@@ -0,0 +1,44 @@
+package com.hzya.frame.cbs8.dto.req;
+
+import java.util.List;
+
+/**
+ * @Description 查询交易结果请求参数
+ * @Author xiangerlin
+ * @Date 2024/1/3 09:46
+ **/
+public class PayResultRequestDTO {
+    public PayResultRequestDTO() {
+    }
+    public PayResultRequestDTO(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    private String referenceNum;//业务参考号,必填
+    private List<String> statusList;//状态
+    private List<String> payStatusList;//支付状态
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public List<String> getStatusList() {
+        return statusList;
+    }
+
+    public void setStatusList(List<String> statusList) {
+        this.statusList = statusList;
+    }
+
+    public List<String> getPayStatusList() {
+        return payStatusList;
+    }
+
+    public void setPayStatusList(List<String> payStatusList) {
+        this.payStatusList = payStatusList;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplyAgentDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplyAgentDTO.java
new file mode 100644
index 00000000..509165a3
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplyAgentDTO.java
@@ -0,0 +1,132 @@
+package com.hzya.frame.cbs8.dto.req;
+
+/**
+ * @Description 代发代扣明细
+ * @Author xiangerlin
+ * @Date 2024/6/18 13:45
+ **/
+public class PaymentApplyAgentDTO {
+    //每笔明细金额
+    private String dtlAmount;
+    //收款账号
+    private String dtlRevAccount;
+    //联行号 同行可不传,跨行必传
+    private String dtlCnapsCode;
+    //收款账户名称
+    private String dtlRevName;
+    //收款开户行 ,如果传的联行号能匹配到对应到开户行,cbs8会自动带出
+    private String dtlRevBankName;
+
+
+
+    //是否跨行 Y跨行 N同行
+    private String dtlBankFlag;
+    //明细用途
+    private String dtlPurpose;
+    //明细摘要
+    private String dtlRemark;
+    //收款账号银行号|地区码
+    private String dtlRevBankArea;
+    //收款开户地
+    private String dtlRevBankCity;
+    //明细序号,从1开始递增
+    private int dtlSeqNum;
+    //备用字段 一共6个
+    private String dtlExtend1;
+
+    public String getDtlAmount() {
+        return dtlAmount;
+    }
+
+    public void setDtlAmount(String dtlAmount) {
+        this.dtlAmount = dtlAmount;
+    }
+
+    public String getDtlRevAccount() {
+        return dtlRevAccount;
+    }
+
+    public void setDtlRevAccount(String dtlRevAccount) {
+        this.dtlRevAccount = dtlRevAccount;
+    }
+
+    public String getDtlCnapsCode() {
+        return dtlCnapsCode;
+    }
+
+    public void setDtlCnapsCode(String dtlCnapsCode) {
+        this.dtlCnapsCode = dtlCnapsCode;
+    }
+
+    public String getDtlRevName() {
+        return dtlRevName;
+    }
+
+    public void setDtlRevName(String dtlRevName) {
+        this.dtlRevName = dtlRevName;
+    }
+
+    public String getDtlRevBankName() {
+        return dtlRevBankName;
+    }
+
+    public void setDtlRevBankName(String dtlRevBankName) {
+        this.dtlRevBankName = dtlRevBankName;
+    }
+
+    public String getDtlBankFlag() {
+        return dtlBankFlag;
+    }
+
+    public void setDtlBankFlag(String dtlBankFlag) {
+        this.dtlBankFlag = dtlBankFlag;
+    }
+
+    public String getDtlPurpose() {
+        return dtlPurpose;
+    }
+
+    public void setDtlPurpose(String dtlPurpose) {
+        this.dtlPurpose = dtlPurpose;
+    }
+
+    public String getDtlRemark() {
+        return dtlRemark;
+    }
+
+    public void setDtlRemark(String dtlRemark) {
+        this.dtlRemark = dtlRemark;
+    }
+
+    public String getDtlRevBankArea() {
+        return dtlRevBankArea;
+    }
+
+    public void setDtlRevBankArea(String dtlRevBankArea) {
+        this.dtlRevBankArea = dtlRevBankArea;
+    }
+
+    public String getDtlRevBankCity() {
+        return dtlRevBankCity;
+    }
+
+    public void setDtlRevBankCity(String dtlRevBankCity) {
+        this.dtlRevBankCity = dtlRevBankCity;
+    }
+
+    public int getDtlSeqNum() {
+        return dtlSeqNum;
+    }
+
+    public void setDtlSeqNum(int dtlSeqNum) {
+        this.dtlSeqNum = dtlSeqNum;
+    }
+
+    public String getDtlExtend1() {
+        return dtlExtend1;
+    }
+
+    public void setDtlExtend1(String dtlExtend1) {
+        this.dtlExtend1 = dtlExtend1;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplySubmitReqDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplySubmitReqDTO.java
new file mode 100644
index 00000000..863ecb63
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplySubmitReqDTO.java
@@ -0,0 +1,245 @@
+package com.hzya.frame.cbs8.dto.req;
+
+/**
+ * @Description 批量代发代扣 203代发 201代扣
+ * @Author xiangerlin
+ * @Date 2024/6/18 11:58
+ **/
+public class PaymentApplySubmitReqDTO {
+    //业务参考号
+    private String referenceNum;
+    /**
+     * 业务类型
+     * 201-代扣
+     * 203-代发
+     * 代发工资传203
+     */
+    private String busType;
+    //总金额 小数位2位
+    private String amount;
+    //币种
+    private String currency;
+    //付款账号
+    private String payAccount;
+    //用途
+    private String purpose;
+    // 以上是必填字段
+
+
+
+    //备注
+    private String summary;
+    //期望支付时间
+    private String expectTime;
+    //公私标识 1对私 0对公
+    private String personalFlag;
+    //加急标志 1加急 0不加急
+    private String urgentTag;
+    //是否实时 1实时 0落地
+    private String realTimeTag;
+    /**
+     * 同城标志 0同城 1异地
+     * 收/付账号所属同一个城市为同城,否则为异地
+     */
+    private String cityFlag;
+    //银行备用字段 一共8个
+    private String bankExtend1;
+    private String bankExtend2;
+    private String bankExtend3;
+    private String bankExtend4;
+    private String bankExtend5;
+    private String bankExtend6;
+    private String bankExtend7;
+    private String bankExtend8;
+
+    //客户备用字段1
+    private String erpExtend1;
+    //客户备用字段1
+    private String erpExtend2;
+    //客户备用字段1
+    private String erpExtend3;
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    public String getExpectTime() {
+        return expectTime;
+    }
+
+    public void setExpectTime(String expectTime) {
+        this.expectTime = expectTime;
+    }
+
+    public String getPersonalFlag() {
+        return personalFlag;
+    }
+
+    public void setPersonalFlag(String personalFlag) {
+        this.personalFlag = personalFlag;
+    }
+
+    public String getUrgentTag() {
+        return urgentTag;
+    }
+
+    public void setUrgentTag(String urgentTag) {
+        this.urgentTag = urgentTag;
+    }
+
+    public String getRealTimeTag() {
+        return realTimeTag;
+    }
+
+    public void setRealTimeTag(String realTimeTag) {
+        this.realTimeTag = realTimeTag;
+    }
+
+    public String getCityFlag() {
+        return cityFlag;
+    }
+
+    public void setCityFlag(String cityFlag) {
+        this.cityFlag = cityFlag;
+    }
+
+    public String getBankExtend1() {
+        return bankExtend1;
+    }
+
+    public void setBankExtend1(String bankExtend1) {
+        this.bankExtend1 = bankExtend1;
+    }
+
+    public String getErpExtend1() {
+        return erpExtend1;
+    }
+
+    public void setErpExtend1(String erpExtend1) {
+        this.erpExtend1 = erpExtend1;
+    }
+
+    public String getErpExtend2() {
+        return erpExtend2;
+    }
+
+    public void setErpExtend2(String erpExtend2) {
+        this.erpExtend2 = erpExtend2;
+    }
+
+    public String getErpExtend3() {
+        return erpExtend3;
+    }
+
+    public void setErpExtend3(String erpExtend3) {
+        this.erpExtend3 = erpExtend3;
+    }
+
+    public String getBankExtend2() {
+        return bankExtend2;
+    }
+
+    public void setBankExtend2(String bankExtend2) {
+        this.bankExtend2 = bankExtend2;
+    }
+
+    public String getBankExtend3() {
+        return bankExtend3;
+    }
+
+    public void setBankExtend3(String bankExtend3) {
+        this.bankExtend3 = bankExtend3;
+    }
+
+    public String getBankExtend4() {
+        return bankExtend4;
+    }
+
+    public void setBankExtend4(String bankExtend4) {
+        this.bankExtend4 = bankExtend4;
+    }
+
+    public String getBankExtend5() {
+        return bankExtend5;
+    }
+
+    public void setBankExtend5(String bankExtend5) {
+        this.bankExtend5 = bankExtend5;
+    }
+
+    public String getBankExtend6() {
+        return bankExtend6;
+    }
+
+    public void setBankExtend6(String bankExtend6) {
+        this.bankExtend6 = bankExtend6;
+    }
+
+    public String getBankExtend7() {
+        return bankExtend7;
+    }
+
+    public void setBankExtend7(String bankExtend7) {
+        this.bankExtend7 = bankExtend7;
+    }
+
+    public String getBankExtend8() {
+        return bankExtend8;
+    }
+
+    public void setBankExtend8(String bankExtend8) {
+        this.bankExtend8 = bankExtend8;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/TransactionDetailReqDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/TransactionDetailReqDTO.java
new file mode 100644
index 00000000..26f5f4bf
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/TransactionDetailReqDTO.java
@@ -0,0 +1,164 @@
+package com.hzya.frame.cbs8.dto.req;
+
+import java.util.List;
+
+/**
+ * @Description 查询境内交易明细参数
+ * @Author xiangerlin
+ * @Date 2024/1/3 09:55
+ **/
+public class TransactionDetailReqDTO {
+    private int currentPage;//当前页码 从1开始
+    private int pageSize;//本次查询的记录数,最大1000条
+    private String startDate;//开始日期
+    private String endDate;//结束日期
+    private String dateType;//日期类型0:交易日期,1:起息日期
+    private List<String> accountNoList;//账户列表
+    private List<String> bankTypeList;//银行类型列表
+    private List<String> currencyList;//币种列表
+    private String detailedSources;//明细来源
+    private String currentFlag;//明细类型
+    private String loanType;//借贷类型 1:借 2:贷
+    private List<String> accountNatureList;//账户性质列表
+    private String bankSerialNumber;//银行流水号
+    private String transactionSerialNumber;//交易流水号
+    private List<String> unitCodeList ;//单位编码列表
+    private String erpSerialNumber ;//erp业务参考号
+
+    public TransactionDetailReqDTO() {
+
+    }
+
+    public TransactionDetailReqDTO(String startDate, String endDate) {
+        this.startDate = startDate;
+        this.endDate = endDate;
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getDateType() {
+        return dateType;
+    }
+
+    public void setDateType(String dateType) {
+        this.dateType = dateType;
+    }
+
+    public List<String> getAccountNoList() {
+        return accountNoList;
+    }
+
+    public void setAccountNoList(List<String> accountNoList) {
+        this.accountNoList = accountNoList;
+    }
+
+    public List<String> getBankTypeList() {
+        return bankTypeList;
+    }
+
+    public void setBankTypeList(List<String> bankTypeList) {
+        this.bankTypeList = bankTypeList;
+    }
+
+    public List<String> getCurrencyList() {
+        return currencyList;
+    }
+
+    public void setCurrencyList(List<String> currencyList) {
+        this.currencyList = currencyList;
+    }
+
+    public String getDetailedSources() {
+        return detailedSources;
+    }
+
+    public void setDetailedSources(String detailedSources) {
+        this.detailedSources = detailedSources;
+    }
+
+    public String getCurrentFlag() {
+        return currentFlag;
+    }
+
+    public void setCurrentFlag(String currentFlag) {
+        this.currentFlag = currentFlag;
+    }
+
+    public String getLoanType() {
+        return loanType;
+    }
+
+    public void setLoanType(String loanType) {
+        this.loanType = loanType;
+    }
+
+    public List<String> getAccountNatureList() {
+        return accountNatureList;
+    }
+
+    public void setAccountNatureList(List<String> accountNatureList) {
+        this.accountNatureList = accountNatureList;
+    }
+
+    public String getBankSerialNumber() {
+        return bankSerialNumber;
+    }
+
+    public void setBankSerialNumber(String bankSerialNumber) {
+        this.bankSerialNumber = bankSerialNumber;
+    }
+
+    public String getTransactionSerialNumber() {
+        return transactionSerialNumber;
+    }
+
+    public void setTransactionSerialNumber(String transactionSerialNumber) {
+        this.transactionSerialNumber = transactionSerialNumber;
+    }
+
+    public List<String> getUnitCodeList() {
+        return unitCodeList;
+    }
+
+    public void setUnitCodeList(List<String> unitCodeList) {
+        this.unitCodeList = unitCodeList;
+    }
+
+    public String getErpSerialNumber() {
+        return erpSerialNumber;
+    }
+
+    public void setErpSerialNumber(String erpSerialNumber) {
+        this.erpSerialNumber = erpSerialNumber;
+    }
+
+    public int getCurrentPage() {
+        return currentPage;
+    }
+
+    public void setCurrentPage(int currentPage) {
+        this.currentPage = currentPage;
+    }
+
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(int pageSize) {
+        this.pageSize = pageSize;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayQueryDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayQueryDTO.java
new file mode 100644
index 00000000..402e7895
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayQueryDTO.java
@@ -0,0 +1,280 @@
+package com.hzya.frame.cbs8.dto.res;
+
+/**
+ * @Description 代发代扣查询详情
+ * @Author xiangerlin
+ * @Date 2024/6/19 09:02
+ **/
+public class AgentPayQueryDTO {
+    // 申请单编号
+    private String busNum;
+
+    // 代发/代扣明细序号
+    private String dtlSeqNum;
+
+    // 金额
+    private String dtlAmount; // 考虑到金额计算精度,建议使用BigDecimal
+
+    // 收款人名称
+    private String dtlRevName;
+
+    // 收款人账号
+    private String dtlRevAccount;
+
+    // 收款人开户行
+    private String dtlRevBankName;
+
+    // 银行号
+    private String dtlBankNum;
+
+    // 联行号
+    private String dtlCnapsCode;
+
+    // 是否跨行(Y:开户行是招商银行。N:开户行是他行。为空默认为招行)
+    private String dtlBankFlag;
+
+    // 地区名称
+    private String dtlRevBankArea;
+
+    // 注释
+    private String dtlRemark;
+
+    // 状态
+    private String dtlStatus;
+
+    // 错误信息
+    private String dtlErrorMessage;
+
+    // 他行开户地
+    private String dtlRevBankCity;
+
+    // 备用字段1-6
+    private String dtlExtend1;
+    private String dtlExtend2;
+    private String dtlExtend3;
+    private String dtlExtend4;
+    private String dtlExtend5;
+    private String dtlExtend6;
+
+    // ERP备注1-3
+    private String dtlErpComment1;
+    private String dtlErpComment2;
+    private String dtlErpComment3;
+
+    // 用途
+    private String dtlPurpose;
+
+    // 银行支付时间
+    private String dtlPayTime;
+
+    // 实际扣款金额
+    private String dtlActualAmount;
+
+    public String getBusNum() {
+        return busNum;
+    }
+
+    public void setBusNum(String busNum) {
+        this.busNum = busNum;
+    }
+
+    public String getDtlSeqNum() {
+        return dtlSeqNum;
+    }
+
+    public void setDtlSeqNum(String dtlSeqNum) {
+        this.dtlSeqNum = dtlSeqNum;
+    }
+
+    public String getDtlAmount() {
+        return dtlAmount;
+    }
+
+    public void setDtlAmount(String dtlAmount) {
+        this.dtlAmount = dtlAmount;
+    }
+
+    public String getDtlRevName() {
+        return dtlRevName;
+    }
+
+    public void setDtlRevName(String dtlRevName) {
+        this.dtlRevName = dtlRevName;
+    }
+
+    public String getDtlRevAccount() {
+        return dtlRevAccount;
+    }
+
+    public void setDtlRevAccount(String dtlRevAccount) {
+        this.dtlRevAccount = dtlRevAccount;
+    }
+
+    public String getDtlRevBankName() {
+        return dtlRevBankName;
+    }
+
+    public void setDtlRevBankName(String dtlRevBankName) {
+        this.dtlRevBankName = dtlRevBankName;
+    }
+
+    public String getDtlBankNum() {
+        return dtlBankNum;
+    }
+
+    public void setDtlBankNum(String dtlBankNum) {
+        this.dtlBankNum = dtlBankNum;
+    }
+
+    public String getDtlCnapsCode() {
+        return dtlCnapsCode;
+    }
+
+    public void setDtlCnapsCode(String dtlCnapsCode) {
+        this.dtlCnapsCode = dtlCnapsCode;
+    }
+
+    public String getDtlBankFlag() {
+        return dtlBankFlag;
+    }
+
+    public void setDtlBankFlag(String dtlBankFlag) {
+        this.dtlBankFlag = dtlBankFlag;
+    }
+
+    public String getDtlRevBankArea() {
+        return dtlRevBankArea;
+    }
+
+    public void setDtlRevBankArea(String dtlRevBankArea) {
+        this.dtlRevBankArea = dtlRevBankArea;
+    }
+
+    public String getDtlRemark() {
+        return dtlRemark;
+    }
+
+    public void setDtlRemark(String dtlRemark) {
+        this.dtlRemark = dtlRemark;
+    }
+
+    public String getDtlStatus() {
+        return dtlStatus;
+    }
+
+    public void setDtlStatus(String dtlStatus) {
+        this.dtlStatus = dtlStatus;
+    }
+
+    public String getDtlErrorMessage() {
+        return dtlErrorMessage;
+    }
+
+    public void setDtlErrorMessage(String dtlErrorMessage) {
+        this.dtlErrorMessage = dtlErrorMessage;
+    }
+
+    public String getDtlRevBankCity() {
+        return dtlRevBankCity;
+    }
+
+    public void setDtlRevBankCity(String dtlRevBankCity) {
+        this.dtlRevBankCity = dtlRevBankCity;
+    }
+
+    public String getDtlExtend1() {
+        return dtlExtend1;
+    }
+
+    public void setDtlExtend1(String dtlExtend1) {
+        this.dtlExtend1 = dtlExtend1;
+    }
+
+    public String getDtlExtend2() {
+        return dtlExtend2;
+    }
+
+    public void setDtlExtend2(String dtlExtend2) {
+        this.dtlExtend2 = dtlExtend2;
+    }
+
+    public String getDtlExtend3() {
+        return dtlExtend3;
+    }
+
+    public void setDtlExtend3(String dtlExtend3) {
+        this.dtlExtend3 = dtlExtend3;
+    }
+
+    public String getDtlExtend4() {
+        return dtlExtend4;
+    }
+
+    public void setDtlExtend4(String dtlExtend4) {
+        this.dtlExtend4 = dtlExtend4;
+    }
+
+    public String getDtlExtend5() {
+        return dtlExtend5;
+    }
+
+    public void setDtlExtend5(String dtlExtend5) {
+        this.dtlExtend5 = dtlExtend5;
+    }
+
+    public String getDtlExtend6() {
+        return dtlExtend6;
+    }
+
+    public void setDtlExtend6(String dtlExtend6) {
+        this.dtlExtend6 = dtlExtend6;
+    }
+
+    public String getDtlErpComment1() {
+        return dtlErpComment1;
+    }
+
+    public void setDtlErpComment1(String dtlErpComment1) {
+        this.dtlErpComment1 = dtlErpComment1;
+    }
+
+    public String getDtlErpComment2() {
+        return dtlErpComment2;
+    }
+
+    public void setDtlErpComment2(String dtlErpComment2) {
+        this.dtlErpComment2 = dtlErpComment2;
+    }
+
+    public String getDtlErpComment3() {
+        return dtlErpComment3;
+    }
+
+    public void setDtlErpComment3(String dtlErpComment3) {
+        this.dtlErpComment3 = dtlErpComment3;
+    }
+
+    public String getDtlPurpose() {
+        return dtlPurpose;
+    }
+
+    public void setDtlPurpose(String dtlPurpose) {
+        this.dtlPurpose = dtlPurpose;
+    }
+
+    public String getDtlPayTime() {
+        return dtlPayTime;
+    }
+
+    public void setDtlPayTime(String dtlPayTime) {
+        this.dtlPayTime = dtlPayTime;
+    }
+
+    public String getDtlActualAmount() {
+        return dtlActualAmount;
+    }
+
+    public void setDtlActualAmount(String dtlActualAmount) {
+        this.dtlActualAmount = dtlActualAmount;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayResultResDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayResultResDTO.java
new file mode 100644
index 00000000..5ea5d5ae
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayResultResDTO.java
@@ -0,0 +1,450 @@
+package com.hzya.frame.cbs8.dto.res;
+
+import java.util.List;
+
+/**
+ * @Description 代发代扣 返回参数对象
+ * @Author xiangerlin
+ * @Date 2024/6/19 08:53
+ **/
+public class AgentPayResultResDTO {
+    // 支付的业务类型
+    private String busType;
+
+    // 申请单编号
+    private String busNum;
+
+    // 付款账户
+    private String payAccount;
+
+    // 付款账户名称
+    private String payAccountName;
+
+    // 付款账户开户行
+    private String payBankName;
+
+    // 付款银行类型
+    private String payBankType;
+
+    // 币种
+    private String currency;
+
+    // 金额
+    private String amount;
+
+    // 收款账户
+    private String revAccount;
+
+    // 收款账户名称
+    private String revAccountName;
+
+    // 收款开户行
+    private String revBankName;
+
+    // 收款银行类型
+    private String revBankType;
+
+    // 收款人省
+    private String revProvince;
+
+    // 对账码集合(假设为String列表)
+    private List<String> checkCodeList;
+
+    // 收款人市
+    private String revCity;
+
+    // 支付渠道
+    private String payChannel;
+
+    // 付款单提示信息/银行返回信息
+    private String errorMsg;
+
+    // 支付申请状态
+    private String status;
+
+    // 经办人ID
+    private String createBy;
+
+    // 经办人名称
+    private String createByName;
+
+    // 用途
+    private String purpose;
+
+    // 摘要/备注
+    private String summary;
+
+    // 期望支付时间
+    private String expectTime;
+
+    // 支付时间
+    private String payDate;
+
+    // 支付状态
+    private String payStatus;
+
+    // 客户备用字段1
+    private String erpExtend1;
+
+    // 客户备用字段2
+    private String erpExtend2;
+
+    // 客户备用字段3
+    private String erpExtend3;
+
+    // 计划流水号
+    private String planNumber;
+
+    // 资金预算编号
+    private String planItemCode;
+
+    // 预算项名称
+    private String planItemName;
+
+    // 预算所属单位编码
+    private String planUnitCode;
+
+    // 预算所属单位名称
+    private String planUnitName;
+
+    // 单位编码(前端展示)
+    private String displayUnitCode;
+
+    // 预算单位编码(前端展示)
+    private String displayPlanUnitCode;
+
+    // 经办用户单位编码(前端展示)
+    private String displayOperaterOrgCode;
+
+    // 付方单位编码(前端展示)
+    private String displayPayOrgCode;
+
+    // 客商编号
+    private String revCustomerCode;
+
+    // 结算方式
+    private String payType;
+
+    //代发代扣详情
+    private List<AgentPayQueryDTO> agentDetails;
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getBusNum() {
+        return busNum;
+    }
+
+    public void setBusNum(String busNum) {
+        this.busNum = busNum;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPayAccountName() {
+        return payAccountName;
+    }
+
+    public void setPayAccountName(String payAccountName) {
+        this.payAccountName = payAccountName;
+    }
+
+    public String getPayBankName() {
+        return payBankName;
+    }
+
+    public void setPayBankName(String payBankName) {
+        this.payBankName = payBankName;
+    }
+
+    public String getPayBankType() {
+        return payBankType;
+    }
+
+    public void setPayBankType(String payBankType) {
+        this.payBankType = payBankType;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getRevAccount() {
+        return revAccount;
+    }
+
+    public void setRevAccount(String revAccount) {
+        this.revAccount = revAccount;
+    }
+
+    public String getRevAccountName() {
+        return revAccountName;
+    }
+
+    public void setRevAccountName(String revAccountName) {
+        this.revAccountName = revAccountName;
+    }
+
+    public String getRevBankName() {
+        return revBankName;
+    }
+
+    public void setRevBankName(String revBankName) {
+        this.revBankName = revBankName;
+    }
+
+    public String getRevBankType() {
+        return revBankType;
+    }
+
+    public void setRevBankType(String revBankType) {
+        this.revBankType = revBankType;
+    }
+
+    public String getRevProvince() {
+        return revProvince;
+    }
+
+    public void setRevProvince(String revProvince) {
+        this.revProvince = revProvince;
+    }
+
+    public List<String> getCheckCodeList() {
+        return checkCodeList;
+    }
+
+    public void setCheckCodeList(List<String> checkCodeList) {
+        this.checkCodeList = checkCodeList;
+    }
+
+    public String getRevCity() {
+        return revCity;
+    }
+
+    public void setRevCity(String revCity) {
+        this.revCity = revCity;
+    }
+
+    public String getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(String payChannel) {
+        this.payChannel = payChannel;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
+    }
+
+    public String getCreateByName() {
+        return createByName;
+    }
+
+    public void setCreateByName(String createByName) {
+        this.createByName = createByName;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    public String getExpectTime() {
+        return expectTime;
+    }
+
+    public void setExpectTime(String expectTime) {
+        this.expectTime = expectTime;
+    }
+
+    public String getPayDate() {
+        return payDate;
+    }
+
+    public void setPayDate(String payDate) {
+        this.payDate = payDate;
+    }
+
+    public String getPayStatus() {
+        return payStatus;
+    }
+
+    public void setPayStatus(String payStatus) {
+        this.payStatus = payStatus;
+    }
+
+    public String getErpExtend1() {
+        return erpExtend1;
+    }
+
+    public void setErpExtend1(String erpExtend1) {
+        this.erpExtend1 = erpExtend1;
+    }
+
+    public String getErpExtend2() {
+        return erpExtend2;
+    }
+
+    public void setErpExtend2(String erpExtend2) {
+        this.erpExtend2 = erpExtend2;
+    }
+
+    public String getErpExtend3() {
+        return erpExtend3;
+    }
+
+    public void setErpExtend3(String erpExtend3) {
+        this.erpExtend3 = erpExtend3;
+    }
+
+    public String getPlanNumber() {
+        return planNumber;
+    }
+
+    public void setPlanNumber(String planNumber) {
+        this.planNumber = planNumber;
+    }
+
+    public String getPlanItemCode() {
+        return planItemCode;
+    }
+
+    public void setPlanItemCode(String planItemCode) {
+        this.planItemCode = planItemCode;
+    }
+
+    public String getPlanItemName() {
+        return planItemName;
+    }
+
+    public void setPlanItemName(String planItemName) {
+        this.planItemName = planItemName;
+    }
+
+    public String getPlanUnitCode() {
+        return planUnitCode;
+    }
+
+    public void setPlanUnitCode(String planUnitCode) {
+        this.planUnitCode = planUnitCode;
+    }
+
+    public String getPlanUnitName() {
+        return planUnitName;
+    }
+
+    public void setPlanUnitName(String planUnitName) {
+        this.planUnitName = planUnitName;
+    }
+
+    public String getDisplayUnitCode() {
+        return displayUnitCode;
+    }
+
+    public void setDisplayUnitCode(String displayUnitCode) {
+        this.displayUnitCode = displayUnitCode;
+    }
+
+    public String getDisplayPlanUnitCode() {
+        return displayPlanUnitCode;
+    }
+
+    public void setDisplayPlanUnitCode(String displayPlanUnitCode) {
+        this.displayPlanUnitCode = displayPlanUnitCode;
+    }
+
+    public String getDisplayOperaterOrgCode() {
+        return displayOperaterOrgCode;
+    }
+
+    public void setDisplayOperaterOrgCode(String displayOperaterOrgCode) {
+        this.displayOperaterOrgCode = displayOperaterOrgCode;
+    }
+
+    public String getDisplayPayOrgCode() {
+        return displayPayOrgCode;
+    }
+
+    public void setDisplayPayOrgCode(String displayPayOrgCode) {
+        this.displayPayOrgCode = displayPayOrgCode;
+    }
+
+    public String getRevCustomerCode() {
+        return revCustomerCode;
+    }
+
+    public void setRevCustomerCode(String revCustomerCode) {
+        this.revCustomerCode = revCustomerCode;
+    }
+
+    public String getPayType() {
+        return payType;
+    }
+
+    public void setPayType(String payType) {
+        this.payType = payType;
+    }
+
+    public List<AgentPayQueryDTO> getAgentDetails() {
+        return agentDetails;
+    }
+
+    public void setAgentDetails(List<AgentPayQueryDTO> agentDetails) {
+        this.agentDetails = agentDetails;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResDataDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResDataDTO.java
new file mode 100644
index 00000000..0bb30dc8
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResDataDTO.java
@@ -0,0 +1,458 @@
+package com.hzya.frame.cbs8.dto.res;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONField;
+
+import java.util.List;
+
+/**
+ * @Description data节点
+ * @Author xiangerlin
+ * @Date 2024/1/2 09:26
+ **/
+public class CbsResDataDTO {
+
+
+    private List<JSONObject> list;//明细数据
+    //------- 交易明细字段-----
+    private int endRow;
+    private Boolean hasNextPage;//是否有下一页
+    private Boolean hasPreviousPage;//是否有前一页
+    @JSONField(name = "isFirstPage")
+    private Boolean hasFirstPage;
+    @JSONField(name = "isLastPage")
+    private Boolean hasLastPage;
+    private int navigateFirstPage;
+    private int navigateLastPage;
+    private int navigatePages;
+    private int nextPage;
+    private int pageNum;
+    private int pageSize;
+    private int pages;
+    private int prePage;
+    private int size;
+    private int startRow;
+    private int total;
+    //------- 交易明细字段-----
+
+    //------经办支付返回参数------
+    private String busNum;//申请单编号
+    private String errorCode;//错误编码
+    private String errorMsg;//错误信息
+    private String freezeFlowNum;//内部户冻结流水号
+    private String recordNum;//批量经办序号
+    private String referenceNum;//业务参考号
+    private Boolean successed;//是否成功
+    //------经办支付返回参数------
+
+
+    //------查询交易结果返回参数-------
+
+    private String busType;//支付业务类型
+    private String payAccount;//付款账号
+    private String payAccountName;//付款户名
+    private String payBankName;//付款开户行名称
+    private String payBankType;//付款银行类型
+    private String currency;//币种
+    private String amount;//金额
+    private String revAccount;//收款账户
+    private String revAccountName;//收款账户名
+    private String revBankName;//收款开户行
+    private String revBankType;//收款银行类型
+    private String payChannel;//支付渠道
+
+    private String status;//支付申请单状态
+    private String payStatus;//支付状态
+    private String payDate;//支付时间
+    private String planNumber;//计划流水号
+    private String planItemCode;//资金预算编号
+    private String planItemName;//预算名称
+    private String erpExtend1;//客户备用字段1
+    private String erpExtend2;//客户备用字段1
+    private String erpExtend3;//客户备用字段1
+
+    //------查询交易结果返回参数-------
+
+
+    public List<JSONObject> getList() {
+        return list;
+    }
+
+    public void setList(List<JSONObject> list) {
+        this.list = list;
+    }
+
+    public int getEndRow() {
+        return endRow;
+    }
+
+    public void setEndRow(int endRow) {
+        this.endRow = endRow;
+    }
+
+    public Boolean getHasNextPage() {
+        return hasNextPage;
+    }
+
+    public void setHasNextPage(Boolean hasNextPage) {
+        this.hasNextPage = hasNextPage;
+    }
+
+    public Boolean getHasPreviousPage() {
+        return hasPreviousPage;
+    }
+
+    public void setHasPreviousPage(Boolean hasPreviousPage) {
+        this.hasPreviousPage = hasPreviousPage;
+    }
+
+    public Boolean getHasFirstPage() {
+        return hasFirstPage;
+    }
+
+    public void setHasFirstPage(Boolean hasFirstPage) {
+        this.hasFirstPage = hasFirstPage;
+    }
+
+    public Boolean getHasLastPage() {
+        return hasLastPage;
+    }
+
+    public void setHasLastPage(Boolean hasLastPage) {
+        this.hasLastPage = hasLastPage;
+    }
+
+    public int getNavigateFirstPage() {
+        return navigateFirstPage;
+    }
+
+    public void setNavigateFirstPage(int navigateFirstPage) {
+        this.navigateFirstPage = navigateFirstPage;
+    }
+
+    public int getNavigateLastPage() {
+        return navigateLastPage;
+    }
+
+    public void setNavigateLastPage(int navigateLastPage) {
+        this.navigateLastPage = navigateLastPage;
+    }
+
+    public int getNavigatePages() {
+        return navigatePages;
+    }
+
+    public void setNavigatePages(int navigatePages) {
+        this.navigatePages = navigatePages;
+    }
+
+    public int getNextPage() {
+        return nextPage;
+    }
+
+    public void setNextPage(int nextPage) {
+        this.nextPage = nextPage;
+    }
+
+    public int getPageNum() {
+        return pageNum;
+    }
+
+    public void setPageNum(int pageNum) {
+        this.pageNum = pageNum;
+    }
+
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(int pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public int getPages() {
+        return pages;
+    }
+
+    public void setPages(int pages) {
+        this.pages = pages;
+    }
+
+    public int getPrePage() {
+        return prePage;
+    }
+
+    public void setPrePage(int prePage) {
+        this.prePage = prePage;
+    }
+
+    public int getSize() {
+        return size;
+    }
+
+    public void setSize(int size) {
+        this.size = size;
+    }
+
+    public int getStartRow() {
+        return startRow;
+    }
+
+    public void setStartRow(int startRow) {
+        this.startRow = startRow;
+    }
+
+    public int getTotal() {
+        return total;
+    }
+
+    public void setTotal(int total) {
+        this.total = total;
+    }
+
+    public String getBusNum() {
+        return busNum;
+    }
+
+    public void setBusNum(String busNum) {
+        this.busNum = busNum;
+    }
+
+    public String getErrorCode() {
+        return errorCode;
+    }
+
+    public void setErrorCode(String errorCode) {
+        this.errorCode = errorCode;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+
+    public String getFreezeFlowNum() {
+        return freezeFlowNum;
+    }
+
+    public void setFreezeFlowNum(String freezeFlowNum) {
+        this.freezeFlowNum = freezeFlowNum;
+    }
+
+    public String getRecordNum() {
+        return recordNum;
+    }
+
+    public void setRecordNum(String recordNum) {
+        this.recordNum = recordNum;
+    }
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public Boolean getSuccessed() {
+        return successed;
+    }
+
+    public void setSuccessed(Boolean successed) {
+        this.successed = successed;
+    }
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPayAccountName() {
+        return payAccountName;
+    }
+
+    public void setPayAccountName(String payAccountName) {
+        this.payAccountName = payAccountName;
+    }
+
+    public String getPayBankName() {
+        return payBankName;
+    }
+
+    public void setPayBankName(String payBankName) {
+        this.payBankName = payBankName;
+    }
+
+    public String getPayBankType() {
+        return payBankType;
+    }
+
+    public void setPayBankType(String payBankType) {
+        this.payBankType = payBankType;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getRevAccount() {
+        return revAccount;
+    }
+
+    public void setRevAccount(String revAccount) {
+        this.revAccount = revAccount;
+    }
+
+    public String getRevAccountName() {
+        return revAccountName;
+    }
+
+    public void setRevAccountName(String revAccountName) {
+        this.revAccountName = revAccountName;
+    }
+
+    public String getRevBankName() {
+        return revBankName;
+    }
+
+    public void setRevBankName(String revBankName) {
+        this.revBankName = revBankName;
+    }
+
+    public String getRevBankType() {
+        return revBankType;
+    }
+
+    public void setRevBankType(String revBankType) {
+        this.revBankType = revBankType;
+    }
+
+    public String getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(String payChannel) {
+        this.payChannel = payChannel;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getPayStatus() {
+        return payStatus;
+    }
+
+    public void setPayStatus(String payStatus) {
+        this.payStatus = payStatus;
+    }
+
+    public String getPayDate() {
+        return payDate;
+    }
+
+    public void setPayDate(String payDate) {
+        this.payDate = payDate;
+    }
+
+    public String getPlanNumber() {
+        return planNumber;
+    }
+
+    public void setPlanNumber(String planNumber) {
+        this.planNumber = planNumber;
+    }
+
+    public String getPlanItemCode() {
+        return planItemCode;
+    }
+
+    public void setPlanItemCode(String planItemCode) {
+        this.planItemCode = planItemCode;
+    }
+
+    public String getPlanItemName() {
+        return planItemName;
+    }
+
+    public void setPlanItemName(String planItemName) {
+        this.planItemName = planItemName;
+    }
+
+    public String getErpExtend1() {
+        return erpExtend1;
+    }
+
+    public void setErpExtend1(String erpExtend1) {
+        this.erpExtend1 = erpExtend1;
+    }
+
+    public String getErpExtend2() {
+        return erpExtend2;
+    }
+
+    public void setErpExtend2(String erpExtend2) {
+        this.erpExtend2 = erpExtend2;
+    }
+
+    public String getErpExtend3() {
+        return erpExtend3;
+    }
+
+    public void setErpExtend3(String erpExtend3) {
+        this.erpExtend3 = erpExtend3;
+    }
+
+    /**
+     * 把json字符串转换成指定范型的list
+     * @param json
+     * @param list
+     * @param clazz
+     * @param <T>
+     */
+    private static <T> void adaptAndAddToList(String json, List<Object> list, Class<T> clazz) {
+        JSONObject jsonObject = JSON.parseObject(json);
+
+        if (jsonObject.containsKey("list")) {
+            JSONArray listArray = jsonObject.getJSONArray("list");
+            for (Object item : listArray) {
+                JSONObject itemObject = (JSONObject) item;
+                // 适配不同类型的节点
+                list.add(JSON.toJavaObject(itemObject, clazz));
+            }
+        }
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResponseDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResponseDTO.java
new file mode 100644
index 00000000..1abae5b9
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResponseDTO.java
@@ -0,0 +1,44 @@
+package com.hzya.frame.cbs8.dto.res;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONField;
+
+import java.util.List;
+
+/**
+ * @Description cbs响应DTO
+ * @Author xiangerlin
+ * @Date 2024/1/2 09:25
+ **/
+public class CbsResponseDTO {
+    //private List<CbsResDataDTO> data;//数据
+    private List<JSONObject> data;//数据
+    private String code;//0表示成功
+    private String msg;//消息
+
+
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public List<JSONObject> getData() {
+        return data;
+    }
+
+    public void setData(List<JSONObject> data) {
+        this.data = data;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/ElecResponseDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/ElecResponseDTO.java
new file mode 100644
index 00000000..6e77d30a
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/ElecResponseDTO.java
@@ -0,0 +1,305 @@
+package com.hzya.frame.cbs8.dto.res;
+
+/**
+ * @Description 电子回单查询返回参数
+ * @Author xiangerlin
+ * @Date 2024/1/4 17:13
+ **/
+public class ElecResponseDTO {
+
+    // 账号
+    private String accountNo;
+
+    // 账号名称
+    private String accountName;
+
+    // 银行类型
+    private String bankType;
+
+    // 银行类型名称
+    private String bankTypeName;
+
+    // 开户行
+    private String openingBank;
+
+    // 交易日期
+    private String transactionDate;
+
+    // 电子回单文件状态
+    private String electronicBillStatus;
+
+    // 电子回单文件名称
+    private String billFileName;
+
+    // 回单文件下载地址
+    private String bucketFileUrl;
+
+    // 回单文件名称
+    private String bucketFileName;
+
+    // 回单类型
+    private String electronicBillType;
+
+    // 银行流水号
+    private String bankSerialNumber;
+
+    // 回单编号
+    private String printInstanceNumber;
+
+    // 币种
+    private String currency;
+
+    // 币种名称
+    private String currencyName;
+
+    // 借贷类型
+    private String loanType;
+
+    // 交易金额
+    private String transactionAmount;
+
+    // 对方账号
+    private String oppositeAccount;
+
+    // 对方账户名
+    private String oppositeAccountName;
+
+    // 对方开户地
+    private String oppositeOpeningPlace;
+
+    // 对方开户行
+    private String oppositeOpeningBank;
+
+    // 摘要
+    private String digest;
+
+    // 用途
+    private String purpose;
+
+    // 账户性质
+    private String accountNatureCode;
+
+    // 对账码
+    private String checkCode;
+
+    // 单位编码
+    private String unitCode;
+
+    // ERP业务参考号
+    private String settleBusinessReferenceCode;
+    public String getAccountNo() {
+        return accountNo;
+    }
+
+    public void setAccountNo(String accountNo) {
+        this.accountNo = accountNo;
+    }
+
+    public String getAccountName() {
+        return accountName;
+    }
+
+    public void setAccountName(String accountName) {
+        this.accountName = accountName;
+    }
+
+    public String getBankType() {
+        return bankType;
+    }
+
+    public void setBankType(String bankType) {
+        this.bankType = bankType;
+    }
+
+    public String getBankTypeName() {
+        return bankTypeName;
+    }
+
+    public void setBankTypeName(String bankTypeName) {
+        this.bankTypeName = bankTypeName;
+    }
+
+    public String getOpeningBank() {
+        return openingBank;
+    }
+
+    public void setOpeningBank(String openingBank) {
+        this.openingBank = openingBank;
+    }
+
+    public String getTransactionDate() {
+        return transactionDate;
+    }
+
+    public void setTransactionDate(String transactionDate) {
+        this.transactionDate = transactionDate;
+    }
+
+    public String getElectronicBillStatus() {
+        return electronicBillStatus;
+    }
+
+    public void setElectronicBillStatus(String electronicBillStatus) {
+        this.electronicBillStatus = electronicBillStatus;
+    }
+
+    public String getBillFileName() {
+        return billFileName;
+    }
+
+    public void setBillFileName(String billFileName) {
+        this.billFileName = billFileName;
+    }
+
+    public String getBucketFileUrl() {
+        return bucketFileUrl;
+    }
+
+    public void setBucketFileUrl(String bucketFileUrl) {
+        this.bucketFileUrl = bucketFileUrl;
+    }
+
+    public String getBucketFileName() {
+        return bucketFileName;
+    }
+
+    public void setBucketFileName(String bucketFileName) {
+        this.bucketFileName = bucketFileName;
+    }
+
+    public String getElectronicBillType() {
+        return electronicBillType;
+    }
+
+    public void setElectronicBillType(String electronicBillType) {
+        this.electronicBillType = electronicBillType;
+    }
+
+    public String getBankSerialNumber() {
+        return bankSerialNumber;
+    }
+
+    public void setBankSerialNumber(String bankSerialNumber) {
+        this.bankSerialNumber = bankSerialNumber;
+    }
+
+    public String getPrintInstanceNumber() {
+        return printInstanceNumber;
+    }
+
+    public void setPrintInstanceNumber(String printInstanceNumber) {
+        this.printInstanceNumber = printInstanceNumber;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getCurrencyName() {
+        return currencyName;
+    }
+
+    public void setCurrencyName(String currencyName) {
+        this.currencyName = currencyName;
+    }
+
+    public String getLoanType() {
+        return loanType;
+    }
+
+    public void setLoanType(String loanType) {
+        this.loanType = loanType;
+    }
+
+    public String getTransactionAmount() {
+        return transactionAmount;
+    }
+
+    public void setTransactionAmount(String transactionAmount) {
+        this.transactionAmount = transactionAmount;
+    }
+
+    public String getOppositeAccount() {
+        return oppositeAccount;
+    }
+
+    public void setOppositeAccount(String oppositeAccount) {
+        this.oppositeAccount = oppositeAccount;
+    }
+
+    public String getOppositeAccountName() {
+        return oppositeAccountName;
+    }
+
+    public void setOppositeAccountName(String oppositeAccountName) {
+        this.oppositeAccountName = oppositeAccountName;
+    }
+
+    public String getOppositeOpeningPlace() {
+        return oppositeOpeningPlace;
+    }
+
+    public void setOppositeOpeningPlace(String oppositeOpeningPlace) {
+        this.oppositeOpeningPlace = oppositeOpeningPlace;
+    }
+
+    public String getOppositeOpeningBank() {
+        return oppositeOpeningBank;
+    }
+
+    public void setOppositeOpeningBank(String oppositeOpeningBank) {
+        this.oppositeOpeningBank = oppositeOpeningBank;
+    }
+
+    public String getDigest() {
+        return digest;
+    }
+
+    public void setDigest(String digest) {
+        this.digest = digest;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getAccountNatureCode() {
+        return accountNatureCode;
+    }
+
+    public void setAccountNatureCode(String accountNatureCode) {
+        this.accountNatureCode = accountNatureCode;
+    }
+
+    public String getCheckCode() {
+        return checkCode;
+    }
+
+    public void setCheckCode(String checkCode) {
+        this.checkCode = checkCode;
+    }
+
+    public String getUnitCode() {
+        return unitCode;
+    }
+
+    public void setUnitCode(String unitCode) {
+        this.unitCode = unitCode;
+    }
+
+    public String getSettleBusinessReferenceCode() {
+        return settleBusinessReferenceCode;
+    }
+
+    public void setSettleBusinessReferenceCode(String settleBusinessReferenceCode) {
+        this.settleBusinessReferenceCode = settleBusinessReferenceCode;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResponseDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResponseDTO.java
new file mode 100644
index 00000000..2534d4f8
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResponseDTO.java
@@ -0,0 +1,73 @@
+package com.hzya.frame.cbs8.dto.res;
+
+/**
+ * @Description 经办支付接口返回参数中的data节点
+ * @Author xiangerlin
+ * @Date 2024/1/3 14:35
+ **/
+public class PayResponseDTO {
+
+    private String busNum;//申请单编号
+    private String errorCode;//错误编码
+    private String errorMsg;//错误信息
+    private String freezeFlowNum;//内部户冻结流水号
+    private String recordNum;//批量经办序号
+    private String referenceNum;//业务参考号
+    private Boolean successed;//是否成功
+
+    public String getBusNum() {
+        return busNum;
+    }
+
+    public void setBusNum(String busNum) {
+        this.busNum = busNum;
+    }
+
+    public String getErrorCode() {
+        return errorCode;
+    }
+
+    public void setErrorCode(String errorCode) {
+        this.errorCode = errorCode;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+
+    public String getFreezeFlowNum() {
+        return freezeFlowNum;
+    }
+
+    public void setFreezeFlowNum(String freezeFlowNum) {
+        this.freezeFlowNum = freezeFlowNum;
+    }
+
+    public String getRecordNum() {
+        return recordNum;
+    }
+
+    public void setRecordNum(String recordNum) {
+        this.recordNum = recordNum;
+    }
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public Boolean getSuccessed() {
+        return successed;
+    }
+
+    public void setSuccessed(Boolean successed) {
+        this.successed = successed;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResultResDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResultResDTO.java
new file mode 100644
index 00000000..4ab82489
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResultResDTO.java
@@ -0,0 +1,890 @@
+package com.hzya.frame.cbs8.dto.res;
+
+/**
+ * @Description 交易结果查询data节点响应的参数
+ * @Author xiangerlin
+ * @Date 2024/1/3 15:45
+ **/
+public class PayResultResDTO {
+
+    private String payDate;//支付日期
+    private String accountFlag;
+
+    private String agentDetails;
+
+    private String amount;
+
+    private String bankExtend1;
+
+    private String bankExtend10;
+
+    private String bankExtend11;
+
+    private String bankExtend2;
+
+    private String bankExtend3;
+
+    private String bankExtend4;
+
+    private String bankExtend5;
+
+    private String bankExtend6;
+
+    private String bankExtend7;
+
+    private String bankExtend8;
+
+    private String bankExtend9;
+
+    private String bankInterfaceType;
+
+    private String bankNum;
+
+    private String bankVersion;
+
+    private String batchNum;
+
+    private String busNum;
+
+    private String busType;
+
+    private String checkCodeList;
+
+    private String cityFlag;
+
+    private String cnapsCode;
+
+    private String createBy;
+
+    private String createByName;
+
+    private String createTime;
+
+    private String currency;
+
+    private String dealPeopleList;
+
+    private String detailNum;
+
+    private String erpExtend1;
+
+    private String erpExtend2;
+
+    private String erpExtend3;
+
+    private String errorMsg;
+
+    private String expectTime;
+
+
+
+    private String extend1;
+
+    private String extend2;
+
+    private String extend3;
+
+    private String extend4;
+
+    private String extend5;
+
+    private String freezeFlowNum;
+
+    private String freezeStatus;
+
+    private String id;
+
+    private String innerAccount;
+
+    private String innerAccountName;
+
+    private String inputType;
+
+    private String isDeleted;
+
+    private String isSaveRev;
+
+    private String lastPrintTime;
+
+    private String lastPrintUser;
+
+    private String operaterOrgCode;
+
+    private String operaterOrgCodeList;
+
+    private String operaterOrgName;
+
+    private String payAccount;
+
+    private String payAccountName;
+
+    private String payAccountSeq;
+
+    private String payBankName;
+
+    private String payBankType;
+
+    private String payChannel;
+
+    private String payOrgCode;
+
+    private String payOrgName;
+
+    private String payStatus;// 支付状态
+
+    private String paymentApplyUnionDTO;
+
+    private String personalFlag;
+
+    private String printTimes;
+
+    private String procInstId;
+
+    private String procStatus;
+
+    private String projectCode;
+
+    private String purpose;
+
+    private String realName;
+
+    private String realRevAccount;
+
+    private String realTimeTag;
+
+    private String referenceNum;
+
+    private String revAccount;
+
+    private String revAccountName;
+
+    private String revAccountSeq;
+
+    private String revBankArea;
+
+    private String revBankName;
+
+    private String revBankType;
+
+    private String revCity;
+
+    private String revProvince;
+
+    private String status;//支付申请状态
+
+    private String summary;
+
+    private String unitCode;
+
+    private String unitName;
+
+    private String updateBy;
+
+    private String updateTime;
+
+    private String urgentTag;
+
+    public String getAccountFlag() {
+        return accountFlag;
+    }
+
+    public void setAccountFlag(String accountFlag) {
+        this.accountFlag = accountFlag;
+    }
+
+    public String getAgentDetails() {
+        return agentDetails;
+    }
+
+    public void setAgentDetails(String agentDetails) {
+        this.agentDetails = agentDetails;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getBankExtend1() {
+        return bankExtend1;
+    }
+
+    public void setBankExtend1(String bankExtend1) {
+        this.bankExtend1 = bankExtend1;
+    }
+
+    public String getBankExtend10() {
+        return bankExtend10;
+    }
+
+    public void setBankExtend10(String bankExtend10) {
+        this.bankExtend10 = bankExtend10;
+    }
+
+    public String getBankExtend11() {
+        return bankExtend11;
+    }
+
+    public void setBankExtend11(String bankExtend11) {
+        this.bankExtend11 = bankExtend11;
+    }
+
+    public String getBankExtend2() {
+        return bankExtend2;
+    }
+
+    public void setBankExtend2(String bankExtend2) {
+        this.bankExtend2 = bankExtend2;
+    }
+
+    public String getBankExtend3() {
+        return bankExtend3;
+    }
+
+    public void setBankExtend3(String bankExtend3) {
+        this.bankExtend3 = bankExtend3;
+    }
+
+    public String getBankExtend4() {
+        return bankExtend4;
+    }
+
+    public void setBankExtend4(String bankExtend4) {
+        this.bankExtend4 = bankExtend4;
+    }
+
+    public String getBankExtend5() {
+        return bankExtend5;
+    }
+
+    public void setBankExtend5(String bankExtend5) {
+        this.bankExtend5 = bankExtend5;
+    }
+
+    public String getBankExtend6() {
+        return bankExtend6;
+    }
+
+    public void setBankExtend6(String bankExtend6) {
+        this.bankExtend6 = bankExtend6;
+    }
+
+    public String getBankExtend7() {
+        return bankExtend7;
+    }
+
+    public void setBankExtend7(String bankExtend7) {
+        this.bankExtend7 = bankExtend7;
+    }
+
+    public String getBankExtend8() {
+        return bankExtend8;
+    }
+
+    public void setBankExtend8(String bankExtend8) {
+        this.bankExtend8 = bankExtend8;
+    }
+
+    public String getBankExtend9() {
+        return bankExtend9;
+    }
+
+    public void setBankExtend9(String bankExtend9) {
+        this.bankExtend9 = bankExtend9;
+    }
+
+    public String getBankInterfaceType() {
+        return bankInterfaceType;
+    }
+
+    public void setBankInterfaceType(String bankInterfaceType) {
+        this.bankInterfaceType = bankInterfaceType;
+    }
+
+    public String getBankNum() {
+        return bankNum;
+    }
+
+    public void setBankNum(String bankNum) {
+        this.bankNum = bankNum;
+    }
+
+    public String getBankVersion() {
+        return bankVersion;
+    }
+
+    public void setBankVersion(String bankVersion) {
+        this.bankVersion = bankVersion;
+    }
+
+    public String getBatchNum() {
+        return batchNum;
+    }
+
+    public void setBatchNum(String batchNum) {
+        this.batchNum = batchNum;
+    }
+
+    public String getBusNum() {
+        return busNum;
+    }
+
+    public void setBusNum(String busNum) {
+        this.busNum = busNum;
+    }
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getCheckCodeList() {
+        return checkCodeList;
+    }
+
+    public void setCheckCodeList(String checkCodeList) {
+        this.checkCodeList = checkCodeList;
+    }
+
+    public String getCityFlag() {
+        return cityFlag;
+    }
+
+    public void setCityFlag(String cityFlag) {
+        this.cityFlag = cityFlag;
+    }
+
+    public String getCnapsCode() {
+        return cnapsCode;
+    }
+
+    public void setCnapsCode(String cnapsCode) {
+        this.cnapsCode = cnapsCode;
+    }
+
+    public String getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
+    }
+
+    public String getCreateByName() {
+        return createByName;
+    }
+
+    public void setCreateByName(String createByName) {
+        this.createByName = createByName;
+    }
+
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getDealPeopleList() {
+        return dealPeopleList;
+    }
+
+    public void setDealPeopleList(String dealPeopleList) {
+        this.dealPeopleList = dealPeopleList;
+    }
+
+    public String getDetailNum() {
+        return detailNum;
+    }
+
+    public void setDetailNum(String detailNum) {
+        this.detailNum = detailNum;
+    }
+
+    public String getErpExtend1() {
+        return erpExtend1;
+    }
+
+    public void setErpExtend1(String erpExtend1) {
+        this.erpExtend1 = erpExtend1;
+    }
+
+    public String getErpExtend2() {
+        return erpExtend2;
+    }
+
+    public void setErpExtend2(String erpExtend2) {
+        this.erpExtend2 = erpExtend2;
+    }
+
+    public String getErpExtend3() {
+        return erpExtend3;
+    }
+
+    public void setErpExtend3(String erpExtend3) {
+        this.erpExtend3 = erpExtend3;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+
+    public String getExpectTime() {
+        return expectTime;
+    }
+
+    public void setExpectTime(String expectTime) {
+        this.expectTime = expectTime;
+    }
+
+    public String getExtend1() {
+        return extend1;
+    }
+
+    public void setExtend1(String extend1) {
+        this.extend1 = extend1;
+    }
+
+    public String getExtend2() {
+        return extend2;
+    }
+
+    public void setExtend2(String extend2) {
+        this.extend2 = extend2;
+    }
+
+    public String getExtend3() {
+        return extend3;
+    }
+
+    public void setExtend3(String extend3) {
+        this.extend3 = extend3;
+    }
+
+    public String getExtend4() {
+        return extend4;
+    }
+
+    public void setExtend4(String extend4) {
+        this.extend4 = extend4;
+    }
+
+    public String getExtend5() {
+        return extend5;
+    }
+
+    public void setExtend5(String extend5) {
+        this.extend5 = extend5;
+    }
+
+    public String getFreezeFlowNum() {
+        return freezeFlowNum;
+    }
+
+    public void setFreezeFlowNum(String freezeFlowNum) {
+        this.freezeFlowNum = freezeFlowNum;
+    }
+
+    public String getFreezeStatus() {
+        return freezeStatus;
+    }
+
+    public void setFreezeStatus(String freezeStatus) {
+        this.freezeStatus = freezeStatus;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getInnerAccount() {
+        return innerAccount;
+    }
+
+    public void setInnerAccount(String innerAccount) {
+        this.innerAccount = innerAccount;
+    }
+
+    public String getInnerAccountName() {
+        return innerAccountName;
+    }
+
+    public void setInnerAccountName(String innerAccountName) {
+        this.innerAccountName = innerAccountName;
+    }
+
+    public String getInputType() {
+        return inputType;
+    }
+
+    public void setInputType(String inputType) {
+        this.inputType = inputType;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public String getIsSaveRev() {
+        return isSaveRev;
+    }
+
+    public void setIsSaveRev(String isSaveRev) {
+        this.isSaveRev = isSaveRev;
+    }
+
+    public String getLastPrintTime() {
+        return lastPrintTime;
+    }
+
+    public void setLastPrintTime(String lastPrintTime) {
+        this.lastPrintTime = lastPrintTime;
+    }
+
+    public String getLastPrintUser() {
+        return lastPrintUser;
+    }
+
+    public void setLastPrintUser(String lastPrintUser) {
+        this.lastPrintUser = lastPrintUser;
+    }
+
+    public String getOperaterOrgCode() {
+        return operaterOrgCode;
+    }
+
+    public void setOperaterOrgCode(String operaterOrgCode) {
+        this.operaterOrgCode = operaterOrgCode;
+    }
+
+    public String getOperaterOrgCodeList() {
+        return operaterOrgCodeList;
+    }
+
+    public void setOperaterOrgCodeList(String operaterOrgCodeList) {
+        this.operaterOrgCodeList = operaterOrgCodeList;
+    }
+
+    public String getOperaterOrgName() {
+        return operaterOrgName;
+    }
+
+    public void setOperaterOrgName(String operaterOrgName) {
+        this.operaterOrgName = operaterOrgName;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPayAccountName() {
+        return payAccountName;
+    }
+
+    public void setPayAccountName(String payAccountName) {
+        this.payAccountName = payAccountName;
+    }
+
+    public String getPayAccountSeq() {
+        return payAccountSeq;
+    }
+
+    public void setPayAccountSeq(String payAccountSeq) {
+        this.payAccountSeq = payAccountSeq;
+    }
+
+    public String getPayBankName() {
+        return payBankName;
+    }
+
+    public void setPayBankName(String payBankName) {
+        this.payBankName = payBankName;
+    }
+
+    public String getPayBankType() {
+        return payBankType;
+    }
+
+    public void setPayBankType(String payBankType) {
+        this.payBankType = payBankType;
+    }
+
+    public String getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(String payChannel) {
+        this.payChannel = payChannel;
+    }
+
+    public String getPayOrgCode() {
+        return payOrgCode;
+    }
+
+    public void setPayOrgCode(String payOrgCode) {
+        this.payOrgCode = payOrgCode;
+    }
+
+    public String getPayOrgName() {
+        return payOrgName;
+    }
+
+    public void setPayOrgName(String payOrgName) {
+        this.payOrgName = payOrgName;
+    }
+
+    public String getPayStatus() {
+        return payStatus;
+    }
+
+    public void setPayStatus(String payStatus) {
+        this.payStatus = payStatus;
+    }
+
+    public String getPaymentApplyUnionDTO() {
+        return paymentApplyUnionDTO;
+    }
+
+    public void setPaymentApplyUnionDTO(String paymentApplyUnionDTO) {
+        this.paymentApplyUnionDTO = paymentApplyUnionDTO;
+    }
+
+    public String getPersonalFlag() {
+        return personalFlag;
+    }
+
+    public void setPersonalFlag(String personalFlag) {
+        this.personalFlag = personalFlag;
+    }
+
+    public String getPrintTimes() {
+        return printTimes;
+    }
+
+    public void setPrintTimes(String printTimes) {
+        this.printTimes = printTimes;
+    }
+
+    public String getProcInstId() {
+        return procInstId;
+    }
+
+    public void setProcInstId(String procInstId) {
+        this.procInstId = procInstId;
+    }
+
+    public String getProcStatus() {
+        return procStatus;
+    }
+
+    public void setProcStatus(String procStatus) {
+        this.procStatus = procStatus;
+    }
+
+    public String getProjectCode() {
+        return projectCode;
+    }
+
+    public void setProjectCode(String projectCode) {
+        this.projectCode = projectCode;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getRealRevAccount() {
+        return realRevAccount;
+    }
+
+    public void setRealRevAccount(String realRevAccount) {
+        this.realRevAccount = realRevAccount;
+    }
+
+    public String getRealTimeTag() {
+        return realTimeTag;
+    }
+
+    public void setRealTimeTag(String realTimeTag) {
+        this.realTimeTag = realTimeTag;
+    }
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public String getRevAccount() {
+        return revAccount;
+    }
+
+    public void setRevAccount(String revAccount) {
+        this.revAccount = revAccount;
+    }
+
+    public String getRevAccountName() {
+        return revAccountName;
+    }
+
+    public void setRevAccountName(String revAccountName) {
+        this.revAccountName = revAccountName;
+    }
+
+    public String getRevAccountSeq() {
+        return revAccountSeq;
+    }
+
+    public void setRevAccountSeq(String revAccountSeq) {
+        this.revAccountSeq = revAccountSeq;
+    }
+
+    public String getRevBankArea() {
+        return revBankArea;
+    }
+
+    public void setRevBankArea(String revBankArea) {
+        this.revBankArea = revBankArea;
+    }
+
+    public String getRevBankName() {
+        return revBankName;
+    }
+
+    public void setRevBankName(String revBankName) {
+        this.revBankName = revBankName;
+    }
+
+    public String getRevBankType() {
+        return revBankType;
+    }
+
+    public void setRevBankType(String revBankType) {
+        this.revBankType = revBankType;
+    }
+
+    public String getRevCity() {
+        return revCity;
+    }
+
+    public void setRevCity(String revCity) {
+        this.revCity = revCity;
+    }
+
+    public String getRevProvince() {
+        return revProvince;
+    }
+
+    public void setRevProvince(String revProvince) {
+        this.revProvince = revProvince;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    public String getUnitCode() {
+        return unitCode;
+    }
+
+    public void setUnitCode(String unitCode) {
+        this.unitCode = unitCode;
+    }
+
+    public String getUnitName() {
+        return unitName;
+    }
+
+    public void setUnitName(String unitName) {
+        this.unitName = unitName;
+    }
+
+    public String getUpdateBy() {
+        return updateBy;
+    }
+
+    public void setUpdateBy(String updateBy) {
+        this.updateBy = updateBy;
+    }
+
+    public String getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(String updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getUrgentTag() {
+        return urgentTag;
+    }
+
+    public void setUrgentTag(String urgentTag) {
+        this.urgentTag = urgentTag;
+    }
+
+    public String getPayDate() {
+        return payDate;
+    }
+
+    public void setPayDate(String payDate) {
+        this.payDate = payDate;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/TransactionDetailDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/TransactionDetailDTO.java
new file mode 100644
index 00000000..9cd4e3cd
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/TransactionDetailDTO.java
@@ -0,0 +1,207 @@
+package com.hzya.frame.cbs8.dto.res;
+
+/**
+ * @Description 境内账户交易明细
+ * @Author xiangerlin
+ * @Date 2023/12/29 16:40
+ **/
+public class TransactionDetailDTO{
+    private String accountNo;//银行账号
+    private String accountName;//银行名称
+    private String bankType;//银行类型
+    private String openBank;//开户行名称
+    private String bankTransactionDate;//交易日期
+    private String bankSerialNumber;//银行流水号
+    private String transactionSerialNumber;//交易流水号
+    private String currency;//币种
+    private String loanType;//借贷类型
+    private String incurredAmount;//发生额
+    private String accountBalance;//交易后余额
+    private String purpose;//用途
+    private String digest;//摘要
+    private String oppositeAccount;//对方账号
+    private String oppositeName;//对方户名
+    private String oppositeOpeningBank;//对方开户行
+    private String associatedCustomerNumber;//关联客户号
+    private String merchantNumber;//客商编号
+    private String merchantName;//客商名称
+    private String transactionCode;//交易代码
+    private String remark;//备注
+    private String erpSerialNumber;//erp业务参考号
+
+    public String getAccountNo() {
+        return accountNo;
+    }
+
+    public void setAccountNo(String accountNo) {
+        this.accountNo = accountNo;
+    }
+
+    public String getAccountName() {
+        return accountName;
+    }
+
+    public void setAccountName(String accountName) {
+        this.accountName = accountName;
+    }
+
+    public String getBankType() {
+        return bankType;
+    }
+
+    public void setBankType(String bankType) {
+        this.bankType = bankType;
+    }
+
+    public String getOpenBank() {
+        return openBank;
+    }
+
+    public void setOpenBank(String openBank) {
+        this.openBank = openBank;
+    }
+
+    public String getBankTransactionDate() {
+        return bankTransactionDate;
+    }
+
+    public void setBankTransactionDate(String bankTransactionDate) {
+        this.bankTransactionDate = bankTransactionDate;
+    }
+
+    public String getBankSerialNumber() {
+        return bankSerialNumber;
+    }
+
+    public void setBankSerialNumber(String bankSerialNumber) {
+        this.bankSerialNumber = bankSerialNumber;
+    }
+
+    public String getTransactionSerialNumber() {
+        return transactionSerialNumber;
+    }
+
+    public void setTransactionSerialNumber(String transactionSerialNumber) {
+        this.transactionSerialNumber = transactionSerialNumber;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getLoanType() {
+        return loanType;
+    }
+
+    public void setLoanType(String loanType) {
+        this.loanType = loanType;
+    }
+
+    public String getIncurredAmount() {
+        return incurredAmount;
+    }
+
+    public void setIncurredAmount(String incurredAmount) {
+        this.incurredAmount = incurredAmount;
+    }
+
+    public String getAccountBalance() {
+        return accountBalance;
+    }
+
+    public void setAccountBalance(String accountBalance) {
+        this.accountBalance = accountBalance;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getDigest() {
+        return digest;
+    }
+
+    public void setDigest(String digest) {
+        this.digest = digest;
+    }
+
+    public String getOppositeAccount() {
+        return oppositeAccount;
+    }
+
+    public void setOppositeAccount(String oppositeAccount) {
+        this.oppositeAccount = oppositeAccount;
+    }
+
+    public String getOppositeName() {
+        return oppositeName;
+    }
+
+    public void setOppositeName(String oppositeName) {
+        this.oppositeName = oppositeName;
+    }
+
+    public String getOppositeOpeningBank() {
+        return oppositeOpeningBank;
+    }
+
+    public void setOppositeOpeningBank(String oppositeOpeningBank) {
+        this.oppositeOpeningBank = oppositeOpeningBank;
+    }
+
+    public String getAssociatedCustomerNumber() {
+        return associatedCustomerNumber;
+    }
+
+    public void setAssociatedCustomerNumber(String associatedCustomerNumber) {
+        this.associatedCustomerNumber = associatedCustomerNumber;
+    }
+
+    public String getMerchantNumber() {
+        return merchantNumber;
+    }
+
+    public void setMerchantNumber(String merchantNumber) {
+        this.merchantNumber = merchantNumber;
+    }
+
+    public String getMerchantName() {
+        return merchantName;
+    }
+
+    public void setMerchantName(String merchantName) {
+        this.merchantName = merchantName;
+    }
+
+    public String getTransactionCode() {
+        return transactionCode;
+    }
+
+    public void setTransactionCode(String transactionCode) {
+        this.transactionCode = transactionCode;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getErpSerialNumber() {
+        return erpSerialNumber;
+    }
+
+    public void setErpSerialNumber(String erpSerialNumber) {
+        this.erpSerialNumber = erpSerialNumber;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/entity/PaymentEntity.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/entity/PaymentEntity.java
new file mode 100644
index 00000000..c98cfb5f
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/entity/PaymentEntity.java
@@ -0,0 +1,327 @@
+package com.hzya.frame.cbs8.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/6 16:17
+ **/
+public class PaymentEntity extends BaseEntity {
+
+    private String oaId;//主表id
+    private String formsonId;//明细表id
+    private String payCompany;//付款公司
+    private String title;//流程标题
+    private String tableName;//表名称
+    private String billName;//单据名称
+    private String referenceNum;//业务参考号 唯一id
+    private String referenceNumNew;//重试的时候生成新的业务参考号
+    private String busType;//业务类型
+    private String payResultField;//支付结果字段
+    private String payDateField;//打款日期字段
+    private String applyCodeField;//支付申请单号字段
+    private String receiptFiled;//电子回单字段
+    private String summaryId;//summaryid
+    private String startDate;//单据日期
+    private String finishedflag;//流程状态
+    private String payDate;//打款日期
+    private String payResult;//支付结果
+    private String applyCode;//支付申请单号
+    private String payAccount;//付款账号
+    private String payBankName;//付款开户银行
+    private String amount;//金额
+    private String purpose;//支付用途
+    private String revAccount;//收款账号
+    private String revBankName;//收款开户行名称
+    private String revBankType;//收款银行类型
+    private String revAccountName;//收款账户名称
+    private String cnapsCode;//联行号
+    private String receipt;//电子回单
+    private String currency;//币种 数字
+    private String currencyName;//币种 中文
+    private String currencyCode;//币种编码
+    private String personalFlag;//公私标记
+    private String payType;//付款类别
+    private String payCompanyCode;//付款公司编码
+
+    public String getOaId() {
+        return oaId;
+    }
+
+    public void setOaId(String oaId) {
+        this.oaId = oaId;
+    }
+
+    public String getPayCompany() {
+        return payCompany;
+    }
+
+    public void setPayCompany(String payCompany) {
+        this.payCompany = payCompany;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getBillName() {
+        return billName;
+    }
+
+    public void setBillName(String billName) {
+        this.billName = billName;
+    }
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public String getReferenceNumNew() {
+        return referenceNumNew;
+    }
+
+    public void setReferenceNumNew(String referenceNumNew) {
+        this.referenceNumNew = referenceNumNew;
+    }
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getPayResultField() {
+        return payResultField;
+    }
+
+    public void setPayResultField(String payResultField) {
+        this.payResultField = payResultField;
+    }
+
+    public String getPayDateField() {
+        return payDateField;
+    }
+
+    public void setPayDateField(String payDateField) {
+        this.payDateField = payDateField;
+    }
+
+    public String getReceiptFiled() {
+        return receiptFiled;
+    }
+
+    public void setReceiptFiled(String receiptFiled) {
+        this.receiptFiled = receiptFiled;
+    }
+
+    public String getSummaryId() {
+        return summaryId;
+    }
+
+    public void setSummaryId(String summaryId) {
+        this.summaryId = summaryId;
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    public String getFinishedflag() {
+        return finishedflag;
+    }
+
+    public void setFinishedflag(String finishedflag) {
+        this.finishedflag = finishedflag;
+    }
+
+    public String getPayDate() {
+        return payDate;
+    }
+
+    public void setPayDate(String payDate) {
+        this.payDate = payDate;
+    }
+
+    public String getPayResult() {
+        return payResult;
+    }
+
+    public void setPayResult(String payResult) {
+        this.payResult = payResult;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPayBankName() {
+        return payBankName;
+    }
+
+    public void setPayBankName(String payBankName) {
+        this.payBankName = payBankName;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getRevAccount() {
+        return revAccount;
+    }
+
+    public void setRevAccount(String revAccount) {
+        this.revAccount = revAccount;
+    }
+
+    public String getRevBankName() {
+        return revBankName;
+    }
+
+    public void setRevBankName(String revBankName) {
+        this.revBankName = revBankName;
+    }
+
+    public String getRevBankType() {
+        return revBankType;
+    }
+
+    public void setRevBankType(String revBankType) {
+        this.revBankType = revBankType;
+    }
+
+    public String getRevAccountName() {
+        return revAccountName;
+    }
+
+    public void setRevAccountName(String revAccountName) {
+        this.revAccountName = revAccountName;
+    }
+
+    public String getCnapsCode() {
+        return cnapsCode;
+    }
+
+    public void setCnapsCode(String cnapsCode) {
+        this.cnapsCode = cnapsCode;
+    }
+
+    public String getReceipt() {
+        return receipt;
+    }
+
+    public void setReceipt(String receipt) {
+        this.receipt = receipt;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getCurrencyName() {
+        return currencyName;
+    }
+
+    public void setCurrencyName(String currencyName) {
+        this.currencyName = currencyName;
+    }
+
+    public String getCurrencyCode() {
+        return currencyCode;
+    }
+
+    public void setCurrencyCode(String currencyCode) {
+        this.currencyCode = currencyCode;
+    }
+
+    public String getPersonalFlag() {
+        return personalFlag;
+    }
+
+    public void setPersonalFlag(String personalFlag) {
+        this.personalFlag = personalFlag;
+    }
+
+    public String getPayType() {
+        return payType;
+    }
+
+    public void setPayType(String payType) {
+        this.payType = payType;
+    }
+
+    public String getPayCompanyCode() {
+        return payCompanyCode;
+    }
+
+    public void setPayCompanyCode(String payCompanyCode) {
+        this.payCompanyCode = payCompanyCode;
+    }
+
+    public String getFormsonId() {
+        return formsonId;
+    }
+
+    public void setFormsonId(String formsonId) {
+        this.formsonId = formsonId;
+    }
+
+    public String getApplyCodeField() {
+        return applyCodeField;
+    }
+
+    public void setApplyCodeField(String applyCodeField) {
+        this.applyCodeField = applyCodeField;
+    }
+
+    public String getApplyCode() {
+        return applyCode;
+    }
+
+    public void setApplyCode(String applyCode) {
+        this.applyCode = applyCode;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8ExtService.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8ExtService.java
new file mode 100644
index 00000000..5f47a625
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8ExtService.java
@@ -0,0 +1,60 @@
+package com.hzya.frame.cbs8.service;
+
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/7 14:20
+ **/
+public interface ICbs8ExtService {
+
+    /**
+     * 支付经办
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity payApply(SysExtensionApiEntity entity);
+
+    /**
+     * 代发代扣 支付申请
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity agentPayApply(SysExtensionApiEntity entity);
+
+    /**
+     * 交易结果查询
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity payResult(SysExtensionApiEntity entity);
+
+    /**
+     * 交易明细查询
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity transactionDetailQuery(SysExtensionApiEntity entity);
+    /**
+     * 代发代扣
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity payApplyAgent(SysExtensionApiEntity entity);
+
+    /**
+     * 代发代扣结果查询
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity payApplyAgentResult(SysExtensionApiEntity entity);
+
+    /**
+     * 电子回单查询
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity elecQuery(SysExtensionApiEntity entity);
+
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8Service.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8Service.java
new file mode 100644
index 00000000..9693e554
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8Service.java
@@ -0,0 +1,65 @@
+package com.hzya.frame.cbs8.service;
+
+import com.hzya.frame.cbs8.dto.req.*;
+import com.hzya.frame.cbs8.dto.res.*;
+import com.hzya.frame.cbs8.entity.PaymentEntity;
+
+import java.util.List;
+
+/**
+ * @Description cbs8接口
+ * @Author xiangerlin
+ * @Date 2024/6/6 15:30
+ **/
+public interface ICbs8Service {
+
+    /**
+     * 支付申请
+     * @param paymentEntity
+     */
+    PayResponseDTO payApply(PaymentEntity paymentEntity);
+
+    /**
+     * 通过业务参考号查询交易结果 3.2.6
+     * @param resultRequestDTO
+     * @return
+     * @throws Exception
+     */
+    List<PayResultResDTO> queryPayResult(PayResultRequestDTO resultRequestDTO);
+
+    /**
+     * 查询电子回单
+     * @param elecRequestDTO
+     *  startDate 开始日期 - 必填
+     *  endDate 结束日期 -必填
+     *  billStatus 回单状态 1-已取回 0-未取回 ,只有已取回的才能下载
+     *  settleBusinessReferenceCode 业务参考号
+     * @return List<ElecResponseDTO>
+     *     bucketFileUrl 回单下载地址
+     *     billFileName 回单文件名称
+     *     settleBusinessReferenceCode 业务参考号
+     */
+    List<ElecResponseDTO> queryElecBill(ElecRequestDTO elecRequestDTO);
+
+    /**
+     * 查询交易明细
+     * @param transactionDetailReqDTO
+     * @return
+     */
+    CbsResDataDTO  queryTransactionDetail(TransactionDetailReqDTO transactionDetailReqDTO);
+
+    /**
+     * 代发代扣 支付申请
+     * @param paymentApplySubmitReqDTO
+     * @param paymentApplyAgentList
+     */
+    PayResponseDTO agentPayApply(PaymentApplySubmitReqDTO paymentApplySubmitReqDTO, List<PaymentApplyAgentDTO> paymentApplyAgentList);
+
+    /**
+     * 代发代扣 详情查询
+     * @param agentPayResultRequestDTO
+     * @return
+     */
+    AgentPayResultResDTO agentPayResult(AgentPayResultRequestDTO agentPayResultRequestDTO);
+
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ExtServiceImpl.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ExtServiceImpl.java
new file mode 100644
index 00000000..68527318
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ExtServiceImpl.java
@@ -0,0 +1,216 @@
+package com.hzya.frame.cbs8.service.impl;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.cbs8.dto.req.*;
+import com.hzya.frame.cbs8.entity.PaymentEntity;
+import com.hzya.frame.cbs8.service.ICbs8ExtService;
+import com.hzya.frame.cbs8.util.CBSUtil;
+import com.hzya.frame.cbs8.util.CbsAccessToken;
+import com.hzya.frame.stringutil.StringUtil;
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
+import com.hzya.frame.web.exception.BaseSystemException;
+import org.apache.http.protocol.HTTP;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import java.util.*;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/7 14:20
+ **/
+
+@Service(value = "cbs8Ext")
+public class Cbs8ExtServiceImpl implements ICbs8ExtService {
+
+    Logger logger = LoggerFactory.getLogger(getClass());
+    /**
+     * 支付经办
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity payApply(SysExtensionApiEntity entity) {
+        String bodys = entity.getBodys();
+        if (StrUtil.isNotEmpty(bodys)){
+            PaymentEntity paymentEntity = JSONObject.parseObject(bodys,PaymentEntity.class);
+            if (null != paymentEntity){
+                PayRequestDTO payRequestDTO = new PayRequestDTO();
+                String ferenceNum = Convert.toStr(paymentEntity.getReferenceNumNew(),paymentEntity.getReferenceNum());
+                payRequestDTO.setReferenceNum(ferenceNum);
+                payRequestDTO.setBusType(paymentEntity.getBusType());
+                payRequestDTO.setAmount(paymentEntity.getAmount());
+                payRequestDTO.setCurrency(paymentEntity.getCurrency());
+                payRequestDTO.setPayAccount(StringUtil.replaceBlank(paymentEntity.getPayAccount()));
+                payRequestDTO.setRevAccount(StringUtil.replaceBlank(paymentEntity.getRevAccount()));
+                payRequestDTO.setRevAccountName(StringUtil.replaceBlank(paymentEntity.getRevAccountName()));
+                payRequestDTO.setRevBankType(StringUtil.replaceBlank((paymentEntity.getRevBankType())));
+                payRequestDTO.setRevBankName(StringUtil.replaceBlank(paymentEntity.getRevBankName()));
+                payRequestDTO.setCnapsCode(StringUtil.replaceBlank((paymentEntity.getCnapsCode())));
+                payRequestDTO.setPurpose(paymentEntity.getPurpose());
+                payRequestDTO.setErpExtend1(paymentEntity.getPayType());
+                //集中支付模式
+                if (CBSUtil.CENTRALIZED_PAYMENT_TYPE.equals(payRequestDTO.getBusType())){
+                    payRequestDTO.setBusiStep("1");
+                    payRequestDTO.setApplyUnitCode(paymentEntity.getPayCompanyCode());
+                    payRequestDTO.setPayAccount(null);
+                }
+                List<PayRequestDTO> list = Arrays.asList(payRequestDTO);
+                String requestData = JSONObject.toJSONString(list);
+                //加密 签名
+                encrypAndsign(entity,requestData);
+            }
+        }
+        return entity;
+    }
+
+    /**
+     * 代发代扣 支付申请
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity agentPayApply(SysExtensionApiEntity entity) {
+        String boyds = entity.getBodys();
+        if (StrUtil.isNotEmpty(boyds)){
+            AgentPayRequestDTO agentPayRequest = JSONObject.parseObject(boyds,AgentPayRequestDTO.class);
+            String requestData = JSONObject.toJSONString(agentPayRequest);
+            //加密签名
+            encrypAndsign(entity, requestData);
+        }
+        return entity;
+    }
+
+    /**
+     * 交易结果查询
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity payResult(SysExtensionApiEntity entity) {
+        String bodys = entity.getBodys();
+        if (StrUtil.isNotEmpty(bodys)){
+            PayResultRequestDTO payResultRequest = JSONObject.parseObject(bodys,PayResultRequestDTO.class);
+            if (null != payResultRequest && StrUtil.isNotEmpty(payResultRequest.getReferenceNum())){
+                String requestData = JSONObject.toJSONString(payResultRequest);
+                //加密 签名
+               encrypAndsign(entity,requestData);
+            }else {
+                throw new BaseSystemException("业务参考号不能为空!!!!");
+            }
+        }
+        return entity;
+    }
+
+    /**
+     * 交易明细查询
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity transactionDetailQuery(SysExtensionApiEntity entity) {
+        String bodys = entity.getBodys();
+        if (StrUtil.isNotEmpty(bodys)){
+            TransactionDetailReqDTO transactionDetailReqDTO = JSONObject.parseObject(bodys,TransactionDetailReqDTO.class);
+            String requestData = JSONObject.toJSONString(transactionDetailReqDTO);
+            ////加密签名
+            encrypAndsign(entity, requestData);
+        }
+        return entity;
+    }
+
+    /**
+     * 代发代扣
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity payApplyAgent(SysExtensionApiEntity entity) {
+        String bodys = entity.getBodys();
+        if (StrUtil.isNotEmpty(bodys)){
+            AgentPayRequestDTO agentPayRequest = JSONObject.parseObject(bodys,AgentPayRequestDTO.class);
+            String requestData = JSONObject.toJSONString(agentPayRequest);
+            ////加密签名
+            encrypAndsign(entity, requestData);
+        }
+        return entity;
+    }
+
+
+
+    /**
+     * 代发代扣结果查询
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity payApplyAgentResult(SysExtensionApiEntity entity) {
+        String bodys = entity.getBodys();
+        if (StrUtil.isNotEmpty(bodys)){
+            AgentPayResultRequestDTO agentPayResultRequestDTO = JSONObject.parseObject(bodys,AgentPayResultRequestDTO.class);
+            String requestData = JSONObject.toJSONString(agentPayResultRequestDTO);
+            encrypAndsign(entity,requestData);
+        }
+        return entity;
+    }
+
+    /**
+     * 电子回单查询
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity elecQuery(SysExtensionApiEntity entity) {
+        String bodys = entity.getBodys();
+        if (StrUtil.isNotEmpty(bodys)){
+            ElecRequestDTO elecRequestDTO = JSONObject.parseObject(bodys,ElecRequestDTO.class);
+            String requestData = JSONObject.toJSONString(elecRequestDTO);
+            //加密 签名
+            encrypAndsign(entity,requestData);
+        }
+        return entity;
+    }
+
+
+    /**
+     * 请求头
+     * @param sign
+     * @param timestamp
+     * @return
+     */
+    private Map<String,String> headersValueOf(String sign, long timestamp){
+        Map<String,String> header = new HashMap();
+        header.put(CBSUtil.SIGN_HEADER_NAME,sign);
+        header.put(CBSUtil.TIMESTAMP_HEADER,Long.toString(timestamp));
+        header.put(HTTP.CONTENT_TYPE,CBSUtil.TARGET_CONTENT_TYPE);
+        header.put(CBSUtil.AUTHORIZATION,CBSUtil.BEARER+ CbsAccessToken.getToken());
+        return header;
+    }
+
+    /**
+     * 加密 签名
+     * @param entity 接口转发参数对象
+     * @param requestData 请求参数json字符串
+     */
+    private void encrypAndsign(SysExtensionApiEntity entity, String requestData) {
+        //签名
+        long timestamp = System.currentTimeMillis();
+        logger.info("CBS请求参数明文:{}",requestData);
+        String sign = CBSUtil.sign(requestData,timestamp);
+        //加密
+        byte[] encryptedData = CBSUtil.encrypt(requestData);
+        Map<String,String> header = headersValueOf(sign,timestamp);
+        entity.setByteBodys(encryptedData);
+        entity.setHeaders(header);
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ServiceImpl.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ServiceImpl.java
new file mode 100644
index 00000000..8949397e
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ServiceImpl.java
@@ -0,0 +1,269 @@
+package com.hzya.frame.cbs8.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.map.MapBuilder;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.hzya.frame.cbs8.dto.req.*;
+import com.hzya.frame.cbs8.dto.res.*;
+import com.hzya.frame.cbs8.entity.PaymentEntity;
+import com.hzya.frame.cbs8.service.ICbs8Service;
+import com.hzya.frame.cbs8.util.CBSUtil;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.apache.commons.collections.CollectionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description cbs8接口
+ * @Author xiangerlin
+ * @Date 2024/6/7 14:44
+ **/
+@Service
+public class Cbs8ServiceImpl implements ICbs8Service {
+    Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Override
+    public PayResponseDTO payApply(PaymentEntity paymentEntity) {
+        Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                .put("apiCode", "8000260001")
+                .put("publicKey","ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")
+                .put("secretKey","7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")
+                .put("appId","800026")
+                .build();
+        String body = HttpRequest.post("http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterfaceToESB").addHeaders(headerMap).body(JSONObject.toJSONString(paymentEntity)).timeout(60000).execute().body();
+        //解密响应报文
+        String result = decryptResBody(body);
+        if (StrUtil.isNotEmpty(result)){
+            CbsResponseDTO cbsResponseDTO = JSONObject.parseObject(result, CbsResponseDTO.class);
+            List<JSONObject> dataList = cbsResponseDTO.getData();
+            if (CollectionUtils.isNotEmpty(dataList)){
+                JSONObject o = dataList.get(0);
+                PayResponseDTO payResponseDTO = JSON.toJavaObject(o, PayResponseDTO.class);
+                return payResponseDTO;
+            }
+        }
+        return new PayResponseDTO();
+    }
+
+    /**
+     * 通过业务参考号查询交易结果 3.2.6
+     *
+     * @param resultRequestDTO
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<PayResultResDTO> queryPayResult(PayResultRequestDTO resultRequestDTO) {
+        Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                .put("apiCode", "8000260002")
+                .put("publicKey","ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")
+                .put("secretKey","7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")
+                .put("appId","800026")
+                .build();
+        String body = HttpRequest.post("http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterfaceToESB").addHeaders(headerMap).body(JSONObject.toJSONString(resultRequestDTO)).timeout(60000).execute().body();
+        String result = decryptResBody(body);
+        CbsResponseDTO cbsResponseDTO = JSONObject.parseObject(result, CbsResponseDTO.class);
+        if (CollectionUtils.isNotEmpty(cbsResponseDTO.getData())){
+            List<JSONObject> dataList = cbsResponseDTO.getData();
+            List<PayResultResDTO> payResultList = CBSUtil.convertJsonArrayToList(dataList, PayResultResDTO.class);
+            return payResultList;
+        }
+        return new ArrayList<PayResultResDTO>();
+    }
+
+    /**
+     * 查询电子回单
+     *
+     * @param elecRequestDTO startDate 开始日期 - 必填
+     *                       endDate 结束日期 -必填
+     *                       billStatus 回单状态 1-已取回 0-未取回 ,只有已取回的才能下载
+     *                       settleBusinessReferenceCode 业务参考号
+     * @return List<ElecResponseDTO>
+     * bucketFileUrl 回单下载地址
+     * billFileName 回单文件名称
+     * settleBusinessReferenceCode 业务参考号
+     */
+    @Override
+    public List<ElecResponseDTO> queryElecBill(ElecRequestDTO elecRequestDTO) {
+        if (null == elecRequestDTO){
+            elecRequestDTO = new ElecRequestDTO();
+        }
+        if (StrUtil.isEmpty(elecRequestDTO.getStartDate())){
+            elecRequestDTO.setStartDate(DateUtil.today());
+        }
+        if (StrUtil.isEmpty(elecRequestDTO.getEndDate())){
+            elecRequestDTO.setEndDate(DateUtil.today());
+        }
+        String params = JSON.toJSONString(elecRequestDTO, SerializerFeature.WRITE_MAP_NULL_FEATURES, SerializerFeature.QuoteFieldNames);
+        logger.info("电子回单查询请求参数为:{}", params);
+        Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                .put("apiCode", "8000260005")
+                .put("publicKey","ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")
+                .put("secretKey","7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")
+                .put("appId","800026")
+                .build();
+        String body = HttpRequest.post("http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterfaceToESB").addHeaders(headerMap).body(params).timeout(60000).execute().body();
+        String result = decryptResBody(body);
+        if (StrUtil.isNotEmpty(result)){
+            CbsResponseDTO cbsResponseDTO = JSONObject.parseObject(result, CbsResponseDTO.class);
+            if (null != cbsResponseDTO){
+                if (CollectionUtils.isNotEmpty(cbsResponseDTO.getData())){
+                    List<JSONObject> dataList = cbsResponseDTO.getData();
+                    if (CollectionUtils.isNotEmpty(dataList)){
+                        JSONObject jsonObject = dataList.get(0);
+                        CbsResDataDTO dataDTO = JSON.toJavaObject(jsonObject, CbsResDataDTO.class);
+                        List<ElecResponseDTO> elecResponseDTOList = CBSUtil.convertJsonArrayToList(dataDTO.getList(), ElecResponseDTO.class);
+                        return elecResponseDTOList;
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 查询交易明细
+     *
+     * @param transactionDetailReqDTO
+     * @return
+     */
+    @Override
+    public CbsResDataDTO  queryTransactionDetail(TransactionDetailReqDTO transactionDetailReqDTO) {
+        //页码
+        int currentPage = transactionDetailReqDTO.getCurrentPage();
+        //每页条数
+        int pageSize = transactionDetailReqDTO.getPageSize();
+        if (currentPage == 0){
+            currentPage = CBSUtil.DEFAULT_CURRENT_PAGE;
+            transactionDetailReqDTO.setCurrentPage(currentPage);//页码
+        }
+        if (pageSize == 0){
+            pageSize = CBSUtil.DEFAULT_PAGE_SIZE;
+            transactionDetailReqDTO.setPageSize(pageSize);
+        }
+        if (StrUtil.isNotEmpty(transactionDetailReqDTO.getStartDate())){
+            transactionDetailReqDTO.setStartDate(DateUtil.today());
+        }
+        if (StrUtil.isNotEmpty(transactionDetailReqDTO.getEndDate())){
+            transactionDetailReqDTO.setEndDate(DateUtil.today());
+        }
+        String params = JSON.toJSONString(transactionDetailReqDTO);
+        Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                .put("apiCode", "8000260006")
+                .put("publicKey","ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")
+                .put("secretKey","7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")
+                .put("appId","800026")
+                .build();
+        String body = HttpRequest.post("http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterfaceToESB").addHeaders(headerMap).body(params).timeout(60000).execute().body();
+        String result = decryptResBody(body);
+        if (StrUtil.isNotEmpty(result)){
+            CbsResponseDTO cbsResponseDTO = JSONObject.parseObject(result, CbsResponseDTO.class);
+            if (null != cbsResponseDTO){
+                if (CollectionUtils.isNotEmpty(cbsResponseDTO.getData())){
+                    List<JSONObject> list = cbsResponseDTO.getData();
+                    if (CollectionUtils.isNotEmpty(list)){
+                        JSONObject jsonObject = list.get(0);
+                        CbsResDataDTO dataDTO = JSON.toJavaObject(jsonObject, CbsResDataDTO.class);
+                        return dataDTO;
+                    }
+                }
+            }
+        }
+        return new CbsResDataDTO();
+    }
+
+    /**
+     * 代发代扣 支付申请
+     * @param paymentApplySubmitReqDTO
+     * @param paymentApplyAgentList
+     */
+    @Override
+    public PayResponseDTO agentPayApply(PaymentApplySubmitReqDTO paymentApplySubmitReqDTO, List<PaymentApplyAgentDTO> paymentApplyAgentList) {
+        AgentPayRequestDTO param = new AgentPayRequestDTO();
+        param.setPaymentApplySubmitReqDTO(paymentApplySubmitReqDTO);
+        param.setPaymentApplyAgentDTO(paymentApplyAgentList);
+        String params = JSON.toJSONString(param);
+        Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                .put("apiCode", "8000260003")
+                .put("publicKey","ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")
+                .put("secretKey","7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")
+                .put("appId","800026")
+                .build();
+        String body = HttpRequest.post("http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterfaceToESB").addHeaders(headerMap).body(params).timeout(60000).execute().body();
+        String result = decryptResBody(body);
+        if (StrUtil.isNotEmpty(result)){
+            CbsResponseDTO cbsResponseDTO = JSONObject.parseObject(result, CbsResponseDTO.class);
+            List<JSONObject> dataList = cbsResponseDTO.getData();
+            if (CollectionUtils.isNotEmpty(dataList)){
+                JSONObject o = dataList.get(0);
+               PayResponseDTO payResponseDTO = JSON.toJavaObject(o, PayResponseDTO.class);
+                return payResponseDTO;
+            }
+        }
+        return new PayResponseDTO();
+    }
+
+    /**
+     * 代发代扣 详情查询
+     *
+     * @param agentPayResultRequestDTO
+     * @return
+     */
+    @Override
+    public AgentPayResultResDTO agentPayResult(AgentPayResultRequestDTO agentPayResultRequestDTO) {
+        Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                .put("apiCode", "8000260004")//数智办公
+                .put("publicKey","ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")//数智财资
+                .put("secretKey","7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")
+                .put("appId","800026")
+                .build();
+        String params = JSON.toJSONString(agentPayResultRequestDTO);
+        String body = HttpRequest.post("http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterfaceToESB").addHeaders(headerMap).body(params).timeout(60000).execute().body();
+        //解密报文
+        String result = decryptResBody(body);
+        if (StrUtil.isNotEmpty(result)){
+            CbsResponseDTO cbsResponseDTO = JSONObject.parseObject(result, CbsResponseDTO.class);
+            List<JSONObject> dataList = cbsResponseDTO.getData();
+            if (CollectionUtils.isNotEmpty(dataList)){
+                JSONObject o = dataList.get(0);
+                AgentPayResultResDTO agentPayResultResDTO = JSON.toJavaObject(o, AgentPayResultResDTO.class);
+                return agentPayResultResDTO;
+            }
+        }
+        return new AgentPayResultResDTO();
+    }
+
+    /**
+     * 解密响应报文
+     * @param body
+     * @return
+     */
+    private String decryptResBody(String body){
+        if (StrUtil.isNotEmpty(body)){
+            JsonResultEntity resultEntity = JSONObject.parseObject(body,JsonResultEntity.class);
+            String bodyBase64 = String.valueOf(resultEntity.getAttribute());
+            byte[] bodyBytes = Base64.getDecoder().decode(bodyBase64);
+            //这里验证一下,如果系统异常 返回的报文没加密
+            String test = new String(bodyBytes);
+            if (JSONUtil.isTypeJSON(test)){
+                return test;
+            }
+            //解密报文
+            String result = CBSUtil.decrypt(bodyBytes);
+            logger.info("银行响应参数:{}",result);
+            return result;
+        }
+        return null;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CBSUtil.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CBSUtil.java
new file mode 100644
index 00000000..602a9124
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CBSUtil.java
@@ -0,0 +1,187 @@
+package com.hzya.frame.cbs8.util;
+
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/7 15:38
+ **/
+@Component
+public class CBSUtil {
+    /**
+     * 集中支付模式
+     */
+    public static final String CENTRALIZED_PAYMENT_TYPE = "401";
+    /**
+     * 分页查询 最大条数
+     */
+    public static final int MAX_PAGE_SIZE = 1000;
+    /**
+     * 默认分页查询条数
+     */
+    public static final int DEFAULT_PAGE_SIZE = 100;
+    /**
+     * 默认页码
+     */
+    public static final int DEFAULT_CURRENT_PAGE = 1;
+    static Logger logger = LogManager.getLogger(CBSUtil.class);
+
+    /**
+     * 请求参数格式
+     */
+    public static String TARGET_CONTENT_TYPE = "application/json";
+
+    /**
+     * 签名请求头参数名
+     */
+   public static String SIGN_HEADER_NAME = "X-MBCLOUD-API-SIGN";
+    /**
+     * 时间戳请求头参数名
+     */
+    public static String TIMESTAMP_HEADER = "X-MBCLOUD-TIMESTAMP";
+
+    public static String ENCRYPTION_ENABLED_HEADER_NAME = "X-MBCLOUD-ENCRYPTION-ENABLED";
+
+    public static String X_MBCLOUD_COMPRESS = "X-Mbcloud-Compress";
+
+    /**
+     * 请求头token参数名
+     */
+    public static String AUTHORIZATION = "Authorization";
+
+    /**
+     *token前缀
+     */
+    public static String BEARER = "Bearer ";
+
+    /**
+     * 财资管理云公钥(平台公钥)
+     */
+    public static String bodyEncryptionKey;
+
+    /**
+     * 企业私钥(加密)
+     */
+    public static String signEncryptionPrivateKey;
+
+    /**
+     * 企业私钥(解密)
+     */
+    public static String bodyDecryptionKey;
+
+    /**
+     * 财资管理云公钥(平台公钥)
+     */
+    @Value("${cbs8.cbs_public_key:}")
+    public  void setBodyEncryptionKey(String bodyEncryptionKey) {
+        CBSUtil.bodyEncryptionKey = bodyEncryptionKey;
+    }
+    /**
+     * 企业私钥(解密)
+     */
+    @Value("${cbs8.ya_private_key:}")
+    public  void setSignEncryptionPrivateKey(String signEncryptionPrivateKey) {
+        CBSUtil.signEncryptionPrivateKey = signEncryptionPrivateKey;
+    }
+    /**
+     * 企业私钥(解密)
+     */
+    @Value("${cbs8.ya_private_key:}")
+    public  void setBodyDecryptionKey(String bodyDecryptionKey) {
+        CBSUtil.bodyDecryptionKey = bodyDecryptionKey;
+    }
+
+    //将json数组转为list
+    public static <T> List<T> convertJsonArrayToList(List<JSONObject> list, Class<T> clazz) {
+        String jsonArray = JSON.toJSONString(list);
+        List<T> result = JSON.parseObject(jsonArray, new TypeReference<List<T>>(clazz) {});
+        return result;
+    }
+
+    /**
+     * 将时间戳转换成日期字符串
+     * @param timestamp
+     * @return
+     */
+    public static String convertTimestampToString(String timestamp) {
+        if (StrUtil.isNotEmpty(timestamp) && NumberUtil.isNumber(timestamp)){
+            // 创建SimpleDateFormat对象,指定日期时间格式
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            // 将时间戳转换为Date对象
+            Date date = new Date(Long.valueOf(timestamp));
+
+            // 使用SimpleDateFormat格式化Date对象,得到字符串表示
+            return sdf.format(date);
+        }
+        return null;
+    }
+
+    /**
+     * 签名
+     * @param requestData
+     * @return
+     */
+    public static String sign(String requestData){
+        long timestamp = System.currentTimeMillis();
+        return sign(requestData,timestamp);
+    }
+
+    /**
+     * 签名
+     * @param requestData
+     * @param timestamp
+     * @return
+     */
+    public static String sign(String requestData,long timestamp){
+
+        // 请求数据拼接:  报文体+时间戳
+        byte[] requestDataBytes = requestData.getBytes(StandardCharsets.UTF_8);
+        byte[] timestampBytes = ("&timestamp=" + timestamp).getBytes(StandardCharsets.UTF_8);
+        byte[] newBytes = new byte[requestDataBytes.length + timestampBytes.length];
+        System.arraycopy(requestDataBytes, 0, newBytes, 0, requestDataBytes.length);
+        System.arraycopy(timestampBytes, 0, newBytes, requestDataBytes.length, timestampBytes.length);
+
+        // 生成签名
+        byte[] signature = SM2Util.sign(signEncryptionPrivateKey, newBytes);
+        String sign = Base64.encodeBase64String(SM2Util.encodeDERSignature(signature));
+        logger.info("签名:{}", sign);
+        return sign;
+    }
+
+    /**
+     * 加密
+     * @param requestData
+     * @return
+     */
+    public static byte[] encrypt(String requestData){
+        byte[] encrypt = SM2Util.encrypt(bodyEncryptionKey, requestData.getBytes(StandardCharsets.UTF_8));
+        return encrypt;
+    }
+
+    public static String decrypt(byte[] cipherData){
+        try {
+            byte[] decrypt = SM2Util.decrypt(bodyDecryptionKey, cipherData);
+            String text = new String(decrypt);
+            return text;
+        }catch (Exception e){
+            logger.error("解密失败",e);
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CbsAccessToken.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CbsAccessToken.java
new file mode 100644
index 00000000..341af450
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CbsAccessToken.java
@@ -0,0 +1,140 @@
+package com.hzya.frame.cbs8.util;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.web.action.ApplicationContextUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.relational.core.sql.In;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Description cbs token
+ * @Author xiangerlin
+ * @Date 2024/6/7 15:56
+ **/
+@Component
+public class CbsAccessToken {
+
+    private static final Logger logger = LoggerFactory.getLogger(CbsAccessToken.class);
+    @Value("${cbs8.appId:}")
+    private  String app_id;
+    @Value("${cbs8.appSecret:}")
+    private  String app_secret;
+    @Value("${cbs8.url:}")
+    private  String app_url;
+
+    private static String appId;
+    private static String appSecret;
+    private static String url;
+    @PostConstruct
+    public void init() {
+        appId = app_id;
+        appSecret = app_secret;
+        url = app_url;
+    }
+    //刷新token用
+    private static final String BEARER = "Bearer ";
+    /**
+     * 过期时间
+     */
+    private Long expiryTime ;
+    private String token;
+
+    private CbsAccessToken(){
+
+    }
+    private static CbsAccessToken cbsAccessToken = new CbsAccessToken();
+
+
+    public static CbsAccessToken getInstance() {
+        if (null == cbsAccessToken.token){
+            initToken();
+        }else {
+            //判断token有没有过期
+            if (System.currentTimeMillis() >= cbsAccessToken.expiryTime){
+                initToken();
+            }else {
+                refreshToken();
+            }
+        }
+        return cbsAccessToken;
+    }
+
+    public static String getToken(){
+        return getInstance().token;
+    }
+    /**
+     * 获取token
+     */
+    private static void initToken(){
+        CbsAccessToken ct = (CbsAccessToken) ApplicationContextUtil.getBeanByName("cbsAccessToken");
+        logger.info("开始获取cbstoken");
+        Map<String,String> param = new HashMap<>();
+        param.put("app_id",ct.appId);
+        param.put("app_secret",ct.appSecret);
+        param.put("grant_type","client_credentials");
+        String res = HttpRequest.post(ct.url+"/openapi/app/v1/app/token").body(JSONObject.toJSONString(param)).execute().body();
+        logger.info("获取cbstoken结果",res);
+        if (StrUtil.isNotEmpty(res) && JSONUtil.isTypeJSON(res)){
+            JSONObject tokenObject =  JSONObject.parseObject(res);
+            String code = tokenObject.getString("code");//0表示成功
+            if ("0".equals(code)){
+                JSONObject dataObj = tokenObject.getJSONObject("data");
+                if (null != dataObj){
+                    String token = dataObj.getString("token");
+                    //过期时间 单位是秒 30分钟有效
+                    Integer expires = dataObj.getInteger("expires");
+                    cbsAccessToken.token = token;
+                    //提前5分钟让token失效 所以这里设置成过期时间为当前时间+25分钟
+                    cbsAccessToken.expiryTime = System.currentTimeMillis()+1000*60*25L;
+                }
+            }
+        }
+    }
+
+    /**
+     * 刷新token
+     */
+    private static void refreshToken(){
+        CbsAccessToken ct = (CbsAccessToken) ApplicationContextUtil.getBeanByName("cbsAccessToken");
+        //token不为空,并且没过期 刷新token
+        if (null != cbsAccessToken.token && System.currentTimeMillis() < cbsAccessToken.expiryTime ){
+            String res = HttpRequest.get(ct.url + "/openapi/app/v1/app/refresh-token").header("Authorization", BEARER + cbsAccessToken.token).execute().body();
+            logger.info("刷新cbstoken结果",res);
+            if (StrUtil.isNotEmpty(res) && JSONUtil.isTypeJSON(res)){
+                JSONObject tokenObject =  JSONObject.parseObject(res);
+                String code = tokenObject.getString("code");//0表示成功
+                if ("0".equals(code)){
+                    JSONObject dataObj = tokenObject.getJSONObject("data");
+                    if (null != dataObj){
+                        //续期的token
+                        String token = dataObj.getString("token");
+                        //新token过期时间 单位是秒 30分钟有效
+                        Integer expires = dataObj.getInteger("expires");
+                        cbsAccessToken.token = token;
+                        //提前5分钟让token失效 所以这里设置成过期时间为当前时间+25分钟
+                        cbsAccessToken.expiryTime = System.currentTimeMillis()+1000*60*25L;
+                    }
+                }else {
+                    initToken();
+                }
+            }
+        }else {
+            initToken();
+        }
+    }
+
+    public static void main(String[] args) {
+        System.out.println("第1次取token:"+getToken());
+        System.out.println("第2次取token:"+getToken());
+        System.out.println("第3次取token:"+getToken());
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CurrencyEnum.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CurrencyEnum.java
new file mode 100644
index 00000000..abde767c
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CurrencyEnum.java
@@ -0,0 +1,137 @@
+package com.hzya.frame.cbs8.util;
+
+/**
+ * @Description 币种枚举表
+ * @Author xiangerlin
+ * @Date 2024/6/25 10:20
+ **/
+public enum CurrencyEnum {
+
+    CNY("10", "人民币", "CNY", "¥"),
+    ASF("11", "记帐瑞士法朗", "ASF", "ASF"),
+    BRL("12", "巴西里亚尔", "BRL", "BRL"),
+    IDR("13", "印度尼西亚卢比", "IDR", "rps"),
+    INR("14", "印度卢比", "INR", "rs"),
+    IRR("15", "伊朗里亚尔", "IRR", "ri"),
+    JOD("16", "约旦第纳尔", "JOD", "jdr"),
+    KRW("17", "韩国圆", "KRW", "$"),
+    KWD("18", "科威特第纳尔", "KWD", "kd"),
+    MOP("19", "澳门元", "MOP", "pat"),
+    MXN("20", "墨西哥比索", "MXN", "mex$"),
+    HKD("21", "港币", "HKD", "HK$"),
+    MYR("22", "马来西亚林吉特", "MYR", "m$"),
+    NPR("23", "尼泊尔卢比", "NPR", "nrs"),
+    NZD("24", "新西兰元", "NZD", "$nz"),
+    PHP("25", "菲律宾比索", "PHP", "phil"),
+    PKR("26", "巴基斯坦卢比", "PKR", "prs"),
+    RUB("27", "俄罗斯卢布", "RUB", "RUB"),
+    AUD("29", "澳元", "AUD", "A$"),
+    THB("30", "泰国铢", "THB", "bt"),
+    TWD("31", "台湾元", "TWD", "$"),
+    USD("32", "美元", "USD", "US$"),
+    TZS("33", "坦桑尼亚先令", "TZS", "tsh"),
+    EUR("35", "欧元", "EUR", "EUR"),
+    CAD("39", "加拿大元", "CAD", "CAN$"),
+    GBP("43", "英镑", "GBP", "£"),
+    JPY("65", "日元", "JPY", "J"),
+    SGD("69", "新加坡元", "SGD", "S$"),
+    NOK("83", "挪威克朗", "NOK", "nkr"),
+    DKK("85", "丹麦克朗", "DKK", "DKr"),
+    AED("86", "阿联酋迪拉姆", "AED", "AED"),
+    CHF("87", "瑞士法朗", "CHF", "SF"),
+    SEK("88", "瑞典克朗", "SEK", "SKR"),
+    ZAR("89", "南非兰特", "ZAR", "ZAR"),
+    AOA("71", "安哥拉宽扎", "AOA", "kz"),
+    DZD("72", "阿尔及利亚第纳尔", "DZD", "AD."),
+    GHS("73", "塞地", "GHS", "¢"),
+    KES("74", "肯尼亚先令", "KES", "K.Sh"),
+    NGN("75", "奈拉", "NGN", "N"),
+    QAR("76", "卡塔尔里亚尔", "QAR", "QR."),
+    VND("77", "越南盾", "VND", "D."),
+    PES("78", "新索尔", "PES", "S/."),
+    PLZ("79", "兹罗提", "PLZ", "ZL."),
+    TRY("80", "土耳其镑", "TRY", "£T."),
+    SAR("81", "亚尔", "SAR", "SAR."),
+    KZT("82", "哈萨克斯坦腾格", "KZT", "〒"),
+    CDF("90", "刚果法郎", "CDF", "FC"),
+    LYD("91", "利比亚第纳尔", "LYD", "LD."),
+    EGP("92", "埃及镑", "EGP", "£E."),
+    VEF("93", "委内瑞拉玻利瓦尔", "VEF", "B"),
+    OMR("94", "阿曼里尔", "OMR", "RO."),
+    PLN("95", "波兰兹罗提", "PLN", "Zl"),
+    HUF("96", "匈牙利福林", "HUF", "Ft"),
+    BDT("97", "孟加拉塔卡", "BDT", "TK"),
+    LAK("98", "老挝基普", "LAK", "K"),
+    ZMW("37", "赞比亚克瓦查", "ZMW", "ZM"),
+    ETB("28", "埃塞俄比亚比尔", "ETB", "Br"),
+    PRK("34", "巴基斯坦卢比", "PRK", "Rs."),
+    BND("36", "文莱元", "BND", "B$"),
+    XOF("38", "西非法郎", "XOF", "XOF"),
+    PGK("41", "巴布亚新几内亚基纳", "PGK", "PGK"),
+    LKR("40", "斯里兰卡卢比", "LKR", "LK"),
+    GNF("46", "几内亚法郎", "GNF", "GNF"),
+    TND("42", "突尼斯第纳尔", "TND", "TN"),
+    UZS("44", "乌兹别克斯坦苏姆", "UZS", "UZ"),
+    XAF("45", "中非法郎", "XAF", "XA"),
+    SDG("49", "苏丹磅", "SDG", "£S"),
+    GE("47", "格鲁吉亚拉里", "GEL", "GE"),
+    MN("48", "蒙图", "MNT", "MN"),
+    TJS("50", "塔吉克索莫尼", "TJS", "TJS"),
+    UGX("51", "乌干达先令", "UGX", "UGX"),
+    CLP("52", "智利比索", "CLP", "CLP"),
+    MMK("53", "缅元", "MMK", "MMK"),
+    KHR("54", "柬埔寨瑞尔", "KHR", "KHR"),
+    BHD("55", "巴林第纳尔", "BHD", "BHD"),
+    RSD("56", "塞尔维亚第纳尔", "RSD", "RSD"),
+    KGS("57", "吉尔吉斯斯坦索姆", "KGS", "KGS"),
+    COP("58", "哥伦比亚比索", "COP", "COP"),
+    GYD("59", "圭亚那元", "GYD", "GYD"),
+    ARS("60", "阿根廷比索", "ARS", "ARS"),
+    CZK("61", "捷克克朗", "CZK", "CZK"),
+    PEN("62", "秘鲁索尔", "PEN", "PEN"),
+    RON("63", "罗马尼亚列伊", "RON", "RON"),
+    UAH("64", "乌克兰格里夫纳", "UAH", "UAH"),
+    ILS("66", "以色列新谢克尔", "ILS", "ILS"),
+    IQD("67", "伊拉克第纳尔", "IQD", "IQD"),
+    ERN("68", "厄立特里亚纳克法", "ERN", "ERN"),
+    CNH("84", "离岸人民币", "CNH", "CNH"),
+    MKD("99", "马其顿第纳尔", "MKD", "MKD");
+
+    private final String code;
+    private final String chineseName;
+    private final String internationalCode;
+    private final String symbol;
+
+    CurrencyEnum(String code, String chineseName, String internationalCode, String symbol) {
+        this.code = code;
+        this.chineseName = chineseName;
+        this.internationalCode = internationalCode;
+        this.symbol = symbol;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getChineseName() {
+        return chineseName;
+    }
+
+    public String getInternationalCode() {
+        return internationalCode;
+    }
+
+    public String getSymbol() {
+        return symbol;
+    }
+
+    //根据币种code获取币种中文名
+    public static String getChineseNameByCode(String code) {
+        for (CurrencyEnum currency : values()) {
+            if (currency.code.equals(code)) {
+                return currency.chineseName;
+            }
+        }
+        return null; // 或者抛出异常,表示找不到对应的币种
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/PayState.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/PayState.java
new file mode 100644
index 00000000..0ab494c7
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/PayState.java
@@ -0,0 +1,73 @@
+package com.hzya.frame.cbs8.util;
+
+/**
+ * @Author:hecan
+ * @Description:支付类型(支付状态)
+ * @params:
+ * @return:
+ * @Date: 2023/3/14 15:05
+ */
+public enum PayState {
+    a("a","待提交直联"),
+    b("b","已提交直联"),
+    c("c","银行已受理"),
+    d("d","银行未受理"),
+    e("e","可疑"),
+    f("f","待人工确认"),
+    g("g","支付成功"),
+    h("h","支付失败"),
+    i("i","部分成功"),
+    j("j","退票"),
+    k("k","取消支付"),
+    n("n","其他"),
+    p("p","支付中"),
+    q("q","待支付"),
+    one("1","待处理"),
+    two("2","审批中"),
+    three("3","处理失败"),
+    four("4","审批完成"),
+    five("5","审批撤销"),
+    six("6","审批拒绝"),
+    seven("7","待发送审批"),
+    eight("8","集中受理中"),
+    nine("9","审批退回"),
+    ten("10","预处理中"),
+    eleven("11","预处理拒绝"),
+    twelve("12","资金监控审批中");
+
+
+    //类型
+    private String type;
+    //值
+    private String value;
+
+    PayState(String type, String value){
+        this.type=type;
+        this.value=value;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public static String payStateGetValue(String type){
+        for (PayState payState : PayState.values()){
+            if(payState.getType()==type||payState.getType().equals(type)){
+                return payState.getValue().toString();
+            }
+        }
+        return null;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/SM2Util.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/SM2Util.java
new file mode 100644
index 00000000..46b20936
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/SM2Util.java
@@ -0,0 +1,237 @@
+package com.hzya.frame.cbs8.util;
+
+import org.bouncycastle.asn1.*;
+import org.bouncycastle.crypto.engines.SM2Engine;
+import org.bouncycastle.crypto.params.*;
+import org.bouncycastle.crypto.signers.SM2Signer;
+import org.bouncycastle.jce.ECNamedCurveTable;
+import org.bouncycastle.jce.spec.ECParameterSpec;
+import org.bouncycastle.math.ec.ECCurve;
+import org.bouncycastle.math.ec.ECPoint;
+import org.bouncycastle.util.encoders.Hex;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.io.ByteArrayInputStream;
+import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
+import java.security.SecureRandom;
+import java.util.Base64;
+import java.util.Enumeration;
+
+/**
+ * @author: xiang2lin
+ * @time: 2024/6/14
+ * @description: SM2加解密工具类
+ */
+
+public class SM2Util {
+   static Logger logger = LoggerFactory.getLogger(SM2Util.class);
+    private SM2Util() {
+        throw new IllegalStateException("Utility class");
+    }
+
+    private static final String STD_NAME = "sm2p256v1";
+
+    /**
+     * SM2加密算法
+     *
+     * @param publicKey 公钥
+     * @param data      明文数据
+     * @return
+     */
+    public static byte[] encrypt(String publicKey, byte[] data) {
+        ECPublicKeyParameters ecPublicKeyParameters = encodePublicKey(Hex.decode(publicKey));
+        SM2Engine engine = new SM2Engine();
+        engine.init(true, new ParametersWithRandom(ecPublicKeyParameters, new SecureRandom()));
+
+        byte[] bytes = null;
+        try {
+            byte[] cipherText = engine.processBlock(data, 0, data.length);
+            bytes = C1C2C3ToC1C3C2(cipherText);
+        } catch (Exception e) {
+            logger.warn("SM2加密时出现异常:" + e.getMessage());
+        }
+        return bytes;
+    }
+
+    /**
+     * SM2解密算法
+     *
+     * @param privateKey 私钥
+     * @param cipherData 密文数据
+     * @return
+     */
+    public static byte[] decrypt(String privateKey, byte[] cipherData) {
+        ECPrivateKeyParameters ecPrivateKeyParameters = encodePrivateKey(Hex.decode(privateKey));
+        SM2Engine engine = new SM2Engine();
+        engine.init(false, ecPrivateKeyParameters);
+
+        byte[] bytes = null;
+        try {
+            cipherData = C1C3C2ToC1C2C3(cipherData);
+            bytes = engine.processBlock(cipherData, 0, cipherData.length);
+        } catch (Exception e) {
+            logger.warn("SM2解密时出现异常:" + e.getMessage());
+        }
+        return bytes;
+    }
+
+    /**
+     * 签名算法
+     *
+     * @param privateKey 私钥
+     * @param data       明文数据
+     * @return
+     */
+    public static byte[] sign(String privateKey, byte[] data) {
+        ECPrivateKeyParameters ecPrivateKeyParameters = encodePrivateKey(hexToByte(privateKey));
+        SM2Signer signer = new SM2Signer();
+        ParametersWithID parameters = new ParametersWithID(ecPrivateKeyParameters, "1234567812345678".getBytes());
+        signer.init(true, parameters);
+        signer.update(data, 0, data.length);
+
+        byte[] signature = null;
+        try {
+            signature = decodeDERSignature(signer.generateSignature());
+        } catch (Exception e) {
+            logger.warn("SM2签名时出现异常:" + e.getMessage());
+        }
+        return signature;
+    }
+
+    private static byte[] hexToByte(String hex)
+            throws IllegalArgumentException {
+        if (hex.length() % 2 != 0) {
+            throw new IllegalArgumentException();
+        }
+        char[] arr = hex.toCharArray();
+        byte[] b = new byte[hex.length() / 2];
+        for (int i = 0, j = 0, l = hex.length(); i < l; i++, j++) {
+            String swap = "" + arr[i++] + arr[i];
+            int byteInt = Integer.parseInt(swap, 16) & 0xFF;
+            b[j] = BigInteger.valueOf(byteInt).byteValue();
+        }
+        return b;
+    }
+
+    private static byte[] C1C2C3ToC1C3C2(byte[] cipherText) throws Exception {
+        if (cipherText != null && cipherText.length >= 97) {
+            byte[] bytes = new byte[cipherText.length];
+            System.arraycopy(cipherText, 0, bytes, 0, 65);
+            System.arraycopy(cipherText, cipherText.length - 32, bytes, 65, 32);
+            System.arraycopy(cipherText, 65, bytes, 97, cipherText.length - 97);
+            return bytes;
+        } else {
+            throw new Exception("SM2 cipher text error, must be more than 96 bytes and in the format C1||C3||C2.");
+        }
+    }
+
+    private static byte[] C1C3C2ToC1C2C3(byte[] cipherText) throws Exception {
+        if (cipherText != null && cipherText.length >= 97) {
+            byte[] bytes = new byte[cipherText.length];
+            System.arraycopy(cipherText, 0, bytes, 0, 65);
+            System.arraycopy(cipherText, 97, bytes, 65, cipherText.length - 97);
+            System.arraycopy(cipherText, 65, bytes, cipherText.length - 32, 32);
+            return bytes;
+        } else {
+            throw new Exception("SM2 cipher text error, must be more than 96 bytes and in the format C1||C3||C2.");
+        }
+    }
+
+    private static ECPublicKeyParameters encodePublicKey(byte[] value) {
+        byte[] x = new byte[32];
+        byte[] y = new byte[32];
+        System.arraycopy(value, 1, x, 0, 32);
+        System.arraycopy(value, 33, y, 0, 32);
+        BigInteger X = new BigInteger(1, x);
+        BigInteger Y = new BigInteger(1, y);
+        ECPoint Q = getSM2Curve().createPoint(X, Y);
+        return new ECPublicKeyParameters(Q, getECDomainParameters());
+    }
+
+    private static ECCurve getSM2Curve() {
+        ECParameterSpec spec = ECNamedCurveTable.getParameterSpec(STD_NAME);
+        return spec.getCurve();
+    }
+
+    private static ECPrivateKeyParameters encodePrivateKey(byte[] value) {
+        BigInteger d = new BigInteger(1, value);
+        return new ECPrivateKeyParameters(d, getECDomainParameters());
+    }
+
+    private static ECDomainParameters getECDomainParameters() {
+        ECParameterSpec spec = ECNamedCurveTable.getParameterSpec(STD_NAME);
+        return new ECDomainParameters(spec.getCurve(), spec.getG(), spec.getN(), spec.getH(), spec.getSeed());
+    }
+
+    private static byte[] decodeDERSignature(byte[] signature) {
+        ASN1InputStream stream = new ASN1InputStream(new ByteArrayInputStream(signature));
+
+        byte[] bytes = new byte[64];
+        try {
+            ASN1Sequence primitive = (ASN1Sequence) stream.readObject();
+            Enumeration enumeration = primitive.getObjects();
+            BigInteger R = ((ASN1Integer) enumeration.nextElement()).getValue();
+            BigInteger S = ((ASN1Integer) enumeration.nextElement()).getValue();
+            byte[] r = format(R.toByteArray());
+            byte[] s = format(S.toByteArray());
+            System.arraycopy(r, 0, bytes, 0, 32);
+            System.arraycopy(s, 0, bytes, 32, 32);
+        } catch (Exception e) {
+            logger.warn("decodeDERSignature时出现异常:" + e.getMessage());
+        }
+        return bytes;
+    }
+
+    public static byte[] encodeDERSignature(byte[] signature) {
+        byte[] r = new byte[32];
+        byte[] s = new byte[32];
+        System.arraycopy(signature, 0, r, 0, 32);
+        System.arraycopy(signature, 32, s, 0, 32);
+        ASN1EncodableVector vector = new ASN1EncodableVector();
+        vector.add(new ASN1Integer(new BigInteger(1, r)));
+        vector.add(new ASN1Integer(new BigInteger(1, s)));
+
+        byte[] encoded = null;
+        try {
+            encoded = (new DERSequence(vector)).getEncoded();
+        } catch (Exception e) {
+            logger.warn("encodeDERSignature时出现异常:" + e.getMessage());
+        }
+        return encoded;
+    }
+
+    private static byte[] format(byte[] value) {
+        if (value.length == 32) {
+            return value;
+        } else {
+            byte[] bytes = new byte[32];
+            if (value.length > 32) {
+                System.arraycopy(value, value.length - 32, bytes, 0, 32);
+            } else {
+                System.arraycopy(value, 0, bytes, 32 - value.length, value.length);
+            }
+            return bytes;
+        }
+    }
+
+
+    public static void main(String[] args) {
+        String requestData = "hello啊";
+        byte[] encrypt = encrypt("0452d60e72f6a3050d2f8e8f4505f874ef345e15da38fda8dd64b9e756b7231c056dff1674c4826ada424cc78ea36fd58afc50bcefb5d721bf25b179efac2ebb17", requestData.getBytes(StandardCharsets.UTF_8));
+        String temp = new String(encrypt);
+        byte[] decrypt = decrypt("c3509b6df8bdaf84c464daa1b6fa11a8fca77b0e4a6f076ee68487f288278a85", encrypt);
+        System.out.println("解密完成"+new String(decrypt));
+
+        String encodeToString = Base64.getEncoder().encodeToString(encrypt);
+        byte[] decode = Base64.getDecoder().decode(encodeToString);
+        byte[] decrypt1 = decrypt("c3509b6df8bdaf84c464daa1b6fa11a8fca77b0e4a6f076ee68487f288278a85", decode);
+        System.out.println("解密完成1"+new String(decrypt1));
+
+        String base64 = "eyJtc2ciOiLns7vnu5/lvILluLjvvIzor7fnqI3lkI7lho3or5UiLCJkYXRhIjpudWxsLCJjb2RlIjoiNTAwIn0=";
+        byte[] decode1 = Base64.getDecoder().decode(base64);
+        String decode2 = new String(decode1);
+        byte[] decryptbyte = decrypt("83BA7EC821D35F4CB31FF9A51C1EFA520FC52AF828C2337F88E91CF119B07F44", decode1);
+        System.out.println("解密完成"+new String(decryptbyte));
+    }
+}
diff --git a/fw-cbs/src/main/webapp/WEB-INF/web.xml b/fw-cbs/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 00000000..d80081d1
--- /dev/null
+++ b/fw-cbs/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
+         version="4.0">
+</web-app>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index fc53bd54..e6a78b18 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
         <module>base-webapp</module>
         <module>base-core</module>
 <!--        <module>fw-bip</module>-->
-<!--        <module>fw-cbs</module>-->
+        <module>fw-cbs</module>
 <!--        <module>fw-dd</module>-->
 <!--        <module>fw-grpU8</module>-->
 <!--        <module>fw-nc</module>-->