From d919e26796ec5a6f78fc0b665840207f185f1274 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期四, 22 二月 2024 15:25:20 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeConsumeMapper.java                             |   53 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeLossMapper.xml                                               |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java                    |   59 
 pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/PipIrrWebChatApplication.java         |   28 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/enums/LastOperateENUM.java           |   24 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java            |  131 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoCancel.java                |   34 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/flowMonitoring/FlowmeterSv.java       |   16 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWallet.java                                   |   65 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWalletRecharge.java                             |   41 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockSv.java                        |   14 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletCtrl.java                      |  441 ++++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrDivideMapper.xml                                             |    8 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml                                            |  161 +
 pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/result/WebChatResultCode.java         |   23 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/enums/RefundStatusENUM.java          |   21 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoToAudit.java                   |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWalletRefund.java                               |   52 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletSv.java                        |  225 ++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrFlowMonitoringMapper.xml                                     |    9 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoTransaction.java           |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/block/BlockSv.java                          |    3 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeCardOperate.java                              |    9 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideSv.java                  |   15 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeGeneral.java                                  |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalSv.java                    |   14 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java              |  262 +-
 pipIrr-platform/pipIrr-web/pipIrr-web-webchat/.gitignore                                                               |   33 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml                                        |  410 ++-
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletMapper.xml                                             |  110 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRefundMapper.xml                                             |  246 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webUtil/QueryResultVo.java                                   |    7 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransactionStatistics.java                      |    6 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrFlowmeterMapper.xml                                          |    8 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletRechargeMapper.java                      |   34 
 pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/config/WebFilterConfiguration.java    |   52 
 pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/config/WebListenerConfiguration.java  |   69 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java                             |   18 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java                    |   14 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/qo/QueryVo.java                      |   25 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java                  |   42 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoSummary.java                   |   30 
 pipIrr-platform/pipIrr-web/pipIrr-web-webchat/mvnw.cmd                                                                 |  205 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRefundMapper.java                              |   60 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml                                               |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/test/java/com/dy/pipirrWebChat/PipIrrWebWebchatApplicationTests.java |   13 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleSv.java                            |   27 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaRolePermissionsMapper.xml                                    |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserSv.java                            |   15 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoReceipt.java               |   28 
 pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml                                                |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-webchat/.mvn/wrapper/maven-wrapper.jar                                           |    0 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoReceipt.java                                    |   76 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoCommonOperate.java         |   39 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java                                    |    4 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeActiveCardMapper.xml                                         |    8 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeUnlockMapper.xml                                             |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/resources/log4j2.yml                                            |   73 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/qo/QoWalletRecharge.java             |   28 
 pipIrr-platform/pipIrr-web/pipIrr-web-webchat/pom.xml                                                                  |  139 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java                        |   14 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoOperate.java                                    |   55 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossSv.java                            |   30 
 pipIrr-platform/pipIrr-web/pipIrr-web-webchat/.mvn/wrapper/maven-wrapper.properties                                    |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java          |   14 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml                                         |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/flowMonitoring/FlowMonitoringSv.java  |   17 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardSv.java                |   14 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java                |   14 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTradeDetails.java                               |   66 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeRefund.java                                   |  112 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWallet.java                                     |   33 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeReversalMapper.xml                                           |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java                      |  168 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelSv.java                        |   14 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeConsumeMapper.xml                                            |  200 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoRecharge.java                                   |    5 
 pipIrr-platform/pipIrr-web/pipIrr-web-webchat/mvnw                                                                     |  308 +++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java                         |   87 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeConsume.java                                  |   97 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml                                             |    8 
 pipIrr-platform/pipIrr-web/pom.xml                                                                                     |    1 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml                                         |    8 
 /dev/null                                                                                                              |   50 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/util/AmountToChinese.java                              |   57 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRechargeMapper.xml                                           |    8 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletMapper.java                              |   34 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletRechargeMapper.xml                                     |  155 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCancelMapper.xml                                             |    8 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWalletRecharge.java                           |   89 
 pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/resources/application.yml                                       |   18 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWalletConsume.java                              |   37 
 92 files changed, 4,287 insertions(+), 1,031 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webUtil/QueryResultVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webUtil/QueryResultVo.java
index ceaa58f..16d5841 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webUtil/QueryResultVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webUtil/QueryResultVo.java
@@ -64,7 +64,12 @@
             this.pageSize = 1 ;
         }
         if(this.pageSize == null || this.pageSize <= 0){
-            this.pageSize = 1 ;//渚涗笅闈綔涓洪櫎鏁�
+            /**
+             * 鏈卞疂姘� 2024-01-30 淇敼
+             * 鏈紶鍏ュ垎椤靛弬鏁版椂锛屽彇鍏ㄩ儴璁板綍
+             */
+            //this.pageSize = 1 ;//渚涗笅闈綔涓洪櫎鏁�
+            this.pageSize = 10000 ;//渚涗笅闈綔涓洪櫎鏁�
         }
 
         pageTotal = (int)Math.ceil((itemTotal==null?0.0D:itemTotal.doubleValue())/pageSize);
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java
index 1acd2b6..00cb1f0 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java
@@ -4,20 +4,19 @@
 import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
 import com.dy.pipIrrGlobal.voSe.*;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
 
 /**
  * @author ZhuBaoMin
- * @date 2024-01-18 19:28
- * @LastEditTime 2024-01-18 19:28
+ * @date 2024-02-02 16:00
+ * @LastEditTime 2024-02-02 16:00
  * @Description
  */
 
 @Mapper
-public interface SeCardOperateMapper extends BaseMapper {
+public interface SeCardOperateMapper extends BaseMapper<SeCardOperate> {
     int deleteByPrimaryKey(Long id);
 
     int insert(SeCardOperate record);
@@ -57,44 +56,8 @@
      * @param params
      * @return
      */
-    List<VoTransaction> getTransactions(Map<?, ?> params);
-
-    /**
-     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇璐按姹囨�诲拰璐崱姹囨�伙紝鑾峰彇浜ゆ槗鏄庣粏浣跨敤
-     * @param params
-     * @return
-     */
-    Map getTransactionSums(Map<?, ?> params);
-
-    /**
-     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗缁熻璁板綍鏁�
-     * @param params
-     * @return
-     */
-    Long getTransactionStatisticsRecordCount(Map<?, ?> params);
-
-    /**
-     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗缁熻璁板綍
-     * @param params
-     * @return
-     */
-    List<VoTransactionStatistics> getTransactionStatistics(Map<?, ?> params);
-
-    /**
-     * 鏍瑰熀鎸囧畾鏉′欢鑾峰彇绗旀暟鍚堣銆佸疄鏀堕噾棰濆悎璁°�佽禒閫侀噾棰濆悎璁�
-     * @param params
-     * @return
-     */
-    Map getTransactionStatisticsSums(Map<?, ?> params);
-
-    /**
-     * 鑾峰彇鎸囧畾鏃ユ湡銆佹寚瀹氭敮浠樻柟寮忓疄鏀堕噾棰濆悎璁�
-     * @param tradeDate
-     * @param paymentId
-     * @return
-     */
-    //Float getPaymentSums(Map<?, ?> params);
-    Float getPaymentSums(@Param("tradeDate") String tradeDate, @Param("paymentId") Long paymentId);
+    /*List<VoTransaction> getTransactions(Map<?, ?> params);*/
+    List<VoTradeDetails> getTransactions(Map<?, ?> params);
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇寮�鍗¤褰曟暟
@@ -108,7 +71,7 @@
      * @param params
      * @return
      */
-    List<VoActiveCardNew> getActiveCards(Map<?, ?> params);
+    List<VoActiveCard> getActiveCards(Map<?, ?> params);
 
 
     /**
@@ -124,4 +87,42 @@
      * @return
      */
     List<VoReissueCard> getReissueCards(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇閫氱敤鎿嶄綔璁板綍鏁伴噺
+     * 娉ㄩ攢銆佹寕澶便�佸啿姝c�佽В閿侀�氱敤
+     * @param params
+     * @return
+     */
+    Long getCommonOperationRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇閫氱敤鎿嶄綔璁板綍
+     * 娉ㄩ攢銆佹寕澶便�佸啿姝c�佽В閿侀�氱敤
+     * @param params
+     * @return
+     */
+    List<VoOperate> getCommonOperations(Map<?, ?> params);
+
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃鏁�
+     * @param params
+     * @return
+     */
+    Long getReceiptsRecordCount(Map<?, ?> params);
+
+    /***
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃
+     * @param params
+     * @return
+     */
+    List<VoReceipt> getReceipts(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鏀惰垂閲戦鍚堣
+     * @param params
+     * @return
+     */
+    Double getTotalAmount(Map<?, ?> params);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeConsumeMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeConsumeMapper.java
new file mode 100644
index 0000000..918b3e2
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeConsumeMapper.java
@@ -0,0 +1,53 @@
+package com.dy.pipIrrGlobal.daoSe;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoSe.SeConsume;
+import com.dy.pipIrrGlobal.voSe.VoWalletConsume;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-30 15:44
+ * @LastEditTime 2024-01-30 15:44
+ * @Description 鐢靛瓙閽卞寘娑堣垂Mapper鎺ュ彛
+ */
+
+@Mapper
+public interface SeConsumeMapper extends BaseMapper {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(SeConsume record);
+
+    int insertSelective(SeConsume record);
+
+    SeConsume selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(SeConsume record);
+
+    int updateByPrimaryKey(SeConsume record);
+
+    /**
+     * 鏍规嵁鍐滄埛ID鑾峰彇娑堣垂姹囨�昏褰�
+     * @param clientId
+     * @return
+     */
+    Map getWalletConsumeSum(@Param("clientId") Long clientId);
+
+    /**
+     * 鏍规嵁鍐滄埛ID鑾峰彇鐢靛瓙閽卞寘娑堣垂璁板綍鏁�
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /***
+     * 鏍规嵁鍐滄埛ID鑾峰彇鐢靛瓙閽卞寘娑堣垂璁板綍
+     * @param params
+     * @return
+     */
+    List<VoWalletConsume> getWalletConsumes(Map<?, ?> params);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java
index 0e230af..a60681b 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeGeneral;
 import com.dy.pipIrrGlobal.voSe.VoGeneral;
+import com.dy.pipIrrGlobal.voSe.VoTradeDetails;
 import com.dy.pipIrrGlobal.voSe.VoTransactionStatistics;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -63,14 +64,14 @@
      * @param params
      * @return
      */
-    Long getToAuditRecordCount(Map<?, ?> params);
+    //Long getToAuditRecordCount(Map<?, ?> params);
 
     /**
-     * 璐㈠姟瀵硅处瀹℃牳椤碉紝鏀堕摱鍛�+鏃ユ湡鍒嗙粍锛屾帓闄や氦鏄撶被鍨嬪垎缁�
+     * 寮�鍗$郴缁熶氦鏄撶粺璁★紝鏀堕摱鍛�+鏃ユ湡+绫诲瀷鍒嗙粍
      * @param params
      * @return
      */
-    List<VoTransactionStatistics> getToAudit(Map<?, ?> params);
+    List<VoTransactionStatistics> getSummaries(Map<?, ?> params);
 
     /**
      * 鑾峰彇鎸囧畾鏃ユ湡銆佹寚瀹氭敹閾跺憳銆佹寚瀹氭敮浠樻柟寮忓疄鏀堕噾棰濆悎璁�
@@ -81,9 +82,16 @@
     Float getPaymentSums(@Param("tradeDate") String tradeDate, @Param("cashierId") Long cashierId, @Param("paymentId") Long paymentId);
 
     /**
-     * 鏍瑰熀鎸囧畾鏃ユ湡銆佹寚瀹氭敹閾跺憳鑾峰彇绗旀暟鍚堣銆佸疄鏀堕噾棰濆悎璁°�佽禒閫侀噾棰濆悎璁�
+     * 鏍规嵁鏀堕摱鍛業D鍙婃棩鏈熻幏鍙栬储鍔″璐浜ゆ槗鏄庣粏璁板綍鏁�
      * @param params
      * @return
      */
-    Map getTransactionStatisticsSums(Map<?, ?> params);
+    Long getTradeDetailsRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鏀堕摱鍛業D鍙婃棩鏈熻幏鍙栬储鍔″璐浜ゆ槗鏄庣粏璁板綍
+     * @param params
+     * @return
+     */
+    List<VoTradeDetails> getTradeDetails(Map<?, ?> params);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRefundMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRefundMapper.java
new file mode 100644
index 0000000..f8aba9d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRefundMapper.java
@@ -0,0 +1,60 @@
+package com.dy.pipIrrGlobal.daoSe;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoSe.SeRefund;
+import com.dy.pipIrrGlobal.voSe.VoWalletRefund;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-30 15:45
+ * @LastEditTime 2024-01-30 15:45
+ * @Description 鐢靛瓙閽卞寘閫�娆綧apper鎺ュ彛
+ */
+
+@Mapper
+public interface SeRefundMapper  extends BaseMapper {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(SeRefund record);
+
+    int insertSelective(SeRefund record);
+
+    SeRefund selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(SeRefund record);
+
+    int updateByPrimaryKey(SeRefund record);
+
+    /**
+     * 鏍规嵁閽卞寘ID鑾峰彇寰呭鏍哥殑閫�娆剧敵璇峰璞�
+     * @param walletId
+     * @return
+     */
+    SeRefund getRefundByWallerId(@Param("walletId") Long walletId);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢靛瓙閽卞寘閫�娆捐褰曟暟
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /***
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢靛瓙閽卞寘閫�娆捐褰�
+     * @param params
+     * @return
+     */
+    List<VoWalletRefund> getWalletRefunds(Map<?, ?> params);
+
+    /**
+     * 鑾峰彇鎸囧畾鏃ユ湡寰俊閫�娆撅紙鍙绠楀凡閫�鐨勶級鎬婚锛岃储鍔″璐﹀鏍搁〉浣跨敤
+     * @param tradeDate
+     * @return
+     */
+    Double getRefundSum(@Param("tradeDate") String tradeDate);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletMapper.java
index 1cc0294..45f3f55 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletMapper.java
@@ -2,17 +2,22 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeWallet;
+import com.dy.pipIrrGlobal.voSe.VoWallet;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author ZhuBaoMin
- * @date 2023/12/11 16:29
- * @LastEditTime 2023/12/11 16:29
- * @Description
+ * @date 2024-01-30 15:41
+ * @LastEditTime 2024-01-30 15:41
+ * @Description 鐢靛瓙閽卞寘Mapper鎺ュ彛
  */
 
 @Mapper
-public interface SeWalletMapper extends BaseMapper<SeWallet> {
+public interface SeWalletMapper extends BaseMapper {
     int deleteByPrimaryKey(Long id);
 
     int insert(SeWallet record);
@@ -24,4 +29,25 @@
     int updateByPrimaryKeySelective(SeWallet record);
 
     int updateByPrimaryKey(SeWallet record);
+
+    /**
+     * 鏍规嵁鍐滄埛ID鑾峰彇鐢靛瓙閽卞寘瀵硅薄
+     * @param clientId
+     * @return
+     */
+    SeWallet getWalletByClientId(@Param("clientId") Long clientId);
+
+    /**
+     * 鏍规嵁鍐滄埛濮撳悕鑾峰彇鐢靛瓙閽卞寘璐︽埛璁板綍鏁�
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /***
+     * 鏍规嵁鍐滄埛濮撳悕鑾峰彇鐢靛瓙閽卞寘璐︽埛璁板綍
+     * @param params
+     * @return
+     */
+    List<VoWallet> getWallets(Map<?, ?> params);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletRechargeHistoryMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletRechargeHistoryMapper.java
deleted file mode 100644
index 14eb8d2..0000000
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletRechargeHistoryMapper.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.dy.pipIrrGlobal.daoSe;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.dy.pipIrrGlobal.pojoSe.SeWalletRechargeHistory;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @author ZhuBaoMin
- * @date 2023/12/12 9:06
- * @LastEditTime 2023/12/12 9:06
- * @Description
- */
-
-@Mapper
-public interface SeWalletRechargeHistoryMapper extends BaseMapper<SeWalletRechargeHistory> {
-    int deleteByPrimaryKey(Long id);
-
-    int insert(SeWalletRechargeHistory record);
-
-    int insertSelective(SeWalletRechargeHistory record);
-
-    SeWalletRechargeHistory selectByPrimaryKey(Long id);
-
-    int updateByPrimaryKeySelective(SeWalletRechargeHistory record);
-
-    int updateByPrimaryKey(SeWalletRechargeHistory record);
-}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletRechargeMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletRechargeMapper.java
index 77ab6cb..a417b9e 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletRechargeMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletRechargeMapper.java
@@ -2,17 +2,22 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeWalletRecharge;
+import com.dy.pipIrrGlobal.voSe.VoWalletRecharge;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author ZhuBaoMin
- * @date 2023/12/12 9:06
- * @LastEditTime 2023/12/12 9:06
- * @Description
+ * @date 2024-01-30 15:44
+ * @LastEditTime 2024-01-30 15:44
+ * @Description 鐢靛瓙閽卞寘鍏呭�糓apper鎺ュ彛
  */
 
 @Mapper
-public interface SeWalletRechargeMapper extends BaseMapper<SeWalletRecharge> {
+public interface SeWalletRechargeMapper extends BaseMapper {
     int deleteByPrimaryKey(Long id);
 
     int insert(SeWalletRecharge record);
@@ -24,4 +29,25 @@
     int updateByPrimaryKeySelective(SeWalletRecharge record);
 
     int updateByPrimaryKey(SeWalletRecharge record);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢靛瓙閽卞寘鍏呭�艰褰曟暟
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /***
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢靛瓙閽卞寘鍏呭�艰褰�
+     * @param params
+     * @return
+     */
+    List<VoWalletRecharge> getWalletRecharges(Map<?, ?> params);
+
+    /**
+     * 鑾峰彇鎸囧畾鏃ユ湡寰俊鏀舵鎬婚锛岃储鍔″璐﹀鏍搁〉浣跨敤
+     * @param tradeDate
+     * @return
+     */
+    Double getRechargeSum(@Param("tradeDate") String tradeDate);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeCardOperate.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeCardOperate.java
index 21e51cb..d35244d 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeCardOperate.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeCardOperate.java
@@ -17,7 +17,7 @@
 /**
  * @author ZhuBaoMin
  * @date 2024-01-18 19:10
- * @LastEditTime 2024-01-18 19:10
+ * @LastEditTime 2024-02-02 16:00
  * @Description
  */
 
@@ -96,6 +96,13 @@
     private Float gift;
 
     /**
+     * 杩旇繕閲戦;琛ユ墸鎿嶄綔鏃惰繑杩樼殑閲戦
+     */
+    @Schema(description = "杩旇繕閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "杩旇繕閲戦涓嶅皬浜巤min}", min = 0)
+    private Float refundAmount;
+
+    /**
      * 闈炰氦鏄撻噾棰�;琛ュ崱閲戦銆佽ˉ鎵i噾棰濄�佸墿浣欓噾棰濓紙瑙i攣锛�
      */
     @Schema(description = "闈炰氦鏄撻噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeConsume.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeConsume.java
new file mode 100644
index 0000000..de233af
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeConsume.java
@@ -0,0 +1,97 @@
+package com.dy.pipIrrGlobal.pojoSe;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.dy.common.po.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-30 15:44
+ * @LastEditTime 2024-01-30 15:44
+ * @Description 鐢靛瓙閽卞寘娑堣垂瀹炰綋
+ */
+
+@TableName(value="se_consume", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鐢靛瓙閽卞寘娑堣垂瀹炰綋")
+public class SeConsume implements BaseEntity {
+    public static final long serialVersionUID = 202401301552003L;
+
+    /**
+    * 涓婚敭
+    */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    @Schema(description = "瀹炰綋id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long id;
+
+    /**
+    * 閽卞寘ID
+    */
+    @Schema(description = "閽卞寘ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    //@NotNull(message = "閽卞寘ID涓嶈兘涓虹┖")
+    private Long walletId;
+
+    /**
+    * 鍐滄埛ID
+    */
+    @Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "鍐滄埛ID涓嶈兘涓虹┖")
+    private Long clientId;
+
+    /**
+    * 閽卞寘浣欓
+    */
+    @Schema(description = "閽卞寘浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message = "閽卞寘浣欓涓嶈兘灏忎簬0")
+    private Double money;
+
+    /**
+    * 娑堣垂閲戦
+    */
+    @Schema(description = "娑堣垂閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message = "娑堣垂閲戦涓嶈兘灏忎簬0")
+    @NotNull(message = "娑堣垂閲戦涓嶈兘涓虹┖")
+    private Double consumption;
+
+    /**
+    * 娑堣垂鍚庝綑棰�
+    */
+    @Schema(description = "娑堣垂鍚庝綑棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message = "娑堣垂鍚庝綑棰濅笉鑳藉皬浜�0")
+    private Double afterConsume;
+
+    /**
+    * 鐢ㄦ按鏃堕暱
+    */
+    @Schema(description = "鐢ㄦ按鏃堕暱", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message = "鐢ㄦ按鏃堕暱涓嶈兘灏忎簬0")
+    private Double duration;
+
+    /**
+    * 寮�闃�鏃堕棿
+    */
+    @Schema(description = "寮�闃�鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "寮�闃�鏃堕棿涓嶈兘涓虹┖")
+    private Date vot;
+
+    /**
+    * 鍏抽榾鏃堕棿
+    */
+    @Schema(description = "鍏抽榾鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "鍏抽榾鏃堕棿涓嶈兘涓虹┖")
+    private Date vct;
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeGeneral.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeGeneral.java
index 9301699..b3943e2 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeGeneral.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeGeneral.java
@@ -69,11 +69,11 @@
     private Double gift;
 
     /**
-     * 鎬婚
+     * 杩旇繕閲戦
      */
-    @Schema(description = "鎬婚", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    @NotNull(message = "鎬婚涓嶈兘涓虹┖")
-    private Double totalAmount;
+    @Schema(description = "杩旇繕閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "杩旇繕閲戦涓嶈兘涓虹┖")
+    private Double refundAmount;
 
     /**
      * 浜ゆ槗鏃ユ湡
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeRefund.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeRefund.java
new file mode 100644
index 0000000..6ed10fb
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeRefund.java
@@ -0,0 +1,112 @@
+package com.dy.pipIrrGlobal.pojoSe;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.dy.common.po.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+import org.hibernate.validator.constraints.Length;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-30 15:45
+ * @LastEditTime 2024-01-30 15:45
+ * @Description 鐢靛瓙閽卞寘閫�娆惧疄浣�
+ */
+
+@TableName(value="se_refund", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鐢靛瓙閽卞寘閫�娆惧疄浣�")
+public class SeRefund implements BaseEntity {
+    public static final long serialVersionUID = 202401301552004L;
+
+    /**
+    * 涓婚敭
+    */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    @Schema(description = "瀹炰綋id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long id;
+
+    /**
+    * 閽卞寘ID
+    */
+    @Schema(description = "閽卞寘ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long walletId;
+
+    /**
+    * 鍐滄埛ID
+    */
+    @Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "鍐滄埛ID涓嶈兘涓虹┖")
+    private Long clientId;
+
+    /**
+    * 閽卞寘浣欓
+    */
+    @Schema(description = "閽卞寘浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message = "閽卞寘浣欓涓嶈兘灏忎簬0")
+    private Double money;
+
+    /**
+    * 閫�娆鹃噾棰�
+    */
+    @Schema(description = "閫�娆鹃噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message = "娑堥��娆鹃噾棰濅笉鑳藉皬浜�0")
+    //@NotNull(message = "閫�娆鹃噾棰濅笉鑳戒负绌�")
+    private Double refundAmount;
+
+    /**
+    * 閫�娆惧悗浣欓
+    */
+    @Schema(description = "閫�娆惧悗浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message = "閫�娆惧悗浣欓涓嶈兘灏忎簬0")
+    private Double afterRefund;
+
+    /**
+    * 鐢宠鏃堕棿
+    */
+    @Schema(description = "鐢宠鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Date applicationTime;
+
+    /**
+    * 閫�娆剧姸鎬�;1-鏈��娆撅紝2-宸查��娆�
+    */
+    @Schema(description = "閫�娆剧姸鎬�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 1, message = "閫�娆剧姸鎬佷笉鑳藉皬浜�1")
+    @Max(value = 2, message = "閫�娆剧姸鎬佷笉鑳藉ぇ浜�2")
+    private Byte refundStatus;
+
+    /**
+    * 瀹℃牳浜�
+    */
+    @Schema(description = "鎿嶄綔浜篒D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜篒D蹇呴』涓哄ぇ浜�0鐨勬暣鏁�")
+    private Long auditor;
+
+    /**
+    * 瀹℃牳鏃堕棿
+    */
+    @Schema(description = "瀹℃牳鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Date auditTime;
+
+    /**
+    * 瀹℃牳澶囨敞
+    */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "澶囨敞闀垮害灏忎簬{max}瀛�", min = 0, max = 200)
+    private String remarks;
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWallet.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWallet.java
index 14b8dd4..b3826d6 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWallet.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWallet.java
@@ -7,21 +7,18 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.dy.common.po.BaseEntity;
 import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.Positive;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
 import lombok.*;
-import org.hibernate.validator.constraints.Length;
 
 import java.util.Date;
 
 /**
  * @author ZhuBaoMin
- * @date 2023/12/11 16:29
- * @LastEditTime 2023/12/11 16:29
- * @Description
- */
-
-/**
- * 鐢靛瓙閽卞寘琛�
+ * @date 2024-01-30 15:41
+ * @LastEditTime 2024-01-30 15:41
+ * @Description 鐢靛瓙閽卞寘璐︽埛瀹炰綋
  */
 
 @TableName(value="se_wallet", autoResultMap = true)
@@ -30,36 +27,50 @@
 @ToString
 @NoArgsConstructor
 @AllArgsConstructor
-@Schema(name = "鐢靛瓙閽卞寘琛ㄥ疄浣�")
+@Schema(name = "鐢靛瓙閽卞寘璐︽埛瀹炰綋")
 public class SeWallet implements BaseEntity {
-    public static final long serialVersionUID = 202401151519005L;
+    public static final long serialVersionUID = 202401301552001L;
 
     /**
-    * 涓婚敭
-    */
+     * 涓婚敭
+     */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
     @TableId(type = IdType.INPUT)
     @Schema(description = "瀹炰綋id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    @Positive(message = "涓婚敭蹇呴』涓哄ぇ浜�0鐨勬暣鏁�")
     private Long id;
 
     /**
-    * 鐢ㄦ按鎴风紪鍙�
-    */
-    @Schema(description = "鍐滄埛缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    @Length(message = "鍐滄埛缂栧彿涓嶅皬浜巤min}", min = 1)
-    private Long clientid;
+     * 鍐滄埛ID
+     */
+    @Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "鍐滄埛ID涓嶈兘涓虹┖")
+    private Long clientId;
 
     /**
-    * 閽卞寘浣欓
-    */
-    @Schema(description = "閽卞寘浣欓", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Length(message = "閽卞寘浣欓涓嶅皬浜巤min}", min = 0)
-    private Float money;
+     * 閽卞寘浣欓
+     */
+    @Schema(description = "閽卞寘浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message = "閽卞寘浣欓涓嶈兘灏忎簬0")
+    private Double money;
 
     /**
-    * 鍒涘缓鏃堕棿
-    */
+     * 鏈�鍚庢搷浣�;1-寮�鎴凤紝2-鍏呭�硷紝3-娑堣垂锛�4-鐢宠閫�娆撅紝5-閫�娆惧鏍�
+     */
+    @Schema(description = "鎿嶄綔绫诲瀷", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 1, message = "鏈�鍚庢搷浣滀笉鑳藉皬浜�1")
+    @Max(value = 5, message = "鏈�鍚庢搷浣滀笉鑳藉ぇ浜�5")
+    private Byte lastOperate;
+
+    /**
+     * 鏈�鍚庢搷浣滄椂闂�
+     */
+    @Schema(description = "鏈�鍚庢搷浣滄椂闂�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Date lastOperateTime;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
     @Schema(description = "鍒涘缓鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    private Date createdt;
+    private Date createTime;
+
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWalletRecharge.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWalletRecharge.java
index 239ff8e..c22ad9f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWalletRecharge.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWalletRecharge.java
@@ -1,55 +1,82 @@
 package com.dy.pipIrrGlobal.pojoSe;
 
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.dy.common.po.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
+
 import java.util.Date;
 
 /**
  * @author ZhuBaoMin
- * @date 2023/12/12 9:06
- * @LastEditTime 2023/12/12 9:06
- * @Description
+ * @date 2024-01-30 15:44
+ * @LastEditTime 2024-01-30 15:44
+ * @Description 鐢靛瓙閽卞寘鍏呭�煎疄浣�
  */
-/**
-    * 鐢靛瓙閽卞寘鍏呭�艰〃
-    */
-public class SeWalletRecharge {
+
+@TableName(value="se_wallet_recharge", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鐢靛瓙閽卞寘鍏呭�煎疄浣�")
+public class SeWalletRecharge implements BaseEntity {
+    public static final long serialVersionUID = 202401301552002L;
+
     /**
-    * 涓婚敭
-    */
+     * 涓婚敭
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    @Schema(description = "瀹炰綋id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     private Long id;
 
     /**
-    * 閽卞寘缂栧彿
-    */
-    private Long walletid;
+     * 閽卞寘ID
+     */
+    @Schema(description = "閽卞寘ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    //@NotNull(message = "閽卞寘ID涓嶈兘涓虹┖")
+    private Long walletId;
 
     /**
-    * 鍐滄埛缂栧彿
-    */
-    private Long clientid;
+     * 鍐滄埛ID
+     */
+    @Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "鍐滄埛ID涓嶈兘涓虹┖")
+    private Long clientId;
 
     /**
-    * 閽卞寘浣欓
-    */
+     * 閽卞寘浣欓
+     */
+    @Schema(description = "閽卞寘浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message = "閽卞寘浣欓涓嶈兘灏忎簬0")
     private Double money;
 
     /**
-    * 鍏呭�奸噾棰�
-    */
+     * 鍏呭�奸噾棰�
+     */
+    @Schema(description = "鍏呭�奸噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message = "閽卞寘浣欓涓嶈兘灏忎簬0")
+    @NotNull(message = "鍏呭�奸噾棰濅笉鑳戒负绌�")
     private Double amount;
 
     /**
-    * 鍏呭�煎悗浣欓
-    */
-    private Double afterrecharge;
+     * 鍏呭�煎悗浣欓
+     */
+    @Schema(description = "鍏呭�煎悗浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message = "閽卞寘浣欓涓嶈兘灏忎簬0")
+    private Double afterRecharge;
 
     /**
-    * 鍏呭�兼椂闂�
-    */
-    private Date rechargedt;
-
-    /**
-    * 澶囨敞淇℃伅
-    */
-    private String remarks;
-
+     * 鍏呭�兼椂闂�
+     */
+    @Schema(description = "鍏呭�兼椂闂�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Date rechargeTime;
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWalletRechargeHistory.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWalletRechargeHistory.java
deleted file mode 100644
index 9a14c01..0000000
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWalletRechargeHistory.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.dy.pipIrrGlobal.pojoSe;
-
-import java.util.Date;
-
-/**
- * @author ZhuBaoMin
- * @date 2023/12/12 9:06
- * @LastEditTime 2023/12/12 9:06
- * @Description
- */
-/**
-    * 鐢靛瓙閽卞寘鍏呭�煎巻鍙茶〃
-    */
-public class SeWalletRechargeHistory {
-    /**
-    * 涓婚敭
-    */
-    private Long id;
-
-    /**
-    * 閽卞寘缂栧彿
-    */
-    private Long walletid;
-
-    /**
-    * 鍐滄埛缂栧彿
-    */
-    private Long clientid;
-
-    /**
-    * 閽卞寘浣欓
-    */
-    private Double money;
-
-    /**
-    * 鍏呭�奸噾棰�
-    */
-    private Double amount;
-
-    /**
-    * 鍏呭�煎悗浣欓
-    */
-    private Double afterrecharge;
-
-    /**
-    * 鍏呭�兼椂闂�
-    */
-    private Date rechargedt;
-
-    /**
-    * 澶囨敞淇℃伅
-    */
-    private String remarks;
-}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/util/AmountToChinese.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/util/AmountToChinese.java
new file mode 100644
index 0000000..ebcb3e0
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/util/AmountToChinese.java
@@ -0,0 +1,57 @@
+package com.dy.pipIrrGlobal.util;
+
+import java.math.BigDecimal;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-02-01 9:58
+ * @LastEditTime 2024-02-01 9:58
+ * @Description 閲戦鏁板瓧杞腑鏂囧ぇ鍐�
+ */
+public class AmountToChinese {
+    private static final String[] CN_UPPER_NUMBER = { "闆�", "澹�", "璐�", "鍙�", "鑲�", "浼�", "闄�", "鏌�", "鎹�", "鐜�" };
+    private static final String[] CN_UPPER_MONETRAY_UNIT = { "鍒�", "瑙�", "鍏�", "鎷�", "浣�", "浠�", "涓�", "鎷�", "浣�", "浠�", "浜�", "鎷�", "浣�", "浠�" };
+    private static final String CN_FULL = "鏁�";
+    private static final String CN_NEGATIVE = "璐�";
+    private static final int MONEY_PRECISION = 2;
+    private static final String CN_ZEOR_FULL = "闆跺厓" + CN_FULL;
+
+    public static String toChinese(BigDecimal amount) {
+        StringBuilder result = new StringBuilder();
+        amount = amount.setScale(MONEY_PRECISION, BigDecimal.ROUND_HALF_UP);
+        long number = amount.movePointRight(MONEY_PRECISION).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
+        boolean zero = true;
+        int unitIndex = 0;
+        if (number == 0) {
+            return CN_ZEOR_FULL;
+        }
+        if (number < 0) {
+            number = -number;
+            result.append(CN_NEGATIVE);
+        }
+        long scale = 10;
+        while (true) {
+            if (number == 0) {
+                break;
+            }
+            long numIndex = number % scale;
+            if (zero && numIndex == 0) {
+                zero = false;
+            }
+            if (numIndex != 0) {
+                result.insert(0, CN_UPPER_MONETRAY_UNIT[unitIndex])
+                        .insert(0, CN_UPPER_NUMBER[(int) numIndex]);
+                zero = false;
+            }
+            else if (!zero) {
+                result.insert(0, CN_UPPER_NUMBER[(int) numIndex]);
+            }
+            number = number / scale;
+            unitIndex++;
+        }
+        if (zero) {
+            result.append(CN_FULL);
+        }
+        return result.toString();
+    }
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java
index b9fd28b..522b01a 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java
@@ -31,8 +31,8 @@
     @Schema(title = "璧犻�侀噾棰�")
     private Float gift;
 
-    @Schema(title = "鎬婚")
-    private Float totalAmount;
+    @Schema(title = "杩旇繕閲戦")
+    private Float refundAmount;
 
     @Schema(title = "浜ゆ槗鏃ユ湡")
     private String operateDate;
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoOperate.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoOperate.java
new file mode 100644
index 0000000..8977940
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoOperate.java
@@ -0,0 +1,55 @@
+package com.dy.pipIrrGlobal.voSe;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-02-05 11:23
+ * @LastEditTime 2024-02-05 11:23
+ * @Description
+ */
+
+@Data
+@Schema(title = "閫氱敤鎿嶄綔璁板綍瑙嗗浘瀵硅薄")
+public class VoOperate {
+    private static final long serialVersionUID = 202402051126001L;
+
+    @Schema(title = "鍐滄埛濮撳悕")
+    private String clientName;
+
+    @Schema(title = "鍐滄埛缂栧彿")
+    private String clientNum;
+
+    @Schema(title = "姘村崱缂栧彿")
+    private String cardNum;
+
+    @Schema(title = "鎿嶄綔浜�")
+    private String operator;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(title = "鎿嶄綔鏃堕棿")
+    private Date operateDt;
+
+    //娉ㄩ攢鏌ヨ2涓繑鍥炲��
+    @Schema(title = "閫�鍥為噾棰�")
+    private Float refund;
+
+    @Schema(title = "閫�娆炬柟寮忓悕绉�")
+    private String refundTypeName;
+
+    //鎸傚け1涓繑鍥炲��
+    @Schema(title = "鍗$墖浣欓鍙婂啿姝e悗浣欓")
+    private Double money;
+
+    //鍐叉2涓繑鍥炲�硷紝鍐叉鍚庝綑棰濅笌鎸傚け鍏辩敤
+    @Schema(title = "鍐叉鍓嶄綑棰�")
+    private Double systemBalance;
+
+    //瑙i攣1涓繑鍥炲�硷紝涓庢寕澶卞叡鐢�
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoReceipt.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoReceipt.java
new file mode 100644
index 0000000..fad9f78
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoReceipt.java
@@ -0,0 +1,76 @@
+package com.dy.pipIrrGlobal.voSe;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-02-01 10:36
+ * @LastEditTime 2024-02-01 10:36
+ * @Description 鏀舵嵁瑙嗗浘瀵硅薄
+ */
+
+@Data
+@Schema(title = "鏀舵嵁瑙嗗浘瀵硅薄")
+public class VoReceipt {
+    private static final long serialVersionUID = 202402011037001L;
+
+    @Schema(title = "鏀堕摱鍛業D")
+    private String cashierId;
+
+    @Schema(title = "璁㈠崟鍙�")
+    private String orderNumber;
+
+    @Schema(title = "闀囧悕绉�")
+    private String townName;
+
+    @Schema(title = "鏉戝悕绉�")
+    private String villageName;
+
+    @Schema(title = "鍐滄埛濮撳悕")
+    private String name;
+
+    @Schema(title = "鐢佃瘽")
+    private String phone;
+
+    @Schema(title = "鍐滄埛缂栧彿")
+    private String clientNum;
+
+    @Schema(title = "姘村崱缂栧彿")
+    private String cardNum;
+
+    @Schema(title = "涓氬姟绫诲瀷")
+    private String operateType;
+
+    @Schema(title = "璐按閲戦")
+    private Double waterCost;
+
+    @Schema(title = "璐崱閲戦")
+    private Double cardCost;
+
+    @Schema(title = "鏀惰垂閲戦")
+    private Double amount;
+
+    @Schema(title = "姘村崱浣欓")
+    private Double money;
+
+    @Schema(title = "鏀粯鏂瑰紡")
+    private String paymentName;
+
+    @Schema(title = "鎿嶄綔浜�")
+    private String operatorName;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(title = "鎿嶄綔鏃堕棿")
+    private Date operateTime;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(title = "褰撳墠鏃堕棿")
+    private Date currentTime;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoRecharge.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoRecharge.java
index f90ecf5..365a623 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoRecharge.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoRecharge.java
@@ -35,11 +35,14 @@
     @Schema(title = "鍏呭�奸噾棰�")
     private Float amount;
 
+    @Schema(title = "杩斿洖閲戦")
+    private Float refundAmount;
+
     @Schema(title = "鍏呭�煎悗閲戦")
     private Float afterRecharge;
 
     @Schema(title = "鏀粯鏂瑰紡")
-    private Integer paymentId;
+    private String paymentName;
 
     @Schema(title = "姘翠环")
     private Float price;
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTradeDetails.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTradeDetails.java
new file mode 100644
index 0000000..3caef8d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTradeDetails.java
@@ -0,0 +1,66 @@
+package com.dy.pipIrrGlobal.voSe;
+
+import com.dy.common.po.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-02-01 20:38
+ * @LastEditTime 2024-02-01 20:38
+ * @Description
+ */
+
+@Data
+@Schema(title = "璐㈠姟瀵硅处锛屼氦鏄撴槑缁嗚鍥惧璞�")
+public class VoTradeDetails implements BaseEntity {
+    private static final long serialVersionUID = 202402012040001L;
+
+    @Schema(title = "鏀堕摱鍛業D")
+    private String cashierId;
+
+    @Schema(title = "鍖哄垝鍚嶇О涓�")
+    private String districtTitle;
+
+    @Schema(title = "鏉戝簞ID")
+    private String villageId;
+
+    @Schema(title = "鍐滄埛濮撳悕")
+    private String clientName;
+
+    @Schema(title = "鑱旂郴鐢佃瘽")
+    private String phone;
+
+    @Schema(title = "鍐滄埛缂栧彿")
+    private String clientNum;
+
+    @Schema(title = "涓氬姟绫诲瀷")
+    private String operateType;
+
+    @Schema(title = "浜ゆ槗閲戦")
+    private Double tradeAmount;
+
+    @Schema(title = "璐按閲戦")
+    private Double waterCost;
+
+    @Schema(title = "璐崱閲戦")
+    private Double cardCost;
+
+    @Schema(title = "璧犻�侀噾棰�")
+    private Double gift;
+
+    @Schema(title = "杩斿洖閲戦")
+    private Double refundAmount;
+
+    @Schema(title = "浠樻鏂瑰紡")
+    private String paymentName;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(title = "浜ゆ槗鏃堕棿")
+    private Date tradeTime;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransactionStatistics.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransactionStatistics.java
index 03d0d9e..28dd560 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransactionStatistics.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransactionStatistics.java
@@ -30,4 +30,10 @@
 
     @Schema(title = "璧犻�侀噾棰�")
     private Float gift;
+
+    @Schema(title = "杩旇繕閲戦")
+    private Float refundAmount;
+
+    @Schema(title = "鏀堕摱鍛業D")
+    private String cashierId;
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWallet.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWallet.java
new file mode 100644
index 0000000..1dbb3a8
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWallet.java
@@ -0,0 +1,33 @@
+package com.dy.pipIrrGlobal.voSe;
+
+import com.dy.common.po.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-31 16:15
+ * @LastEditTime 2024-01-31 16:15
+ * @Description
+ */
+
+@Data
+@Schema(title = "鐢靛瓙閽卞寘璐︽埛瑙嗗浘瀵硅薄")
+public class VoWallet implements BaseEntity {
+    private static final long serialVersionUID = 202401311618001L;
+
+    @Schema(title = "鍐滄埛ID")
+    private String clientId;
+
+    @Schema(title = "鍐滄埛濮撳悕")
+    private String name;
+
+    @Schema(title = "鍐滄埛缂栧彿")
+    private String clientNum;
+
+    @Schema(title = "鎵嬫満鍙�")
+    private String phone;
+
+    @Schema(title = "鐢靛瓙閽卞寘浣欓")
+    private Double money;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWalletConsume.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWalletConsume.java
new file mode 100644
index 0000000..6abcf8b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWalletConsume.java
@@ -0,0 +1,37 @@
+package com.dy.pipIrrGlobal.voSe;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-31 18:23
+ * @LastEditTime 2024-01-31 18:23
+ * @Description
+ */
+
+@Data
+@Schema(title = "鐢靛瓙閽卞寘娑堣垂瑙嗗浘瀵硅薄")
+public class VoWalletConsume {
+    private static final long serialVersionUID = 202401311824001L;
+
+    @Schema(title = "娑堣垂閲戦")
+    private Double consumption;
+
+    @Schema(title = "鐢ㄦ按鏃堕暱")
+    private Double duration;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(title = "寮�闃�鏃堕棿")
+    private Date vot;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(title = "鍏抽榾鏃堕棿")
+    private Date vct;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWalletRecharge.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWalletRecharge.java
new file mode 100644
index 0000000..7d9ea1e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWalletRecharge.java
@@ -0,0 +1,41 @@
+package com.dy.pipIrrGlobal.voSe;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-31 16:43
+ * @LastEditTime 2024-01-31 16:43
+ * @Description
+ */
+
+@Data
+@Schema(title = "鐢靛瓙閽卞寘鍏呭�艰鍥惧璞�")
+public class VoWalletRecharge {
+    private static final long serialVersionUID = 202401311644001L;
+
+    @Schema(title = "鍐滄埛濮撳悕")
+    private String name;
+
+    @Schema(title = "鍐滄埛缂栧彿")
+    private String clientNum;
+
+    @Schema(title = "鎵嬫満鍙�")
+    private String phone;
+
+    @Schema(title = "鍏呭�奸噾棰�")
+    private Double amount;
+
+    @Schema(title = "鐢靛瓙閽卞寘浣欓")
+    private Double afterRecharge;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(title = "鍏呭�兼椂闂�")
+    private Date rechargeTime;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWalletRefund.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWalletRefund.java
new file mode 100644
index 0000000..7d0dd24
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoWalletRefund.java
@@ -0,0 +1,52 @@
+package com.dy.pipIrrGlobal.voSe;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-31 18:29
+ * @LastEditTime 2024-01-31 18:29
+ * @Description
+ */
+
+@Data
+@Schema(title = "鐢靛瓙閽卞寘閫�娆捐鍥惧璞�")
+public class VoWalletRefund {
+    private static final long serialVersionUID = 202401311830001L;
+
+    @Schema(title = "鍐滄埛濮撳悕")
+    private String name;
+
+    @Schema(title = "鍐滄埛缂栧彿")
+    private String clientNum;
+
+    @Schema(title = "鎵嬫満鍙�")
+    private String phone;
+
+    @Schema(title = "鐢宠閫�娆鹃噾棰�")
+    private Double refundAmount;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(title = "鐢宠鏃堕棿")
+    private Date applicationTime;
+
+    @Schema(title = "閫�娆剧姸鎬佷唬鐮�")
+    private Byte refundStatus;
+
+    @Schema(title = "閫�娆剧姸鎬佸悕绉�")
+    private String refundStatusName;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(title = "瀹℃牳鏃堕棿")
+    private Date auditTime;
+
+    @Schema(title = "瀹℃牳澶囨敞")
+    private String remarks;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
index 28bf7d0..ffa34fd 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -112,6 +112,10 @@
         webPort: 8085
         actutorPort: 9085
         idSuffix: 7
+    webchat:
+        webPort: 8086
+        actutorPort: 9086
+        idSuffix: 8
 
 #椤圭洰缂栧彿
 #projectCode:
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaRolePermissionsMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaRolePermissionsMapper.xml
index 9568ad5..e7fbfb0 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaRolePermissionsMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaRolePermissionsMapper.xml
@@ -129,8 +129,10 @@
       </if>
     </where>
     ORDER BY role.operate_dt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
     </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml
index 00deab6..ccf499f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml
@@ -317,9 +317,11 @@
             </if>
         </where>
         ORDER BY user.id DESC
-        <if test="pageCurr != null and pageSize != null">
-            LIMIT ${pageCurr}, ${pageSize}
-        </if>
+        <trim prefix="limit " >
+            <if test="start != null and count != null">
+                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+            </if>
+        </trim>
     </select>
 
     <!--鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇瑙掕壊ID鍒楄〃-->
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
index aa36478..f139fd2 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
@@ -215,9 +215,11 @@
       </if>
     </where>
     ORDER BY con.operateDt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 
   <!--鏍规嵁鎺у埗鍣ㄥ湴鍧�鑾峰彇鎺у埗鍣ㄥ垪琛�-->
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrDivideMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrDivideMapper.xml
index 00f1458..7a5d5f3 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrDivideMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrDivideMapper.xml
@@ -283,9 +283,11 @@
       </if>
     </where>
     ORDER BY divi.operateDt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 
   <!--鏍规嵁鍒嗘按鎴縄D閫昏緫鍒犻櫎鍒嗘按鎴�-->
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrFlowMonitoringMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrFlowMonitoringMapper.xml
index 2914ee1..c0d4f0e 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrFlowMonitoringMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrFlowMonitoringMapper.xml
@@ -248,9 +248,10 @@
             </if>
         </where>
         ORDER BY pmofl.operateDt DESC
-        <if test="pageCurr != null and pageSize != null">
-            LIMIT ${pageCurr}, ${pageSize}
-        </if>
-
+        <trim prefix="limit " >
+            <if test="start != null and count != null">
+                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+            </if>
+        </trim>
     </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrFlowmeterMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrFlowmeterMapper.xml
index 1912ac5..9a6cf6d 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrFlowmeterMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrFlowmeterMapper.xml
@@ -207,8 +207,10 @@
       </if>
     </where>
     ORDER BY pfm.operateDt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeActiveCardMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeActiveCardMapper.xml
index aaed05f..f7aa962 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeActiveCardMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeActiveCardMapper.xml
@@ -231,8 +231,10 @@
       </if>
     </where>
     ORDER BY act.operateDt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCancelMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCancelMapper.xml
index 2644c82..2e153c8 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCancelMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCancelMapper.xml
@@ -186,8 +186,10 @@
       </if>
     </where>
     ORDER BY can.operateDt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
index c16ceaf..3114482 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
@@ -13,8 +13,9 @@
     <result column="price" jdbcType="FLOAT" property="price" />
     <result column="card_cost" jdbcType="INTEGER" property="cardCost" />
     <result column="gift" jdbcType="FLOAT" property="gift" />
+    <result column="refund_amount" jdbcType="FLOAT" property="refundAmount" />
     <result column="no_trade_amount" jdbcType="FLOAT" property="noTradeAmount" />
-    <result column="operate_type_id" jdbcType="BIGINT" property="operateType" />
+    <result column="operate_type" jdbcType="TINYINT" property="operateType" />
     <result column="payment_id" jdbcType="BIGINT" property="paymentId" />
     <result column="remarks" jdbcType="VARCHAR" property="remarks" />
     <result column="operator" jdbcType="BIGINT" property="operator" />
@@ -23,7 +24,7 @@
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, card_id, client_id, money, system_balance, trade_amount, price, card_cost, gift, 
-    no_trade_amount, operate_type_id, payment_id, remarks, `operator`, operate_dt
+    refund_amount, no_trade_amount, operate_type, payment_id, remarks, `operator`, operate_dt
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
@@ -42,15 +43,15 @@
     insert into se_card_operate (id, card_id, client_id, 
       money, system_balance, trade_amount, 
       price, card_cost, gift, 
-      no_trade_amount, operate_type, payment_id,
-      remarks, `operator`, operate_dt
-      )
+      refund_amount, no_trade_amount, operate_type, 
+      payment_id, remarks, `operator`, 
+      operate_dt)
     values (#{id,jdbcType=BIGINT}, #{cardId,jdbcType=BIGINT}, #{clientId,jdbcType=BIGINT}, 
       #{money,jdbcType=FLOAT}, #{systemBalance,jdbcType=FLOAT}, #{tradeAmount,jdbcType=FLOAT}, 
       #{price,jdbcType=FLOAT}, #{cardCost,jdbcType=INTEGER}, #{gift,jdbcType=FLOAT}, 
-      #{noTradeAmount,jdbcType=FLOAT}, #{operateType,jdbcType=BIGINT}, #{paymentId,jdbcType=BIGINT},
-      #{remarks,jdbcType=VARCHAR}, #{operator,jdbcType=BIGINT}, #{operateDt,jdbcType=TIMESTAMP}
-      )
+      #{refundAmount,jdbcType=FLOAT}, #{noTradeAmount,jdbcType=FLOAT}, #{operateType,jdbcType=TINYINT}, 
+      #{paymentId,jdbcType=BIGINT}, #{remarks,jdbcType=VARCHAR}, #{operator,jdbcType=BIGINT}, 
+      #{operateDt,jdbcType=TIMESTAMP})
   </insert>
   <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeCardOperate">
     <!--@mbg.generated-->
@@ -83,11 +84,14 @@
       <if test="gift != null">
         gift,
       </if>
+      <if test="refundAmount != null">
+        refund_amount,
+      </if>
       <if test="noTradeAmount != null">
         no_trade_amount,
       </if>
       <if test="operateType != null">
-        operate_type_id,
+        operate_type,
       </if>
       <if test="paymentId != null">
         payment_id,
@@ -130,11 +134,14 @@
       <if test="gift != null">
         #{gift,jdbcType=FLOAT},
       </if>
+      <if test="refundAmount != null">
+        #{refundAmount,jdbcType=FLOAT},
+      </if>
       <if test="noTradeAmount != null">
         #{noTradeAmount,jdbcType=FLOAT},
       </if>
       <if test="operateType != null">
-        #{operateType,jdbcType=BIGINT},
+        #{operateType,jdbcType=TINYINT},
       </if>
       <if test="paymentId != null">
         #{paymentId,jdbcType=BIGINT},
@@ -178,11 +185,14 @@
       <if test="gift != null">
         gift = #{gift,jdbcType=FLOAT},
       </if>
+      <if test="refundAmount != null">
+        refund_amount = #{refundAmount,jdbcType=FLOAT},
+      </if>
       <if test="noTradeAmount != null">
         no_trade_amount = #{noTradeAmount,jdbcType=FLOAT},
       </if>
       <if test="operateType != null">
-        operate_type_id = #{operateType,jdbcType=BIGINT},
+        operate_type = #{operateType,jdbcType=TINYINT},
       </if>
       <if test="paymentId != null">
         payment_id = #{paymentId,jdbcType=BIGINT},
@@ -210,8 +220,9 @@
       price = #{price,jdbcType=FLOAT},
       card_cost = #{cardCost,jdbcType=INTEGER},
       gift = #{gift,jdbcType=FLOAT},
+      refund_amount = #{refundAmount,jdbcType=FLOAT},
       no_trade_amount = #{noTradeAmount,jdbcType=FLOAT},
-      operate_type_id = #{operateType,jdbcType=BIGINT},
+      operate_type = #{operateType,jdbcType=TINYINT},
       payment_id = #{paymentId,jdbcType=BIGINT},
       remarks = #{remarks,jdbcType=VARCHAR},
       `operator` = #{operator,jdbcType=BIGINT},
@@ -226,8 +237,10 @@
     FROM se_card_operate ope
         INNER JOIN se_client_card card ON ope.card_id = card.id
         INNER JOIN se_client cli ON ope.client_id = cli.id
+        INNER JOIN ba_user us ON ope.operator = us.id
+        Left JOIN se_payment_method pay ON ope.payment_id = pay.id
     <where>
-      AND ope.operate_type = 2
+      AND ope.operate_type in(2, 5)
       <if test = "clientName != null and clientName !=''">
         AND cli.name like CONCAT('%',#{clientName},'%')
       </if>
@@ -253,21 +266,25 @@
   <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鍏呭�艰褰�-->
   <select id="getRecharges" resultType="com.dy.pipIrrGlobal.voSe.VoRecharge">
     SELECT
-        CAST(ope.id AS char) AS id ,
+        CAST(ope.id AS char) AS id,
         cli.name AS clientName,
         cli.clientNum,
-        card.cardNum,
-        ope.trade_amount AS amount,
-        (ope.money + ope.trade_amount) AS afterRecharge,
-        ope.payment_id,
+        CAST(card.cardNum AS char) AS cardNum,
+        IFNULL(ope.trade_amount, 0) AS amount,
+        IFNULL(ope.refund_amount, 0) AS refundAmount,
+        (IFNULL(ope.money, 0) + IFNULL(ope.trade_amount, 0)) AS afterRecharge,
+        -- 	ope.payment_id AS paymentId,
+        pay.name AS paymentName,
         ope.price,
-        (SELECT `name` FROM ba_user WHERE id =  ope.operator) AS operator,
+        us.name AS operator,
         ope.operate_dt
     FROM se_card_operate ope
-        INNER JOIN se_client_card card ON ope.card_id = card.id
+    INNER JOIN se_client_card card ON ope.card_id = card.id
         INNER JOIN se_client cli ON ope.client_id = cli.id
+        INNER JOIN ba_user us ON ope.operator = us.id
+        Left JOIN se_payment_method pay ON ope.payment_id = pay.id
     <where>
-      AND ope.operate_type = 2
+      AND ope.operate_type in(2, 5)
       <if test = "clientName != null and clientName !=''">
         AND cli.name like CONCAT('%',#{clientName},'%')
       </if>
@@ -289,171 +306,57 @@
       </if>
     </where>
     ORDER BY ope.operate_dt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 
   <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍鏁�-->
   <select id="getTransactionRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
     SELECT
         COUNT(*) AS recordCount
-    FROM se_card_operate ope
-        INNER JOIN se_client cli ON ope.client_id = cli.id
-        INNER JOIN se_client_card card ON ope.card_id = card.id
-        INNER JOIN ba_user user ON ope.operator = user.id
-        INNER JOIN se_payment_method pay ON ope.payment_id = pay.id
+    FROM v_trade_details
     <where>
-      AND ope.operate_type IN(1,2,3,4)
       <if test = "villageId != null and villageId > 0">
-        AND cli.villageId = ${villageId}
-      </if>
-
-      <if test = "cardNum != null and cardNum >0">
-        AND card.cardNum = ${cardNum}
+        AND villageId = ${villageId}
       </if>
 
       <if test = "operateTimeStart != null and operateTimeStop != null">
-        AND ope.operate_dt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
+        AND tradeTime BETWEEN #{operateTimeStart} AND #{operateTimeStop}
+      </if>
+
+      <if test = "cashierId != null and cashierId > 0">
+        AND cashierId = ${cashierId}
+      </if>
+
+      <if test = "tradeTime != null">
+        AND tradeTime = #{tradeTime}
       </if>
     </where>
   </select>
 
   <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍-->
-  <select id="getTransactions" resultType="com.dy.pipIrrGlobal.voSe.VoTransaction">
-    SELECT
-        ope.id AS orderNumber,
-        cli.villageId,
-        cli.districtTitle,
-        cli.clientNum,
-        cli.`name`,
-        card.cardNum,
-        cli.idCard,
-        cli.phone,
-        (CASE operate_type
-            WHEN 1 THEN '寮�鍗�'
-            WHEN 2 THEN '鍏呭��'
-            WHEN 3 THEN '閿�鍗�'
-            WHEN 4 THEN '琛ュ崱'
-        END) AS operateType,
-        ope.operate_dt AS operateTime,
-        IFNULL(ope.money, 0) AS money,
-        IFNULL(ope.trade_amount, 0) AS waterCost,
-        IFNULL(ope.gift, 0) AS gift,
-        IFNULL(ope.card_cost, 0) AS cardCost,
-        pay.`name` paymentMethod,
-        user.name AS operatorName
-    FROM se_card_operate ope
-        INNER JOIN se_client cli ON ope.client_id = cli.id
-        INNER JOIN se_client_card card ON ope.card_id = card.id
-        INNER JOIN ba_user user ON ope.operator = user.id
-        INNER JOIN se_payment_method pay ON ope.payment_id = pay.id
+  <select id="getTransactions" resultType="com.dy.pipIrrGlobal.voSe.VoTradeDetails">
+    SELECT * FROM v_trade_details
     <where>
-      AND ope.operate_type IN(1,2,3,4)
       <if test = "villageId != null and villageId > 0">
-        AND cli.villageId = ${villageId}
-      </if>
-
-      <if test = "cardNum != null and cardNum >0">
-        AND card.cardNum = ${cardNum}
+        AND villageId = ${villageId}
       </if>
 
       <if test = "operateTimeStart != null and operateTimeStop != null">
-        AND ope.operate_dt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
+        AND tradeTime BETWEEN #{operateTimeStart} AND #{operateTimeStop}
       </if>
 
       <if test = "cashierId != null and cashierId > 0">
-        AND user.id = ${cashierId}
+        AND cashierId = ${cashierId}
       </if>
     </where>
-    ORDER BY ope.operate_dt
+    ORDER BY tradeTime
     <if test="pageCurr != null and pageSize != null">
       LIMIT ${pageCurr}, ${pageSize}
     </if>
-  </select>
-
-  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璐按姹囨�诲拰璐崱姹囨�伙紝鑾峰彇浜ゆ槗鏄庣粏浣跨敤-->
-  <select id="getTransactionSums" resultType="java.util.Map">
-    SELECT
-        IFNULL(SUM(trade_amount),0) AS waterCost,
-        IFNULL(SUM(card_cost),0) AS cardCost
-    FROM se_card_operate ope
-        INNER JOIN se_client cli ON ope.client_id = cli.id
-        INNER JOIN se_client_card card ON ope.card_id = card.id
-        INNER JOIN ba_user user ON ope.operator = user.id
-        INNER JOIN se_payment_method pay ON ope.payment_id = pay.id
-    <where>
-      AND ope.operate_type IN(1,2,3,4)
-      <if test = "villageId != null and villageId > 0">
-        AND cli.villageId = ${villageId}
-      </if>
-
-      <if test = "cardNum != null and cardNum >0">
-        AND card.cardNum = ${cardNum}
-      </if>
-
-      <if test = "operateTimeStart != null and operateTimeStop != null">
-        AND ope.operate_dt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
-      </if>
-    </where>
-  </select>
-
-
-  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗缁熻璁板綍鏁�-->
-  <select id="getTransactionStatisticsRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
-    SELECT
-        COUNT(*) AS recordCount
-    FROM v_transactionstatistics
-    <where>
-      <if test = "operateTimeStart != null and operateTimeStop != null">
-        AND tradeDate BETWEEN #{operateTimeStart} AND #{operateTimeStop}
-      </if>
-    </where>
-  </select>
-
-  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗缁熻璁板綍-->
-  <select id="getTransactionStatistics" resultType="com.dy.pipIrrGlobal.voSe.VoTransactionStatistics">
-    SELECT * FROM v_transactionstatistics
-    <where>
-      <if test = "operateTimeStart != null and operateTimeStop != null">
-        AND tradeDate BETWEEN #{operateTimeStart} AND #{operateTimeStop}
-      </if>
-    </where>
-    ORDER BY tradeDate
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
-  </select>
-
-  <!--鏍瑰熀鎸囧畾鏉′欢鑾峰彇绗旀暟鍚堣銆佸疄鏀堕噾棰濆悎璁°�佽禒閫侀噾棰濆悎璁�-->
-  <select id="getTransactionStatisticsSums" resultType="java.util.Map">
-    SELECT
-      SUM(count) AS totalCount,
-      SUM(received) AS totalReceived,
-      SUM(gift) AS totalGift
-    FROM v_transactionstatistics
-    <where>
-      <if test = "operateTimeStart != null and operateTimeStop != null">
-        AND tradeDate BETWEEN #{operateTimeStart} AND #{operateTimeStop}
-      </if>
-    </where>
-  </select>
-
-  <!--鑾峰彇鎸囧畾鏃ユ湡銆佹寚瀹氭敮浠樻柟寮忓疄鏀堕噾棰濆悎璁�-->
-  <select id="getPaymentSums" resultType="java.lang.Float">
-    SELECT
-      SUM(ope.trade_amount) AS tradeAmount
-    FROM se_card_operate ope
-    <where>
-      <if test = "tradeDate != null and tradeDate !=''">
-        AND Date(ope.operate_dt) = #{tradeDate}
-      </if>
-
-      <if test = "paymentId != null and paymentId >0">
-        AND ope.payment_id = ${paymentId}
-      </if>
-    </where>
-    GROUP BY ope.payment_id,  Date(ope.operate_dt)
   </select>
 
   <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇寮�鍗¤褰曟暟閲�-->
@@ -484,7 +387,7 @@
   </select>
 
   <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇寮�鍗¤褰�-->
-  <select id="getActiveCards" resultType="com.dy.pipIrrGlobal.voSe.VoActiveCardNew">
+  <select id="getActiveCards" resultType="com.dy.pipIrrGlobal.voSe.VoActiveCard">
     SELECT
     CAST(ope.id AS char) AS id ,
     cli.name AS clientName,
@@ -522,9 +425,11 @@
       </if>
     </where>
     ORDER BY ope.operate_dt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 
   <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇琛ュ崱璁板綍鏁伴噺-->
@@ -579,8 +484,185 @@
       </if>
     </where>
     ORDER BY ope.operate_dt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇閫氱敤鎿嶄綔璁板綍鏁伴噺-->
+  <select id="getCommonOperationRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    select
+        COUNT(*) AS recordCount
+    FROM se_card_operate ope
+        INNER JOIN se_client cli ON ope.client_id = cli.id
+        INNER JOIN se_client_card card ON ope.card_id = card.id
+        INNER JOIN ba_user us ON ope.operator = us.id
+    <where>
+      <if test = "operateType != null and operateType > 0">
+        AND ope.operate_type = ${operateType}
+      </if>
+
+      <if test = "clientName != null and clientName !=''">
+        AND cli.name like CONCAT('%',#{clientName},'%')
+      </if>
+
+      <if test = "cardNum != null and cardNum !=''">
+        AND card.cardNum like CONCAT('%',#{cardNum},'%')
+      </if>
+
+      <if test = "timeStart != null and timeStop != null">
+        AND ope.operate_dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇閫氱敤鎿嶄綔璁板綍-->
+  <select id="getCommonOperations" resultType="com.dy.pipIrrGlobal.voSe.VoOperate">
+    SELECT
+        cli.name AS clientName,
+        cli.clientNum,
+        CAST(card.cardNum AS char) AS cardNum,
+        us.name AS operator,
+        ope.operate_dt AS operateDt,
+        IFNULL(ope.trade_amount,0) AS refund,
+        (CASE
+            WHEN ope.payment_id = 1 THEN "鐜伴噾"
+        END) AS refundTypeName,
+        card.money,
+        IFNULL(ope.system_balance,0) AS systemBalance
+    FROM se_card_operate ope
+        INNER JOIN se_client cli ON ope.client_id = cli.id
+        INNER JOIN se_client_card card ON ope.card_id = card.id
+        INNER JOIN ba_user us ON ope.operator = us.id
+    <where>
+      <if test = "operateType != null and operateType > 0">
+        AND ope.operate_type = ${operateType}
+      </if>
+
+      <if test = "clientName != null and clientName !=''">
+        AND cli.name like CONCAT('%',#{clientName},'%')
+      </if>
+
+      <if test = "cardNum != null and cardNum !=''">
+        AND card.cardNum like CONCAT('%',#{cardNum},'%')
+      </if>
+
+      <if test = "timeStart != null and timeStop != null">
+        AND ope.operate_dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+    ORDER BY ope.operate_dt DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃鏁�-->
+  <select id="getReceiptsRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT
+    COUNT(*) AS recordCount
+    FROM se_card_operate ope
+    INNER JOIN se_client cli ON ope.client_id = cli.id
+    INNER JOIN se_client_card card ON ope.card_id = card.id
+    INNER JOIN se_payment_method pay ON ope.payment_id = pay.id
+    INNER JOIN ba_user us ON ope.operator = us.id
+    INNER JOIN ba_district vil ON cli.villageId = vil.id
+    INNER JOIN ba_district tow ON cli.townId = tow.id
+    <where>
+      AND ope.operate_type IN(1,2)
+      <if test = "operateId != null and operateId > 0">
+        AND ope.id = ${operateId}
+      </if>
+
+      <if test = "clientName != null and clientName !=''">
+        AND cli.name like CONCAT('%',#{clientName},'%')
+      </if>
+
+      <if test = "timeStart != null and timeStop != null">
+        AND ope.operate_dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃-->
+  <select id="getReceipts" resultType="com.dy.pipIrrGlobal.voSe.VoReceipt">
+    SELECT
+    CAST(ope.id AS char) AS orderNumber,
+    tow.name AS townName,
+    vil.name AS villageName,
+    cli.`name`,
+    cli.phone,
+    CAST(cli.clientNum AS char) AS clientNum,
+    CAST(card.cardNum AS char) AS cardNum,
+    (CASE
+    WHEN ope.operate_type = 1 THEN '寮�鍗�'
+    WHEN ope.operate_type = 2 THEN '鍏呭��'
+    END) AS operateType,
+    IFNULL(ope.trade_amount,0) AS waterCost,
+    IFNULL(ope.card_cost,0) AS cardCost,
+    (IFNULL(ope.trade_amount,0) + IFNULL(ope.card_cost,0)) AS amount,
+    card.money,
+    pay.`name` AS paymentName,
+    us.`name` AS operatorName,
+    ope.operate_dt AS operateTime,
+    NOW() AS currentTime
+    FROM se_card_operate ope
+    INNER JOIN se_client cli ON ope.client_id = cli.id
+    INNER JOIN se_client_card card ON ope.card_id = card.id
+    INNER JOIN se_payment_method pay ON ope.payment_id = pay.id
+    INNER JOIN ba_user us ON ope.operator = us.id
+    INNER JOIN ba_district vil ON cli.villageId = vil.id
+    INNER JOIN ba_district tow ON cli.townId = tow.id
+    <where>
+      AND ope.operate_type IN(1,2)
+      <if test = "operateId != null and operateId > 0">
+        AND ope.id = ${operateId}
+      </if>
+
+      <if test = "clientName != null and clientName !=''">
+        AND cli.name like CONCAT('%',#{clientName},'%')
+      </if>
+
+      <if test = "timeStart != null and timeStop != null">
+        AND ope.operate_dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+    ORDER BY ope.operate_dt DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鏀惰垂閲戦鍚堣-->
+  <select id="getTotalAmount" parameterType="java.util.Map" resultType="java.lang.Double">
+    SELECT
+    SUM(IFNULL(ope.trade_amount,0) + IFNULL(ope.card_cost,0)) AS totalAmount
+    FROM se_card_operate ope
+    INNER JOIN se_client cli ON ope.client_id = cli.id
+    INNER JOIN se_client_card card ON ope.card_id = card.id
+    INNER JOIN se_payment_method pay ON ope.payment_id = pay.id
+    INNER JOIN ba_user us ON ope.operator = us.id
+    INNER JOIN ba_district vil ON cli.villageId = vil.id
+    INNER JOIN ba_district tow ON cli.townId = tow.id
+    <where>
+      AND ope.operate_type IN(1,2)
+      <if test = "operateId != null and operateId > 0">
+        AND ope.id = ${operateId}
+      </if>
+
+      <if test = "clientName != null and clientName !=''">
+        AND cli.name like CONCAT('%',#{clientName},'%')
+      </if>
+
+      <if test = "timeStart != null and timeStop != null">
+        AND ope.operate_dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
   </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
index cc35013..fbd6120 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -381,8 +381,10 @@
       </if>
     </where>
     ORDER BY card.id
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml
index a191c70..5d33225 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml
@@ -384,9 +384,11 @@
       </if>
     </where>
     ORDER BY cli.operateDt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 
   <!--鏍规嵁鍐滄埛缂栧彿鑾峰彇5绾ц鏀垮尯鍒掍唬鐮�-->
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeConsumeMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeConsumeMapper.xml
new file mode 100644
index 0000000..5f5ffb9
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeConsumeMapper.xml
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dy.pipIrrGlobal.daoSe.SeConsumeMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeConsume">
+    <!--@mbg.generated-->
+    <!--@Table se_consume-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="wallet_id" jdbcType="BIGINT" property="walletId" />
+    <result column="client_id" jdbcType="BIGINT" property="clientId" />
+    <result column="money" jdbcType="FLOAT" property="money" />
+    <result column="consumption" jdbcType="FLOAT" property="consumption" />
+    <result column="after_consume" jdbcType="FLOAT" property="afterConsume" />
+    <result column="duration" jdbcType="FLOAT" property="duration" />
+    <result column="vot" jdbcType="TIMESTAMP" property="vot" />
+    <result column="vct" jdbcType="TIMESTAMP" property="vct" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, wallet_id, client_id, money, consumption, after_consume, duration, vot, vct
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from se_consume
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from se_consume
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeConsume">
+    <!--@mbg.generated-->
+    insert into se_consume (id, wallet_id, client_id, 
+      money, consumption, after_consume, 
+      duration, vot, vct
+      )
+    values (#{id,jdbcType=BIGINT}, #{walletId,jdbcType=BIGINT}, #{clientId,jdbcType=BIGINT}, 
+      #{money,jdbcType=FLOAT}, #{consumption,jdbcType=FLOAT}, #{afterConsume,jdbcType=FLOAT}, 
+      #{duration,jdbcType=FLOAT}, #{vot,jdbcType=TIMESTAMP}, #{vct,jdbcType=TIMESTAMP}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeConsume">
+    <!--@mbg.generated-->
+    insert into se_consume
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="walletId != null">
+        wallet_id,
+      </if>
+      <if test="clientId != null">
+        client_id,
+      </if>
+      <if test="money != null">
+        money,
+      </if>
+      <if test="consumption != null">
+        consumption,
+      </if>
+      <if test="afterConsume != null">
+        after_consume,
+      </if>
+      <if test="duration != null">
+        duration,
+      </if>
+      <if test="vot != null">
+        vot,
+      </if>
+      <if test="vct != null">
+        vct,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="walletId != null">
+        #{walletId,jdbcType=BIGINT},
+      </if>
+      <if test="clientId != null">
+        #{clientId,jdbcType=BIGINT},
+      </if>
+      <if test="money != null">
+        #{money,jdbcType=FLOAT},
+      </if>
+      <if test="consumption != null">
+        #{consumption,jdbcType=FLOAT},
+      </if>
+      <if test="afterConsume != null">
+        #{afterConsume,jdbcType=FLOAT},
+      </if>
+      <if test="duration != null">
+        #{duration,jdbcType=FLOAT},
+      </if>
+      <if test="vot != null">
+        #{vot,jdbcType=TIMESTAMP},
+      </if>
+      <if test="vct != null">
+        #{vct,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeConsume">
+    <!--@mbg.generated-->
+    update se_consume
+    <set>
+      <if test="walletId != null">
+        wallet_id = #{walletId,jdbcType=BIGINT},
+      </if>
+      <if test="clientId != null">
+        client_id = #{clientId,jdbcType=BIGINT},
+      </if>
+      <if test="money != null">
+        money = #{money,jdbcType=FLOAT},
+      </if>
+      <if test="consumption != null">
+        consumption = #{consumption,jdbcType=FLOAT},
+      </if>
+      <if test="afterConsume != null">
+        after_consume = #{afterConsume,jdbcType=FLOAT},
+      </if>
+      <if test="duration != null">
+        duration = #{duration,jdbcType=FLOAT},
+      </if>
+      <if test="vot != null">
+        vot = #{vot,jdbcType=TIMESTAMP},
+      </if>
+      <if test="vct != null">
+        vct = #{vct,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeConsume">
+    <!--@mbg.generated-->
+    update se_consume
+    set wallet_id = #{walletId,jdbcType=BIGINT},
+      client_id = #{clientId,jdbcType=BIGINT},
+      money = #{money,jdbcType=FLOAT},
+      consumption = #{consumption,jdbcType=FLOAT},
+      after_consume = #{afterConsume,jdbcType=FLOAT},
+      duration = #{duration,jdbcType=FLOAT},
+      vot = #{vot,jdbcType=TIMESTAMP},
+      vct = #{vct,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+
+  <!--鏍规嵁鍐滄埛ID鑾峰彇娑堣垂姹囨�昏褰�-->
+  <select id="getWalletConsumeSum" resultType="java.util.Map">
+    SELECT
+      cli.name AS clientName,
+      cli.clientNum,
+      wal.money,
+      (SELECT SUM(consumption) FROM se_consume WHERE client_id = cli.id) AS totalConsume
+    FROM se_client cli
+           INNER JOIN se_wallet wal ON wal.client_id = cli.id
+    <where>
+      <if test = "clientId != null and clientId > 0">
+        AND cli.id = ${clientId}
+      </if>
+    </where>
+
+  </select>
+
+  <!--鏍规嵁鍐滄埛ID鑾峰彇鐢靛瓙閽卞寘娑堣垂璁板綍鏁�-->
+  <select id="getRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT
+        COUNT(*) AS recordCount
+    FROM se_consume
+    <where>
+      <if test = "clientId != null and clientId > 0">
+        AND client_id = ${clientId}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鍐滄埛ID鑾峰彇鐢靛瓙閽卞寘娑堣垂璁板綍-->
+  <select id="getWalletConsumes" resultType="com.dy.pipIrrGlobal.voSe.VoWalletConsume">
+    SELECT
+        consumption,
+        duration,
+        vot,
+        vct
+    FROM se_consume
+    <where>
+      <if test = "clientId != null and clientId > 0">
+        AND client_id = ${clientId}
+      </if>
+    </where>
+    ORDER BY vct DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml
index 5dbd371..785e7b2 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml
@@ -9,13 +9,13 @@
     <result column="cashier_name" jdbcType="VARCHAR" property="cashierName" />
     <result column="trade_amount" jdbcType="FLOAT" property="tradeAmount" />
     <result column="gift" jdbcType="FLOAT" property="gift" />
-    <result column="total_amount" jdbcType="FLOAT" property="totalAmount" />
+    <result column="refund_amount" jdbcType="FLOAT" property="refundAmount" />
     <result column="operate_date" jdbcType="TIMESTAMP" property="operateDate" />
     <result column="audit_status" jdbcType="TINYINT" property="auditStatus" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, cashier_id, cashier_name, trade_amount, gift, total_amount, operate_date, audit_status
+    id, cashier_id, cashier_name, trade_amount, gift, refund_amount, operate_date, audit_status
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
@@ -32,10 +32,10 @@
   <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeGeneral">
     <!--@mbg.generated-->
     insert into se_general (id, cashier_id, cashier_name, 
-      trade_amount, gift, total_amount, 
+      trade_amount, gift, refund_amount,
       operate_date, audit_status)
     values (#{id,jdbcType=BIGINT}, #{cashierId,jdbcType=BIGINT}, #{cashierName,jdbcType=VARCHAR}, 
-      #{tradeAmount,jdbcType=FLOAT}, #{gift,jdbcType=FLOAT}, #{totalAmount,jdbcType=FLOAT}, 
+      #{tradeAmount,jdbcType=FLOAT}, #{gift,jdbcType=FLOAT}, #{refundAmount,jdbcType=FLOAT},
       #{operateDate,jdbcType=TIMESTAMP}, #{auditStatus,jdbcType=TINYINT})
   </insert>
   <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeGeneral">
@@ -57,8 +57,8 @@
       <if test="gift != null">
         gift,
       </if>
-      <if test="totalAmount != null">
-        total_amount,
+      <if test="refundAmount != null">
+        refund_amount,
       </if>
       <if test="operateDate != null">
         operate_date,
@@ -83,8 +83,8 @@
       <if test="gift != null">
         #{gift,jdbcType=FLOAT},
       </if>
-      <if test="totalAmount != null">
-        #{totalAmount,jdbcType=FLOAT},
+      <if test="refundAmount != null">
+        #{refundAmount,jdbcType=FLOAT},
       </if>
       <if test="operateDate != null">
         #{operateDate,jdbcType=TIMESTAMP},
@@ -110,8 +110,8 @@
       <if test="gift != null">
         gift = #{gift,jdbcType=FLOAT},
       </if>
-      <if test="totalAmount != null">
-        total_amount = #{totalAmount,jdbcType=FLOAT},
+      <if test="refundAmount != null">
+        refund_amount = #{refundAmount,jdbcType=FLOAT},
       </if>
       <if test="operateDate != null">
         operate_date = #{operateDate,jdbcType=TIMESTAMP},
@@ -129,7 +129,7 @@
       cashier_name = #{cashierName,jdbcType=VARCHAR},
       trade_amount = #{tradeAmount,jdbcType=FLOAT},
       gift = #{gift,jdbcType=FLOAT},
-      total_amount = #{totalAmount,jdbcType=FLOAT},
+      refund_amount = #{refundAmount,jdbcType=FLOAT},
       operate_date = #{operateDate,jdbcType=TIMESTAMP},
       audit_status = #{auditStatus,jdbcType=TINYINT}
     where id = #{id,jdbcType=BIGINT}
@@ -148,15 +148,43 @@
     SELECT
         us.id AS cashierId,
         us.`name` AS cashierName,
-        IFNULL(SUM(ope.trade_amount),0) AS tradeAmount,
+        (IFNULL(SUM(ope.trade_amount),0) + IFNULL(SUM(ope.card_cost),0)) AS tradeAmount,
         IFNULL(SUM(ope.gift),0) AS gift,
-        IFNULL((SUM(ope.trade_amount) + SUM(ope.gift)),0) AS totalAmount,
+        IFNULL(SUM(ope.refund_amount),0) AS refundAmount,
         Date(ope.operate_dt) AS operateDate,
         1 AS auditStatus
     FROM se_card_operate ope
         INNER JOIN ba_user us ON ope.operator = us.id
     WHERE Date(ope.operate_dt) = #{operateDate}
     GROUP BY ope.operator, Date(ope.operate_dt)
+
+    UNION ALL
+
+    SELECT
+        1000000 AS cashierId,
+        '寰俊' AS cashierName,
+        IFNULL(SUM(amount), 0) AS tradeAmount,
+        0 AS gift,
+        0 AS refundAmount,
+        Date(recharge_time) AS operateDate,
+        1 AS auditStatus
+    FROM se_wallet_recharge
+    WHERE Date(recharge_time) = #{operateDate}
+    GROUP BY Date(recharge_time)
+
+    UNION ALL
+
+    SELECT
+        1000000 AS cashierId,
+        '寰俊' AS cashierName,
+        IFNULL(-SUM(refund_amount), 0) AS tradeAmount,
+        0 AS gift,
+        0 AS refundAmount,
+        Date(audit_time) AS operateDate,
+        1 AS auditStatus
+    FROM se_refund
+    WHERE Date(audit_time) = #{operateDate}
+    GROUP BY Date(audit_time)
   </select>
 
   <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鎬昏处璁板綍鏁�-->
@@ -187,7 +215,7 @@
         cashier_name AS cashierName,
         trade_amount AS tradeAmount,
         gift,
-        total_amount AS totalAmount,
+        refund_amount AS refundAmount,
         Date(operate_date) AS operateDate,
         (CASE
           WHEN audit_status = 1 THEN "鏈鏍�"
@@ -209,9 +237,11 @@
       </if>
     </where>
     ORDER BY Date(operate_date) DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 
   <!--鑾峰彇鎸囧畾鏃ユ湡銆佹寚瀹氭敹閾跺憳銆佹寚瀹氭敮浠樻柟寮忓疄鏀堕噾棰濆悎璁�-->
@@ -235,55 +265,70 @@
     GROUP BY ope.payment_id,  Date(ope.operate_dt)
   </select>
 
-  <!--鏍瑰熀鎸囧畾鏃ユ湡銆佹寚瀹氭敹閾跺憳鑾峰彇绗旀暟鍚堣銆佸疄鏀堕噾棰濆悎璁°�佽禒閫侀噾棰濆悎璁�-->
-  <select id="getTransactionStatisticsSums" resultType="java.util.Map">
-    SELECT
-      SUM(count) AS totalCount,
-      SUM(received) AS totalReceived,
-      SUM(gift) AS totalGift
-    FROM v_transactionstatistics2
-    <where>
-      <if test = "tradeDate != null and tradeDate !=''">
-        AND tradeDate = #{tradeDate}
-      </if>
-
-      <if test = "cashierId != null and cashierId >0">
-        AND cashierId = ${cashierId}
-      </if>
-    </where>
-  </select>
-
   <!--  璐㈠姟瀵硅处瀹℃牳椤碉紝鏀堕摱鍛�+鏃ユ湡鍒嗙粍锛屾帓闄や氦鏄撶被鍨嬪垎缁勶紝璁板綍鏁�-->
-  <select id="getToAuditRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
-    SELECT
-    COUNT(*) AS recordCount
-    FROM v_transactionstatistics2
+<!--  <select id="getToAuditRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">-->
+<!--    SELECT-->
+<!--    COUNT(*) AS recordCount-->
+<!--    FROM v_trade_summary-->
+<!--    <where>-->
+<!--      <if test = "cashierId != null and cashierId > 0">-->
+<!--        AND cashierId = ${cashierId}-->
+<!--      </if>-->
+
+<!--      <if test = "tradeDate != null">-->
+<!--        AND tradeDate = #{tradeDate}-->
+<!--      </if>-->
+<!--    </where>-->
+<!--  </select>-->
+
+  <!--寮�鍗$郴缁熶氦鏄撶粺璁★紝鏀堕摱鍛�+鏃ユ湡+绫诲瀷鍒嗙粍-->
+  <select id="getSummaries" resultType="com.dy.pipIrrGlobal.voSe.VoTransactionStatistics">
+    SELECT * FROM v_trade_summary
     <where>
       <if test = "cashierId != null and cashierId > 0">
         AND cashierId = ${cashierId}
       </if>
 
-      <if test = "tradeDate != null">
-        AND tradeDate = #{tradeDate}
-      </if>
-    </where>
-  </select>
-
-  <!--璐㈠姟瀵硅处瀹℃牳椤碉紝鏀堕摱鍛�+鏃ユ湡鍒嗙粍锛屾帓闄や氦鏄撶被鍨嬪垎缁�-->
-  <select id="getToAudit" resultType="com.dy.pipIrrGlobal.voSe.VoTransactionStatistics">
-    SELECT * FROM v_transactionstatistics2
-    <where>
-      <if test = "cashierId != null and cashierId > 0">
-        AND cashierId = ${cashierId}
-      </if>
-
-      <if test = "tradeDate != null">
-        AND tradeDate = #{tradeDate}
+      <if test = "timeStart != null and timeStop != null">
+        AND Date(tradeDate) BETWEEN #{timeStart} AND #{timeStop}
       </if>
     </where>
     ORDER BY tradeDate
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+  </select>
+
+  <!--  鏍规嵁鏀堕摱鍛業D鍙婃棩鏈熻幏鍙栬储鍔″璐浜ゆ槗鏄庣粏璁板綍鏁�-->
+  <select id="getTradeDetailsRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT
+        COUNT(*) AS recordCount
+    FROM v_trade_details
+    <where>
+      <if test = "cashierId != null and cashierId > 0">
+        AND cashierId = ${cashierId}
+      </if>
+
+      <if test = "tradeDate != null">
+        AND Date(tradeTime) = #{tradeDate}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鏀堕摱鍛業D鍙婃棩鏈熻幏鍙栬储鍔″璐浜ゆ槗鏄庣粏璁板綍-->
+  <select id="getTradeDetails" resultType="com.dy.pipIrrGlobal.voSe.VoTradeDetails">
+    SELECT * FROM v_trade_details
+    <where>
+      <if test = "cashierId != null and cashierId > 0">
+        AND cashierId = ${cashierId}
+      </if>
+
+      <if test = "tradeDate != null">
+        AND Date(tradeTime) = #{tradeDate}
+      </if>
+    </where>
+    ORDER BY tradeTime
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeLossMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeLossMapper.xml
index fe12f52..6757e43 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeLossMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeLossMapper.xml
@@ -182,8 +182,10 @@
       </if>
     </where>
     ORDER BY loss.operateDt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRechargeMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRechargeMapper.xml
index 362da0b..e7edb52 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRechargeMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRechargeMapper.xml
@@ -258,8 +258,10 @@
       </if>
     </where>
     ORDER BY rec.operateDt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRefundMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRefundMapper.xml
new file mode 100644
index 0000000..e928160
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRefundMapper.xml
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dy.pipIrrGlobal.daoSe.SeRefundMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeRefund">
+    <!--@mbg.generated-->
+    <!--@Table se_refund-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="wallet_id" jdbcType="BIGINT" property="walletId" />
+    <result column="client_id" jdbcType="BIGINT" property="clientId" />
+    <result column="money" jdbcType="FLOAT" property="money" />
+    <result column="refund_amount" jdbcType="FLOAT" property="refundAmount" />
+    <result column="after_refund" jdbcType="FLOAT" property="afterRefund" />
+    <result column="application_time" jdbcType="TIMESTAMP" property="applicationTime" />
+    <result column="refund_status" jdbcType="TINYINT" property="refundStatus" />
+    <result column="auditor" jdbcType="BIGINT" property="auditor" />
+    <result column="audit_time" jdbcType="TIMESTAMP" property="auditTime" />
+    <result column="remarks" jdbcType="VARCHAR" property="remarks" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, wallet_id, client_id, money, refund_amount, after_refund, application_time, refund_status, 
+    auditor, audit_time, remarks
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from se_refund
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from se_refund
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeRefund">
+    <!--@mbg.generated-->
+    insert into se_refund (id, wallet_id, client_id, 
+      money, refund_amount, after_refund, 
+      application_time, refund_status, auditor, 
+      audit_time, remarks)
+    values (#{id,jdbcType=BIGINT}, #{walletId,jdbcType=BIGINT}, #{clientId,jdbcType=BIGINT}, 
+      #{money,jdbcType=FLOAT}, #{refundAmount,jdbcType=FLOAT}, #{afterRefund,jdbcType=FLOAT}, 
+      #{applicationTime,jdbcType=TIMESTAMP}, #{refundStatus,jdbcType=TINYINT}, #{auditor,jdbcType=BIGINT}, 
+      #{auditTime,jdbcType=TIMESTAMP}, #{remarks,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeRefund">
+    <!--@mbg.generated-->
+    insert into se_refund
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="walletId != null">
+        wallet_id,
+      </if>
+      <if test="clientId != null">
+        client_id,
+      </if>
+      <if test="money != null">
+        money,
+      </if>
+      <if test="refundAmount != null">
+        refund_amount,
+      </if>
+      <if test="afterRefund != null">
+        after_refund,
+      </if>
+      <if test="applicationTime != null">
+        application_time,
+      </if>
+      <if test="refundStatus != null">
+        refund_status,
+      </if>
+      <if test="auditor != null">
+        auditor,
+      </if>
+      <if test="auditTime != null">
+        audit_time,
+      </if>
+      <if test="remarks != null">
+        remarks,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="walletId != null">
+        #{walletId,jdbcType=BIGINT},
+      </if>
+      <if test="clientId != null">
+        #{clientId,jdbcType=BIGINT},
+      </if>
+      <if test="money != null">
+        #{money,jdbcType=FLOAT},
+      </if>
+      <if test="refundAmount != null">
+        #{refundAmount,jdbcType=FLOAT},
+      </if>
+      <if test="afterRefund != null">
+        #{afterRefund,jdbcType=FLOAT},
+      </if>
+      <if test="applicationTime != null">
+        #{applicationTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="refundStatus != null">
+        #{refundStatus,jdbcType=TINYINT},
+      </if>
+      <if test="auditor != null">
+        #{auditor,jdbcType=BIGINT},
+      </if>
+      <if test="auditTime != null">
+        #{auditTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="remarks != null">
+        #{remarks,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeRefund">
+    <!--@mbg.generated-->
+    update se_refund
+    <set>
+      <if test="walletId != null">
+        wallet_id = #{walletId,jdbcType=BIGINT},
+      </if>
+      <if test="clientId != null">
+        client_id = #{clientId,jdbcType=BIGINT},
+      </if>
+      <if test="money != null">
+        money = #{money,jdbcType=FLOAT},
+      </if>
+      <if test="refundAmount != null">
+        refund_amount = #{refundAmount,jdbcType=FLOAT},
+      </if>
+      <if test="afterRefund != null">
+        after_refund = #{afterRefund,jdbcType=FLOAT},
+      </if>
+      <if test="applicationTime != null">
+        application_time = #{applicationTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="refundStatus != null">
+        refund_status = #{refundStatus,jdbcType=TINYINT},
+      </if>
+      <if test="auditor != null">
+        auditor = #{auditor,jdbcType=BIGINT},
+      </if>
+      <if test="auditTime != null">
+        audit_time = #{auditTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="remarks != null">
+        remarks = #{remarks,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeRefund">
+    <!--@mbg.generated-->
+    update se_refund
+    set wallet_id = #{walletId,jdbcType=BIGINT},
+      client_id = #{clientId,jdbcType=BIGINT},
+      money = #{money,jdbcType=FLOAT},
+      refund_amount = #{refundAmount,jdbcType=FLOAT},
+      after_refund = #{afterRefund,jdbcType=FLOAT},
+      application_time = #{applicationTime,jdbcType=TIMESTAMP},
+      refund_status = #{refundStatus,jdbcType=TINYINT},
+      auditor = #{auditor,jdbcType=BIGINT},
+      audit_time = #{auditTime,jdbcType=TIMESTAMP},
+      remarks = #{remarks,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+
+  <!--鏍规嵁閽卞寘ID鑾峰彇寰呭鏍哥殑閫�娆剧敵璇峰璞�-->
+  <select id="getRefundByWallerId" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    select
+        <include refid="Base_Column_List" />
+    from se_refund
+    where refund_status = 1 AND wallet_id = ${walletId}
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢靛瓙閽卞寘閫�娆捐褰曟暟-->
+  <select id="getRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT
+        COUNT(*) AS recordCount
+    FROM se_refund ref
+        INNER JOIN se_client cli ON ref.client_id = cli.id
+    <where>
+      <if test = "refundStatus != null and refundStatus > 0">
+        AND ref.refund_status = ${refundStatus}
+      </if>
+
+      <if test = "clientName != null and clientName !=''">
+        AND cli.name like CONCAT('%',#{clientName},'%')
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢靛瓙閽卞寘閫�娆捐褰�-->
+  <select id="getWalletRefunds" resultType="com.dy.pipIrrGlobal.voSe.VoWalletRefund">
+    SELECT
+        cli.`name`,
+        cli.clientNum,
+        cli.phone,
+        ref.refund_amount AS refundAmount,
+        ref.application_time AS applicationTime,
+        ref.refund_status AS refundStatus,
+        (CASE
+            WHEN ref.refund_status = 1 THEN '鏈��娆�'
+            WHEN ref.refund_status = 2 THEN '宸查��娆�'
+        End) AS refundStatusName,
+        ref.audit_time AS auditTime,
+        ref.remarks
+    FROM se_refund ref
+        INNER JOIN se_client cli ON ref.client_id = cli.id
+    <where>
+      <if test = "refundStatus != null and refundStatus > 0">
+        AND ref.refund_status = ${refundStatus}
+      </if>
+
+      <if test = "clientName != null and clientName !=''">
+        AND cli.name like CONCAT('%',#{clientName},'%')
+      </if>
+    </where>
+    ORDER BY ref.application_time DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+
+  <!--鑾峰彇鎸囧畾鏃ユ湡寰俊閫�娆撅紙鍙绠楀凡閫�鐨勶級鎬婚锛岃储鍔″璐﹀鏍搁〉浣跨敤-->
+  <select id="getRefundSum" resultType="java.lang.Double">
+    SELECT
+        SUM(refund_amount) AS tradeAmount
+    FROM se_refund
+    <where>
+      AND refund_status = 2
+      <if test = "tradeDate != null and tradeDate !=''">
+        AND Date(audit_time) = #{tradeDate}
+      </if>
+    </where>
+    GROUP BY Date(audit_time)
+  </select>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeReversalMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeReversalMapper.xml
index 07d97ac..9e39644 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeReversalMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeReversalMapper.xml
@@ -181,8 +181,10 @@
       </if>
     </where>
     ORDER BY rev.operateDt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeUnlockMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeUnlockMapper.xml
index 50c0143..c892fa1 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeUnlockMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeUnlockMapper.xml
@@ -171,8 +171,10 @@
       </if>
     </where>
     ORDER BY unl.operateDt DESC
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletMapper.xml
index 0263487..59a7dcd 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletMapper.xml
@@ -5,13 +5,15 @@
     <!--@mbg.generated-->
     <!--@Table se_wallet-->
     <id column="id" jdbcType="BIGINT" property="id" />
-    <result column="clientId" jdbcType="BIGINT" property="clientid" />
+    <result column="client_id" jdbcType="BIGINT" property="clientId" />
     <result column="money" jdbcType="FLOAT" property="money" />
-    <result column="createDt" jdbcType="TIMESTAMP" property="createdt" />
+    <result column="last_operate" jdbcType="TINYINT" property="lastOperate" />
+    <result column="last_operate_time" jdbcType="TIMESTAMP" property="lastOperateTime" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, clientId, money, createDt
+    id, client_id, money, last_operate, last_operate_time, create_time
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
@@ -27,9 +29,12 @@
   </delete>
   <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWallet">
     <!--@mbg.generated-->
-    insert into se_wallet (id, clientId, money, createDt)
-    values (#{id,jdbcType=BIGINT}, #{clientid,jdbcType=BIGINT}, #{money,jdbcType=FLOAT}, 
-      #{createdt,jdbcType=TIMESTAMP})
+    insert into se_wallet (id, client_id, money, 
+      last_operate, last_operate_time, create_time
+      )
+    values (#{id,jdbcType=BIGINT}, #{clientId,jdbcType=BIGINT}, #{money,jdbcType=FLOAT}, 
+      #{lastOperate,jdbcType=TINYINT}, #{lastOperateTime,jdbcType=TIMESTAMP}, #{createTime,jdbcType=TIMESTAMP}
+      )
   </insert>
   <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWallet">
     <!--@mbg.generated-->
@@ -38,28 +43,40 @@
       <if test="id != null">
         id,
       </if>
-      <if test="clientid != null">
-        clientId,
+      <if test="clientId != null">
+        client_id,
       </if>
       <if test="money != null">
         money,
       </if>
-      <if test="createdt != null">
-        createDt,
+      <if test="lastOperate != null">
+        last_operate,
+      </if>
+      <if test="lastOperateTime != null">
+        last_operate_time,
+      </if>
+      <if test="createTime != null">
+        create_time,
       </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
         #{id,jdbcType=BIGINT},
       </if>
-      <if test="clientid != null">
-        #{clientid,jdbcType=BIGINT},
+      <if test="clientId != null">
+        #{clientId,jdbcType=BIGINT},
       </if>
       <if test="money != null">
         #{money,jdbcType=FLOAT},
       </if>
-      <if test="createdt != null">
-        #{createdt,jdbcType=TIMESTAMP},
+      <if test="lastOperate != null">
+        #{lastOperate,jdbcType=TINYINT},
+      </if>
+      <if test="lastOperateTime != null">
+        #{lastOperateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
       </if>
     </trim>
   </insert>
@@ -67,14 +84,20 @@
     <!--@mbg.generated-->
     update se_wallet
     <set>
-      <if test="clientid != null">
-        clientId = #{clientid,jdbcType=BIGINT},
+      <if test="clientId != null">
+        client_id = #{clientId,jdbcType=BIGINT},
       </if>
       <if test="money != null">
         money = #{money,jdbcType=FLOAT},
       </if>
-      <if test="createdt != null">
-        createDt = #{createdt,jdbcType=TIMESTAMP},
+      <if test="lastOperate != null">
+        last_operate = #{lastOperate,jdbcType=TINYINT},
+      </if>
+      <if test="lastOperateTime != null">
+        last_operate_time = #{lastOperateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
       </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
@@ -82,9 +105,56 @@
   <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWallet">
     <!--@mbg.generated-->
     update se_wallet
-    set clientId = #{clientid,jdbcType=BIGINT},
+    set client_id = #{clientId,jdbcType=BIGINT},
       money = #{money,jdbcType=FLOAT},
-      createDt = #{createdt,jdbcType=TIMESTAMP}
+      last_operate = #{lastOperate,jdbcType=TINYINT},
+      last_operate_time = #{lastOperateTime,jdbcType=TIMESTAMP},
+      create_time = #{createTime,jdbcType=TIMESTAMP}
     where id = #{id,jdbcType=BIGINT}
   </update>
+
+  <!--鏍规嵁鍐滄埛ID鑾峰彇鐢靛瓙閽卞寘瀵硅薄-->
+  <select id="getWalletByClientId" resultMap="BaseResultMap">
+    SELECT
+        <include refid="Base_Column_List" />
+    FROM se_wallet
+    WHERE client_id = ${clientId}
+    LIMIT 0,1
+  </select>
+
+  <!--鏍规嵁鍐滄埛濮撳悕鑾峰彇鐢靛瓙閽卞寘璐︽埛璁板綍鏁�-->
+  <select id="getRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT
+        COUNT(*) AS recordCount
+    FROM se_wallet wal
+    INNER JOIN se_client cli ON wal.client_id = cli.id
+    <where>
+      <if test = "clientName != null and clientName !=''">
+        AND cli.name like CONCAT('%',#{clientName},'%')
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鍐滄埛濮撳悕鑾峰彇鐢靛瓙閽卞寘璐︽埛璁板綍-->
+  <select id="getWallets" resultType="com.dy.pipIrrGlobal.voSe.VoWallet">
+    SELECT
+        CAST(cli.id AS char) AS clientId,
+        cli.`name`,
+        cli.clientNum,
+        cli.phone,
+        wal.money
+    FROM se_wallet wal
+        INNER JOIN se_client cli ON wal.client_id = cli.id
+    <where>
+      <if test = "clientName != null and clientName !=''">
+        AND cli.name like CONCAT('%',#{clientName},'%')
+      </if>
+    </where>
+    ORDER BY wal.last_operate_time DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletRechargeHistoryMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletRechargeHistoryMapper.xml
deleted file mode 100644
index d8bfcb9..0000000
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletRechargeHistoryMapper.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.dy.pipIrrGlobal.daoSe.SeWalletRechargeHistoryMapper">
-  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeWalletRechargeHistory">
-    <!--@mbg.generated-->
-    <!--@Table se_wallet_recharge_history-->
-    <id column="id" jdbcType="BIGINT" property="id" />
-    <result column="walletId" jdbcType="BIGINT" property="walletid" />
-    <result column="clientId" jdbcType="BIGINT" property="clientid" />
-    <result column="money" jdbcType="FLOAT" property="money" />
-    <result column="amount" jdbcType="FLOAT" property="amount" />
-    <result column="afterRecharge" jdbcType="FLOAT" property="afterrecharge" />
-    <result column="rechargeDt" jdbcType="TIMESTAMP" property="rechargedt" />
-    <result column="remarks" jdbcType="VARCHAR" property="remarks" />
-  </resultMap>
-  <sql id="Base_Column_List">
-    <!--@mbg.generated-->
-    id, walletId, clientId, money, amount, afterRecharge, rechargeDt, remarks
-  </sql>
-  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
-    <!--@mbg.generated-->
-    select 
-    <include refid="Base_Column_List" />
-    from se_wallet_recharge_history
-    where id = #{id,jdbcType=BIGINT}
-  </select>
-  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
-    <!--@mbg.generated-->
-    delete from se_wallet_recharge_history
-    where id = #{id,jdbcType=BIGINT}
-  </delete>
-  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWalletRechargeHistory">
-    <!--@mbg.generated-->
-    insert into se_wallet_recharge_history (id, walletId, clientId, 
-      money, amount, afterRecharge, 
-      rechargeDt, remarks)
-    values (#{id,jdbcType=BIGINT}, #{walletid,jdbcType=BIGINT}, #{clientid,jdbcType=BIGINT}, 
-      #{money,jdbcType=FLOAT}, #{amount,jdbcType=FLOAT}, #{afterrecharge,jdbcType=FLOAT}, 
-      #{rechargedt,jdbcType=TIMESTAMP}, #{remarks,jdbcType=VARCHAR})
-  </insert>
-  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWalletRechargeHistory">
-    <!--@mbg.generated-->
-    insert into se_wallet_recharge_history
-    <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="id != null">
-        id,
-      </if>
-      <if test="walletid != null">
-        walletId,
-      </if>
-      <if test="clientid != null">
-        clientId,
-      </if>
-      <if test="money != null">
-        money,
-      </if>
-      <if test="amount != null">
-        amount,
-      </if>
-      <if test="afterrecharge != null">
-        afterRecharge,
-      </if>
-      <if test="rechargedt != null">
-        rechargeDt,
-      </if>
-      <if test="remarks != null">
-        remarks,
-      </if>
-    </trim>
-    <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="id != null">
-        #{id,jdbcType=BIGINT},
-      </if>
-      <if test="walletid != null">
-        #{walletid,jdbcType=BIGINT},
-      </if>
-      <if test="clientid != null">
-        #{clientid,jdbcType=BIGINT},
-      </if>
-      <if test="money != null">
-        #{money,jdbcType=FLOAT},
-      </if>
-      <if test="amount != null">
-        #{amount,jdbcType=FLOAT},
-      </if>
-      <if test="afterrecharge != null">
-        #{afterrecharge,jdbcType=FLOAT},
-      </if>
-      <if test="rechargedt != null">
-        #{rechargedt,jdbcType=TIMESTAMP},
-      </if>
-      <if test="remarks != null">
-        #{remarks,jdbcType=VARCHAR},
-      </if>
-    </trim>
-  </insert>
-  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWalletRechargeHistory">
-    <!--@mbg.generated-->
-    update se_wallet_recharge_history
-    <set>
-      <if test="walletid != null">
-        walletId = #{walletid,jdbcType=BIGINT},
-      </if>
-      <if test="clientid != null">
-        clientId = #{clientid,jdbcType=BIGINT},
-      </if>
-      <if test="money != null">
-        money = #{money,jdbcType=FLOAT},
-      </if>
-      <if test="amount != null">
-        amount = #{amount,jdbcType=FLOAT},
-      </if>
-      <if test="afterrecharge != null">
-        afterRecharge = #{afterrecharge,jdbcType=FLOAT},
-      </if>
-      <if test="rechargedt != null">
-        rechargeDt = #{rechargedt,jdbcType=TIMESTAMP},
-      </if>
-      <if test="remarks != null">
-        remarks = #{remarks,jdbcType=VARCHAR},
-      </if>
-    </set>
-    where id = #{id,jdbcType=BIGINT}
-  </update>
-  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWalletRechargeHistory">
-    <!--@mbg.generated-->
-    update se_wallet_recharge_history
-    set walletId = #{walletid,jdbcType=BIGINT},
-      clientId = #{clientid,jdbcType=BIGINT},
-      money = #{money,jdbcType=FLOAT},
-      amount = #{amount,jdbcType=FLOAT},
-      afterRecharge = #{afterrecharge,jdbcType=FLOAT},
-      rechargeDt = #{rechargedt,jdbcType=TIMESTAMP},
-      remarks = #{remarks,jdbcType=VARCHAR}
-    where id = #{id,jdbcType=BIGINT}
-  </update>
-</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletRechargeMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletRechargeMapper.xml
index 127bceb..149a21a 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletRechargeMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletRechargeMapper.xml
@@ -5,17 +5,16 @@
     <!--@mbg.generated-->
     <!--@Table se_wallet_recharge-->
     <id column="id" jdbcType="BIGINT" property="id" />
-    <result column="walletId" jdbcType="BIGINT" property="walletid" />
-    <result column="clientId" jdbcType="BIGINT" property="clientid" />
+    <result column="wallet_id" jdbcType="BIGINT" property="walletId" />
+    <result column="client_id" jdbcType="BIGINT" property="clientId" />
     <result column="money" jdbcType="FLOAT" property="money" />
     <result column="amount" jdbcType="FLOAT" property="amount" />
-    <result column="afterRecharge" jdbcType="FLOAT" property="afterrecharge" />
-    <result column="rechargeDt" jdbcType="TIMESTAMP" property="rechargedt" />
-    <result column="remarks" jdbcType="VARCHAR" property="remarks" />
+    <result column="after_recharge" jdbcType="FLOAT" property="afterRecharge" />
+    <result column="recharge_time" jdbcType="TIMESTAMP" property="rechargeTime" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, walletId, clientId, money, amount, afterRecharge, rechargeDt, remarks
+    id, wallet_id, client_id, money, amount, after_recharge, recharge_time
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
@@ -31,12 +30,12 @@
   </delete>
   <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWalletRecharge">
     <!--@mbg.generated-->
-    insert into se_wallet_recharge (id, walletId, clientId, 
-      money, amount, afterRecharge, 
-      rechargeDt, remarks)
-    values (#{id,jdbcType=BIGINT}, #{walletid,jdbcType=BIGINT}, #{clientid,jdbcType=BIGINT}, 
-      #{money,jdbcType=FLOAT}, #{amount,jdbcType=FLOAT}, #{afterrecharge,jdbcType=FLOAT}, 
-      #{rechargedt,jdbcType=TIMESTAMP}, #{remarks,jdbcType=VARCHAR})
+    insert into se_wallet_recharge (id, wallet_id, client_id, 
+      money, amount, after_recharge, 
+      recharge_time)
+    values (#{id,jdbcType=BIGINT}, #{walletId,jdbcType=BIGINT}, #{clientId,jdbcType=BIGINT}, 
+      #{money,jdbcType=FLOAT}, #{amount,jdbcType=FLOAT}, #{afterRecharge,jdbcType=FLOAT}, 
+      #{rechargeTime,jdbcType=TIMESTAMP})
   </insert>
   <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWalletRecharge">
     <!--@mbg.generated-->
@@ -45,11 +44,11 @@
       <if test="id != null">
         id,
       </if>
-      <if test="walletid != null">
-        walletId,
+      <if test="walletId != null">
+        wallet_id,
       </if>
-      <if test="clientid != null">
-        clientId,
+      <if test="clientId != null">
+        client_id,
       </if>
       <if test="money != null">
         money,
@@ -57,25 +56,22 @@
       <if test="amount != null">
         amount,
       </if>
-      <if test="afterrecharge != null">
-        afterRecharge,
+      <if test="afterRecharge != null">
+        after_recharge,
       </if>
-      <if test="rechargedt != null">
-        rechargeDt,
-      </if>
-      <if test="remarks != null">
-        remarks,
+      <if test="rechargeTime != null">
+        recharge_time,
       </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
         #{id,jdbcType=BIGINT},
       </if>
-      <if test="walletid != null">
-        #{walletid,jdbcType=BIGINT},
+      <if test="walletId != null">
+        #{walletId,jdbcType=BIGINT},
       </if>
-      <if test="clientid != null">
-        #{clientid,jdbcType=BIGINT},
+      <if test="clientId != null">
+        #{clientId,jdbcType=BIGINT},
       </if>
       <if test="money != null">
         #{money,jdbcType=FLOAT},
@@ -83,14 +79,11 @@
       <if test="amount != null">
         #{amount,jdbcType=FLOAT},
       </if>
-      <if test="afterrecharge != null">
-        #{afterrecharge,jdbcType=FLOAT},
+      <if test="afterRecharge != null">
+        #{afterRecharge,jdbcType=FLOAT},
       </if>
-      <if test="rechargedt != null">
-        #{rechargedt,jdbcType=TIMESTAMP},
-      </if>
-      <if test="remarks != null">
-        #{remarks,jdbcType=VARCHAR},
+      <if test="rechargeTime != null">
+        #{rechargeTime,jdbcType=TIMESTAMP},
       </if>
     </trim>
   </insert>
@@ -98,11 +91,11 @@
     <!--@mbg.generated-->
     update se_wallet_recharge
     <set>
-      <if test="walletid != null">
-        walletId = #{walletid,jdbcType=BIGINT},
+      <if test="walletId != null">
+        wallet_id = #{walletId,jdbcType=BIGINT},
       </if>
-      <if test="clientid != null">
-        clientId = #{clientid,jdbcType=BIGINT},
+      <if test="clientId != null">
+        client_id = #{clientId,jdbcType=BIGINT},
       </if>
       <if test="money != null">
         money = #{money,jdbcType=FLOAT},
@@ -110,14 +103,11 @@
       <if test="amount != null">
         amount = #{amount,jdbcType=FLOAT},
       </if>
-      <if test="afterrecharge != null">
-        afterRecharge = #{afterrecharge,jdbcType=FLOAT},
+      <if test="afterRecharge != null">
+        after_recharge = #{afterRecharge,jdbcType=FLOAT},
       </if>
-      <if test="rechargedt != null">
-        rechargeDt = #{rechargedt,jdbcType=TIMESTAMP},
-      </if>
-      <if test="remarks != null">
-        remarks = #{remarks,jdbcType=VARCHAR},
+      <if test="rechargeTime != null">
+        recharge_time = #{rechargeTime,jdbcType=TIMESTAMP},
       </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
@@ -125,13 +115,78 @@
   <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWalletRecharge">
     <!--@mbg.generated-->
     update se_wallet_recharge
-    set walletId = #{walletid,jdbcType=BIGINT},
-      clientId = #{clientid,jdbcType=BIGINT},
+    set wallet_id = #{walletId,jdbcType=BIGINT},
+      client_id = #{clientId,jdbcType=BIGINT},
       money = #{money,jdbcType=FLOAT},
       amount = #{amount,jdbcType=FLOAT},
-      afterRecharge = #{afterrecharge,jdbcType=FLOAT},
-      rechargeDt = #{rechargedt,jdbcType=TIMESTAMP},
-      remarks = #{remarks,jdbcType=VARCHAR}
+      after_recharge = #{afterRecharge,jdbcType=FLOAT},
+      recharge_time = #{rechargeTime,jdbcType=TIMESTAMP}
     where id = #{id,jdbcType=BIGINT}
   </update>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢靛瓙閽卞寘鍏呭�艰褰曟暟-->
+  <select id="getRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT
+        COUNT(*) AS recordCount
+    FROM se_wallet_recharge rec
+        INNER JOIN se_client cli ON rec.client_id = cli.id
+    <where>
+      <if test = "walletId != null and walletId > 0">
+        AND rec.wallet_id = ${walletId}
+      </if>
+
+      <if test = "clientName != null and clientName !=''">
+        AND cli.name like CONCAT('%',#{clientName},'%')
+      </if>
+
+      <if test = "timeStart != null and timeStop != null">
+        AND rec.recharge_time BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢靛瓙閽卞寘鍏呭�艰褰�-->
+  <select id="getWalletRecharges" resultType="com.dy.pipIrrGlobal.voSe.VoWalletRecharge">
+    SELECT
+        cli.`name`,
+        cli.clientNum,
+        cli.phone,
+        rec.amount,
+        rec.after_recharge AS afterRecharge,
+        rec.recharge_time AS rechargeTime
+    FROM se_wallet_recharge rec
+        INNER JOIN se_client cli ON rec.client_id = cli.id
+    <where>
+      <if test = "walletId != null and walletId > 0">
+        AND rec.wallet_id = ${walletId}
+      </if>
+
+      <if test = "clientName != null and clientName !=''">
+        AND cli.name like CONCAT('%',#{clientName},'%')
+      </if>
+
+      <if test = "timeStart != null and timeStop != null">
+        AND rec.recharge_time BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+    ORDER BY rec.recharge_time DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+
+  <!--鑾峰彇鎸囧畾鏃ユ湡寰俊鏀舵鎬婚锛岃储鍔″璐﹀鏍搁〉浣跨敤-->
+  <select id="getRechargeSum" resultType="java.lang.Double">
+    SELECT
+        SUM(amount) AS tradeAmount
+    FROM se_wallet_recharge
+    <where>
+      <if test = "tradeDate != null and tradeDate !=''">
+        AND Date(recharge_time) = #{tradeDate}
+      </if>
+    </where>
+    GROUP BY Date(recharge_time)
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/block/BlockSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/block/BlockSv.java
index 7dbd4c4..89f37a1 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/block/BlockSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/block/BlockSv.java
@@ -3,15 +3,14 @@
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoBa.BaBlockMapper;
 import com.dy.pipIrrGlobal.pojoBa.BaBlock;
-import com.dy.pipIrrGlobal.pojoBa.BaClientType;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Map;
 import java.util.List;
+import java.util.Map;
 
 @Slf4j
 @Service
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleSv.java
index 0947d23..fce86e8 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleSv.java
@@ -58,19 +58,20 @@
         Long itemTotal = baRolePermissionsMapper.getRecordCount(params);
 
         QueryResultVo<List<VoRole>> rsVo = new QueryResultVo<>() ;
-
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        //Integer pageCurr = 0;
+        //Integer pageSize = 10000;
+        //rsVo.pageCurr = 1;
+        //rsVo.pageSize = 10000;
+        //if(queryVo.pageSize != null && queryVo.pageCurr != null) {
+        //    rsVo.pageSize = queryVo.pageSize ;
+        //    rsVo.pageCurr = queryVo.pageCurr;
+        //    pageSize = queryVo.pageSize ;
+        //    pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
+        //}
+        //params.put("pageCurr", pageCurr);
+        //params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         //rsVo.obj = baRoleMapper.getRoles(params);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserSv.java
index 1c2ebd3..6ff9209 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserSv.java
@@ -62,19 +62,8 @@
         Long itemTotal = this.dao.getRecordCount(params);
 
         QueryResultVo<List<VoUserInfo>> rsVo = new QueryResultVo<>() ;
-
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java
index 9ff24a4..9fb3d15 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java
@@ -44,18 +44,8 @@
         Long itemTotal = prControllerMapper.getRecordCount(params);
 
         QueryResultVo<List<VoController>> rsVo = new QueryResultVo<>() ;
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = prControllerMapper.getControllers(params);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideSv.java
index 66ac3e0..69d6b32 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideSv.java
@@ -51,19 +51,8 @@
         Long itemTotal = prDivideMapper.getRecordCount(params);
 
         QueryResultVo<List<VoDivide>> rsVo = new QueryResultVo<>() ;
-
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = prDivideMapper.getDivides(params);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/flowMonitoring/FlowMonitoringSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/flowMonitoring/FlowMonitoringSv.java
index de0dd7d..e8b2224 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/flowMonitoring/FlowMonitoringSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/flowMonitoring/FlowMonitoringSv.java
@@ -4,8 +4,6 @@
 import com.dy.pipIrrGlobal.daoBa.BaDistrictMapper;
 import com.dy.pipIrrGlobal.daoPr.PrFlowMonitoringMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrFlowMonitoring;
-import com.dy.pipIrrGlobal.pojoPr.PrIntake;
-import com.dy.pipIrrGlobal.voPr.VoDivide;
 import com.dy.pipIrrGlobal.voPr.VoFlowMonitoring;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
@@ -96,19 +94,8 @@
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo) ;
 
         QueryResultVo<List<VoFlowMonitoring>> rsVo = new QueryResultVo<>() ;
-
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         // 璁$畻绗﹀悎鏉′欢鐨勮褰曟暟
         Integer itemTotal = prFlowMonitoringMapper.getRecordCountOfFlowMonitoring(params);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/flowMonitoring/FlowmeterSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/flowMonitoring/FlowmeterSv.java
index 92cab8d..3dff9b3 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/flowMonitoring/FlowmeterSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/flowMonitoring/FlowmeterSv.java
@@ -4,7 +4,6 @@
 import com.dy.pipIrrGlobal.daoPr.PrFlowmeterMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrFlowmeter;
 import com.dy.pipIrrGlobal.voPr.VoFlowMeter;
-import com.dy.pipIrrGlobal.voPr.VoFlowMonitoring;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -63,19 +62,8 @@
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo) ;
 
         QueryResultVo<List<VoFlowMeter>> rsVo = new QueryResultVo<>() ;
-
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         // 璁$畻绗﹀悎鏉′欢鐨勮褰曟暟
         Integer itemTotal = prFlowmeterMapper.getRecordCountOfFlowMeterByOthers(params);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardSv.java
index 2d55567..86c9cf7 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardSv.java
@@ -54,18 +54,8 @@
         Long itemTotal = seActiveCardMapper.getRecordCount(params);
 
         QueryResultVo<List<VoActiveCard>> rsVo = new QueryResultVo<>() ;
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seActiveCardMapper.getActiveCards(params);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelSv.java
index 1c83f8a..913860f 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelSv.java
@@ -43,18 +43,8 @@
         Long itemTotal = seCancelMapper.getRecordCount(params);
 
         QueryResultVo<List<VoCancel>> rsVo = new QueryResultVo<>() ;
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seCancelMapper.getCancels(params);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
index 13c1a20..5978104 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
@@ -8,11 +8,9 @@
 import com.dy.pipIrrGlobal.pojoBa.BaClient;
 import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
+import com.dy.pipIrrGlobal.util.AmountToChinese;
 import com.dy.pipIrrGlobal.util.Constant;
-import com.dy.pipIrrGlobal.voSe.VoActiveCard;
-import com.dy.pipIrrGlobal.voSe.VoActiveCardNew;
-import com.dy.pipIrrGlobal.voSe.VoRecharge;
-import com.dy.pipIrrGlobal.voSe.VoReissueCard;
+import com.dy.pipIrrGlobal.voSe.*;
 import com.dy.pipIrrSell.cardOperate.converter.RechargeDtoMapper;
 import com.dy.pipIrrSell.cardOperate.dto.*;
 import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM;
@@ -35,6 +33,7 @@
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 
@@ -482,6 +481,7 @@
         seCardOperate.setClientId(clientId);
         seCardOperate.setMoney(money);
         seCardOperate.setTradeAmount(-refund);
+        seCardOperate.setPaymentId(1L);
         seCardOperate.setOperateType(OperateTypeENUM.LOSS.getCode());
         seCardOperate.setRemarks(remarks);
         seCardOperate.setOperator(operator);
@@ -667,7 +667,8 @@
         seCardOperate.setCardId(cardId);
         seCardOperate.setClientId(clientId);
         seCardOperate.setMoney(money);
-        seCardOperate.setNoTradeAmount(refund);
+        //seCardOperate.setNoTradeAmount(refund);
+        seCardOperate.setRefundAmount(refund);
         seCardOperate.setOperateType(OperateTypeENUM.REFUND.getCode());
         seCardOperate.setRemarks(remarks);
         seCardOperate.setOperator(operator);
@@ -791,13 +792,15 @@
     public BaseResponse<QueryResultVo<List<VoRecharge>>> get(QoRecharge vo){
         try {
             QueryResultVo<List<VoRecharge>> res = cardOperateSv.getRecharges(vo);
+            if(res.itemTotal == 0) {
+                return BaseResponseUtils.buildFail(SellResultCode.No_RECHARGES.getMessage());
+            }
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
             log.error("鑾峰彇鍏呭�艰褰曞紓甯�", e);
             return BaseResponseUtils.buildException(e.getMessage()) ;
         }
     }
-
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗鏄庣粏
@@ -827,33 +830,6 @@
 
 
     /**
-     * 鑾峰彇浜ゆ槗姹囨�昏褰�
-     * @param vo
-     * @return
-     */
-    @Operation(summary = "鑾峰緱浜ゆ槗姹囨�昏褰�", description = "杩斿洖浜ゆ槗姹囨�昏褰�")
-    @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = BaClient.class))}
-            )
-    })
-    @GetMapping(path = "getStatistics")
-    @SsoAop()
-    public BaseResponse<Map> getStatistics(QoTransactionStatistics vo){
-        try {
-            Map res = cardOperateSv.getTransactionStatistics(vo);
-            return BaseResponseUtils.buildSuccess(res);
-        } catch (Exception e) {
-            log.error("鏌ヨ浜ゆ槗姹囨�昏褰曞紓甯�", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
-        }
-    }
-
-
-    /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇寮�鍗¤褰�
      * @param vo
      * @return
@@ -869,9 +845,9 @@
     })
     @GetMapping(path = "/getActiveCards")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<VoActiveCardNew>>> getActiveCards(QoActiveCard vo){
+    public BaseResponse<QueryResultVo<List<VoActiveCard>>> getActiveCards(QoActiveCard vo){
         try {
-            QueryResultVo<List<VoActiveCardNew>> res = cardOperateSv.getActiveCards(vo);
+            QueryResultVo<List<VoActiveCard>> res = cardOperateSv.getActiveCards(vo);
             if(res.itemTotal == 0) {
                 return BaseResponseUtils.buildFail(SellResultCode.No_ActiveCards.getMessage());
             }
@@ -881,8 +857,6 @@
             return BaseResponseUtils.buildException(e.getMessage()) ;
         }
     }
-
-
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇琛ュ崱璁板綍
@@ -913,4 +887,87 @@
         }
     }
 
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇閫氱敤鎿嶄綔璁板綍
+     * 娉ㄩ攢銆佹寕澶便�佸啿姝c�佽В閿侀�氱敤
+     * 娉ㄩ攢-3锛屾寕澶�-6锛屽啿姝�-7锛岃В閿�-8
+     * @param vo
+     * @return
+     */
+    @Operation(summary = "鑾峰彇閫氱敤鎿嶄綔璁板綍", description = "杩斿洖閫氱敤鎿嶄綔璁板綍")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛紑鍗℃暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoActiveCard.class))}
+            )
+    })
+    @GetMapping(path = "/getOptions")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoOperate>>> getCommonOperations(QoCommonOperate vo){
+        // 楠岃瘉鎿嶄綔绫诲瀷鏄惁姝g‘
+        Integer operateType = Optional.ofNullable(vo.getOperateType()).orElse(0);
+        if(operateType != 3 && operateType != 6 && operateType != 7 && operateType != 8) {
+            return BaseResponseUtils.buildFail(SellResultCode.PARAMS_ERROR.getMessage());
+        }
+
+        try {
+            QueryResultVo<List<VoOperate>> res = cardOperateSv.getCommonOperations(vo);
+            if(res.itemTotal == 0) {
+                return BaseResponseUtils.buildFail(SellResultCode.No_CANCELS.getMessage());
+            }
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇寮�鍗¤褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃
+     * @param vo
+     * @return
+     */
+    @Operation(summary = "鑾峰彇鏀舵嵁璁板綍", description = "杩斿洖鏀舵嵁璁板綍")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤佃ˉ鍗℃暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoActiveCard.class))}
+            )
+    })
+    @GetMapping(path = "/get_receipts")
+    @SsoAop()
+    public BaseResponse<Map> getReceipts(QoReceipt vo){
+        try {
+            Map res = Optional.ofNullable(cardOperateSv.getReceipts(vo)).orElse(new HashMap());
+            if(res.size() == 0) {
+                return BaseResponseUtils.buildFail(SellResultCode.No_RECEIPTS.getMessage());
+            }
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇鐢靛瓙閽卞寘璐︽埛璁板綍", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 閲戦杞ぇ鍐�
+     * @param amount
+     * @return
+     */
+
+    @GetMapping(path = "/amount_to_chinese")
+    public BaseResponse<Boolean> amountToChinese(BigDecimal amount) {
+        try {
+            AmountToChinese amountToChinese = new AmountToChinese();
+            String chinese = amountToChinese.toChinese(amount);
+            return BaseResponseUtils.buildSuccess(chinese) ;
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java
index cd1518f..49ddfe9 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java
@@ -1,5 +1,6 @@
 package com.dy.pipIrrSell.cardOperate;
 
+import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.webUtil.BaseResponse;
@@ -8,6 +9,7 @@
 import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper;
 import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
 import com.dy.pipIrrGlobal.daoSe.SeClientMapper;
+import com.dy.pipIrrGlobal.daoSe.SeGeneralMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voSe.*;
@@ -22,8 +24,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
+import java.text.DecimalFormat;
 import java.util.*;
 
 /**
@@ -47,6 +48,9 @@
 
     @Autowired
     private ClientCardSv clientCardSv;
+
+    @Autowired
+    private SeGeneralMapper seGeneralMapper;
 
 
     /**
@@ -219,24 +223,13 @@
         Long itemTotal = seCardOperateMapper.getRecordCount(params);
 
         QueryResultVo<List<VoRecharge>> rsVo = new QueryResultVo<>() ;
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seCardOperateMapper.getRecharges(params);
         return rsVo ;
     }
-
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍
@@ -244,6 +237,7 @@
      * @return
      */
     public Map getTransactions(QoTransaction vo){
+        DecimalFormat df = new DecimalFormat("0.00");
         // 琛ラ綈鏌ヨ鏃堕棿
         String operateTimeStart = vo.operateTimeStart;
         String operateTimeStop = vo.operateTimeStop;
@@ -259,132 +253,34 @@
         // 鐢熸垚鏌ヨ鍙傛暟
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo) ;
 
-        // 鑾峰彇姹囨�荤殑璐按閲戦銆佽喘鍗¢噾棰�
-        Float waterCost = 0f;
-        Float cardCost = 0f;
-        Map map_sum = Optional.ofNullable(seCardOperateMapper.getTransactionSums(params)).orElse(new HashMap());
-        if(map_sum.size() > 0) {
-            waterCost = Float.parseFloat(map_sum.get("waterCost").toString());
-            cardCost = Float.parseFloat(map_sum.get("cardCost").toString());
+        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
+        Long itemTotal = Optional.ofNullable(seCardOperateMapper.getTransactionRecordCount(params)).orElse(0L);
+
+        List<VoTradeDetails> list = seCardOperateMapper.getTransactions(params);
+        if(list.size() == 0) {
+            return new HashMap();
         }
 
-        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
-        Long itemTotal = seCardOperateMapper.getTransactionRecordCount(params);
+        // 閬嶅巻浜ゆ槗鏄庣粏璁板綍锛屾眹鎬昏喘姘撮噾棰濄�佽喘鍗¢噾棰�
+        Double totalWaterCost = 0.0;
+        Double totalCardCost = 0.0;
+        JSONArray array= JSONArray.parseArray(JSON.toJSONString(list));
+        for(int i = 0; i < array.size(); i++) {
+            JSONObject job = array.getJSONObject(i);
+            Double waterCost = Optional.ofNullable(job.getDouble("waterCost")).orElse(0.0);
+            Double cardCost = Optional.ofNullable(job.getDouble("cardCost")).orElse(0.0);
+            totalWaterCost = totalWaterCost + waterCost;
+            totalCardCost = totalCardCost + cardCost;
+        }
 
-        Integer pageSize = vo.getPageSize();
-        // 璁$畻鎬婚〉鏁�
-        Integer pageTotal ;
-        pageTotal = (int)Math.ceil((itemTotal==null?0.0D:itemTotal.doubleValue())/pageSize);
-
-        // 鏍规嵁褰撳墠椤电爜鍙婃瘡椤垫暟閲忚绠楀亸绉婚噺
-        Integer pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        params.put("pageCurr", pageCurr);
-
-        List<VoTransaction> lit = seCardOperateMapper.getTransactions(params);
         Map map_record = new HashMap();
         map_record.put("itemTotal", itemTotal);
-        map_record.put("pageCurr", vo.pageCurr);
-        map_record.put("pageSize", pageSize);
-        map_record.put("pageTotal", pageTotal);
-        map_record.put("list", lit);
-
-        Map map_result = new HashMap();
-        map_result.put("waterCost", waterCost);
-        map_result.put("cardCost", cardCost);
-        map_result.put("records", map_record);
-
-        return map_result;
-    }
-
-    /**
-     * 鑾峰彇浜ゆ槗缁熻璁板綍
-     * 1.浜ゆ槗缁熻璁板綍
-     * 2.绗旀暟鍚堣銆佸疄鏀堕噾棰濆悎璁°�佽禒閫侀噾棰濆悎璁�
-     * 3.姣忎竴澶┿�佸悇绉嶆敮浠樻柟寮忓疄鏀堕噾棰濆悎璁�
-     * @param vo
-     * @return
-     */
-    public Map getTransactionStatistics(QoTransactionStatistics vo) throws ParseException {
-        /**
-         * 閬嶅巻鏌ヨ鏃ユ湡锛屽彇鍑烘瘡澶╀笁绉嶆敮浠樻柟寮忥紙鐜伴噾銆佹壂鐮併�佽浆璐︼級瀹炴敹閲戦
-         * 姣忓ぉ涓�涓璞�
-         * 瀵硅薄缁勬垚JSONArray娣诲姞鍒拌繑鍥炲璞′腑
-         */
-        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-        Date startDate = dateFormat.parse(vo.getOperateTimeStart());
-        Date stopDate = dateFormat.parse(vo.getOperateTimeStop());
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(startDate);
-
-        JSONArray array_paymentSums = new JSONArray();
-        while (calendar.getTime().before(stopDate) || calendar.getTime().equals(stopDate)) {
-            String tradeDate = dateFormat.format(calendar.getTime()) ;
-            Float receivedCash = Optional.ofNullable(seCardOperateMapper.getPaymentSums(tradeDate ,1L)).orElse(0f);
-            Float receivedQRCode = Optional.ofNullable(seCardOperateMapper.getPaymentSums(tradeDate,2L)).orElse(0f);
-            Float receivedTransfer = Optional.ofNullable(seCardOperateMapper.getPaymentSums(tradeDate, 3L)).orElse(0f);
-            JSONObject job = new JSONObject();
-            job.put("tradeDate", tradeDate);
-            job.put("receivedCash", receivedCash);
-            job.put("receivedQRCode", receivedQRCode);
-            job.put("receivedTransfer", receivedTransfer);
-
-            array_paymentSums.add(job);
-            calendar.add(Calendar.DAY_OF_MONTH, 1);
-        }
-
-
-        // 琛ラ綈鏌ヨ鏃堕棿
-        String operateTimeStart = vo.operateTimeStart;
-        String operateTimeStop = vo.operateTimeStop;
-        if(operateTimeStart != null) {
-            operateTimeStart = operateTimeStart + " 00:00:00";
-            vo.setOperateTimeStart(operateTimeStart);
-        }
-        if(operateTimeStop != null) {
-            operateTimeStop = operateTimeStop + " 23:59:59";
-            vo.setOperateTimeStop(operateTimeStop);
-        }
-
-        // 鐢熸垚鏌ヨ鍙傛暟
-        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo) ;
-
-        //鑾峰彇绗旀暟鍚堣銆佸疄鏀堕噾棰濆悎璁°�佽禒閫侀噾棰濆悎璁�
-        Integer totalCount = 0;
-        Float totalReceived = 0f;
-        Float totalGift = 0f;
-        Map map_sum = Optional.ofNullable(seCardOperateMapper.getTransactionStatisticsSums(params)).orElse(new HashMap());
-        if(map_sum.size() > 0) {
-            totalCount = Integer.parseInt(map_sum.get("totalCount").toString());
-            totalReceived = Float.parseFloat(map_sum.get("totalReceived").toString());
-            totalGift = Float.parseFloat(map_sum.get("totalGift").toString());
-        }
-
-        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
-        Long itemTotal = seCardOperateMapper.getTransactionStatisticsRecordCount(params);
-
-        Integer pageSize = vo.getPageSize();
-        // 璁$畻鎬婚〉鏁�
-        Integer pageTotal ;
-        pageTotal = (int)Math.ceil((itemTotal==null?0.0D:itemTotal.doubleValue())/pageSize);
-
-        // 鏍规嵁褰撳墠椤电爜鍙婃瘡椤垫暟閲忚绠楀亸绉婚噺
-        Integer pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        params.put("pageCurr", pageCurr);
-
-        List<VoTransactionStatistics> list = seCardOperateMapper.getTransactionStatistics(params);
-        Map map_record = new HashMap();
-        map_record.put("itemTotal", itemTotal);
-        map_record.put("pageCurr", vo.pageCurr);
-        map_record.put("pageSize", pageSize);
-        map_record.put("pageTotal", pageTotal);
         map_record.put("list", list);
 
         Map map_result = new HashMap();
-        map_result.put("totalCount", totalCount);
-        map_result.put("totalReceived", totalReceived);
-        map_result.put("totalGift", totalGift);
+        map_result.put("waterCost", df.format(totalWaterCost));
+        map_result.put("cardCost", df.format(totalCardCost));
         map_result.put("records", map_record);
-        map_result.put("paymentSums", array_paymentSums);
 
         return map_result;
     }
@@ -394,7 +290,7 @@
      * @param queryVo
      * @return
      */
-    public QueryResultVo<List<VoActiveCardNew>> getActiveCards(QoActiveCard queryVo) {
+    public QueryResultVo<List<VoActiveCard>> getActiveCards(QoActiveCard queryVo) {
         //瀹屽杽鏌ヨ鍏呭�艰褰曠殑璧锋鏃堕棿
         String activeTimeStart = queryVo.activeTimeStart;
         String activeTimeStop = queryVo.activeTimeStop;
@@ -411,19 +307,10 @@
 
         Long itemTotal = seCardOperateMapper.getActiveCardRecordCount(params);
 
-        QueryResultVo<List<VoActiveCardNew>> rsVo = new QueryResultVo<>() ;
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        QueryResultVo<List<VoActiveCard>> rsVo = new QueryResultVo<>() ;
+
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seCardOperateMapper.getActiveCards(params);
@@ -453,21 +340,80 @@
         Long itemTotal = seCardOperateMapper.getReissueCardRecordCount(params);
 
         QueryResultVo<List<VoReissueCard>> rsVo = new QueryResultVo<>() ;
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seCardOperateMapper.getReissueCards(params);
         return rsVo ;
     }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇IC鍗℃敞閿�璁板綍
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoOperate>> getCommonOperations(QoCommonOperate queryVo) {
+        //瀹屽杽鏌ヨ鍏呭�艰褰曠殑璧锋鏃堕棿
+        String timeStart = queryVo.getTimeStart();
+        String timeStop = queryVo.getTimeStop();
+        if(timeStart != null) {
+            timeStart = timeStart + " 00:00:00";
+            queryVo.setTimeStart(timeStart);
+        }
+        if(timeStop != null) {
+            timeStop = timeStop + " 23:59:59";
+            queryVo.setTimeStop(timeStop);
+        }
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        Long itemTotal = Optional.ofNullable(seCardOperateMapper.getCommonOperationRecordCount(params)).orElse(0L);
+
+        QueryResultVo<List<VoOperate>> rsVo = new QueryResultVo<>() ;
+
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = seCardOperateMapper.getCommonOperations(params);
+        return rsVo ;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃
+     * @param queryVo
+     * @return
+     */
+    public Map getReceipts(QoReceipt queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        DecimalFormat df = new DecimalFormat("#.00");
+        Double totalAmount = Optional.ofNullable(seCardOperateMapper.getTotalAmount(params)).orElse(0.0);
+
+        Long itemTotal = seCardOperateMapper.getReceiptsRecordCount(params);
+
+        QueryResultVo<List<VoReceipt>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        //rsVo.obj = seCardOperateMapper.getReceipts(params);
+        //return rsVo ;
+
+        List<VoReceipt> list = seCardOperateMapper.getReceipts(params);
+        Map map_record = new HashMap();
+        map_record.put("itemTotal", rsVo.itemTotal);
+        map_record.put("pageCurr", rsVo.pageCurr);
+        map_record.put("pageSize", rsVo.pageSize);
+        map_record.put("pageTotal", rsVo.pageTotal);
+        map_record.put("list", list);
+
+        Map map_result = new HashMap();
+        map_result.put("totalAmount", df.format(totalAmount));
+        map_result.put("records", map_record);
+
+        return map_result;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoCancel.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoCancel.java
new file mode 100644
index 0000000..a216fcc
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoCancel.java
@@ -0,0 +1,34 @@
+package com.dy.pipIrrSell.cardOperate.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-02-05 9:29
+ * @LastEditTime 2024-02-05 9:29
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "IC鍗℃敞閿�璁板綍鏌ヨ鏉′欢")
+public class QoCancel extends QueryConditionVo {
+    @Schema(description = "鍐滄埛濮撳悕")
+    public String clientName;
+
+    @Schema(description = "姘村崱缂栧彿")
+    public String cardNum;
+
+
+    @Schema(description = "娉ㄩ攢鏃堕棿_寮�濮�")
+    public String timeStart;
+
+    @Schema(description = "娉ㄩ攢鏃堕棿_缁撴潫")
+    public String timeStop;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoCommonOperate.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoCommonOperate.java
new file mode 100644
index 0000000..c47a840
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoCommonOperate.java
@@ -0,0 +1,39 @@
+package com.dy.pipIrrSell.cardOperate.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-02-05 11:00
+ * @LastEditTime 2024-02-05 11:00
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "IC鍗℃寕澶辫褰曟煡璇㈡潯浠�")
+public class QoCommonOperate extends QueryConditionVo {
+    /**
+     * 娉ㄩ攢-3锛屾寕澶�-6锛屽啿姝�-7锛岃В閿�-8
+     */
+    @Schema(description = "鎿嶄綔绫诲瀷")
+    public Integer operateType;
+
+    @Schema(description = "鍐滄埛濮撳悕")
+    public String clientName;
+
+    @Schema(description = "姘村崱缂栧彿")
+    public Long cardNum;
+
+    @Schema(description = "鎸傚け鏃堕棿_寮�濮�")
+    public String timeStart;
+
+    @Schema(description = "鎸傚け鏃堕棿_缁撴潫")
+    public String timeStop;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoReceipt.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoReceipt.java
new file mode 100644
index 0000000..3b13438
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoReceipt.java
@@ -0,0 +1,28 @@
+package com.dy.pipIrrSell.cardOperate.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-02-01 11:03
+ * @LastEditTime 2024-02-01 11:03
+ * @Description
+ */
+
+@Data
+@Schema(name = "鏀舵嵁鏌ヨ鏉′欢")
+public class QoReceipt extends QueryConditionVo {
+    @Schema(description = "浜ゆ槗ID")
+    public Long operateId;
+
+    @Schema(description = "鍐滄埛濮撳悕")
+    public String clientName;
+
+    @Schema(description = "鍏呭�兼満鏃堕棿_寮�濮�")
+    public String timeStart;
+
+    @Schema(description = "鍏呭�兼満鏃堕棿_缁撴潫")
+    public String timeStop;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoTransaction.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoTransaction.java
index fbea65b..d76dc4c 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoTransaction.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoTransaction.java
@@ -22,8 +22,8 @@
     @Schema(description = "鏉慖D")
     public Long villageId;
 
-    @Schema(description = "姘村崱缂栧彿")
-    public Long cardNum;
+    //@Schema(description = "姘村崱缂栧彿")
+    //public Long cardNum;
 
     @Schema(description = "浜ゆ槗鏌ヨ璧峰鏃堕棿")
     public String operateTimeStart;
@@ -33,4 +33,6 @@
 
     @Schema(description = "鏀堕摱鍛業D")
     public Long cashierId;
+
+
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java
index ebeccf1..25613ab 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java
@@ -39,18 +39,8 @@
         Long itemTotal = seClientMapper.getRecordCount(params);
 
         QueryResultVo<List<VoClient>> rsVo = new QueryResultVo<>() ;
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seClientMapper.getClients(params);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java
index 7cc032e..d195dc2 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java
@@ -122,18 +122,8 @@
         Long itemTotal = seClientCardMapper.getCardsCount(params);
 
         QueryResultVo<List<VoCards>> rsVo = new QueryResultVo<>() ;
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seClientCardMapper.getCards(params);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java
index dabaf7f..7c177b2 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java
@@ -11,6 +11,7 @@
 import com.dy.pipIrrGlobal.voSe.VoGeneral;
 import com.dy.pipIrrSell.general.dto.DtoGeneral;
 import com.dy.pipIrrSell.general.qo.QoGeneral;
+import com.dy.pipIrrSell.general.qo.QoSummary;
 import com.dy.pipIrrSell.general.qo.QoToAudit;
 import com.dy.pipIrrSell.result.SellResultCode;
 import io.swagger.v3.oas.annotations.Operation;
@@ -65,7 +66,11 @@
         try {
             add_general();
             QueryResultVo<List<VoGeneral>> res = generalSv.getGenerals(vo);
-            return BaseResponseUtils.buildSuccess(res);
+            if(res.itemTotal > 0) {
+                return BaseResponseUtils.buildSuccess(res);
+            }else {
+                return BaseResponseUtils.buildFail(SellResultCode.No_GENERALS.getMessage());
+            }
         } catch (Exception e) {
             log.error("鏌ヨ浜ゆ槗璁板綍寮傚父", e);
             return BaseResponseUtils.buildException(e.getMessage()) ;
@@ -166,7 +171,15 @@
         return BaseResponseUtils.buildSuccess() ;
     }
 
-    @Operation(summary = "鑾峰緱寰呭鏍镐氦鏄撴眹鎬昏褰�", description = "杩斿洖寰呭鏍镐氦鏄撴眹鎬昏褰�")
+
+    /**
+     * 寮�鍗$郴缁熶氦鏄撴眹鎬绘煡璇笌瀵硅处绯荤粺浜ゆ槗姹囨�绘煡璇㈠叡鐢ㄦ帴鍙�
+     * 寮�鍗$郴缁熷弬鏁帮細鏀堕摱鍛業D銆佹煡璇㈣捣姝㈡棩鏈�
+     * 瀵硅处绯荤粺鍙傛暟锛氭敹閾跺憳ID銆佷氦鏄撴棩鏈�
+     * @param vo
+     * @return
+     */
+    @Operation(summary = "鑾峰緱寮�鍗$郴缁熶氦鏄撶粺璁¤褰�", description = "杩斿洖寮�鍗$郴缁熶氦鏄撶粺璁¤褰�")
     @ApiResponses(value = {
             @ApiResponse(
                     responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
@@ -175,15 +188,49 @@
                             schema = @Schema(implementation = BaClient.class))}
             )
     })
-    @GetMapping(path = "getToAudit")
+    @GetMapping(path = "getSummaries")
     @SsoAop()
-    public BaseResponse<Map> getToAudit(QoToAudit vo){
+    public BaseResponse<Map> getSummaries(QoSummary vo){
         try {
-            Map res = generalSv.getToAudit(vo);
-            return BaseResponseUtils.buildSuccess(res);
+            Map res = generalSv.getSummaries(vo);
+            if(res.size() > 0) {
+                return BaseResponseUtils.buildSuccess(res);
+            }else {
+                return BaseResponseUtils.buildFail(SellResultCode.No_TRADE_SUMMARIES.getMessage());
+            }
         } catch (Exception e) {
             log.error("鏌ヨ浜ゆ槗姹囨�昏褰曞紓甯�", e);
             return BaseResponseUtils.buildException(e.getMessage()) ;
         }
     }
+
+    /**
+     * 鑾峰彇璐㈠姟瀵硅处_浜ゆ槗鏄庣粏
+     * @param vo
+     * @return
+     */
+    @Operation(summary = "鑾峰彇璐㈠姟瀵硅处_浜ゆ槗鏄庣粏", description = "鑾峰彇璐㈠姟瀵硅处_浜ゆ槗鏄庣粏")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = BaClient.class))}
+            )
+    })
+    @GetMapping(path = "get_trade_details")
+    @SsoAop()
+    public BaseResponse<Map> getTradeDetails(QoToAudit vo){
+        try {
+            Map res = Optional.ofNullable(generalSv.getTradeDetails(vo)).orElse(new HashMap());
+            if(res.size() > 0) {
+                return BaseResponseUtils.buildSuccess(res);
+            }else {
+                return BaseResponseUtils.buildFail(SellResultCode.No_TRADE_DETAILS.getMessage());
+            }
+        } catch (Exception e) {
+            log.error("鏌ヨ浜ゆ槗璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java
index 76d9be0..83c819e 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java
@@ -1,22 +1,26 @@
 package com.dy.pipIrrSell.general;
 
+import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.webUtil.QueryResultVo;
-import com.dy.pipIrrGlobal.daoSe.SeAuditsMapper;
-import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper;
-import com.dy.pipIrrGlobal.daoSe.SeGeneralMapper;
+import com.dy.pipIrrGlobal.daoSe.*;
 import com.dy.pipIrrGlobal.pojoSe.SeAudits;
 import com.dy.pipIrrGlobal.pojoSe.SeGeneral;
 import com.dy.pipIrrGlobal.voSe.VoGeneral;
+import com.dy.pipIrrGlobal.voSe.VoTradeDetails;
 import com.dy.pipIrrGlobal.voSe.VoTransactionStatistics;
 import com.dy.pipIrrSell.general.qo.QoGeneral;
+import com.dy.pipIrrSell.general.qo.QoSummary;
 import com.dy.pipIrrSell.general.qo.QoToAudit;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.text.DecimalFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
@@ -37,6 +41,12 @@
 
     @Autowired
     private SeCardOperateMapper seCardOperateMapper;
+
+    @Autowired
+    private SeWalletRechargeMapper seWalletRechargeMapper;
+
+    @Autowired
+    private SeRefundMapper seRefundMapper;
 
     /**
      * 鑾峰彇鏈敓鎴愭�昏处鐨勪氦鏄撴棩鏈熷垪琛紙褰撳ぉ鐨勪氦鏄撹褰曚笉鐢熸垚鎬昏处锛�
@@ -75,18 +85,9 @@
         Long itemTotal = seGeneralMapper.getRecordCount(params);
 
         QueryResultVo<List<VoGeneral>> rsVo = new QueryResultVo<>() ;
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seGeneralMapper.getGenerals(params);
@@ -112,7 +113,7 @@
     }
 
     /**
-     * t娣诲姞鎬昏处瀹℃牳璁板綍
+     * 娣诲姞鎬昏处瀹℃牳璁板綍
      * @param po
      * @return
      */
@@ -120,59 +121,140 @@
         return seAuditsMapper.insert(po);
     }
 
+
     /**
-     * 璐㈠姟瀵硅处瀹℃牳椤碉紝鏀堕摱鍛�+鏃ユ湡鍒嗙粍锛屾帓闄や氦鏄撶被鍨嬪垎缁�
+     * 寮�鍗$郴缁熶氦鏄撴眹鎬绘煡璇笌瀵硅处绯荤粺浜ゆ槗姹囨�绘煡璇㈠叡鐢ㄦ湇鍔″疄鐜扮被
      * @param vo
      * @return
+     * @throws ParseException
      */
-    public Map getToAudit(QoToAudit vo) {
-        /**
-         * 鍙栧嚭鎸囧畾鏃ユ湡涓夌鏀粯鏂瑰紡锛堢幇閲戙�佹壂鐮併�佽浆璐︼級瀹炴敹閲戦
-         */
+    public Map getSummaries(QoSummary vo) throws ParseException {
+        DecimalFormat df = new DecimalFormat("0.00");
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+
+        // 鎺ユ敹浼犲叆鍙傛暟锛氫氦鏄撹捣姝㈡棩鏈熴�佹敹閾跺憳ID
         JSONArray array_paymentSums = new JSONArray();
-        String tradeDate = vo.getTradeDate();
+        Date timeStart = dateFormat.parse(vo.getTimeStart());
+        Date timeStop = dateFormat.parse(vo.getTimeStop());
         Long cashierId = vo.cashierId;
 
-        Float receivedCash = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId, 1L)).orElse(0f);
-        Float receivedQRCode = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId,2L)).orElse(0f);
-        Float receivedTransfer = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId, 3L)).orElse(0f);
-        JSONObject job = new JSONObject();
-        job.put("tradeDate", tradeDate);
-        job.put("receivedCash", receivedCash);
-        job.put("receivedQRCode", receivedQRCode);
-        job.put("receivedTransfer", receivedTransfer);
-        array_paymentSums.add(job);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(timeStart);
+        while (calendar.getTime().before(timeStop) || calendar.getTime().equals(timeStop)) {
+            String tradeDate = dateFormat.format(calendar.getTime()) ;
+            if(cashierId != 1000000L) {
+                Float receivedCash = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId, 1L)).orElse(0f);
+                Float receivedQRCode = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId,2L)).orElse(0f);
+                Float receivedTransfer = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId, 3L)).orElse(0f);
+
+                JSONObject job = new JSONObject();
+                job.put("tradeDate", tradeDate);
+                job.put("receivedCash", receivedCash);
+                job.put("receivedQRCode", receivedQRCode);
+                job.put("receivedTransfer", receivedTransfer);
+                array_paymentSums.add(job);
+
+            }else {
+                // 鍒嗙骇璁$畻鎸囧畾鏃ユ湡寰俊鏀堕��娆惧悎璁★紝鍐嶈绠楀疄鏀堕噾棰�
+                Double rechargeWeChat = Optional.ofNullable(seWalletRechargeMapper.getRechargeSum(tradeDate)).orElse(0.0);
+                Double refundWeChat = Optional.ofNullable(seRefundMapper.getRefundSum(tradeDate)).orElse(0.0);
+                Double receiveWeChat = rechargeWeChat - refundWeChat;
+
+                // 寰俊瀹炴敹閲戦鍐欏叆杩斿洖瀵硅薄锛堝啓鍏ュ墠鏍煎紡鍖栵級
+                JSONObject job = new JSONObject();
+                job.put("receiveWeChat", df.format(receiveWeChat));
+                array_paymentSums.add(job);
+            }
+            calendar.add(Calendar.DAY_OF_MONTH, 1);
+        }
 
         // 鐢熸垚鏌ヨ鍙傛暟
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo) ;
 
-        //鑾峰彇绗旀暟鍚堣銆佸疄鏀堕噾棰濆悎璁°�佽禒閫侀噾棰濆悎璁�
+        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟(浠g爜鍏ㄩ儴娉ㄩ噴鎺変簡锛屾病鍒�)
+        //Long itemTotal = seGeneralMapper.getToAuditRecordCount(params);
+
+        /**
+         * 鏍规嵁鏀堕摱鍛樼紪鍙枫�佷氦鏄撴棩鏈熸煡璇㈡眹鎬昏褰�
+         * 閬嶅巻姹囨�昏褰曟煡璇㈢粨鏋滐紝璁$畻绗旀暟鍚堣銆佸疄鏀堕噾棰濆悎璁°�佽禒閫侀噾棰濆悎璁°�佽繑杩橀噾棰濆悎璁�
+         */
+        List<VoTransactionStatistics> list = Optional.ofNullable(seGeneralMapper.getSummaries(params)).orElse(new ArrayList<>());
+        if(list.size() == 0) {
+            return new HashMap();
+        }
+
         Integer totalCount = 0;
         Float totalReceived = 0f;
         Float totalGift = 0f;
-        Map map_sum = Optional.ofNullable(seGeneralMapper.getTransactionStatisticsSums(params)).orElse(new HashMap());
-        if(map_sum.size() > 0) {
-            totalCount = Integer.parseInt(map_sum.get("totalCount").toString());
-            totalReceived = Float.parseFloat(map_sum.get("totalReceived").toString());
-            totalGift = Float.parseFloat(map_sum.get("totalGift").toString());
+        Float totalRefund = 0f;
+        JSONArray array= JSONArray.parseArray(JSON.toJSONString(list));
+        for(int i = 0; i < array.size(); i++) {
+            JSONObject job_summary = array.getJSONObject(i);
+            totalCount = totalCount +  Optional.ofNullable(job_summary.getInteger("count")).orElse(0);
+            totalReceived = totalReceived + Optional.ofNullable(job_summary.getFloat("received")).orElse(0f);
+            totalGift = totalGift + Optional.ofNullable(job_summary.getFloat("gift")).orElse(0f);
+            totalRefund = totalRefund + Optional.ofNullable(job_summary.getFloat("refundAmount")).orElse(0f);
         }
 
-        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
-        Long itemTotal = seGeneralMapper.getToAuditRecordCount(params);
-
-        List<VoTransactionStatistics> list = seGeneralMapper.getToAudit(params);
         Map map_record = new HashMap();
-        map_record.put("itemTotal", itemTotal);
-        map_record.put("pageCurr", vo.pageCurr);
+        //map_record.put("itemTotal", itemTotal);
         map_record.put("list", list);
 
         Map map_result = new HashMap();
         map_result.put("totalCount", totalCount);
         map_result.put("totalReceived", totalReceived);
         map_result.put("totalGift", totalGift);
+        map_result.put("totalRefund", totalRefund);
+
         map_result.put("records", map_record);
         map_result.put("paymentSums", array_paymentSums);
 
         return map_result;
     }
+
+    /**
+     * 鏍规嵁鏀堕摱鍛業D鍙婃棩鏈熻幏鍙栬储鍔″璐浜ゆ槗鏄庣粏璁板綍
+     * @param queryVo
+     * @return
+     */
+    public Map getTradeDetails(QoToAudit queryVo) {
+        DecimalFormat df = new DecimalFormat("0.00");
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        Long itemTotal = seGeneralMapper.getTradeDetailsRecordCount(params);
+
+        QueryResultVo<List<VoTradeDetails>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        List<VoTradeDetails> list = Optional.ofNullable(seGeneralMapper.getTradeDetails(params)).orElse(new ArrayList<>());
+        if(list.size() == 0) {
+            return new HashMap();
+        }
+
+        // 閬嶅巻浜ゆ槗鏄庣粏璁板綍锛屾眹鎬讳氦鏄撻噾棰�
+        Double totalTradeAmount = 0.0;
+        JSONArray array= JSONArray.parseArray(JSON.toJSONString(list));
+        for(int i = 0; i < array.size(); i++) {
+            JSONObject job = array.getJSONObject(i);
+            Double tradeAmount = Optional.ofNullable(job.getDouble("tradeAmount")).orElse(0.0);
+            totalTradeAmount = totalTradeAmount + tradeAmount;
+        }
+
+        Map map_record = new HashMap();
+        map_record.put("itemTotal", rsVo.itemTotal);
+        map_record.put("pageCurr", rsVo.pageCurr);
+        map_record.put("pageSize", rsVo.pageSize);
+        map_record.put("pageTotal", rsVo.pageTotal);
+        map_record.put("list", list);
+
+        Map map_result = new HashMap();
+
+        map_result.put("totalTradeAmount", df.format(totalTradeAmount));
+        map_result.put("records", map_record);
+
+        return map_result;
+
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoSummary.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoSummary.java
new file mode 100644
index 0000000..313d0db
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoSummary.java
@@ -0,0 +1,30 @@
+package com.dy.pipIrrSell.general.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-02-04 17:15
+ * @LastEditTime 2024-02-04 17:15
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "浜ゆ槗姹囨�绘煡璇㈡潯浠�")
+public class QoSummary extends QueryConditionVo {
+    @Schema(description = "鏌ヨ璧峰鏃ユ湡")
+    public String timeStart;
+
+    @Schema(description = "鏌ヨ鎴鏃ユ湡")
+    public String timeStop;
+
+    @Schema(description = "鏀堕摱鍛業D")
+    public Long cashierId;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoToAudit.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoToAudit.java
index 809a5ee..d4f0b5c 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoToAudit.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoToAudit.java
@@ -19,7 +19,7 @@
 @Builder
 @Schema(name = "寰呭鏍镐氦鏄撴眹鎬绘煡璇㈡潯浠�")
 public class QoToAudit extends QueryConditionVo {
-    @Schema(description = "浜ゆ槗鏃堕棿")
+    @Schema(description = "浜ゆ槗鏃ユ湡")
     public String tradeDate;
 
     @Schema(description = "鏀堕摱鍛業D")
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossSv.java
index df6dc20..edd844a 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossSv.java
@@ -9,7 +9,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.Map;
 
@@ -27,21 +26,6 @@
     private SeLossMapper seLossMapper;
 
     public QueryResultVo<List<VoLoss>> getLosses(QueryVo queryVo) {
-        //瀹屽杽鏌ヨ鎸傚け璁板綍鐨勮捣姝㈡椂闂�
-        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-
-        //LocalDateTime lossTimeStart = queryVo.lossTimeStart;
-        //LocalDateTime lossTimeStop = queryVo.lossTimeStop;
-        //if(lossTimeStart != null) {
-        //    lossTimeStart = LocalDateTime.parse(df.format(lossTimeStart) + " 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-        //    queryVo.setLossTimeStart(lossTimeStart);
-        //}
-        //
-        //if(lossTimeStop != null) {
-        //    lossTimeStop = LocalDateTime.parse(df.format(lossTimeStop) + " 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-        //    queryVo.setLossTimeStop(lossTimeStop);
-        //}
-
         String lossTimeStart = queryVo.lossTimeStart;
         String lossTimeStop = queryVo.lossTimeStop;
         if(lossTimeStart != null) {
@@ -59,18 +43,8 @@
         Long itemTotal = seLossMapper.getRecordCount(params);
 
         QueryResultVo<List<VoLoss>> rsVo = new QueryResultVo<>() ;
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seLossMapper.getLosses(params);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java
index 10baa78..ce11f65 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java
@@ -48,18 +48,8 @@
         Long itemTotal = seRechargeMapper.getRecordCount(params);
 
         QueryResultVo<List<VoRecharge>> rsVo = new QueryResultVo<>() ;
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seRechargeMapper.getRecharges(params);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java
index 8d92e08..a0b2d7c 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java
@@ -25,10 +25,13 @@
     REPLACE_FAIL_WRITE_CLIENT_CARD_ERROR(10007, "琛ュ崱澶辫触-鍐滄埛鍗′慨鏀瑰紓甯�"),
     REPLACE_FAIL_WRITE_RECHARGE_ERROR(10008, "琛ュ崱澶辫触-琛ュ崱璁板綍鍐欏叆寮傚父"),
     No_ActiveCards(10009, "娌℃湁绗﹀悎鏉′欢鐨勫紑鍗℃暟鎹�"),
-    No_ReissueCards(10010, "娌℃湁绗﹀悎鏉′欢鐨勮ˉ鍗℃暟鎹�"),
+    No_RECHARGES(10010, "娌℃湁绗﹀悎鏉′欢鐨勫厖鍊兼暟鎹�"),
+    No_ReissueCards(10011, "娌℃湁绗﹀悎鏉′欢鐨勮ˉ鍗℃暟鎹�"),
+    No_CANCELS(10010, "娌℃湁绗﹀悎鏉′欢鐨勬敞閿�鏁版嵁"),
+    PARAMS_ERROR(10010, "鎿嶄綔绫诲瀷鍙傛暟閿欒"),
 
-    THE_CARD_NOT_EXIST(10011, "娌℃湁绗﹀悎鏉′欢鐨勬按鍗�"),
-    THE_CARD_NOT_SUPPORT_THIS_OPERATION(10012, "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔"),
+    THE_CARD_NOT_EXIST(10012, "娌℃湁绗﹀悎鏉′欢鐨勬按鍗�"),
+    THE_CARD_NOT_SUPPORT_THIS_OPERATION(10013, "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔"),
 
     /**
      * 鍏呭��
@@ -73,7 +76,38 @@
     GENERAL_ID_CANNOT_BE_NULL(80001, "鎬昏处缂栧彿涓嶈兘涓虹┖"),
     GENERAL_NOT_EXIST(80001, "鎬昏处涓嶅瓨鍦�"),
     GENERAL_AUDIT_FAIL(80001, "鎬昏处瀹℃牳澶辫触"),
-    AUDITS_ADD_FAIL(80001, "鎬昏处瀹℃牳璁板綍娣诲姞澶辫触");
+    AUDITS_ADD_FAIL(80001, "鎬昏处瀹℃牳璁板綍娣诲姞澶辫触"),
+
+    /**
+     * 鐢靛瓙閽卞寘
+     */
+    CLIENT_ID_CANNOT_BE_NULL(90001, "鍐滄埛缂栧彿涓嶈兘涓虹┖"),
+    WALLET_OPEN_ACCOUNT_FAIL(90002, "鐢靛瓙閽卞寘璐︽埛娉ㄥ唽澶辫触"),
+    WALLET_ACCOUNT_EXIST(90003, "璇ュ啘鎴峰凡娉ㄥ唽鐢靛瓙閽卞寘"),
+    NO_ACCOUNT(90004, "鎮ㄥ皻鏈敞鍐岀數瀛愰挶鍖呰处鎴�"),
+    UPDATE_ACCOUNT_FAIL(90005, "鍏呭�煎け璐ワ紝鐢靛瓙閽卞寘璐︽埛鏇存柊澶辫触"),
+    RECHARGE_FAIL(90006, "鍏呭�煎け璐�"),
+    BALANCE_IS_INSUFFICIENT(90007, "娑堣垂澶辫触锛屼綑棰濅笉瓒�"),
+    CONSUME_FAIL(90008, "娑堣垂澶辫触"),
+    REFUND_AMOUNT_CANNOT_GREATER_THAN_MONEY(90009, "鐢宠閫�娆惧け璐ワ紝閫�娆鹃噾棰濅笉鑳藉ぇ浜庝綑棰�"),
+    APPLICATION_REFUND_FAIL(900010, "鐢宠閫�娆惧け璐�"),
+    NO_TO_AUDIT_REFUND(900011, "璇ョ數瀛愰挶鍖呮病鏈夊緟瀹℃牳鐨勯��娆剧敵璇�"),
+    AUDIT_REFUND_FAIL(900012, "瀹℃牳閫�娆剧敵璇峰け璐�"),
+    No_WALLER_RECHARGES(900013, "娌℃湁绗﹀悎鏉′欢鐨勫厖鍊兼暟鎹�"),
+    WALLET_CLIENT_ID_CANNOT_BE_NULL(900014, "鏌ヨ鐢靛瓙閽卞寘娑堣垂姹囨�诲け璐ワ紝鍐滄埛ID涓嶈兘涓虹┖"),
+    No_REFUNDS(900015, "娌℃湁绗﹀悎鏉′欢鐨勯��娆炬暟鎹�"),
+
+    /**
+     * 鏀舵嵁
+     */
+    No_RECEIPTS(100001, "娌℃湁绗﹀悎鏉′欢鐨勬敹鎹�"),
+
+    /**
+     * 璐㈠姟瀵硅处
+     */
+    No_GENERALS(100001, "娌℃湁绗﹀悎鏉′欢鐨勬�昏处璁板綍"),
+    No_TRADE_SUMMARIES(100001, "娌℃湁绗﹀悎鏉′欢鐨勪氦鏄撴眹鎬昏褰�"),
+    No_TRADE_DETAILS(100001, "娌℃湁绗﹀悎鏉′欢鐨勪氦鏄撴槑缁�");
 
     private final Integer code;
     private final String message;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalSv.java
index ad5362a..bf4b96d 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalSv.java
@@ -47,18 +47,8 @@
         Long itemTotal = seReversalMapper.getRecordCount(params);
 
         QueryResultVo<List<VoReversal>> rsVo = new QueryResultVo<>() ;
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seReversalMapper.getReversals(params);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockSv.java
index 4e42110..0dfd021 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockSv.java
@@ -47,18 +47,8 @@
         Long itemTotal = seUnlockMapper.getRecordCount(params);
 
         QueryResultVo<List<VoUnlock>> rsVo = new QueryResultVo<>() ;
-        Integer pageCurr = 0;
-        Integer pageSize = 10000;
-        rsVo.pageCurr = 1;
-        rsVo.pageSize = 10000;
-        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
-            rsVo.pageSize = queryVo.pageSize ;
-            rsVo.pageCurr = queryVo.pageCurr;
-            pageSize = queryVo.pageSize ;
-            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
-        }
-        params.put("pageCurr", pageCurr);
-        params.put("pageSize", pageSize);
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seUnlockMapper.getUnlocks(params);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/DtoWallet.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/DtoWallet.java
deleted file mode 100644
index 6fbce4d..0000000
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/DtoWallet.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.dy.pipIrrSell.wallet;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-import lombok.*;
-
-/**
- * @author ZhuBaoMin
- * @date 2023/12/11 17:28
- * @LastEditTime 2023/12/11 17:28
- * @Description
- */
-
-@Data
-@Builder
-@ToString
-@NoArgsConstructor
-@AllArgsConstructor
-@Schema(name = "娉ㄥ唽鐢靛瓙閽卞寘浼犲叆瀵硅薄")
-public class DtoWallet {
-    public static final long serialVersionUID = 1L;
-
-    /**
-     * 鍐滄埛缂栧彿
-     */
-    @Schema(description = "鍐滄埛缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    @NotNull(message = "鍐滄埛缂栧彿涓嶈兘涓虹┖")
-    private Long clientId;
-}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/DtoWalletRecharge.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/DtoWalletRecharge.java
deleted file mode 100644
index 89c9e0a..0000000
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/DtoWalletRecharge.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.dy.pipIrrSell.wallet;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.Min;
-import jakarta.validation.constraints.NotNull;
-import lombok.*;
-
-/**
- * @author ZhuBaoMin
- * @date 2023/12/12 11:46
- * @LastEditTime 2023/12/12 11:46
- * @Description
- */
-
-@Data
-@Builder
-@ToString
-@NoArgsConstructor
-@AllArgsConstructor
-@Schema(name = "鐢靛瓙閽卞寘鍏呭�间紶鍏ュ璞�")
-public class DtoWalletRecharge {
-    public static final long serialVersionUID = 1L;
-
-    /**
-     * 閽卞寘缂栧彿
-     */
-    @Schema(description = "閽卞寘缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    @NotNull(message = "閽卞寘缂栧彿涓嶈兘涓虹┖")
-    private Long walletId;
-
-    /**
-     * 鍐滄埛缂栧彿
-     */
-    @Schema(description = "鍐滄埛缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    @NotNull(message = "鍐滄埛缂栧彿涓嶈兘涓虹┖")
-    private Long clientId;
-
-    /**
-     * 鍏呭�奸噾棰�
-     */
-    @Schema(description = "鍏呭�奸噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    @Min(value = 0, message="鍏呭�奸噾棰濅笉鑳藉皬浜�0")
-    private Float amount;
-
-    /**
-     * 澶囨敞淇℃伅
-     */
-    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    private String remarks;
-}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletCtrl.java
index 8eecd2c..500dd92 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletCtrl.java
@@ -3,27 +3,39 @@
 import com.dy.common.aop.SsoAop;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrGlobal.pojoSe.SeConsume;
+import com.dy.pipIrrGlobal.pojoSe.SeRefund;
 import com.dy.pipIrrGlobal.pojoSe.SeWallet;
+import com.dy.pipIrrGlobal.pojoSe.SeWalletRecharge;
+import com.dy.pipIrrGlobal.voSe.VoActiveCard;
+import com.dy.pipIrrGlobal.voSe.VoWallet;
+import com.dy.pipIrrGlobal.voSe.VoWalletRecharge;
+import com.dy.pipIrrGlobal.voSe.VoWalletRefund;
+import com.dy.pipIrrSell.result.SellResultCode;
+import com.dy.pipIrrSell.wallet.enums.LastOperateENUM;
+import com.dy.pipIrrSell.wallet.enums.RefundStatusENUM;
+import com.dy.pipIrrSell.wallet.qo.QoWalletRecharge;
+import com.dy.pipIrrSell.wallet.qo.QueryVo;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.responses.ApiResponses;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotNull;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
-import java.util.Date;
-import java.util.Optional;
+import java.text.DecimalFormat;
+import java.util.*;
 
 /**
  * @author ZhuBaoMin
@@ -41,6 +53,12 @@
 public class WalletCtrl {
     private final WalletSv walletSv;
 
+    /**
+     * 娉ㄥ唽鐢靛瓙閽卞寘璐︽埛
+     * 闇�瑕佽�冭檻宸叉敞鍐岃处鎴风殑鎯呭喌
+     * @param clientId
+     * @return
+     */
     @Operation(summary = "娉ㄥ唽鐢靛瓙閽卞寘", description = "娉ㄥ唽鐢靛瓙閽卞寘")
     @ApiResponses(value = {
             @ApiResponse(
@@ -50,56 +68,383 @@
                             schema = @Schema(implementation = Boolean.class))}
             )
     })
-    @PostMapping(path = "add")
-    @Transactional(rollbackFor = Exception.class)
+    @PostMapping(path = "add_wallet")
     @SsoAop()
-    //public BaseResponse<Boolean> add(@RequestBody Long clientId){
-    public BaseResponse<Boolean> add(@RequestParam("clientId") @NotNull(message = "鍐滄埛缂栧彿涓嶈兘涓虹┖") Long clientId){
+    public BaseResponse<Boolean> addWallet(@RequestParam("clientId") @NotNull(message = "鍐滄埛缂栧彿涓嶈兘涓虹┖") Long clientId){
         if(clientId == null || clientId < 0) {
-            return BaseResponseUtils.buildFail("鍐滄埛缂栧彿涓嶈兘涓虹┖");
+            return BaseResponseUtils.buildFail(SellResultCode.CLIENT_ID_CANNOT_BE_NULL.getMessage());
+        }
+
+        if(walletSv.getWalletByClientId(clientId) != null) {
+            return BaseResponseUtils.buildFail(SellResultCode.WALLET_ACCOUNT_EXIST.getMessage());
         }
 
         SeWallet seWallet = new SeWallet();
-        seWallet.setClientid(clientId);
-        seWallet.setMoney(0f);
-        seWallet.setCreatedt(new Date());
-        Integer rec = Optional.ofNullable(walletSv.add(seWallet)).orElse(0);
+        seWallet.setClientId(clientId);
+        seWallet.setMoney(0d);
+        seWallet.setLastOperate(LastOperateENUM.OPEN_ACCOUNT.getCode());
+        seWallet.setLastOperateTime(new Date());
+        seWallet.setCreateTime(new Date());
+        Long rec = Optional.ofNullable(walletSv.addWallet(seWallet)).orElse(0L);
         if(rec == 0) {
-            return BaseResponseUtils.buildFail("娉ㄥ唽鐢靛瓙閽卞寘-鐢靛瓙閽卞寘璁板綍鍐欏叆寮傚父");
+            return BaseResponseUtils.buildFail(SellResultCode.WALLET_OPEN_ACCOUNT_FAIL.getMessage());
         }
-
         return BaseResponseUtils.buildSuccess(true) ;
     }
 
-    //@Operation(summary = "鐢靛瓙閽卞寘鍏呭��", description = "鐢靛瓙閽卞寘鍏呭��")
-    //@ApiResponses(value = {
-    //        @ApiResponse(
-    //                responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-    //                description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
-    //                content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-    //                        schema = @Schema(implementation = Boolean.class))}
-    //        )
-    //})
-    //@PostMapping(path = "addRecharge")
-    //@Transactional(rollbackFor = Exception.class)
-    //@SsoAop()
-    //public BaseResponse<Boolean> addRecharge(@RequestBody  @Valid DtoWalletRecharge po, @Parameter(hidden = true) BindingResult bindingResult){
-    //    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-    //    if(bindingResult != null && bindingResult.hasErrors()){
-    //        return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
-    //    }
-    //
-    //
-    //
-    //    SeWallet seWallet = new SeWallet();
-    //    seWallet.setClientid(clientId);
-    //    seWallet.setMoney(0f);
-    //    seWallet.setCreatedt(new Date());
-    //    Integer rec = Optional.ofNullable(walletSv.add(seWallet)).orElse(0);
-    //    if(rec == 0) {
-    //        return BaseResponseUtils.buildFail("娉ㄥ唽鐢靛瓙閽卞寘-鐢靛瓙閽卞寘璁板綍鍐欏叆寮傚父");
-    //    }
-    //
-    //    return BaseResponseUtils.buildSuccess(true) ;
-    //}
+    /**
+     * 鐢靛瓙閽卞寘璐︽埛鍏呭��
+     * 闇�瑕佽�冭檻鏈敞鍐岃处鎴风殑鎯呭喌
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @Operation(summary = "鐢靛瓙閽卞寘鍏呭��", description = "鐢靛瓙閽卞寘鍏呭��")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "add_recharge", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> addRecharge(@RequestBody @Valid SeWalletRecharge po, BindingResult bindingResult){
+        Long clientId = Optional.ofNullable(po .getClientId()).orElse(0L);
+        Double amount = Optional.ofNullable(po.getAmount()).orElse(0.0);
+
+        // 楠岃瘉璇ュ啘鎴锋槸鍚﹀凡缁忔敞鍐岀數瀛愰挶鍖呰处鎴峰苟鍙栧嚭ID鍙婂綋鍓嶈处鎴蜂綑棰�
+        SeWallet seWallet = walletSv.getWalletByClientId(clientId);
+        if(seWallet == null) {
+            return BaseResponseUtils.buildFail(SellResultCode.NO_ACCOUNT.getMessage());
+        }
+        Long wallerId = Optional.ofNullable(seWallet.getId()).orElse(0L);
+        Double money = Optional.ofNullable(seWallet.getMoney()).orElse(0.0);
+
+        // 璁$畻鍏呭�煎悗浣欓
+        Double afterRrecharge = money + amount;
+
+        // 淇敼鐢靛瓙閽卞寘浣欓銆佹渶鍚庢搷浣滅被鍨嬨�佹渶鍚庢搷浣滄椂闂�
+        seWallet.setMoney(afterRrecharge);
+        seWallet.setLastOperate(LastOperateENUM.RECHARGE.getCode());
+        seWallet.setLastOperateTime(new Date());
+        Integer rec_updateWaller = Optional.ofNullable(walletSv.updateWallet(seWallet)).orElse(0);
+        if(rec_updateWaller == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.UPDATE_ACCOUNT_FAIL.getMessage());
+        }
+
+        // 娣诲姞鍏呭�艰褰�
+        po.setWalletId(wallerId);
+        po.setClientId(clientId);
+        po.setMoney(money);
+        po.setAmount(amount);
+        po.setAfterRecharge(afterRrecharge);
+        po.setRechargeTime(new Date());
+        Long rec = Optional.ofNullable(walletSv.addRecharge(po)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL.getMessage());
+        }
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
+
+    /**
+     * 鐢靛瓙閽卞寘娑堣垂
+     * 闇�瑕佽�冭檻鏈敞鍐岃处鎴风殑鎯呭喌銆佷綑棰濅笉瓒崇殑鎯呭喌
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @Operation(summary = "鐢靛瓙閽卞寘娑堣垂", description = "鐢靛瓙閽卞寘娑堣垂")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "add_consume", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> addConsume(@RequestBody @Valid SeConsume po, BindingResult bindingResult){
+        Long clientId = po .getClientId();
+        Double consumption = po.getConsumption();
+        Date vot = po.getVot();
+        Date vct = po.getVct();
+
+        // 璁$畻寮�鍏抽榾鏃堕棿宸強鐢ㄦ按鏃堕暱
+        Long timeDifference = vct.getTime() - vot.getTime();
+        DecimalFormat df = new DecimalFormat("#.00");
+        Double duration = Double.parseDouble(df.format((float)timeDifference / (1000 * 60 * 60)));
+
+        // 楠岃瘉璇ュ啘鎴锋槸鍚﹀凡缁忔敞鍐岀數瀛愰挶鍖呰处鎴峰苟鍙栧嚭ID鍙婂綋鍓嶈处鎴蜂綑棰�
+        SeWallet seWallet = walletSv.getWalletByClientId(clientId);
+        if(seWallet == null) {
+            return BaseResponseUtils.buildFail(SellResultCode.NO_ACCOUNT.getMessage());
+        }
+        Long wallerId = Optional.ofNullable(seWallet.getId()).orElse(0L);
+        Double money = Optional.ofNullable(seWallet.getMoney()).orElse(0.0);
+
+        if(money < consumption) {
+            return BaseResponseUtils.buildFail(SellResultCode.BALANCE_IS_INSUFFICIENT.getMessage());
+        }
+        // 璁$畻娑堣垂鍚庝綑棰�
+        Double afterConsume = money - consumption;
+
+        // 淇敼鐢靛瓙閽卞寘浣欓銆佹渶鍚庢搷浣滅被鍨嬨�佹渶鍚庢搷浣滄椂闂�
+        seWallet.setMoney(afterConsume);
+        seWallet.setLastOperate(LastOperateENUM.CONSUME.getCode());
+        seWallet.setLastOperateTime(new Date());
+        Integer rec_updateWaller = Optional.ofNullable(walletSv.updateWallet(seWallet)).orElse(0);
+        if(rec_updateWaller == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.UPDATE_ACCOUNT_FAIL.getMessage());
+        }
+
+        // 娣诲姞娑堣垂璁板綍
+        po.setWalletId(wallerId);
+        po.setMoney(money);
+        po.setAfterConsume(afterConsume);
+        po.setDuration(duration);
+        Long rec = Optional.ofNullable(walletSv.addConsume(po)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.CONSUME_FAIL.getMessage());
+        }
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
+
+    /**
+     * 鐢宠閫�娆�
+     * 闇�瑕佽�冭檻鐢宠閫�娆鹃噾棰濆ぇ浜庝綑棰濈殑鎯呭喌
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @Operation(summary = "鐢靛瓙閽卞寘鐢宠閫�璐�", description = "鐢靛瓙閽卞寘鐢宠閫�璐�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "add_refund", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> addRefund(@RequestBody @Valid SeRefund po, BindingResult bindingResult){
+        Long clientId = po .getClientId();
+        Double refundAmount = po.getRefundAmount();
+
+        // 楠岃瘉璇ュ啘鎴锋槸鍚﹀凡缁忔敞鍐岀數瀛愰挶鍖呰处鎴峰苟鍙栧嚭ID鍙婂綋鍓嶈处鎴蜂綑棰�
+        SeWallet seWallet = walletSv.getWalletByClientId(clientId);
+        if(seWallet == null) {
+            return BaseResponseUtils.buildFail(SellResultCode.NO_ACCOUNT.getMessage());
+        }
+        Long wallerId = Optional.ofNullable(seWallet.getId()).orElse(0L);
+        Double money = Optional.ofNullable(seWallet.getMoney()).orElse(0.0);
+
+        // 楠岃瘉閫�娆鹃噾棰濇槸鍚﹀ぇ浜庝綑棰�
+        if(money < refundAmount) {
+            return BaseResponseUtils.buildFail(SellResultCode.REFUND_AMOUNT_CANNOT_GREATER_THAN_MONEY.getMessage());
+        }
+        // 璁$畻娑堣垂鍚庝綑棰�
+        Double afterRefund = money - refundAmount;
+
+        // 淇敼鐢靛瓙閽卞寘浣欓銆佹渶鍚庢搷浣滅被鍨嬨�佹渶鍚庢搷浣滄椂闂�
+        seWallet.setMoney(afterRefund);
+        seWallet.setLastOperate(LastOperateENUM.APPLY_REFUND.getCode());
+        seWallet.setLastOperateTime(new Date());
+        Integer rec_updateWaller = Optional.ofNullable(walletSv.updateWallet(seWallet)).orElse(0);
+        if(rec_updateWaller == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.UPDATE_ACCOUNT_FAIL.getMessage());
+        }
+
+        // 娣诲姞娑堣垂璁板綍
+        po.setWalletId(wallerId);
+        po.setMoney(money);
+        po.setAfterRefund(afterRefund);
+        po.setApplicationTime(new Date());
+        po.setRefundStatus(RefundStatusENUM.NO_REFUND.getCode());
+        Long rec = Optional.ofNullable(walletSv.addRefund(po)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.APPLICATION_REFUND_FAIL.getMessage());
+        }
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
+
+    /**
+     * 瀹℃牳閫�娆剧敵璇�
+     * 闇�瑕佽�冭檻璇ョ數瀛愰挶鍖呮病鏈夊緟瀹℃牳鐨勯��娆剧敵璇风殑鎯呭喌
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @Operation(summary = "鐢靛瓙閽卞寘瀹℃牳閫�娆剧敵璇�", description = "鐢靛瓙閽卞寘瀹℃牳閫�娆剧敵璇�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "audit_refund", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> auditRefund(@RequestBody @Valid SeRefund po, BindingResult bindingResult){
+        Long clientId = po.getClientId();
+        Byte refundStatus = po.getRefundStatus();
+        Long auditor = po.getAuditor();
+        String remarks = po.getRemarks();
+
+        // 楠岃瘉璇ュ啘鎴锋槸鍚﹀凡缁忔敞鍐岀數瀛愰挶鍖呰处鎴峰苟鍙栧嚭ID鍙婂綋鍓嶈处鎴蜂綑棰�
+        SeWallet seWallet = walletSv.getWalletByClientId(clientId);
+        if(seWallet == null) {
+            return BaseResponseUtils.buildFail(SellResultCode.NO_ACCOUNT.getMessage());
+        }
+        Long wallerId = Optional.ofNullable(seWallet.getId()).orElse(0L);
+        Double money = Optional.ofNullable(seWallet.getMoney()).orElse(0.0);
+
+        // 楠岃瘉璇ョ數瀛愰挶鍖呮槸鍚︽湁寰呭鏍哥殑閫�娆剧敵璇�(鏍规嵁閽卞寘ID鑾峰彇寰呭鏍哥殑閫�娆剧敵璇峰璞�)
+        SeRefund seRefund = walletSv.getRefundByWallerId(wallerId);
+        if(seRefund == null) {
+            return BaseResponseUtils.buildFail(SellResultCode.NO_TO_AUDIT_REFUND.getMessage());
+        }
+
+        // 淇敼鐢靛瓙閽卞寘鏈�鍚庢搷浣滅被鍨嬨�佹渶鍚庢搷浣滄椂闂�
+        seWallet.setLastOperate(LastOperateENUM.AUDIT_REFUND.getCode());
+        seWallet.setLastOperateTime(new Date());
+        Integer rec_updateWaller = Optional.ofNullable(walletSv.updateWallet(seWallet)).orElse(0);
+        if(rec_updateWaller == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.UPDATE_ACCOUNT_FAIL.getMessage());
+        }
+
+        // 娣诲姞娑堣垂璁板綍
+        seRefund.setRefundStatus(refundStatus);
+        seRefund.setAuditor(auditor);
+        seRefund.setAuditTime(new Date());
+        seRefund.setRemarks(remarks);
+        Integer rec = Optional.ofNullable(walletSv.auditRefund(seRefund)).orElse(0);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.AUDIT_REFUND_FAIL.getMessage());
+        }
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
+
+    /**
+     * 鏍规嵁鍐滄埛濮撳悕鑾峰彇鐢靛瓙閽卞寘璐︽埛璁板綍
+     * @param vo
+     * @return
+     */
+    @Operation(summary = "鑾峰彇鐢靛瓙閽卞寘璐︽埛璁板綍", description = "杩斿洖鐢靛瓙閽卞寘璐︽埛璁板綍")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤佃ˉ鍗℃暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoActiveCard.class))}
+            )
+    })
+    @GetMapping(path = "/get_wallets")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoWallet>>> getWallets(QueryVo vo){
+        try {
+            QueryResultVo<List<VoWallet>> res = walletSv.getWallets(vo);
+            if(res.itemTotal == 0) {
+                return BaseResponseUtils.buildFail(SellResultCode.No_ReissueCards.getMessage());
+            }
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇鐢靛瓙閽卞寘璐︽埛璁板綍", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鑾峰彇鐢靛瓙閽卞寘鍏呭�艰褰�
+     * @param vo
+     * @return
+     */
+    @Operation(summary = "鑾峰彇鐢靛瓙閽卞寘鍏呭�艰褰�", description = "杩斿洖鐢靛瓙閽卞寘鍏呭�艰褰�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤佃ˉ鍗℃暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoActiveCard.class))}
+            )
+    })
+    @GetMapping(path = "/get_recharges")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoWalletRecharge>>> getWalletRecharges(QoWalletRecharge vo){
+        try {
+            QueryResultVo<List<VoWalletRecharge>> res = walletSv.getWalletRecharges(vo);
+            if(res.itemTotal == 0) {
+                return BaseResponseUtils.buildFail(SellResultCode.No_WALLER_RECHARGES.getMessage());
+            }
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇鐢靛瓙閽卞寘鍏呭�艰褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    @Operation(summary = "鑾峰彇鐢靛瓙閽卞寘娑堣垂璁板綍", description = "杩斿洖鐢靛瓙閽卞寘娑堣垂璁板綍")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤佃ˉ鍗℃暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoActiveCard.class))}
+            )
+    })
+    @GetMapping(path = "/get_consume")
+    @SsoAop()
+    public BaseResponse<Map> getWalletConsumes(QueryVo vo){
+        Long clientId = Optional.ofNullable(vo.getClientId()).orElse(0L);
+        if(clientId == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.WALLET_CLIENT_ID_CANNOT_BE_NULL.getMessage());
+        }
+        try {
+            Map res = Optional.ofNullable(walletSv.getWalletConsumes(vo)).orElse(new HashMap());
+            if(res.size() <= 0) {
+                return BaseResponseUtils.buildFail(SellResultCode.No_WALLER_RECHARGES.getMessage());
+            }
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇鐢靛瓙閽卞寘鍏呭�艰褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鑾峰彇鐢靛瓙閽卞寘閫�娆捐褰�
+     * @param vo
+     * @return
+     */
+    @Operation(summary = "鑾峰彇鐢靛瓙閽卞寘閫�娆捐褰�", description = "杩斿洖鐢靛瓙閽卞寘閫�娆捐褰�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤佃ˉ鍗℃暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoActiveCard.class))}
+            )
+    })
+    @GetMapping(path = "/get_refunds")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoWalletRefund>>> getWalletRefunds(QueryVo vo){
+        try {
+            QueryResultVo<List<VoWalletRefund>> res = walletSv.getWalletRefunds(vo);
+            if(res.itemTotal == 0) {
+                return BaseResponseUtils.buildFail(SellResultCode.No_REFUNDS.getMessage());
+            }
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇鐢靛瓙閽卞寘閫�娆捐褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletSv.java
index 2e7b236..3fafbb3 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletSv.java
@@ -1,13 +1,29 @@
 package com.dy.pipIrrSell.wallet;
 
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoSe.SeConsumeMapper;
+import com.dy.pipIrrGlobal.daoSe.SeRefundMapper;
 import com.dy.pipIrrGlobal.daoSe.SeWalletMapper;
-import com.dy.pipIrrGlobal.daoSe.SeWalletRechargeHistoryMapper;
 import com.dy.pipIrrGlobal.daoSe.SeWalletRechargeMapper;
+import com.dy.pipIrrGlobal.pojoSe.SeConsume;
+import com.dy.pipIrrGlobal.pojoSe.SeRefund;
 import com.dy.pipIrrGlobal.pojoSe.SeWallet;
-import com.dy.pipIrrGlobal.pojoSe.SeWalletRechargeHistory;
+import com.dy.pipIrrGlobal.pojoSe.SeWalletRecharge;
+import com.dy.pipIrrGlobal.voSe.VoWallet;
+import com.dy.pipIrrGlobal.voSe.VoWalletConsume;
+import com.dy.pipIrrGlobal.voSe.VoWalletRecharge;
+import com.dy.pipIrrGlobal.voSe.VoWalletRefund;
+import com.dy.pipIrrSell.wallet.qo.QueryVo;
+import com.dy.pipIrrSell.wallet.qo.QoWalletRecharge;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 
 /**
  * @author ZhuBaoMin
@@ -26,54 +42,203 @@
     private SeWalletRechargeMapper seWalletRechargeMapper;
 
     @Autowired
-    private SeWalletRechargeHistoryMapper seWalletRechargeHistoryMapper;
+    private SeConsumeMapper seConsumeMapper;
+
+    @Autowired
+    private SeRefundMapper seRefundMapper;
+
+    /**
+     * 鏍规嵁鍐滄埛ID鑾峰彇鐢靛瓙閽卞寘瀵硅薄
+     * @param clientId
+     * @return
+     */
+    public SeWallet getWalletByClientId(Long clientId) {
+        return seWalletMapper.getWalletByClientId(clientId);
+    }
 
     /**
      * 娉ㄥ唽鐢靛瓙閽卞寘璐﹀彿
+     * @param po 鐢靛瓙閽卞寘瀹炰綋绫�
+     * @return 鐢靛瓙閽卞寘ID
+     */
+    public Long addWallet(SeWallet po) {
+        seWalletMapper.insert(po);
+        return po.getId();
+    }
+
+    /**
+     * 鐢靛瓙閽卞寘鍏呭��
      * @param po
      * @return
      */
-    public Integer add(SeWallet po) {
-        return seWalletMapper.insert(po);
+    public Long addRecharge(SeWalletRecharge po) {
+        seWalletRechargeMapper.insert(po);
+        return po.getId();
     }
 
     /**
-     * 鏍规嵁缂栧彿浠庨挶鍖呰〃涓幏鍙栬閽卞寘浣欓
-     * @param id
+     * 鐢靛瓙閽卞寘娑堣垂
+     * @param po
      * @return
      */
-    public Float getMoneyById(Long id) {
-        SeWallet po = seWalletMapper.selectByPrimaryKey(id);
-        return po.getMoney();
+    public Long addConsume(SeConsume po) {
+        seConsumeMapper.insert(po);
+        return po.getId();
     }
 
     /**
-     * 鏍规嵁閽卞寘缂栧彿淇敼閽卞寘浣欓
-     * @param id 閽卞寘缂栧彿锛堜富閿級
-     * @param money 閽卞寘浣欓
-     * @return 淇敼璁板綍鏁伴噺
-     */
-    public Integer updateMoneyById(Long id, Float money) {
-        SeWallet po = seWalletMapper.selectByPrimaryKey(id);
-        po.setMoney(money);
-        return seWalletMapper.updateByPrimaryKey(po);
-    }
-
-    /**
-     * 鏍规嵁id鍒犻櫎鍏呭�艰褰�
-     * @param id
+     * 娣诲姞閫�娆剧敵璇�
+     * @param po
      * @return
      */
-    public Integer deleteWallerRechargeById(Long id) {
-        return seWalletMapper.deleteByPrimaryKey(id);
+    public Long addRefund(SeRefund po) {
+        seRefundMapper.insert(po);
+        return po.getId();
     }
 
     /**
-     * 灏嗗厖鍊艰褰曟坊鍔犲埌鍏呭�煎巻鍙茶〃
-     * @param po 鍏呭�煎巻鍙插疄浣�
+     * 鏍规嵁閽卞寘ID鑾峰彇寰呭鏍哥殑閫�娆剧敵璇峰璞�
+     * @param walletId
      * @return
      */
-    public Integer addWallerRechargeHistory(SeWalletRechargeHistory po) {
-        return seWalletRechargeHistoryMapper.insert(po);
+    public SeRefund getRefundByWallerId(Long walletId) {
+        return seRefundMapper.getRefundByWallerId(walletId);
+    }
+
+    /**
+     * 瀹℃牳閫�娆剧敵璇�
+     * @param po
+     * @return
+     */
+    public Integer auditRefund(SeRefund po) {
+        return seRefundMapper.updateByPrimaryKeySelective(po);
+    }
+
+    /**
+     * 淇敼鐢靛瓙閽卞寘
+     * 鍏呭�笺�佹秷璐广�佺敵璇烽��娆俱�佸鏍搁��娆炬椂闇�瑕佷慨鏀圭數瀛愰挶鍖呯殑锛氫綑棰濄�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
+     * @param po
+     * @return
+     */
+    public Integer updateWallet(SeWallet po) {
+        return seWalletMapper.updateByPrimaryKeySelective(po);
+    }
+
+
+    /**
+     * 鏍规嵁鍐滄埛濮撳悕鑾峰彇鐢靛瓙閽卞寘璐︽埛璁板綍
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoWallet>> getWallets(QueryVo queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        Long itemTotal = seWalletMapper.getRecordCount(params);
+
+        QueryResultVo<List<VoWallet>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = seWalletMapper.getWallets(params);
+        return rsVo ;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢靛瓙閽卞寘鍏呭�艰褰�
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoWalletRecharge>> getWalletRecharges(QoWalletRecharge queryVo) {
+        //瀹屽杽鏌ヨ鍏呭�艰褰曠殑璧锋鏃堕棿
+        String timeStart = queryVo.getTimeStart();
+        String timeStop = queryVo.getTimeStop();
+        if(timeStart != null) {
+            timeStart = timeStart + " 00:00:00";
+            queryVo.setTimeStart(timeStart);
+        }
+        if(timeStop != null) {
+            timeStop = timeStop + " 23:59:59";
+            queryVo.setTimeStop(timeStop);
+        }
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        Long itemTotal = seWalletRechargeMapper.getRecordCount(params);
+
+        QueryResultVo<List<VoWalletRecharge>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = seWalletRechargeMapper.getWalletRecharges(params);
+        return rsVo ;
+    }
+
+    /**
+     * 鏍规嵁鍐滄埛ID鑾峰彇鐢靛瓙閽卞寘娑堣垂璁板綍
+     * @param queryVo
+     * @return
+     */
+    public Map getWalletConsumes(QueryVo queryVo) {
+        // 鑾峰彇鐢靛瓙閽卞寘娑堣垂姹囨�讳俊鎭�
+        String clientName = "";
+        String clientNum = "";
+        Double money = 0.0;
+        Double totalConsume = 0.0;
+        Long clientId = Optional.ofNullable(queryVo.getClientId()).orElse(0L);
+        Map map_consumeSum = Optional.ofNullable(seConsumeMapper.getWalletConsumeSum(clientId)).orElse(new HashMap());
+        if(map_consumeSum.size() > 0) {
+            clientName = map_consumeSum.get("clientName").toString();
+            clientNum = map_consumeSum.get("clientNum").toString();
+            money = Double.parseDouble(map_consumeSum.get("money").toString());
+            totalConsume = Double.parseDouble(map_consumeSum.get("totalConsume").toString());
+        }
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+        Long itemTotal = seConsumeMapper.getRecordCount(params);
+
+        QueryResultVo<List<VoWalletConsume>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        List<VoWalletConsume> list = seConsumeMapper.getWalletConsumes(params);
+
+
+        Map map_record = new HashMap();
+        map_record.put("itemTotal", rsVo.itemTotal);
+        map_record.put("pageCurr", rsVo.pageCurr);
+        map_record.put("pageSize", rsVo.pageSize);
+        map_record.put("pageTotal", rsVo.pageTotal);
+        map_record.put("list", list);
+
+        Map map_result = new HashMap();
+        map_result.put("clientName", clientName);
+        map_result.put("clientNum", clientNum);
+        map_result.put("money", money);
+        map_result.put("totalConsume", totalConsume);
+        map_result.put("records", map_record);
+
+        return map_result;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢靛瓙閽卞寘閫�娆捐褰�
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoWalletRefund>> getWalletRefunds(QueryVo queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        Long itemTotal = seRefundMapper.getRecordCount(params);
+
+        QueryResultVo<List<VoWalletRefund>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = seRefundMapper.getWalletRefunds(params);
+        return rsVo ;
     }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/enums/LastOperateENUM.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/enums/LastOperateENUM.java
new file mode 100644
index 0000000..cb5b1fd
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/enums/LastOperateENUM.java
@@ -0,0 +1,24 @@
+package com.dy.pipIrrSell.wallet.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-30 17:12
+ * @LastEditTime 2024-01-30 17:12
+ * @Description 鐢靛瓙閽卞寘鏈�鍚庢搷浣滄灇涓剧被
+ */
+
+@Getter
+@AllArgsConstructor
+public enum LastOperateENUM {
+    OPEN_ACCOUNT((byte)1, "寮�鎴�"),
+    RECHARGE((byte)2, "鍏呭��"),
+    CONSUME((byte)3, "娑堣垂"),
+    APPLY_REFUND((byte)4, "鐢宠閫�娆�"),
+    AUDIT_REFUND((byte)5, "閫�娆惧鏍�");
+
+    private final Byte code;
+    private final String message;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/enums/RefundStatusENUM.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/enums/RefundStatusENUM.java
new file mode 100644
index 0000000..a53e54e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/enums/RefundStatusENUM.java
@@ -0,0 +1,21 @@
+package com.dy.pipIrrSell.wallet.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-31 14:19
+ * @LastEditTime 2024-01-31 14:19
+ * @Description
+ */
+
+@Getter
+@AllArgsConstructor
+public enum RefundStatusENUM {
+    NO_REFUND((byte)1, "鏈��娆�"),
+    REFUNDED((byte)2, "宸查��娆�");
+
+    private final Byte code;
+    private final String message;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/qo/QoWalletRecharge.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/qo/QoWalletRecharge.java
new file mode 100644
index 0000000..1f5ac6f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/qo/QoWalletRecharge.java
@@ -0,0 +1,28 @@
+package com.dy.pipIrrSell.wallet.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-31 19:27
+ * @LastEditTime 2024-01-31 19:27
+ * @Description
+ */
+
+@Data
+@Schema(name = "鐢靛瓙閽卞寘鍏呭�兼煡璇㈡潯浠�")
+public class QoWalletRecharge extends QueryConditionVo {
+    @Schema(description = "鐢靛瓙閽卞寘璐︽埛ID")
+    public Long walletId;
+
+    @Schema(description = "鍐滄埛濮撳悕")
+    public String clientName;
+
+    @Schema(description = "鍏呭�兼満鏃堕棿_寮�濮�")
+    public String timeStart;
+
+    @Schema(description = "鍏呭�兼満鏃堕棿_缁撴潫")
+    public String timeStop;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/qo/QueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/qo/QueryVo.java
new file mode 100644
index 0000000..7609fbd
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/qo/QueryVo.java
@@ -0,0 +1,25 @@
+package com.dy.pipIrrSell.wallet.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-31 19:21
+ * @LastEditTime 2024-01-31 19:21
+ * @Description
+ */
+
+@Data
+@Schema(name = "鐢靛瓙閽卞寘璐︽埛鏌ヨ鏉′欢")
+public class QueryVo extends QueryConditionVo {
+    @Schema(description = "鍐滄埛濮撳悕")
+    public String clientName;
+
+    @Schema(description = "鍐滄埛ID")
+    public Long clientId;
+
+    @Schema(description = "閫�娆剧姸鎬�")
+    public Integer refundStatus;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/.gitignore b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/.gitignore
new file mode 100644
index 0000000..549e00a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/.mvn/wrapper/maven-wrapper.jar b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/.mvn/wrapper/maven-wrapper.jar
new file mode 100644
index 0000000..cb28b0e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/.mvn/wrapper/maven-wrapper.jar
Binary files differ
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/.mvn/wrapper/maven-wrapper.properties b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000..5f0536e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.5/apache-maven-3.9.5-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/mvnw b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/mvnw
new file mode 100644
index 0000000..66df285
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/mvnw
@@ -0,0 +1,308 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Apache Maven Wrapper startup batch script, version 3.2.0
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /usr/local/etc/mavenrc ] ; then
+    . /usr/local/etc/mavenrc
+  fi
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "$(uname)" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
+      else
+        JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=$(java-config --jre-home)
+  fi
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
+    JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="$(which javac)"
+  if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=$(which readlink)
+    if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
+      if $darwin ; then
+        javaHome="$(dirname "\"$javaExecutable\"")"
+        javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac"
+      else
+        javaExecutable="$(readlink -f "\"$javaExecutable\"")"
+      fi
+      javaHome="$(dirname "\"$javaExecutable\"")"
+      javaHome=$(expr "$javaHome" : '\(.*\)/bin')
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=$(cd "$wdir/.." || exit 1; pwd)
+    fi
+    # end of workaround
+  done
+  printf '%s' "$(cd "$basedir" || exit 1; pwd)"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    # Remove \r in case we run on Windows within Git Bash
+    # and check out the repository with auto CRLF management
+    # enabled. Otherwise, we may read lines that are delimited with
+    # \r\n and produce $'-Xarg\r' rather than -Xarg due to word
+    # splitting rules.
+    tr -s '\r\n' ' ' < "$1"
+  fi
+}
+
+log() {
+  if [ "$MVNW_VERBOSE" = true ]; then
+    printf '%s\n' "$1"
+  fi
+}
+
+BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
+log "$MAVEN_PROJECTBASEDIR"
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
+if [ -r "$wrapperJarPath" ]; then
+    log "Found $wrapperJarPath"
+else
+    log "Couldn't find $wrapperJarPath, downloading it ..."
+
+    if [ -n "$MVNW_REPOURL" ]; then
+      wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+    else
+      wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+    fi
+    while IFS="=" read -r key value; do
+      # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
+      safeValue=$(echo "$value" | tr -d '\r')
+      case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
+      esac
+    done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+    log "Downloading from: $wrapperUrl"
+
+    if $cygwin; then
+      wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
+    fi
+
+    if command -v wget > /dev/null; then
+        log "Found wget ... using wget"
+        [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+        else
+            wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+        fi
+    elif command -v curl > /dev/null; then
+        log "Found curl ... using curl"
+        [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
+        else
+            curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
+        fi
+    else
+        log "Falling back to using Java to download"
+        javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
+        # For Cygwin, switch paths to Windows format before running javac
+        if $cygwin; then
+          javaSource=$(cygpath --path --windows "$javaSource")
+          javaClass=$(cygpath --path --windows "$javaClass")
+        fi
+        if [ -e "$javaSource" ]; then
+            if [ ! -e "$javaClass" ]; then
+                log " - Compiling MavenWrapperDownloader.java ..."
+                ("$JAVA_HOME/bin/javac" "$javaSource")
+            fi
+            if [ -e "$javaClass" ]; then
+                log " - Running MavenWrapperDownloader.java ..."
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+# If specified, validate the SHA-256 sum of the Maven wrapper jar file
+wrapperSha256Sum=""
+while IFS="=" read -r key value; do
+  case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
+  esac
+done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+if [ -n "$wrapperSha256Sum" ]; then
+  wrapperSha256Result=false
+  if command -v sha256sum > /dev/null; then
+    if echo "$wrapperSha256Sum  $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
+      wrapperSha256Result=true
+    fi
+  elif command -v shasum > /dev/null; then
+    if echo "$wrapperSha256Sum  $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
+      wrapperSha256Result=true
+    fi
+  else
+    echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
+    echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
+    exit 1
+  fi
+  if [ $wrapperSha256Result = false ]; then
+    echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
+    echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
+    echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
+    exit 1
+  fi
+fi
+
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+# shellcheck disable=SC2086 # safe args
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  $MAVEN_DEBUG_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/mvnw.cmd b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/mvnw.cmd
new file mode 100644
index 0000000..95ba6f5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/mvnw.cmd
@@ -0,0 +1,205 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Apache Maven Wrapper startup batch script, version 3.2.0
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Found %WRAPPER_JAR%
+    )
+) else (
+    if not "%MVNW_REPOURL%" == "" (
+        SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+    )
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
+        echo Downloading from: %WRAPPER_URL%
+    )
+
+    powershell -Command "&{"^
+		"$webclient = new-object System.Net.WebClient;"^
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+		"}"^
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Finished downloading %WRAPPER_JAR%
+    )
+)
+@REM End of extension
+
+@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
+SET WRAPPER_SHA_256_SUM=""
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
+)
+IF NOT %WRAPPER_SHA_256_SUM%=="" (
+    powershell -Command "&{"^
+       "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
+       "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
+       "  Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
+       "  Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
+       "  Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
+       "  exit 1;"^
+       "}"^
+       "}"
+    if ERRORLEVEL 1 goto error
+)
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% ^
+  %JVM_CONFIG_MAVEN_PROPS% ^
+  %MAVEN_OPTS% ^
+  %MAVEN_DEBUG_OPTS% ^
+  -classpath %WRAPPER_JAR% ^
+  "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
+  %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%"=="on" pause
+
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
+
+cmd /C exit /B %ERROR_CODE%
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/pom.xml b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/pom.xml
new file mode 100644
index 0000000..0bd2b52
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/pom.xml
@@ -0,0 +1,139 @@
+<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>com.dy</groupId>
+        <artifactId>pipIrr-web</artifactId>
+        <version>1.0.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <packaging>jar</packaging>
+
+    <artifactId>pipIrr-web-webchat</artifactId>
+    <name>pipIrr-web-webchat</name>
+    <description>web寰俊鏀粯妯″潡</description>
+
+    <build>
+        <plugins>
+            <!-- 鐢熸垚涓嶅寘鍚緷璧杍ar鐨勫彲鎵цjar鍖�
+            <plugin>
+                !- spring boot鎻愪緵鐨刴aven鎵撳寘鎻掍欢 -
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        !-
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                        -
+                        <configuration>
+                            !- 涓嶅姞鐨勮瘽鏈�缁堝寘鍚嶄负: ${artifactId}-${version}.jar, 鍔犱簡鐨勮瘽鏈�缁堝寘鍚�: ${artifactId}-${version}-${classifier}.jar  -
+                            <classifier>execute</classifier>
+                            !- 涓嶆寚瀹氱敓鎴愯矾寰勭殑璇�, 榛樿淇濆瓨鍦� ${build.directory} 涓� -
+                            <outputDirectory>${project.build.directory}/execute</outputDirectory>
+                            <finalName>${artifactId}-${version}</finalName>
+                            <layout>ZIP</layout>
+                            <mainClass>com.dy.pipIrrBase.PipIrrBaseApplication</mainClass>
+                            <includes>
+                                <include>
+                                    <groupId>com.dy</groupId>
+                                    <artifactId>pipIrr-common</artifactId>
+                                </include>
+                                <include>
+                                    <groupId>com.dy</groupId>
+                                    <artifactId>pipIrr-global</artifactId>
+                                </include>
+                            </includes>
+                            <excludes>
+                                <exclude>
+                                    <groupId>org.projectlombok</groupId>
+                                    <artifactId>lombok</artifactId>
+                                </exclude>
+                            </excludes>
+                        </configuration>
+                    </execution>
+                </executions>
+
+            </plugin>
+            -->
+            <!-- 鎷疯礉渚濊禆鐨刯ar鍖呭埌lib鐩綍-->
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <configuration>
+                            <!-- 涓嶅姞鐨勮瘽鏈�缁堝寘鍚嶄负: ${artifactId}-${version}.jar, 鍔犱簡鐨勮瘽鏈�缁堝寘鍚�: ${artifactId}-${version}-${classifier}.jar
+                            <classifier>execute</classifier>
+                            -->
+                            <!-- ${project.build.directory}鏄痬aven鍙橀噺锛屽唴缃殑锛岃〃绀簍arget鐩綍,濡傛灉涓嶅啓锛屽皢鍦ㄦ牴鐩綍涓嬪垱寤�/lib -->
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                            <!-- excludeTransitive:鏄惁涓嶅寘鍚棿鎺ヤ緷璧栧寘锛屾瘮濡傛垜浠緷璧朅锛屼絾鏄疉鍙堜緷璧栦簡B锛屾垜浠槸鍚︿篃瑕佹妸B鎵撹繘鍘� 榛樿涓嶆墦-->
+                            <excludeTransitive>false</excludeTransitive>
+                            <!-- 澶嶅埗鐨刯ar鏂囦欢鍘绘帀鐗堟湰淇℃伅 -->
+                            <stripVersion>false</stripVersion>
+                            <finalName>${project.artifactId}-${project.version}</finalName>
+                            <layout>ZIP</layout>
+                            <mainClass>com.dy.pipIrrBase.PipIrrBaseApplication</mainClass>
+                            <includes>
+                                <include>
+                                    <groupId>com.dy</groupId>
+                                    <artifactId>pipIrr-common</artifactId>
+                                </include>
+                                <include>
+                                    <groupId>com.dy</groupId>
+                                    <artifactId>pipIrr-global</artifactId>
+                                </include>
+                            </includes>
+                            <excludes>
+                                <exclude>
+                                    <groupId>org.projectlombok</groupId>
+                                    <artifactId>lombok</artifactId>
+                                </exclude>
+                            </excludes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <!-- 璁剧疆java缂栬瘧鐗堟湰锛岃繍琛岀幆澧冪増鏈� -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <!-- source锛� 婧愪唬鐮佺紪璇戠増鏈紱target锛� 鐩爣骞冲彴缂栬瘧鐗堟湰锛沞ncoding锛� 瀛楃闆嗙紪鐮併�� -->
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>${encoding}</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <!-- 瑙e喅璧勬簮鏂囦欢鐨勭紪鐮侀棶棰� -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <configuration>
+                    <encoding>${encoding}</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <!-- maven閲屾墽琛屾祴璇曠敤渚嬬殑鎻掍欢 -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+            <plugin>
+                <!-- 涓嬮潰瑙e喅锛氬綋杩涜Maven Lifecycle package鏃舵姤閿欙細Could not find artifact org.apache.mina:mina-core:bundle:2.2.1 in maven (https://repo1.maven.org/maven2/)-->
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/PipIrrWebChatApplication.java b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/PipIrrWebChatApplication.java
new file mode 100644
index 0000000..825a383
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/PipIrrWebChatApplication.java
@@ -0,0 +1,28 @@
+package com.dy.pipirrWebChat;
+
+import com.dy.common.multiDataSource.EnableMultiDataSource;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024/02/21 16:07
+ * @LastEditTime 2024/02/21 16:07
+ * @Description
+ */
+
+@SpringBootApplication
+@EnableAspectJAutoProxy
+@EnableMultiDataSource
+@ComponentScan(basePackages = {"com.dy.common", "com.dy.pipIrrGlobal", "com.dy.pipirrWebChat"})
+@MapperScan({"com.dy.pipIrrGlobal.daoPr", "com.dy.pipIrrGlobal.daoBa"})
+public class PipIrrWebChatApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(PipIrrWebChatApplication.class, args);
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/config/WebFilterConfiguration.java b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/config/WebFilterConfiguration.java
new file mode 100644
index 0000000..fd118ff
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/config/WebFilterConfiguration.java
@@ -0,0 +1,52 @@
+package com.dy.pipirrWebChat.config;
+
+import com.dy.common.webFilter.DevOfDataSourceNameSetFilter;
+import com.dy.common.webFilter.UserTokenFilter;
+import jakarta.servlet.Filter;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-02-21 16:10
+ * @LastEditTime 2024-02-21 16:10
+ * @Description
+ */
+
+@Configuration
+public class WebFilterConfiguration {
+
+    @Value("${pipIrr.global.dev}")
+    public String isDevStage ;//鏄惁涓哄紑鍙戦樁娈�
+    @Value("${pipIrr.global.dsName}")
+    public String dsName ;//寮�鍙戦樁娈电殑鏁版嵁婧愬悕绉�
+
+    /**
+     * DevOfDataSourceNameSetFilter涓嶶serTokenFilter鍙兘涓�涓閰嶇疆涓婏紝
+     * 鎵�浠ヤ粬浠殑order閮芥槸1
+     */
+    private static final int order_UserTokenFilter = 1 ;//涓庝笅闈�
+    private static final int order_DevOfDataSourceNameSetFilter = 1 ;
+
+
+    @Bean
+    public FilterRegistrationBean<? extends Filter> RegFilter() {
+        FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
+        if(this.isDevStage != null && !this.isDevStage.trim().equals("") && this.isDevStage.trim().equalsIgnoreCase("true")){
+            filterRegistrationBean.setFilter(new DevOfDataSourceNameSetFilter());
+            filterRegistrationBean.addUrlPatterns("/*");//閰嶇疆杩囨护瑙勫垯
+            filterRegistrationBean.addInitParameter("dataSourceName",dsName);//璁剧疆init鍙傛暟
+            filterRegistrationBean.setName("DevOfDataSourceNameSetFilter");//璁剧疆杩囨护鍣ㄥ悕绉�
+            filterRegistrationBean.setOrder(order_DevOfDataSourceNameSetFilter);//鎵ц娆″簭
+        }else{
+            filterRegistrationBean.setFilter(new UserTokenFilter());
+            filterRegistrationBean.addUrlPatterns("/*");//閰嶇疆杩囨护瑙勫垯
+            filterRegistrationBean.setName("UserTokenFilter");//璁剧疆杩囨护鍣ㄥ悕绉�
+            filterRegistrationBean.setOrder(order_UserTokenFilter);//鎵ц娆″簭
+        }
+        return filterRegistrationBean;
+    }
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/config/WebListenerConfiguration.java b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/config/WebListenerConfiguration.java
new file mode 100644
index 0000000..7cd9d6e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/config/WebListenerConfiguration.java
@@ -0,0 +1,69 @@
+package com.dy.pipirrWebChat.config;
+
+import com.dy.common.webListener.GenerateIdSetSuffixListener;
+import jakarta.servlet.ServletContextListener;
+import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-02-21 16:11
+ * @LastEditTime 2024-02-21 16:11
+ * @Description
+ */
+
+@Configuration
+public class WebListenerConfiguration {
+
+    /**
+     * 鍚姩椤哄簭
+     */
+    //private static final int order_config = 0 ;
+    private static final int order_idSetSuffix = 1 ;
+    //private static final int order_init = 2 ;
+
+    /*
+    * 瑙f瀽鍚勭***.config閰嶇疆鐨凜onfigListener锛屾殏鏃朵笉閲囩敤姝ょ閰嶇疆鏂瑰紡
+    *
+    @Bean
+    public ConfigListener getGlConfigListener(){
+        return new ConfigListener() ;
+    }
+    /**
+     * 澶栭儴鎻愪緵Listener
+     * @param listener 澶栭儴鎻愪緵Listener
+     * @return 娉ㄥ唽Bean
+    @Bean
+    public ServletListenerRegistrationBean<? extends ServletContextListener> regConfigListener(ConfigListener listener) {
+        ServletListenerRegistrationBean<ConfigListener> listenerRegistrationBean = new ServletListenerRegistrationBean<>();
+        listenerRegistrationBean.setListener(listener);
+        listenerRegistrationBean.setOrder(order_config);
+        return listenerRegistrationBean;
+    }
+    */
+
+    /**
+     * 鍐呴儴鎻愪緵listener锛岃listener鍦ㄧ郴缁熷惎鍔ㄦ椂锛屾牴鎹厤缃� 璁剧疆ID浜х敓鍣ㄧ殑鍚庣紑
+     * @return 娉ㄥ唽Bean
+     */
+    @Bean
+    public ServletListenerRegistrationBean<? extends ServletContextListener> regSsoListener() {
+        ServletListenerRegistrationBean<GenerateIdSetSuffixListener> listenerRegistrationBean = new ServletListenerRegistrationBean<>();
+        listenerRegistrationBean.setListener(new GenerateIdSetSuffixListener());
+        listenerRegistrationBean.setOrder(order_idSetSuffix);
+        return listenerRegistrationBean;
+    }
+
+//    /**
+//     * 鍐呴儴鎻愪緵listener锛岃listener鍦ㄧ郴缁熷惎鍔ㄦ椂锛屽垵濮嬪寲鏁版嵁搴撴暟鎹�
+//     * @return 娉ㄥ唽Bean
+//     */
+//    @Bean
+//    public ServletListenerRegistrationBean<? extends ServletContextListener> regInitListener() {
+//        ServletListenerRegistrationBean<InitListener> listenerRegistrationBean = new ServletListenerRegistrationBean<>();
+//        listenerRegistrationBean.setListener(new InitListener());
+//        listenerRegistrationBean.setOrder(order_init);
+//        return listenerRegistrationBean;
+//    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/result/WebChatResultCode.java b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/result/WebChatResultCode.java
new file mode 100644
index 0000000..2eb1327
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/java/com/dy/pipirrWebChat/result/WebChatResultCode.java
@@ -0,0 +1,23 @@
+package com.dy.pipirrWebChat.result;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-02-21 16:13
+ * @LastEditTime 2024-02-21 16:13
+ * @Description
+ */
+
+@Getter
+@AllArgsConstructor
+public enum WebChatResultCode {
+    /**
+     * 寰俊鏀粯
+     */
+    DIVIDE_FAIL(10001, "鍒嗘按鎴挎坊鍔犲け璐�");
+
+    private final Integer code;
+    private final String message;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/resources/application.yml b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/resources/application.yml
new file mode 100644
index 0000000..5afebda
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/resources/application.yml
@@ -0,0 +1,18 @@
+spring:
+  profiles:
+    include: global, database, database-ym, database-pj
+
+#actutor鐨剋eb绔彛
+management:
+  server:
+    port: ${pipIrr.project.actutorPort}
+#web鏈嶅姟绔彛锛�8086
+server:
+  port: ${pipIrr.webchat.webPort}
+  servlet:
+    context-path: /webchat #web璁块棶涓婁笅鏂囪矾寰�
+    context-parameters:
+      #GenerateIdSetSuffixListener涓簲鐢紝鍙栧�艰寖鍥存槸0-99
+      idSuffix: ${pipIrr.webchat.idSuffix}
+      #ConfigListener涓簲鐢�
+      #configFileNames: config-global.xml,config-demo.xml
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/resources/log4j2.yml b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/resources/log4j2.yml
new file mode 100644
index 0000000..924901d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/main/resources/log4j2.yml
@@ -0,0 +1,73 @@
+Configuration:
+  #status锛岃繖涓敤浜庤缃甽og4j2鑷韩鍐呴儴鐨勪俊鎭緭鍑猴紝鍙互涓嶈缃紝褰撹缃垚trace鏃讹紝浣犱細鐪嬪埌log4j2鍐呴儴鍚勭璇︾粏杈撳嚭锛涘彲浠ヨ缃垚Off(鍏抽棴)鎴朎rror(鍙緭鍑洪敊璇俊鎭�)
+  status: Error
+
+  Properties: # 瀹氫箟鍏ㄥ眬鍙橀噺
+    Property:
+      #鏃ュ織鏂囦欢瀛樺偍鐨勭洰褰�
+      - name: log.path
+        value: ./logs
+      #鏃ュ織鏂囦欢瀛樺偍鍚嶇О
+      - name: project.name
+        value: pipIrrBase
+
+  #瀹氫箟杈撳嚭鍣紝鍙互杈撳嚭鍒版帶鍒跺彴鍜屾枃浠�.
+  Appenders:
+    #杈撳嚭鍒版帶鍒跺彴
+    Console:
+      #Appender鍛藉悕
+      name: CONSOLE
+      target: SYSTEM_OUT
+      ThresholdFilter:
+        level: debug #杈撳嚭鏃ュ織绾у埆锛岃緭鍑烘棩蹇楁椂锛岄鍏堢敱Loggers.Root.level鎴朙oggers.Logger.level鍒ゆ柇鏄惁杈撳嚭锛岀劧鍚庡啀鐢辨湰level鍒ゆ柇鏄惁杈撳嚭
+        onMatch: ACCEPT #onMatch=ACCEPT 澶т簬绛変簬 "level" 閰嶇疆鐨勭瓑绾у湴鏃ュ織杈撳嚭
+        onMismatch: DENY #onMismatch=DENY 灏忎簬 "level" 閰嶇疆鐨勭瓑绾у湴鏃ュ織涓嶈緭鍑�
+      #鏃ュ織鍐呭鏍峰紡
+      PatternLayout:
+        #%n-鎹㈣
+        #%m-鏃ュ織鍐呭锛岃緭鍑轰唬鐮佷腑鎸囧畾鐨勬棩蹇椾俊鎭�
+        #%p-杈撳嚭浼樺厛绾э紝鍗矰EBUG,INFO,WARN,ERROR,FATAL
+        #%r-绋嬪簭鍚姩鍒扮幇鍦ㄧ殑姣鏁�
+        #%%- 杈撳嚭涓�涓�"%" 瀛楃
+        #%t-褰撳墠绾跨▼鍚�
+        #%d-鏃ユ湡鍜屾椂闂�, 甯哥敤鐨勬牸寮忔湁%d{DATE},%d{ABSOLUTE},%d{HH:mm:ss,SSS},%d{ddMMyyyyHH:mm:ss,SSS}
+        #%l-鍚�%F%L%C%M
+        #%F-java婧愭枃浠跺悕
+        #%L-java婧愮爜琛屾暟
+        #%C-java绫诲悕,%C{1}杈撳嚭鏈�鍚庝竴涓厓绱�
+        #%M-java鏂规硶鍚�
+        pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
+    # 杈撳嚭鍒版枃浠讹紝瓒呰繃10MB褰掓。
+    RollingFile:
+      - name: ROLLING_FILE
+        ignoreExceptions: false
+        fileName: ${log.path}/${project.name}.log
+        filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
+        ThresholdFilter:
+          level: error #杈撳嚭鏃ュ織绾у埆锛岃緭鍑烘棩蹇楁椂锛岄鍏堢敱Loggers.Root.level鎴朙oggers.Logger.level鍒ゆ柇鏄惁杈撳嚭锛岀劧鍚庡啀鐢辨湰level鍒ゆ柇鏄惁杈撳嚭
+          onMatch: ACCEPT #onMatch=ACCEPT 澶т簬绛変簬 "level" 閰嶇疆鐨勭瓑绾у湴鏃ュ織杈撳嚭
+          onMismatch: DENY #onMismatch=DENY 灏忎簬 "level" 閰嶇疆鐨勭瓑绾у湴鏃ュ織涓嶈緭鍑�
+        #鏃ュ織鍐呭鏍峰紡
+        PatternLayout:
+          pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
+        Policies:
+          SizeBasedTriggeringPolicy:
+            size: "10 MB"
+        DefaultRolloverStrategy:
+          max: 1000
+
+  Loggers:
+    Root:
+      level: info #鏃ュ織杈撳嚭绾у埆锛屽叡鏈�8涓骇鍒紝鎸夌収浠庝綆鍒伴珮涓猴細all < trace < debug < info < warn < error < fatal < off
+      AppenderRef: #Root鐨勫瓙鑺傜偣锛岀敤鏉ユ寚瀹氳鏃ュ織杈撳嚭鍒板摢涓狝ppender.
+        - ref: CONSOLE #杈撳嚭鏃ュ織鏃讹紝棣栧厛鐢辨湰level鍒ゆ柇鏄惁杈撳嚭锛岀劧鍚庡啀鐢变笂闈㈢殑Appenders.Console.ThresholdFilter.level鍒ゆ柇鏄惁杈撳嚭
+        - ref: ROLLING_FILE  #杈撳嚭鏃ュ織鏃讹紝棣栧厛鐢辨湰level鍒ゆ柇鏄惁杈撳嚭锛岀劧鍚庡啀鐢变笂闈㈢殑Appenders.RollingFile.ThresholdFilter.level鍒ゆ柇鏄惁杈撳嚭
+    # 涓哄寘閰嶇疆鐗规畩鐨凩og绾у埆锛屾柟渚胯皟璇曪紝
+    # 涓嶅彈Loggers.Root.level闄愬埗
+    Logger:
+      - name: com.dy.pipIrrGlobal.daoSe
+        additivity: false #鍘婚櫎閲嶅鐨刲og
+        level: debug #杈撳嚭鏃ュ織绾у埆
+        AppenderRef:
+          - ref: CONSOLE #杈撳嚭鏃ュ織鏃讹紝棣栧厛鐢辨湰.level鍒ゆ柇鏄惁杈撳嚭锛岀劧鍚庡啀鐢变笂闈㈢殑Appenders.Console.ThresholdFilter.level鍒ゆ柇鏄惁杈撳嚭
+          - ref: ROLLING_FILE #杈撳嚭鏃ュ織鏃讹紝棣栧厛鐢辨湰level鍒ゆ柇鏄惁杈撳嚭锛岀劧鍚庡啀鐢变笂闈㈢殑Appenders.RollingFile.ThresholdFilter.level鍒ゆ柇鏄惁杈撳嚭
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/test/java/com/dy/pipirrWebChat/PipIrrWebWebchatApplicationTests.java b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/test/java/com/dy/pipirrWebChat/PipIrrWebWebchatApplicationTests.java
new file mode 100644
index 0000000..e9dfe9d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-webchat/src/test/java/com/dy/pipirrWebChat/PipIrrWebWebchatApplicationTests.java
@@ -0,0 +1,13 @@
+package com.dy.pipirrWebChat;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class PipIrrWebWebchatApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pom.xml b/pipIrr-platform/pipIrr-web/pom.xml
index 06ace49..2562ee2 100644
--- a/pipIrr-platform/pipIrr-web/pom.xml
+++ b/pipIrr-platform/pipIrr-web/pom.xml
@@ -26,6 +26,7 @@
         <module>pipIrr-web-gis</module>
         <module>pipIrr-web-sell</module>
         <module>pipIrr-web-project</module>
+        <module>pipIrr-web-webchat</module>
     </modules>
 
     <dependencies>

--
Gitblit v1.8.0