From c568a328a8c273531773710fe814ac429bafc48f Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期一, 29 一月 2024 14:09:12 +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/pojoSe/SeClientCard.java                                    |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java                 |  916 ++++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoLoss.java                     |   58 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoReissueCard.java                |   35 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml                                                 |  289 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/converter/RechargeDtoMapper.java     |   26 
 pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java                                        |   11 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoIntake.java                                          |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientMapper.java                                   |   50 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardCtrl.java                   |   33 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoTransaction.java                |   18 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaRtu.java                                           |    6 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeCardOperate.java                                   |  138 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java                   |    5 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java                   |  473 ++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoFlowMeter.java                                       |    3 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java                                      |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/UserVoMapper.java                                   |    4 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaDivide.java                                        |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideVo.java                             |    6 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransactionStatistics.java                           |   33 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleCtrl.java                               |  147 -
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/DtoActiveCard.java                    |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerTrampMapper.java                          |   14 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java                       |   20 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeAudits.java                                        |   76 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/DtoRole.java                                |    2 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml                                                    |  132 +
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserSv.java                                 |   81 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoReissueCard.java                                     |   47 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoActiveCardNew.java                                   |   55 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerTrampMapper.xml                                         |   10 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoRefund.java                   |   58 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeAuditsMapper.java                                   |   27 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrIntake.java                                        |   10 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/util/InitListener.java                           |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoUnlock.java                   |   57 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/qo/QoCards.java                       |   31 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/dto/DtoGeneral.java                      |   54 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java                           |  178 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoTransactionStatistics.java      |   14 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java                              |  127 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeAuditsMapper.xml                                                  |  115 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoUserInfo.java                                        |   18 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoCards.java                                           |   45 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideSv.java                             |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoReversal.java                 |   64 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/result/SystemResultCode.java                     |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java                         |  189 +
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerCtrl.java |   93 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoDivide.java                                          |    2 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrDivideMapper.xml                                                  |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java                           |   54 
 pipIrr-platform/pipIrr-web/pipIrr-web-demo/src/main/java/com/dy/pipIrrDemo/demo/DemoCtrl.java                               |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/result/ProjectResultCode.java              |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoToAudit.java                        |   27 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideSv.java                       |    3 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeGeneral.java                                       |   92 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoAreaCode.java                                        |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java             |   29 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml                                             |  586 +++++
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoActiveCard.java               |   89 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java                               |   15 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoActiveCard.java                 |   47 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java                                  |   89 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoGeneral.java                        |   34 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeActiveCard.java                                    |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaUser.java                                          |    6 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java                                         |   43 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerSv.java   |   32 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoRecharge.java                   |   46 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/QueryVo.java                        |   10 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java                             |  120 -
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/LastOperateENUM.java                  |   13 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java                     |   89 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaUserMapper.java                                     |   28 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java               |   42 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml                                              |  105 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoCancel.java                   |   64 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeMapper.java                                   |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java                     |   33 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoRecharge.java                 |   84 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoFlowMonitoring.java                                  |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoRole.java                                            |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideCtrl.java                           |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java                       |   76 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransaction.java                                     |   46 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoRecharge.java                                        |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoReissue.java                  |   89 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/enums/OperateTypeENUM.java           |   28 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml                                                  |  178 -
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml                                              |   10 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml                                                  |   46 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java                               |   14 
 /dev/null                                                                                                                   |   21 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java                               |   20 
 pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoSv.java                                          |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/DtoIntakeController.java  |    4 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaIntake.java                                        |    7 
 99 files changed, 5,379 insertions(+), 782 deletions(-)

diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaUserMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaUserMapper.java
index cd7bc13..ac420c3 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaUserMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaUserMapper.java
@@ -101,4 +101,32 @@
      * @return
      */
     Map getUserInfoById(@Param("userId") Long userId);
+
+    /**
+     * 鏍规嵁鎸囧畾鐨勬潯浠惰幏鍙栫敤鎴疯褰曟暟
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢ㄦ埛鍒楄〃
+     * @param params
+     * @return
+     */
+    List<VoUserInfo> getUsers(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇瑙掕壊ID鍒楄〃
+     * @param userId
+     * @return
+     */
+    List<Map<String, Object>> getRoleIdsByUserId(@Param("userId") Long userId);
+
+    /**
+     * getRoleNamesByUserId
+     * @param userId
+     * @return
+     */
+    List<Map<String, Object>> getRoleNamesByUserId(@Param("userId") Long userId);
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java
index da7893b..f9dbdc5 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java
@@ -72,4 +72,18 @@
      * @return
      */
     Integer getRecordCountOfController(@Param("controllerId") Long controllerId);
+
+    /**
+     * 鏍规嵁鎺у埗鍣ㄧ紪鍙疯幏鍙栧凡缁戝畾璁板綍鏁�
+     * @param controllerId
+     * @return
+     */
+    Integer getBindedCount(@Param("controllerId") Long controllerId);
+
+    /**
+     * 鏍规嵁鎺у埗鍣ㄧ紪鍙峰垹闄ゅ彇姘村彛缂栧彿
+     * @param controllerId
+     * @return
+     */
+    Integer deleteIntakeId(@Param("controllerId") Long controllerId);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerTrampMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerTrampMapper.java
index 2b4891a..4d1b995 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerTrampMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerTrampMapper.java
@@ -63,4 +63,18 @@
      * @return update count
      */
     int updateByPrimaryKey(PrControllerTramp record);
+
+    /**
+     * 鏍规嵁鎺у埗鍣ㄧ紪鍙疯幏鍙栨祦娴帶鍒跺櫒鍦板潃
+     * @param controllerId 娴佹氮鎺у埗鍣ㄧ紪鍙�
+     * @return 璁板綍鏁伴噺
+     */
+    //String getTrampRtuAddr(@Param("controllerId") Long controllerId);
+
+    /**
+     * 鏍规嵁鎺у埗鍣ㄧ紪鍙疯幏鍙栨祦娴帶鍒跺櫒淇℃伅
+     * @param controllerId
+     * @return
+     */
+    PrControllerTramp getTrampControllerInfo(@Param("controllerId") Long controllerId);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeMapper.java
index c1cb703..d6262c9 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeMapper.java
@@ -104,4 +104,10 @@
      * @return  Level  鍖哄煙绛夌骇
      */
     Integer getLevelByRegionId(long regionId);
+
+    /**
+     * 鑾峰彇鏈粦鎺у埗鍣ㄧ殑鍙栨按鍙e垪琛�
+     * @return
+     */
+    List<Map<String, Object>> getNoBindingIntakes();
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeAuditsMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeAuditsMapper.java
new file mode 100644
index 0000000..95ef40d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeAuditsMapper.java
@@ -0,0 +1,27 @@
+package com.dy.pipIrrGlobal.daoSe;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoSe.SeAudits;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-24 18:57
+ * @LastEditTime 2024-01-24 18:57
+ * @Description
+ */
+
+@Mapper
+public interface SeAuditsMapper extends BaseMapper<SeAudits> {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(SeAudits record);
+
+    int insertSelective(SeAudits record);
+
+    SeAudits selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(SeAudits record);
+
+    int updateByPrimaryKey(SeAudits record);
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..1acd2b6
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java
@@ -0,0 +1,127 @@
+package com.dy.pipIrrGlobal.daoSe;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+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
+ * @Description
+ */
+
+@Mapper
+public interface SeCardOperateMapper extends BaseMapper {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(SeCardOperate record);
+
+    int insertSelective(SeCardOperate record);
+
+    SeCardOperate selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(SeCardOperate record);
+
+    int updateByPrimaryKey(SeCardOperate record);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鍏呭�艰褰曟暟閲�
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鍏呭�艰褰�
+     * @param params
+     * @return
+     */
+    List<VoRecharge> getRecharges(Map<?, ?> params);
+
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍鏁�
+     * @param params
+     * @return
+     */
+    Long getTransactionRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍
+     * @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);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇寮�鍗¤褰曟暟
+     * @param params
+     * @return
+     */
+    Long getActiveCardRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇寮�鍗¤褰�
+     * @param params
+     * @return
+     */
+    List<VoActiveCardNew> getActiveCards(Map<?, ?> params);
+
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇琛ュ崱璁板綍鏁�
+     * @param params
+     * @return
+     */
+    Long getReissueCardRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇琛ュ崱璁板綍
+     * @param params
+     * @return
+     */
+    List<VoReissueCard> getReissueCards(Map<?, ?> params);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java
index 946c184..b329fa7 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voSe.VoCardInfo;
+import com.dy.pipIrrGlobal.voSe.VoCards;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -92,4 +93,18 @@
      * @return
      */
     String getCardStateByCardNum(@Param("cardNum") Long cardNum);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃璁板綍鏁帮紝搴旂敤绋嬪簭浣跨敤
+     * @param params
+     * @return
+     */
+    Long getCardsCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃锛屽簲鐢ㄧ▼搴忎娇鐢�
+     * @param params
+     * @return
+     */
+    List<VoCards> getCards(Map<?, ?> params);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientMapper.java
index 44e1e11..907eab3 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientMapper.java
@@ -3,8 +3,6 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeClient;
 import com.dy.pipIrrGlobal.voSe.VoClient;
-import com.dy.pipIrrGlobal.voSe.VoOperate;
-import com.dy.pipIrrGlobal.voSe.VoStatistics;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -45,6 +43,13 @@
      * @return 5绾ц鏀垮尯鍒掍唬鐮�
      */
     Long getAreaCodeByNum(@Param("clientNum") String clientNum);
+
+    /**
+     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode锛岃ˉ鍗¤繃绋嬩腑寮�鏂板崱浣跨敤
+     * @param clientId
+     * @return
+     */
+    Long getAreaCodeById(@Param("clientId") Long clientId);
 
     /**
      * 鏍规嵁鍐滄埛缂栧彿鑾峰彇鍐滄埛ID
@@ -93,45 +98,4 @@
      */
     List<Map<String, Object>> getWaterTypes();
 
-    /**
-     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇璐按姹囨�诲拰璐崱姹囨��
-     * @param params 缁熻鏉′欢
-     * @return 璐按閲戦銆佽喘鍗¢噾棰�
-     */
-    Map getSums(Map<?, ?> params);
-
-    /**
-     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鎿嶄綔璁板綍鏁�
-     * @param params 鏌ヨ鏉′欢
-     * @return 绗﹀悎鏉′欢鐨勮褰曟暟
-     */
-    Long getOperateRecordCount(Map<?, ?> params);
-
-    /**
-     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鎿嶄綔璁板綍
-     * @param params 鏌ヨ鏉′欢
-     * @return 绗﹀悎鏉′欢鐨勪氦鏄撹褰�
-     */
-    List<VoOperate> getOperates(Map<?, ?> params);
-
-    /**
-     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗绗旀暟姹囨�诲拰浜ゆ槗閲戦姹囨��
-     * @param params
-     * @return
-     */
-    Map getStatisticSums(Map<?, ?> params);
-
-    /**
-     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇姹囨�昏褰曟暟
-     * @param params
-     * @return
-     */
-    Long getStatisticRecordCount(Map<?, ?> params);
-
-    /**
-     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇缁熻璁板綍
-     * @param params
-     * @return
-     */
-    List<VoStatistics> getStatistics(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
new file mode 100644
index 0000000..0e230af
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java
@@ -0,0 +1,89 @@
+package com.dy.pipIrrGlobal.daoSe;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoSe.SeGeneral;
+import com.dy.pipIrrGlobal.voSe.VoGeneral;
+import com.dy.pipIrrGlobal.voSe.VoTransactionStatistics;
+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-24 18:57
+ * @LastEditTime 2024-01-25 15:55
+ * @Description
+ */
+
+@Mapper
+public interface SeGeneralMapper extends BaseMapper<SeGeneral> {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(SeGeneral record);
+
+    int insertSelective(SeGeneral record);
+
+    SeGeneral selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(SeGeneral record);
+
+    int updateByPrimaryKey(SeGeneral record);
+
+    /**
+     * 鑾峰彇鏈敓鎴愭�昏处鐨勪氦鏄撴棩鏈熷垪琛紙褰撳ぉ鐨勪氦鏄撹褰曚笉鐢熸垚鎬昏处锛�
+     * @return
+     */
+    List<Map<String, Object>> getDatesOfNotInGenerals();
+
+    /**
+     * 鏍规嵁浜ゆ槗鏃ユ湡鑾峰彇鎬昏处璁板綍鍒楄〃锛堝緟鐢熸垚鐨勶級
+     * @param operateDate
+     * @return
+     */
+    List<SeGeneral> getGeneralByOperateDate(@Param("operateDate") String operateDate);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鎬昏处璁板綍鏁�
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鎬昏处璁板綍
+     * @param params
+     * @return
+     */
+    List<VoGeneral> getGenerals(Map<?, ?> params);
+
+    /**
+     * 璐㈠姟瀵硅处瀹℃牳椤碉紝鏀堕摱鍛�+鏃ユ湡鍒嗙粍锛屾帓闄や氦鏄撶被鍨嬪垎缁勶紝璁板綍鏁�
+     * @param params
+     * @return
+     */
+    Long getToAuditRecordCount(Map<?, ?> params);
+
+    /**
+     * 璐㈠姟瀵硅处瀹℃牳椤碉紝鏀堕摱鍛�+鏃ユ湡鍒嗙粍锛屾帓闄や氦鏄撶被鍨嬪垎缁�
+     * @param params
+     * @return
+     */
+    List<VoTransactionStatistics> getToAudit(Map<?, ?> params);
+
+    /**
+     * 鑾峰彇鎸囧畾鏃ユ湡銆佹寚瀹氭敹閾跺憳銆佹寚瀹氭敮浠樻柟寮忓疄鏀堕噾棰濆悎璁�
+     * @param tradeDate
+     * @param paymentId
+     * @return
+     */
+    Float getPaymentSums(@Param("tradeDate") String tradeDate, @Param("cashierId") Long cashierId, @Param("paymentId") Long paymentId);
+
+    /**
+     * 鏍瑰熀鎸囧畾鏃ユ湡銆佹寚瀹氭敹閾跺憳鑾峰彇绗旀暟鍚堣銆佸疄鏀堕噾棰濆悎璁°�佽禒閫侀噾棰濆悎璁�
+     * @param params
+     * @return
+     */
+    Map getTransactionStatisticsSums(Map<?, ?> params);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaDivide.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaDivide.java
index 6d3deed..dcec52d 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaDivide.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaDivide.java
@@ -14,6 +14,12 @@
 import org.hibernate.validator.constraints.Length;
 
 /**
+ * @author wuzeyu
+ * @date 2023/12/26 11:12
+ * @LastEditTime 2023/12/26 11:12
+ * @Description
+ */
+/**
  * 鍒嗘按鍙e疄浣�
  */
 @TableName(value="ba_divide", autoResultMap = true)
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaIntake.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaIntake.java
index a7d833b..15c0e5f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaIntake.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaIntake.java
@@ -13,6 +13,13 @@
 import org.hibernate.validator.constraints.Length;
 
 /**
+ * @author wuzeyu
+ * @date 2023/12/26 11:12
+ * @LastEditTime 2023/12/26 11:12
+ * @Description 鍙栨按鍙�
+ */
+
+/**
  * 鍙栨按鍙e疄浣�
  */
 @TableName(value = "ba_intake", autoResultMap = true)
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaRtu.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaRtu.java
index b538645..7eee731 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaRtu.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaRtu.java
@@ -13,6 +13,12 @@
 import org.hibernate.validator.constraints.Length;
 
 /**
+ * @author wuzeyu
+ * @date 2023/12/26 11:12
+ * @LastEditTime 2023/12/26 11:12
+ * @Description
+ */
+/**
  * 鎺у埗鍣ㄥ疄浣擄紝RTU闃�鎺т竴浣撴満
  */
 @TableName(value = "ba_rtu", autoResultMap = true)
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaUser.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaUser.java
index ed531ba..1cfbd29 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaUser.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoBa/BaUser.java
@@ -51,9 +51,9 @@
     ASSIGN_UUID(4), //鍏ㄥ眬鍞竴鐨� uuid
     */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
-    @TableId(type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.INPUT)
     @Schema(description = "瀹炰綋id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    public Long id;
+    public Long userId;
 
 
     @Schema(description = "鎵�灞炵墖鍖篒D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@@ -67,7 +67,7 @@
     @Schema(description = "濮撳悕", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotEmpty(message = "濮撳悕涓嶈兘涓虹┖") //涓嶈兘涓虹┖涔熶笉鑳戒负null
     @Length(message = "濮撳悕涓嶅ぇ浜巤max}瀛楋紝涓嶅皬浜巤min}瀛�", min = 2, max = 25)
-    public String name;
+    public String userName;
 
     /**
      * 鎵嬫満鍙凤紝鎵嬫満鍙风敤浜庣櫥褰曠郴缁�
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrIntake.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrIntake.java
index 61aad7d..00b4a33 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrIntake.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrIntake.java
@@ -15,6 +15,12 @@
 import java.util.Date;
 
 /**
+ * @author wuzeyu
+ * @date 2023/12/26 11:12
+ * @LastEditTime 2023/12/26 11:12
+ * @Description 鍙栨按鍙�
+ */
+/**
  * 鍙栨按鍙h〃
  */
 
@@ -72,7 +78,7 @@
      */
     @JSONField(serializeUsing = ObjectWriterImplToString.class)
     @Schema(description = "鎵�鍦ㄧ墖鍖篒D", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "鎵�鍦ㄧ墖鍖轰笉鑳戒负绌�")
+//    @NotNull(message = "鎵�鍦ㄧ墖鍖轰笉鑳戒负绌�")
     private Long blockId;
 
     /**
@@ -101,7 +107,7 @@
      * 澶囨敞淇℃伅
      */
     @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    @Length(message = "澶囨敞涓嶅ぇ浜巤max}瀛楋紝涓嶅皬浜巤min}瀛�", min = 1, max = 200)
+    @Length(message = "澶囨敞涓嶅ぇ浜巤max}瀛�", max = 200)
     private String remarks;
 
     /**
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeActiveCard.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeActiveCard.java
index ed80934..750461f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeActiveCard.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeActiveCard.java
@@ -89,7 +89,7 @@
      */
     @Schema(description = "琛ュ崱閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @Length(message = "琛ュ崱閲戦涓嶅皬浜巤min}", min = 0)
-    private Double reissueamount;
+    private Float reissueamount;
 
     /**
      * 鎿嶄綔绫诲瀷;1-寮�鍗★紝2-琛ュ崱
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeAudits.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeAudits.java
new file mode 100644
index 0000000..9d1a492
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeAudits.java
@@ -0,0 +1,76 @@
+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.NotNull;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+import org.hibernate.validator.constraints.Length;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-24 18:57
+ * @LastEditTime 2024-01-24 18:57
+ * @Description
+ */
+
+@TableName(value="se_audits", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鎬昏处瀹℃牳璁板綍瀹炰綋")
+public class SeAudits implements BaseEntity {
+    public static final long serialVersionUID = 202401251043001L;
+
+    /**
+    * 涓婚敭
+    */
+    @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 generalId;
+
+    /**
+    * 瀹℃牳鐘舵��;1-鏈鏍革紝2-鍚屾剰锛�3-椹冲洖
+    */
+    @Schema(description = "瀹℃牳鐘舵��", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "瀹℃牳鐘舵�佷笉鑳戒负绌�")
+    private Byte auditStatus;
+
+    /**
+    * 瀹℃牳鎰忚
+    */
+    @Schema(description = "瀹℃牳鎰忚", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(max = 200, message = "瀹℃牳鎰忚鏈�澶�200瀛�")
+    private String auditOpinion;
+
+    /**
+    * 鎿嶄綔浜虹紪鍙�
+    */
+    @Schema(description = "鎿嶄綔浜篒D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "鎿嶄綔浜篒D涓嶈兘涓虹┖")
+    @Positive(message = "鎿嶄綔浜篒D蹇呴』涓哄ぇ浜�0鐨勬暣鏁�")
+    private Long operator;
+
+    /**
+    * 鎿嶄綔鏃堕棿
+    */
+    @Schema(description = "鎿嶄綔鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Date operateDt;
+}
\ 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
new file mode 100644
index 0000000..21e51cb
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeCardOperate.java
@@ -0,0 +1,138 @@
+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.NotNull;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+import org.hibernate.validator.constraints.Length;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-18 19:10
+ * @LastEditTime 2024-01-18 19:10
+ * @Description
+ */
+
+@TableName(value="se_card_operate", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "姘村崱鎿嶄綔瀹炰綋")
+public class SeCardOperate implements BaseEntity {
+    public static final long serialVersionUID = 202401181914001L;
+
+    /**
+     * 涓婚敭
+     */
+    @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 cardId;
+
+    /**
+     * 鍐滄埛ID
+     */
+    @Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "鍐滄埛ID涓嶈兘涓虹┖")
+    private Long clientId;
+
+    /**
+     * 鍗$墖浣欓;鍏呭�笺�佹寕澶便�佸啿姝c�佽В閿�
+     */
+    @Schema(description = "鍗$墖浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "鍗$墖浣欓涓嶅皬浜巤min}", min = 0)
+    private Float money;
+
+    /**
+     * 绯荤粺浣欓;鍐叉鏃朵娇鐢�
+     */
+    @Schema(description = "绯荤粺浣欓", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Length(message = "绯荤粺浣欓涓嶅皬浜巤min}", min = 0)
+    private Float systemBalance;
+
+    /**
+     * 浜ゆ槗閲戦;璐按閲戦銆侀��娆鹃噾棰�
+     */
+    @Schema(description = "浜ゆ槗閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "浜ゆ槗閲戦涓嶅皬浜巤min}", min = 0)
+    private Float tradeAmount;
+
+    /**
+     * 姘翠环;鍏呭�兼椂浣跨敤
+     */
+    @Schema(description = "姘翠环", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "姘翠环涓嶅皬浜巤min}", min = 0)
+    private Float price;
+
+    /**
+     * 璐崱閲戦
+     */
+    @Schema(description = "璐崱閲戦", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Length(message = "璐崱閲戦涓嶅皬浜巤min}瀛�", min = 0)
+    private Integer cardCost;
+
+    /**
+     * 璧犻�侀噾棰�
+     */
+    @Schema(description = "璧犻�侀噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "璧犻�侀噾棰濅笉灏忎簬{min}", min = 0)
+    private Float gift;
+
+    /**
+     * 闈炰氦鏄撻噾棰�;琛ュ崱閲戦銆佽ˉ鎵i噾棰濄�佸墿浣欓噾棰濓紙瑙i攣锛�
+     */
+    @Schema(description = "闈炰氦鏄撻噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "闈炰氦鏄撻噾棰濅笉灏忎簬{min}", min = 0)
+    private Float noTradeAmount;
+
+    /**
+     * 鎿嶄綔绫诲瀷
+     */
+    @Schema(description = "鎿嶄綔绫诲瀷", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "浠樻鏂瑰紡涓嶅ぇ浜巤max}锛屼笉灏忎簬{min}", min = 1, max = 8)
+    private Byte operateType;
+
+    /**
+     * 浠樻鏂瑰紡缂栧彿
+     */
+    @Schema(description = "浠樻鏂瑰紡缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "浠樻鏂瑰紡缂栧彿涓嶅ぇ浜巤max}锛屼笉灏忎簬{min}", min = 1, max = 4)
+    private Long paymentId;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "澶囨敞闀垮害灏忎簬{max}瀛�", min = 1, max = 200)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜篒D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜篒D蹇呴』涓哄ぇ浜�0鐨勬暣鏁�")
+    private Long operator;
+
+    /**
+     * 鎿嶄綔鏃堕棿
+     */
+    @Schema(description = "鎿嶄綔鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Date operateDt;
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClientCard.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClientCard.java
index d9600e3..d31326a 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClientCard.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClientCard.java
@@ -122,6 +122,12 @@
     private Date reversaldt;
 
     /**
+     * 琛ユ墸鏃堕棿
+     */
+    @Schema(description = "琛ユ墸鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Date refunddt;
+
+    /**
      * 娑堣垂鏃堕棿
      */
     @Schema(description = "娑堣垂鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
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
new file mode 100644
index 0000000..9301699
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeGeneral.java
@@ -0,0 +1,92 @@
+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.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-24 18:57
+ * @LastEditTime 2024-01-24 18:57
+ * @Description
+ */
+
+@TableName(value="se_general", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鎬昏处瀹炰綋")
+public class SeGeneral implements BaseEntity {
+    public static final long serialVersionUID = 202401241912001L;
+
+    /**
+     * 涓婚敭
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    @Schema(description = "瀹炰綋id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long id;
+
+    /**
+     * 鏀堕摱鍛業D
+     */
+    @Schema(description = "鏀堕摱鍛業D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "鏀堕摱鍛業D涓嶈兘涓虹┖")
+    private Long cashierId;
+
+    /**
+     * 鏀堕摱鍛樺鍚�
+     */
+    @Schema(description = "鏀堕摱鍛樺鍚�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank(message = "鏀堕摱鍛樺鍚嶄笉鑳戒负绌�")
+    private String cashierName;
+
+    /**
+     * 瀹炴敹閲戦
+     */
+    @Schema(description = "瀹炴敹閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "瀹炴敹閲戦涓嶈兘涓虹┖")
+    private Double tradeAmount;
+
+    /**
+     * 璧犻�侀噾棰�
+     */
+    @Schema(description = "璧犻�侀噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "璧犻�侀噾棰濅笉鑳戒负绌�")
+    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 Date operateDate;
+
+    /**
+     * 瀹℃牳鐘舵��;1-鏈鏍革紝2-鍚屾剰锛�3-椹冲洖
+     */
+    @Schema(description = "瀹℃牳鐘舵��", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Max(message = "瀹℃牳鐘舵�佹渶澶т负3", value = 3)
+    @Min(message = "瀹℃牳鐘舵�佹渶灏忎负1",value = 1)
+    private Byte auditStatus;
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoAreaCode.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoAreaCode.java
index 20869d7..b3b48e9 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoAreaCode.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoAreaCode.java
@@ -14,7 +14,7 @@
 @Data
 @Schema(title = "5绾ц鏀垮尯鍒掕鍥惧璞�")
 public class VoAreaCode implements BaseEntity {
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 202401241703001L;
 
     @Schema(title = "鐪佺骇鍖哄垝浠g爜")
     private String provinceId;
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoRole.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoRole.java
index 6b88843..ea4eb65 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoRole.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoRole.java
@@ -19,7 +19,7 @@
 @Data
 @Schema(title = "瑙掕壊淇℃伅瑙嗗浘瀵硅薄")
 public class VoRole implements BaseEntity {
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 202401241704001L;
 
     @Schema(title = "瑙掕壊缂栧彿")
     private String roleId;
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoUserInfo.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoUserInfo.java
index 437a9f8..f79881f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoUserInfo.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoUserInfo.java
@@ -18,13 +18,28 @@
 @Data
 @Schema(title = "鐢ㄦ埛淇℃伅瑙嗗浘瀵硅薄")
 public class VoUserInfo implements BaseEntity {
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 202401241704002L;
 
     @Schema(title = "鐢ㄦ埛ID")
     private String userId;
 
     @Schema(title = "鐢ㄦ埛濮撳悕")
     private String userName;
+
+    @Schema(title = "鎵嬫満鍙�")
+    private String phone;
+
+    @Schema(title = "鐗囧尯ID")
+    private String blockId;
+
+    @Schema(title = "鐗囧尯鍚嶇О")
+    private String blockName;
+
+    @Schema(title = "鐘舵�佺紪鍙�")
+    private Integer stateId;
+
+    @Schema(title = "鐘舵�佸悕绉�")
+    private String stateName;
 
     @Schema(title = "瑙掕壊缂栧彿鍒楄〃")
     private List<Map<String, Object>> roleIds;
@@ -33,7 +48,6 @@
     private List<Map<String, Object>> roleNames;
 
     @Schema(title = "鏉冮檺鍒楄〃")
-    //private List<Map<String, Object>> permissions;
     private JSONArray permissions;
 
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java
index cdc8a43..f24306a 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java
@@ -20,7 +20,7 @@
 @Data
 @Schema(title = "鎺у埗鍣ㄨ鍥惧璞�")
 public class VoController implements BaseEntity {
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 202401241704003L;
 
     @Schema(title = "ID")
     @ExcelProperty("ID")
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoDivide.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoDivide.java
index d65d10f..207d0d9 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoDivide.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoDivide.java
@@ -21,7 +21,7 @@
 @Data
 @Schema(title = "鍒嗘按鎴胯鍥惧璞�")
 public class VoDivide implements BaseEntity {
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 202401241704004L;
 
     @Schema(title = "ID")
     @ExcelProperty("ID")
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoFlowMeter.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoFlowMeter.java
index 562c4c0..30d5f33 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoFlowMeter.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoFlowMeter.java
@@ -1,6 +1,5 @@
 package com.dy.pipIrrGlobal.voPr;
 
-import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.dy.common.po.BaseEntity;
@@ -20,7 +19,7 @@
 @Data
 @Schema(title = "娴侀噺璁¤鍥惧璞�")
 public class VoFlowMeter implements BaseEntity {
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 202401241704005L;
 
     @Schema(title = "ID")
     @ExcelProperty("ID")
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoFlowMonitoring.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoFlowMonitoring.java
index b27fa51..02a7fd4 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoFlowMonitoring.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoFlowMonitoring.java
@@ -16,7 +16,7 @@
 @Data
 @Schema(title = "绠$綉娴侀噺鐩戞祴绔欒鍥惧璞�")
 public class VoFlowMonitoring implements BaseEntity {
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 202401241704006L;
 
     @Schema(title = "ID")
     @ExcelProperty("ID")
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoIntake.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoIntake.java
index 89a2e92..f9a4449 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoIntake.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoIntake.java
@@ -26,7 +26,7 @@
     @Schema(title = "ID")
     @ExcelProperty("ID")
     @ColumnWidth(10)
-    private Long id;
+    private String id;
 
     @Schema(title = "鍙栨按鍙e悕绉�")
     @ExcelProperty("鍙栨按鍙e悕绉�")
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoActiveCardNew.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoActiveCardNew.java
new file mode 100644
index 0000000..21dfaba
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoActiveCardNew.java
@@ -0,0 +1,55 @@
+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 :WuZeYu
+ * @Date :2024/1/23  16:36
+ * @LastEditTime :2024/1/23  16:36
+ * @Description
+ */
+
+@Data
+@Schema(title = "鍏呭�艰褰曡鍥惧璞�")
+public class VoActiveCardNew implements BaseEntity {
+    private static final long serialVersionUID = 2024012316370001L;
+
+    @Schema(title = "ID")
+    private Long id;
+
+    @Schema(title = "鍐滄埛濮撳悕")
+    private String clientName;
+
+    @Schema(title = "鍐滄埛缂栧彿")
+    private String clientNum;
+
+    @Schema(title = "姘村崱缂栧彿")
+    private String cardNum;
+
+    @Schema(title = "姘村崱鐘舵��")
+    private Byte state;
+
+    @Schema(title = "姘村崱鐘舵�佸悕绉�")
+    private String stateName;
+
+    @Schema(title = "鍗$墖璐圭敤")
+    private Integer cardCost;
+
+
+    @Schema(title = "鏀粯鏂瑰紡")
+    private Integer paymentId;
+
+    @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;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoCards.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoCards.java
new file mode 100644
index 0000000..2ec42d9
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoCards.java
@@ -0,0 +1,45 @@
+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-26 18:52
+ * @LastEditTime 2024-01-26 18:52
+ * @Description 搴旂敤绋嬪簭涓娇鐢紝鏌ヨ鏉′欢涓猴細鍐滄埛缂栧彿銆佸啘鎴峰鍚嶃�佹按鍗$紪鍙�
+ */
+
+@Data
+@Schema(title = "鍐滄埛鍗¤鍥惧璞�")
+public class VoCards implements BaseEntity {
+    private static final long serialVersionUID = 202401261853001L;
+
+    @Schema(title = "鍐滄埛缂栧彿")
+    private String clientNum;
+
+    @Schema(title = "鍐滄埛濮撳悕")
+    private String clientName;
+
+    @Schema(title = "姘村崱缂栧彿")
+    private String cardNum;
+
+    @Schema(title = "鐢佃瘽鍙风爜")
+    private Float phone;
+
+    @Schema(title = "韬唤璇佸彿鐮�")
+    private Float idCard;
+
+    @Schema(title = "姘村崱鐘舵��")
+    private Float cardState;
+
+    @Schema(title = "姘村崱鐘舵�佸悕绉�")
+    private String stateName;
+
+    @Schema(title = "姘村崱绫诲瀷")
+    private String cardType;
+
+    @Schema(title = "浣欓")
+    private String money;
+}
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
new file mode 100644
index 0000000..b9fd28b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java
@@ -0,0 +1,43 @@
+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-24 17:00
+ * @LastEditTime 2024-01-24 17:00
+ * @Description
+ */
+
+@Data
+@Schema(title = "璐㈠姟瀵硅处涔嬫�昏处瑙嗗浘瀵硅薄")
+public class VoGeneral implements BaseEntity {
+    private static final long serialVersionUID = 202401241706001L;
+
+    @Schema(title = "鎬昏处ID")
+    private String generalId;
+
+    @Schema(title = "鏀堕摱鍛業D")
+    private String cashierId;
+
+    @Schema(title = "鏀堕摱鍛樺鍚�")
+    private String cashierName;
+
+    @Schema(title = "瀹炴敹閲戦")
+    private Float tradeAmount;
+
+    @Schema(title = "璧犻�侀噾棰�")
+    private Float gift;
+
+    @Schema(title = "鎬婚")
+    private Float totalAmount;
+
+    @Schema(title = "浜ゆ槗鏃ユ湡")
+    private String operateDate;
+
+    @Schema(title = "瀹℃牳鐘舵��")
+    private String auditStatus;
+
+}
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 e423945..f90ecf5 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
@@ -21,7 +21,7 @@
     private static final long serialVersionUID = 1L;
 
     @Schema(title = "ID")
-    private Long id;
+    private String id;
 
     @Schema(title = "鍐滄埛濮撳悕")
     private String clientName;
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoReissueCard.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoReissueCard.java
new file mode 100644
index 0000000..694a5d0
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoReissueCard.java
@@ -0,0 +1,47 @@
+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 :WuZeYu
+ * @Date :2024/1/26  9:31
+ * @LastEditTime :2024/1/26  9:31
+ * @Description
+ */
+@Data
+@Schema(title = "琛ュ崱璁板綍瑙嗗浘瀵硅薄")
+public class VoReissueCard implements BaseEntity {
+    private static final long serialVersionUID = 2024012609330001L;
+
+    @Schema(title = "ID")
+    private Long id;
+
+    @Schema(title = "鍐滄埛濮撳悕")
+    private String clientName;
+
+    @Schema(title = "鍐滄埛缂栧彿")
+    private String clientNum;
+
+    @Schema(title = "姘村崱缂栧彿")
+    private String cardNum;
+
+    @Schema(title = "鍗$墖璐圭敤")
+    private Integer cardCost;
+
+    @Schema(title = "琛ュ崱閲戦")
+    private Double reissueAmount;
+
+    @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;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoStatistics.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoStatistics.java
deleted file mode 100644
index a003b59..0000000
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoStatistics.java
+++ /dev/null
@@ -1,42 +0,0 @@
-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 2023-12-27 15:01
- * @LastEditTime 2023-12-27 15:01
- * @Description
- */
-
-@Data
-@Schema(title = "浜ゆ槗姹囨�昏鍥惧璞�")
-public class VoStatistics implements BaseEntity {
-    private static final long serialVersionUID = 1L;
-
-    @Schema(title = "鏉戝簞ID")
-    private Long villageId;
-
-    @Schema(title = "鏉戝簞")
-    private String districtTitle;
-
-    @Schema(title = "涓氬姟绫诲瀷")
-    private String operateType;
-
-    @Schema(title = "浜ゆ槗鏃ユ湡")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date operateDt;
-
-    @Schema(title = "浜ゆ槗绗旀暟")
-    private Integer count;
-
-    @Schema(title = "浜ゆ槗閲戦")
-    private Float money;
-}
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/VoTransaction.java
similarity index 66%
rename from pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoOperate.java
rename to pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransaction.java
index 711ea95..6eb12ff 100644
--- 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/VoTransaction.java
@@ -16,20 +16,23 @@
  */
 
 @Data
-@Schema(title = "鎿嶄綔璁板綍瑙嗗浘瀵硅薄")
-public class VoOperate implements BaseEntity {
-    private static final long serialVersionUID = 1L;
+@Schema(title = "浜ゆ槗璁板綍瑙嗗浘瀵硅薄")
+public class VoTransaction implements BaseEntity {
+    private static final long serialVersionUID = 202401241705001L;
 
-    @Schema(title = "鏉慖D")
+    @Schema(title = "璁㈠崟缂栧彿")
+    private Long orderNumber;
+
+    @Schema(title = "鏉戝簞ID")
     private Long villageId;
 
-    @Schema(title = "鍖哄垝鍚嶇О涓�")
+    @Schema(title = "鏉戝簞")
     private String districtTitle;
 
     @Schema(title = "鍐滄埛缂栧彿")
     private String clientNum;
 
-    @Schema(title = "鍐滄埛濮撳悕")
+    @Schema(title = "濮撳悕")
     private String name;
 
     @Schema(title = "姘村崱缂栧彿")
@@ -38,20 +41,8 @@
     @Schema(title = "韬唤璇佸彿")
     private String idCard;
 
-    @Schema(title = "鎵嬫満鍙�")
+    @Schema(title = "鑱旂郴鐢佃瘽")
     private String phone;
-
-    @Schema(title = "鍏呭�奸噾棰�")
-    private Float money;
-
-    @Schema(title = "璐崱閲戦")
-    private Integer cardCost;
-
-    @Schema(title = "鏀粯鏂瑰紡缂栧彿")
-    private Long paymentId;
-
-    @Schema(title = "鏀粯鏂瑰紡鍚嶇О")
-    private String paymentMethod;
 
     @Schema(title = "涓氬姟绫诲瀷")
     private String operateType;
@@ -59,7 +50,22 @@
     @Schema(title = "浜ゆ槗鏃堕棿")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private Date operateDt;
+    private Date operateTime;
+
+    @Schema(title = "浣欓")
+    private Float money;
+
+    @Schema(title = "璐按閲戦")
+    private Float waterCost;
+
+    @Schema(title = "璧犻�侀噾棰�")
+    private Float gift;
+
+    @Schema(title = "璐崱閲戦")
+    private Integer cardCost;
+
+    @Schema(title = "鏀粯鏂瑰紡")
+    private String paymentMethod;
 
     @Schema(title = "鎿嶄綔鍛�")
     private String operatorName;
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
new file mode 100644
index 0000000..03d0d9e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransactionStatistics.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-22 18:27
+ * @LastEditTime 2024-01-22 18:27
+ * @Description
+ */
+
+@Data
+@Schema(title = "浜ゆ槗璁板綍姹囨�昏鍥惧璞�")
+public class VoTransactionStatistics implements BaseEntity {
+    private static final long serialVersionUID = 202401241705001L;
+
+    @Schema(title = "涓氬姟绫诲瀷")
+    private String operateType;
+
+    @Schema(title = "浜ゆ槗鏃ユ湡")
+    private String tradeDate;
+
+    @Schema(title = "浜ゆ槗绗旀暟")
+    private Integer count;
+
+    @Schema(title = "瀹炴敹閲戦")
+    private Float received;
+
+    @Schema(title = "璧犻�侀噾棰�")
+    private Float gift;
+}
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 66fbe78..00deab6 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml
@@ -6,9 +6,9 @@
     <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoBa.BaUser">
         <!--@mbg.generated-->
         <!--@Table ba_user-->
-        <id property="id" column="id" />
+        <id property="userId" column="id" />
         <result property="blockId" column="blockId"/>
-        <result property="name" column="name"/>
+        <result property="userName" column="name"/>
         <result property="phone" column="phone"/>
         <result property="password" column="password"/>
         <result property="orgTag" column="orgTag"/>
@@ -20,8 +20,8 @@
     <resultMap id="partResultMap" type="com.dy.pipIrrGlobal.pojoBa.BaUser">
         <!--@mbg.generated-->
         <!--@Table ba_user-->
-        <id property="id" column="id" />
-        <result property="name" column="name"/>
+        <id property="userId" column="id" />
+        <result property="userName" column="name"/>
         <result property="phone" column="phone"/>
         <result property="orgTag" column="orgTag"/>
         <result property="supperAdmin" column="supperAdmin"/>
@@ -29,9 +29,9 @@
     </resultMap>
 
     <resultMap id="loginResultMap" type="com.dy.pipIrrGlobal.pojoBa.BaUser">
-        <id property="id" column="id" />
+        <id property="userId" column="id" />
         <result property="blockId" column="blockId"/>
-        <result property="name" column="name"/>
+        <result property="userName" column="name"/>
         <result property="phone" column="phone"/>
         <result property="orgTag" column="orgTag"/>
         <result property="supperAdmin" column="supperAdmin"/>
@@ -100,9 +100,9 @@
     </select>
     <insert id="putin" parameterType="com.dy.pipIrrGlobal.pojoBa.BaUser">
         insert into ba_user (<include refid="Base_Column_List" />)
-        values (#{id,jdbcType=BIGINT},
+        values (#{userId,jdbcType=BIGINT},
         #{blockId,jdbcType=BIGINT},
-        #{name,jdbcType=VARCHAR},
+        #{userName,jdbcType=VARCHAR},
         #{phone,jdbcType=VARCHAR},
         #{password,jdbcType=VARCHAR},
         #{orgTag,jdbcType=VARCHAR},
@@ -114,13 +114,13 @@
     <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoBa.BaUser">
         insert into ba_user
         <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null">
+            <if test="userId != null">
                 id,
             </if>
             <if test="blockId != null">
                 blockId,
             </if>
-           <if test="name != null">
+           <if test="userName != null">
                 `name`,
             </if>
             <if test="phone != null">
@@ -143,14 +143,14 @@
             </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null">
-                #{id,jdbcType=BIGINT},
+            <if test="userId != null">
+                #{userId,jdbcType=BIGINT},
             </if>
             <if test="blockId != null">
                 #{blockId,jdbcType=BIGINT},
             </if>
-           <if test="name != null">
-                #{name,jdbcType=VARCHAR},
+           <if test="userName != null">
+                #{userName,jdbcType=VARCHAR},
             </if>
             <if test="phone != null">
                 #{phone,jdbcType=VARCHAR},
@@ -179,8 +179,8 @@
             <if test="blockId != null">
                 blockId = #{blockId,jdbcType=BIGINT},
             </if>
-           <if test="name != null">
-                `name` = #{name,jdbcType=VARCHAR},
+           <if test="userName != null">
+                `name` = #{userName,jdbcType=VARCHAR},
             </if>
             <if test="phone != null">
                 phone = #{phone,jdbcType=VARCHAR},
@@ -195,17 +195,17 @@
                 deleted = #{deleted,typeHandler=com.dy.common.mybatis.envm.EnumCodeTypeHandler, jdbcType=TINYINT},
             </if>
         </set>
-        where id = #{id,jdbcType=BIGINT}
+        where id = #{userId, jdbcType=BIGINT}
     </update>
     <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoBa.BaUser">
         update ba_user
         set blockId = #{blockId,jdbcType=BIGINT},
-        `name` = #{name,jdbcType=VARCHAR},
+        `name` = #{userName,jdbcType=VARCHAR},
         phone = #{phone,jdbcType=VARCHAR},
         password = #{password,jdbcType=VARCHAR},
         disabled = #{disabled,typeHandler=com.dy.common.mybatis.envm.EnumCodeTypeHandler, jdbcType=TINYINT},
         deleted = #{deleted,typeHandler=com.dy.common.mybatis.envm.EnumCodeTypeHandler, jdbcType=TINYINT}
-        where id = #{id,jdbcType=BIGINT}
+        where id = #{userId,jdbcType=BIGINT}
     </update>
     <update id="changePassword" >
         update ba_user
@@ -245,15 +245,97 @@
     <!--鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇鐢ㄦ埛淇℃伅-->
     <select id="getUserInfoById" resultType="java.util.Map">
         SELECT
-            id AS userId,
-            name AS userName
-        FROM ba_user
+            us.id AS userId,
+            us.name AS userName,
+            us.phone,
+            IFNULL(us.blockId, 0) AS blockId,
+            IFNULL(blo.name, 0) AS blockName
+        FROM ba_user us
+            LEFT JOIN ba_block blo ON us.blockId = blo.id
         <where>
-            AND disabled = 0
-            AND deleted = 0
+            AND us.disabled = 0
+            AND us.deleted = 0
             <if test = "userId != null and userId > 0">
-                AND ba_user.id = ${userId}
+                AND us.id = ${userId}
             </if>
         </where>
     </select>
+
+    <!--鏍规嵁鎸囧畾鐨勬潯浠惰幏鍙栫敤鎴疯褰曟暟-->
+    <select id="getRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+        SELECT
+            COUNT(*) AS recordCount
+        FROM ba_user user
+            INNER JOIN ba_user_role usro ON usro.userId = user.id
+        <where>
+            AND user.supperAdmin != 1
+            AND user.deleted = 0
+
+            <if test = "name != null and name !=''">
+                AND user.name like CONCAT('%',#{name},'%')
+            </if>
+
+            <if test = "phone != null and phone !=''">
+                AND user.phone like CONCAT('%',#{phone},'%')
+            </if>
+
+            <if test = "roleId != null and roleId > 0">
+                AND usro.roleId = ${roleId}
+            </if>
+        </where>
+    </select>
+
+    <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢ㄦ埛鍒楄〃-->
+    <select id="getUsers" resultType="com.dy.pipIrrGlobal.voBa.VoUserInfo">
+        SELECT
+            CAST(id AS char) AS userId,
+            phone,
+            name AS userName,
+            disabled AS stateId,
+            (CASE
+                 WHEN disabled = 0 THEN "姝e父"
+                 WHEN disabled = 1 THEN "宸茬鐢�"
+                END) AS stateName,
+            CAST(blockId AS char) AS blockId,
+            (SELECT name FROM ba_block WHERE id = user.blockId) AS blockName
+        FROM ba_user user
+            INNER JOIN ba_user_role usro ON usro.userId = user.id
+        <where>
+            AND user.supperAdmin != 1
+            AND user.deleted = 0
+
+            <if test = "name != null and name !=''">
+                AND user.name like CONCAT('%',#{name},'%')
+            </if>
+
+            <if test = "phone != null and phone !=''">
+                AND user.phone like CONCAT('%',#{phone},'%')
+            </if>
+
+            <if test = "roleId != null and roleId > 0">
+                AND usro.roleId = ${roleId}
+            </if>
+        </where>
+        ORDER BY user.id DESC
+        <if test="pageCurr != null and pageSize != null">
+            LIMIT ${pageCurr}, ${pageSize}
+        </if>
+    </select>
+
+    <!--鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇瑙掕壊ID鍒楄〃-->
+    <select id="getRoleIdsByUserId" resultType="java.util.HashMap">
+        SELECT
+            roleId
+        FROM ba_user_role
+        WHERE userId = ${userId}
+    </select>
+
+    <select id="getRoleNamesByUserId" resultType="java.util.HashMap">
+        SELECT
+            ro.name AS roleName
+        FROM ba_user_role usro
+                 INNER JOIN ba_role ro ON usro.roleId = ro.id
+        WHERE userId = ${userId}
+
+    </select>
 </mapper>
\ No newline at end of file
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 209c07b..aa36478 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
@@ -158,6 +158,11 @@
     where id = #{id,jdbcType=BIGINT}
   </update>
 
+  <!--鏍规嵁鎺у埗鍣ㄧ紪鍙峰垹闄ゅ彇姘村彛缂栧彿-->
+  <update id="deleteIntakeId">
+    UPDATE pr_controller SET intakeId = null WHERE id = ${controllerId}
+  </update>
+
   <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鎺у埗鍣ㄨ褰曟暟-->
   <select id="getRecordCount" resultType="java.lang.Long">
     SELECT
@@ -237,4 +242,9 @@
   <select id="getRecordCountOfController" resultType="java.lang.Integer">
     SELECT COUNT(*) AS recordCount FROM pr_controller WHERE deleted = 0 AND id = ${controllerId}
   </select>
+
+  <!--鏍规嵁鎺у埗鍣ㄧ紪鍙疯幏鍙栧凡缁戝畾璁板綍鏁�-->
+  <select id="getBindedCount" resultType="java.lang.Integer">
+    SELECT COUNT(*) AS recordCount FROM pr_controller WHERE rtuAddr = (SELECT rtuAddr FROM pr_controller_tramp WHERE id = ${controllerId}) AND intakeId IS NOT NULL
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerTrampMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerTrampMapper.xml
index 28f8d9e..3753a1b 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerTrampMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerTrampMapper.xml
@@ -97,4 +97,14 @@
       findDt = #{findDt,jdbcType=TIMESTAMP}
     where id = #{id,jdbcType=BIGINT}
   </update>
+
+  <!--鏍规嵁鎺у埗鍣ㄧ紪鍙疯幏鍙栨祦娴帶鍒跺櫒鍦板潃-->
+<!--  <select id="getTrampRtuAddr" resultType="java.lang.String">-->
+<!--    SELECT rtuAddr FROM pr_controller_tramp WHERE id = ${controllerId}-->
+<!--  </select>-->
+
+  <!--鏍规嵁鎺у埗鍣ㄧ紪鍙疯幏鍙栨祦娴帶鍒跺櫒淇℃伅-->
+  <select id="getTrampControllerInfo" resultMap="BaseResultMap">
+    SELECT rtuAddr, protocol, findDt FROM pr_controller_tramp WHERE id = ${controllerId}
+  </select>
 </mapper>
\ No newline at end of file
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 0d89673..00f1458 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrDivideMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrDivideMapper.xml
@@ -300,7 +300,7 @@
 
   <!--鏍规嵁鍒嗘按鎴跨紪鍙疯幏鍙栨墍灞炵墖鍖虹紪鍙�-->
   <select id="getBlockIdById" resultType="java.lang.Long">
-    SELECT blockId FROM pr_divide WHERE id = ${divideId}}
+    SELECT blockId FROM pr_divide WHERE id = ${divideId}
   </select>
 
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
index bc529ac..85772ad 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
@@ -214,12 +214,11 @@
   <select id="getRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
     SELECT COUNT(*) AS recordCount
     FROM pr_intake ge
-    INNER JOIN ba_divide divi ON ge.divideId = divi.id
+    INNER JOIN pr_divide divi ON ge.divideId = divi.id
     INNER JOIN ba_block blo ON divi.blockId = blo.id
     INNER JOIN ba_district country ON ge.countyId = country.id
     INNER JOIN ba_district town ON ge.townId = town.id
     INNER JOIN ba_district village ON ge.villageId = village.id
-    , (SELECT @i:=0) AS itable
     <where>
       ge.deleted = 0
       AND divi.deleted = 0
@@ -235,16 +234,33 @@
       <if test="blockName != null and blockName != ''">
         AND blo.name = #{blockName}
       </if>
+
+      <if test="isBinded == 0">
+        AND ge.id NOT IN(SELECT intakeId FROM pr_controller where deleted = 0)
+      </if>
+      <if test="isBinded == 1">
+        AND ge.id IN(SELECT intakeId FROM pr_controller where deleted = 0)
+      </if>
+      <if test="isBinded == null">
+
+      </if>
+      <if test="address != null and address != ''">
+        AND CONCAT(country.`name`, town.`name`, village.`name`) LIKE CONCAT('%', #{address}, '%')
+      </if>
     </where>
   </select>
 
   <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鍙栨按鍙h褰�-->
   <select id="getIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntake">
-    SELECT (@i:=@i+1)                                          AS id,
+    SELECT CAST(ge.id AS char)                             AS id,
     ge.`name`                                           AS intakeName,
     divi.`name`                                         AS divideName,
     blo.`name`                                          AS blockName,
     ge.operateDt                                        As operateDt,
+    (CASE
+    WHEN ge.id NOT IN(SELECT intakeId FROM pr_controller where deleted = 0)  THEN "鏈粦瀹�"
+    WHEN ge.id IN(SELECT intakeId FROM pr_controller  where deleted = 0)  THEN "宸茬粦瀹�"
+    END) AS isBind,
     CONCAT(country.`name`, town.`name`, village.`name`) AS address
     FROM pr_intake ge
     INNER JOIN pr_divide divi ON ge.divideId = divi.id
@@ -252,7 +268,6 @@
     INNER JOIN ba_district country ON ge.countyId = country.id
     INNER JOIN ba_district town ON ge.townId = town.id
     INNER JOIN ba_district village ON ge.villageId = village.id
-    , (SELECT @i:=0) AS itable
     <where>
       ge.deleted = 0
       AND divi.deleted = 0
@@ -260,12 +275,26 @@
       <if test="intakeName != null and intakeName != ''">
         AND ge.name LIKE CONCAT('%', #{intakeName}, '%')
       </if>
+
       <if test="divideName != null and divideName != ''">
         AND divi.name LIKE CONCAT('%', #{divideName}, '%')
       </if>
 
       <if test="blockName != null and blockName != ''">
         AND blo.name = #{blockName}
+      </if>
+
+      <if test="isBinded == 0">
+        AND ge.id NOT IN(SELECT intakeId FROM pr_controller where deleted = 0)
+      </if>
+      <if test="isBinded == 1">
+        AND ge.id IN(SELECT intakeId FROM pr_controller where deleted = 0)
+      </if>
+      <if test="isBinded == null">
+
+      </if>
+      <if test="address != null and address != ''">
+        AND CONCAT(country.`name`, town.`name`, village.`name`) LIKE CONCAT('%', #{address}, '%')
       </if>
     </where>
     ORDER BY ge.operateDt DESC
@@ -309,4 +338,13 @@
     where region.id = #{regionId,jdbcType=BIGINT}
   </select>
 
+  <!--鑾峰彇鏈粦鎺у埗鍣ㄧ殑鍙栨按鍙e垪琛�-->
+  <select id="getNoBindingIntakes" resultType="java.util.HashMap">
+    SELECT
+        CAST(inta.id AS char)AS intakeId,
+        name AS intakeName
+    FROM pr_intake inta
+    WHERE id NOT IN(SELECT intakeId FROM pr_controller) AND deleted = 0
+  </select>
+
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeAuditsMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeAuditsMapper.xml
new file mode 100644
index 0000000..81f9938
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeAuditsMapper.xml
@@ -0,0 +1,115 @@
+<?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.SeAuditsMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeAudits">
+    <!--@mbg.generated-->
+    <!--@Table se_audits-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="general_id" jdbcType="BIGINT" property="generalId" />
+    <result column="audit_status" jdbcType="TINYINT" property="auditStatus" />
+    <result column="audit_opinion" jdbcType="VARCHAR" property="auditOpinion" />
+    <result column="operator" jdbcType="BIGINT" property="operator" />
+    <result column="operate_dt" jdbcType="TIMESTAMP" property="operateDt" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, general_id, audit_status, audit_opinion, `operator`, operate_dt
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from se_audits
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from se_audits
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeAudits">
+    <!--@mbg.generated-->
+    insert into se_audits (id, general_id, audit_status, 
+      audit_opinion, `operator`, operate_dt
+      )
+    values (#{id,jdbcType=BIGINT}, #{generalId,jdbcType=BIGINT}, #{auditStatus,jdbcType=TINYINT}, 
+      #{auditOpinion,jdbcType=VARCHAR}, #{operator,jdbcType=BIGINT}, #{operateDt,jdbcType=TIMESTAMP}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeAudits">
+    <!--@mbg.generated-->
+    insert into se_audits
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="generalId != null">
+        general_id,
+      </if>
+      <if test="auditStatus != null">
+        audit_status,
+      </if>
+      <if test="auditOpinion != null">
+        audit_opinion,
+      </if>
+      <if test="operator != null">
+        `operator`,
+      </if>
+      <if test="operateDt != null">
+        operate_dt,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="generalId != null">
+        #{generalId,jdbcType=BIGINT},
+      </if>
+      <if test="auditStatus != null">
+        #{auditStatus,jdbcType=TINYINT},
+      </if>
+      <if test="auditOpinion != null">
+        #{auditOpinion,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null">
+        #{operator,jdbcType=BIGINT},
+      </if>
+      <if test="operateDt != null">
+        #{operateDt,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeAudits">
+    <!--@mbg.generated-->
+    update se_audits
+    <set>
+      <if test="generalId != null">
+        general_id = #{generalId,jdbcType=BIGINT},
+      </if>
+      <if test="auditStatus != null">
+        audit_status = #{auditStatus,jdbcType=TINYINT},
+      </if>
+      <if test="auditOpinion != null">
+        audit_opinion = #{auditOpinion,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null">
+        `operator` = #{operator,jdbcType=BIGINT},
+      </if>
+      <if test="operateDt != null">
+        operate_dt = #{operateDt,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeAudits">
+    <!--@mbg.generated-->
+    update se_audits
+    set general_id = #{generalId,jdbcType=BIGINT},
+      audit_status = #{auditStatus,jdbcType=TINYINT},
+      audit_opinion = #{auditOpinion,jdbcType=VARCHAR},
+      `operator` = #{operator,jdbcType=BIGINT},
+      operate_dt = #{operateDt,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</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
new file mode 100644
index 0000000..c16ceaf
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
@@ -0,0 +1,586 @@
+<?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.SeCardOperateMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeCardOperate">
+    <!--@mbg.generated-->
+    <!--@Table se_card_operate-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="card_id" jdbcType="BIGINT" property="cardId" />
+    <result column="client_id" jdbcType="BIGINT" property="clientId" />
+    <result column="money" jdbcType="FLOAT" property="money" />
+    <result column="system_balance" jdbcType="FLOAT" property="systemBalance" />
+    <result column="trade_amount" jdbcType="FLOAT" property="tradeAmount" />
+    <result column="price" jdbcType="FLOAT" property="price" />
+    <result column="card_cost" jdbcType="INTEGER" property="cardCost" />
+    <result column="gift" jdbcType="FLOAT" property="gift" />
+    <result column="no_trade_amount" jdbcType="FLOAT" property="noTradeAmount" />
+    <result column="operate_type_id" jdbcType="BIGINT" property="operateType" />
+    <result column="payment_id" jdbcType="BIGINT" property="paymentId" />
+    <result column="remarks" jdbcType="VARCHAR" property="remarks" />
+    <result column="operator" jdbcType="BIGINT" property="operator" />
+    <result column="operate_dt" jdbcType="TIMESTAMP" property="operateDt" />
+  </resultMap>
+  <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
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from se_card_operate
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from se_card_operate
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeCardOperate">
+    <!--@mbg.generated-->
+    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
+      )
+    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}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeCardOperate">
+    <!--@mbg.generated-->
+    insert into se_card_operate
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="cardId != null">
+        card_id,
+      </if>
+      <if test="clientId != null">
+        client_id,
+      </if>
+      <if test="money != null">
+        money,
+      </if>
+      <if test="systemBalance != null">
+        system_balance,
+      </if>
+      <if test="tradeAmount != null">
+        trade_amount,
+      </if>
+      <if test="price != null">
+        price,
+      </if>
+      <if test="cardCost != null">
+        card_cost,
+      </if>
+      <if test="gift != null">
+        gift,
+      </if>
+      <if test="noTradeAmount != null">
+        no_trade_amount,
+      </if>
+      <if test="operateType != null">
+        operate_type_id,
+      </if>
+      <if test="paymentId != null">
+        payment_id,
+      </if>
+      <if test="remarks != null">
+        remarks,
+      </if>
+      <if test="operator != null">
+        `operator`,
+      </if>
+      <if test="operateDt != null">
+        operate_dt,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="cardId != null">
+        #{cardId,jdbcType=BIGINT},
+      </if>
+      <if test="clientId != null">
+        #{clientId,jdbcType=BIGINT},
+      </if>
+      <if test="money != null">
+        #{money,jdbcType=FLOAT},
+      </if>
+      <if test="systemBalance != null">
+        #{systemBalance,jdbcType=FLOAT},
+      </if>
+      <if test="tradeAmount != null">
+        #{tradeAmount,jdbcType=FLOAT},
+      </if>
+      <if test="price != null">
+        #{price,jdbcType=FLOAT},
+      </if>
+      <if test="cardCost != null">
+        #{cardCost,jdbcType=INTEGER},
+      </if>
+      <if test="gift != null">
+        #{gift,jdbcType=FLOAT},
+      </if>
+      <if test="noTradeAmount != null">
+        #{noTradeAmount,jdbcType=FLOAT},
+      </if>
+      <if test="operateType != null">
+        #{operateType,jdbcType=BIGINT},
+      </if>
+      <if test="paymentId != null">
+        #{paymentId,jdbcType=BIGINT},
+      </if>
+      <if test="remarks != null">
+        #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null">
+        #{operator,jdbcType=BIGINT},
+      </if>
+      <if test="operateDt != null">
+        #{operateDt,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeCardOperate">
+    <!--@mbg.generated-->
+    update se_card_operate
+    <set>
+      <if test="cardId != null">
+        card_id = #{cardId,jdbcType=BIGINT},
+      </if>
+      <if test="clientId != null">
+        client_id = #{clientId,jdbcType=BIGINT},
+      </if>
+      <if test="money != null">
+        money = #{money,jdbcType=FLOAT},
+      </if>
+      <if test="systemBalance != null">
+        system_balance = #{systemBalance,jdbcType=FLOAT},
+      </if>
+      <if test="tradeAmount != null">
+        trade_amount = #{tradeAmount,jdbcType=FLOAT},
+      </if>
+      <if test="price != null">
+        price = #{price,jdbcType=FLOAT},
+      </if>
+      <if test="cardCost != null">
+        card_cost = #{cardCost,jdbcType=INTEGER},
+      </if>
+      <if test="gift != null">
+        gift = #{gift,jdbcType=FLOAT},
+      </if>
+      <if test="noTradeAmount != null">
+        no_trade_amount = #{noTradeAmount,jdbcType=FLOAT},
+      </if>
+      <if test="operateType != null">
+        operate_type_id = #{operateType,jdbcType=BIGINT},
+      </if>
+      <if test="paymentId != null">
+        payment_id = #{paymentId,jdbcType=BIGINT},
+      </if>
+      <if test="remarks != null">
+        remarks = #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null">
+        `operator` = #{operator,jdbcType=BIGINT},
+      </if>
+      <if test="operateDt != null">
+        operate_dt = #{operateDt,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeCardOperate">
+    <!--@mbg.generated-->
+    update se_card_operate
+    set card_id = #{cardId,jdbcType=BIGINT},
+      client_id = #{clientId,jdbcType=BIGINT},
+      money = #{money,jdbcType=FLOAT},
+      system_balance = #{systemBalance,jdbcType=FLOAT},
+      trade_amount = #{tradeAmount,jdbcType=FLOAT},
+      price = #{price,jdbcType=FLOAT},
+      card_cost = #{cardCost,jdbcType=INTEGER},
+      gift = #{gift,jdbcType=FLOAT},
+      no_trade_amount = #{noTradeAmount,jdbcType=FLOAT},
+      operate_type_id = #{operateType,jdbcType=BIGINT},
+      payment_id = #{paymentId,jdbcType=BIGINT},
+      remarks = #{remarks,jdbcType=VARCHAR},
+      `operator` = #{operator,jdbcType=BIGINT},
+      operate_dt = #{operateDt,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_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
+    <where>
+      AND ope.operate_type = 2
+      <if test = "clientName != null and clientName !=''">
+        AND cli.name like CONCAT('%',#{clientName},'%')
+      </if>
+
+      <if test = "clientNum != null and clientNum > 0">
+        AND cli.clientNum like CONCAT('%',#{clientNum},'%')
+      </if>
+
+      <if test = "cardNum != null and cardNum !=''">
+        AND card.cardNum like CONCAT('%',#{cardNum},'%')
+      </if>
+
+      <if test = "paymentId != null and paymentId > 0">
+        AND ope.payment_id = ${paymentId}
+      </if>
+
+      <if test = "rechargeTimeStart != null and rechargeTimeStop != null">
+        AND ope.operate_dt BETWEEN #{rechargeTimeStart} AND #{rechargeTimeStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鍏呭�艰褰�-->
+  <select id="getRecharges" resultType="com.dy.pipIrrGlobal.voSe.VoRecharge">
+    SELECT
+        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,
+        ope.price,
+        (SELECT `name` FROM ba_user WHERE id =  ope.operator) 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 cli ON ope.client_id = cli.id
+    <where>
+      AND ope.operate_type = 2
+      <if test = "clientName != null and clientName !=''">
+        AND cli.name like CONCAT('%',#{clientName},'%')
+      </if>
+
+      <if test = "clientNum != null and clientNum > 0">
+        AND cli.clientNum like CONCAT('%',#{clientNum},'%')
+      </if>
+
+      <if test = "cardNum != null and cardNum !=''">
+        AND card.cardNum like CONCAT('%',#{cardNum},'%')
+      </if>
+
+      <if test = "paymentId != null and paymentId > 0">
+        AND ope.payment_id = ${paymentId}
+      </if>
+
+      <if test = "rechargeTimeStart != null and rechargeTimeStop != null">
+        AND ope.operate_dt BETWEEN #{rechargeTimeStart} AND #{rechargeTimeStop}
+      </if>
+    </where>
+    ORDER BY ope.operate_dt DESC
+    <if test="pageCurr != null and pageSize != null">
+      LIMIT ${pageCurr}, ${pageSize}
+    </if>
+  </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
+    <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="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
+    <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>
+
+      <if test = "cashierId != null and cashierId > 0">
+        AND user.id = ${cashierId}
+      </if>
+    </where>
+    ORDER BY ope.operate_dt
+    <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>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇寮�鍗¤褰曟暟閲�-->
+  <select id="getActiveCardRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    select
+    COUNT(*) AS recordCount
+    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
+    <where>
+      AND ope.operate_type = 1
+      <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 = "state != null and state > 0">
+        AND card.state = ${state}
+      </if>
+
+      <if test = "activeTimeStart != null and activeTimeStop != null">
+        AND ope.operate_dt BETWEEN #{activeTimeStart} AND #{activeTimeStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇寮�鍗¤褰�-->
+  <select id="getActiveCards" resultType="com.dy.pipIrrGlobal.voSe.VoActiveCardNew">
+    SELECT
+    CAST(ope.id AS char) AS id ,
+    cli.name AS clientName,
+    cli.clientNum AS clientNum,
+    card.cardNum AS cardNum,
+    card.state AS state,
+    (CASE
+    WHEN card.state = 1 THEN "姝e父"
+    WHEN card.state = 2 THEN "宸叉敞閿�"
+    WHEN card.state = 3 THEN "宸叉寕澶�"
+    END) AS stateName,
+    ope.card_cost AS cardCost,
+    ope.payment_id AS paymentId,
+    (SELECT `name` FROM ba_user WHERE id =  ope.operator) AS operator,
+    ope.operate_dt AS operateDt
+    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
+    <where>
+      AND ope.operate_type = 1
+      <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 = "state != null and state > 0">
+        AND card.state = ${state}
+      </if>
+
+      <if test = "activeTimeStart != null and activeTimeStop != null">
+        AND ope.operate_dt BETWEEN #{activeTimeStart} AND #{activeTimeStop}
+      </if>
+    </where>
+    ORDER BY ope.operate_dt DESC
+    <if test="pageCurr != null and pageSize != null">
+      LIMIT ${pageCurr}, ${pageSize}
+    </if>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇琛ュ崱璁板綍鏁伴噺-->
+  <select id="getReissueCardRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    select
+    COUNT(*) AS recordCount
+    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
+    <where>
+      AND ope.operate_type = 4
+      <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 = "activeTimeStart != null and activeTimeStop != null">
+        AND ope.operate_dt BETWEEN #{reissueCardTimeStart} AND #{reissueCardTimeStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇琛ュ崱璁板綍-->
+  <select id="getReissueCards" resultType="com.dy.pipIrrGlobal.voSe.VoReissueCard">
+    SELECT
+    CAST(ope.id AS char) AS id ,
+    cli.name AS clientName,
+    cli.clientNum AS clientNum,
+    card.cardNum AS cardNum,
+    ope.card_cost AS cardCost,
+    IFNULL(ope.no_trade_amount,0) AS reissueAmount,
+    (SELECT `name` FROM ba_user WHERE id =  ope.operator) AS operator,
+    ope.operate_dt AS operateDt
+    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
+    <where>
+      AND ope.operate_type = 4
+      <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 = "activeTimeStart != null and activeTimeStop != null">
+        AND ope.operate_dt BETWEEN #{reissueCardTimeStart} AND #{reissueCardTimeStop}
+      </if>
+    </where>
+    ORDER BY ope.operate_dt DESC
+    <if test="pageCurr != null and pageSize != null">
+      LIMIT ${pageCurr}, ${pageSize}
+    </if>
+  </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 e5bb9af..cc35013 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -17,14 +17,15 @@
     <result column="cancelDt" jdbcType="TIMESTAMP" property="canceldt" />
     <result column="unlockDt" jdbcType="TIMESTAMP" property="unlockdt" />
     <result column="reversalDt" jdbcType="TIMESTAMP" property="reversaldt" />
+    <result column="refundDt" jdbcType="TIMESTAMP" property="refunddt" />
     <result column="consumeDt" jdbcType="TIMESTAMP" property="consumedt" />
     <result column="lastOper" jdbcType="TINYINT" property="lastoper" />
     <result column="remarks" jdbcType="VARCHAR" property="remarks" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, cardAddr, cardNum, clientId, money, `state`, createDt, replaceDt, rechargeDt, 
-    lossDtDt, cancelDt, unlockDt, reversalDt, consumeDt, lastOper, remarks
+    id, cardAddr, cardNum, clientId, money, `state`, createDt, replaceDt, rechargeDt,
+    lossDtDt, cancelDt, unlockDt, reversalDt, refundDt, consumeDt, lastOper, remarks
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
@@ -76,14 +77,14 @@
     insert into se_client_card (id, cardAddr, cardNum, clientId,
       money, `state`, createDt, 
       replaceDt, rechargeDt, lossDtDt, 
-      cancelDt, unlockDt, reversalDt, 
+      cancelDt, unlockDt, reversalDt, refundDt,
       consumeDt, lastOper, remarks
       )
     values (#{id,jdbcType=BIGINT}, #{cardaddr,jdbcType=VARCHAR}, #{cardnum,jdbcType=BIGINT}, #{clientid,jdbcType=BIGINT},
       #{money,jdbcType=FLOAT}, #{state,jdbcType=TINYINT}, #{createdt,jdbcType=TIMESTAMP}, 
       #{replacedt,jdbcType=TIMESTAMP}, #{rechargedt,jdbcType=TIMESTAMP}, #{lossdtdt,jdbcType=TIMESTAMP}, 
-      #{canceldt,jdbcType=TIMESTAMP}, #{unlockdt,jdbcType=TIMESTAMP}, #{reversaldt,jdbcType=TIMESTAMP}, 
-      #{consumedt,jdbcType=TIMESTAMP}, #{lastoper,jdbcType=TINYINT}, #{remarks,jdbcType=VARCHAR}
+      #{canceldt,jdbcType=TIMESTAMP}, #{unlockdt,jdbcType=TIMESTAMP}, #{reversaldt,jdbcType=TIMESTAMP},
+      #{refunddt,jdbcType=TIMESTAMP}, #{consumedt,jdbcType=TIMESTAMP}, #{lastoper,jdbcType=TINYINT}, #{remarks,jdbcType=VARCHAR}
       )
 
   </insert>
@@ -126,6 +127,9 @@
       </if>
       <if test="reversaldt != null">
         reversalDt,
+      </if>
+      <if test="refunddt != null">
+        refundDt,
       </if>
       <if test="consumedt != null">
         consumeDt,
@@ -173,6 +177,9 @@
       </if>
       <if test="reversaldt != null">
         #{reversaldt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="refunddt != null">
+        #{refunddt,jdbcType=TIMESTAMP},
       </if>
       <if test="consumedt != null">
         #{consumedt,jdbcType=TIMESTAMP},
@@ -225,6 +232,9 @@
       <if test="reversaldt != null">
         reversalDt = #{reversaldt,jdbcType=TIMESTAMP},
       </if>
+      <if test="refunddt != null">
+        refundDt = #{refunddt,jdbcType=TIMESTAMP},
+      </if>
       <if test="consumedt != null">
         consumeDt = #{consumedt,jdbcType=TIMESTAMP},
       </if>
@@ -252,6 +262,7 @@
       cancelDt = #{canceldt,jdbcType=TIMESTAMP},
       unlockDt = #{unlockdt,jdbcType=TIMESTAMP},
       reversalDt = #{reversaldt,jdbcType=TIMESTAMP},
+      refundDt = #{refunddt,jdbcType=TIMESTAMP},
       consumeDt = #{consumedt,jdbcType=TIMESTAMP},
       lastOper = #{lastoper,jdbcType=TINYINT},
       remarks = #{remarks,jdbcType=VARCHAR}
@@ -294,18 +305,84 @@
 
   <!--鏍规嵁姘村崱缂栧彿鑾峰彇鍗$墖鐘舵�侊細1-寮�鍗★紝2-琛ュ崱锛�3-鍏呭�硷紝4-鎸傚け锛�5-娉ㄩ攢锛�6-瑙i攣锛�7-鍐叉锛�8-娑堣垂-->
   <select id="getCardStateByCardNum" resultType="java.lang.String">
+<!--    SELECT-->
+<!--      (CASE-->
+<!--         WHEN lastOper = 1 THEN "寮�鍗�"-->
+<!--         WHEN lastOper = 2 THEN "琛ュ崱"-->
+<!--         WHEN lastOper = 3 THEN "鍏呭��"-->
+<!--         WHEN lastOper = 4 THEN "鎸傚け"-->
+<!--         WHEN lastOper = 5 THEN "娉ㄩ攢"-->
+<!--         WHEN lastOper = 6 THEN "瑙i攣"-->
+<!--         WHEN lastOper = 7 THEN "鍐叉"-->
+<!--         WHEN lastOper = 8 THEN "娑堣垂"-->
+<!--        END) AS stateName-->
+<!--    FROM se_client_card-->
+<!--    WHERE cardNum = ${cardNum}-->
     SELECT
-      (CASE
-         WHEN lastOper = 1 THEN "寮�鍗�"
-         WHEN lastOper = 2 THEN "琛ュ崱"
-         WHEN lastOper = 3 THEN "鍏呭��"
-         WHEN lastOper = 4 THEN "鎸傚け"
-         WHEN lastOper = 5 THEN "娉ㄩ攢"
-         WHEN lastOper = 6 THEN "瑙i攣"
-         WHEN lastOper = 7 THEN "鍐叉"
-         WHEN lastOper = 8 THEN "娑堣垂"
+        (CASE
+            WHEN state = 1 THEN '姝e父'
+            WHEN state = 2 THEN '宸叉敞閿�'
+            WHEN state = 3 THEN '宸叉寕澶�'
         END) AS stateName
     FROM se_client_card
     WHERE cardNum = ${cardNum}
   </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃璁板綍鏁帮紝搴旂敤绋嬪簭浣跨敤-->
+  <select id="getCardsCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT
+        COUNT(*) AS recordCount
+    FROM se_client_card card
+        INNER JOIN se_client cli ON card.clientId = cli.id
+    <where>
+      <if test = "clientNum != null and clientNum !=''">
+        AND cli.clientNum like CONCAT('%',#{clientNum},'%')
+      </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>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃锛屽簲鐢ㄧ▼搴忎娇鐢�-->
+  <select id="getCards" resultType="com.dy.pipIrrGlobal.voSe.VoCards">
+    SELECT
+        cli.clientNum,
+        cli.name AS clientName,
+        card.cardNum,
+        cli.phone,
+        cli.idCard,
+        card.state AS cardState,
+        (CASE
+            WHEN card.state = 1 THEN '姝e父'
+            WHEN card.state = 2 THEN '宸叉敞閿�'
+            WHEN card.state = 3 THEN '宸叉寕澶�'
+        End) AS stateName,
+        '鍐滄埛鍗�' AS cardType,
+        card.money
+    FROM se_client_card card
+        INNER JOIN se_client cli ON card.clientId = cli.id
+    <where>
+      <if test = "clientNum != null and clientNum !=''">
+        AND cli.clientNum like CONCAT('%',#{clientNum},'%')
+      </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>
+    </where>
+    ORDER BY card.id
+    <if test="pageCurr != null and pageSize != null">
+      LIMIT ${pageCurr}, ${pageSize}
+    </if>
+  </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 c41166f..a191c70 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml
@@ -394,6 +394,11 @@
     SELECT districtNum FROM se_client WHERE clientNum = ${clientNum}
   </select>
 
+  <!--鏍规嵁鍐滄埛缂栧彿鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode锛岃ˉ鍗¤繃绋嬩腑寮�鏂板崱浣跨敤-->
+  <select id="getAreaCodeById" resultType="java.lang.Long">
+    SELECT districtNum FROM se_client WHERE id = ${clientId}
+  </select>
+
   <!--鏍规嵁鍐滄埛缂栧彿鑾峰彇鍐滄埛ID-->
   <select id="getClientIdByNum" resultType="java.lang.Long">
     SELECT id FROM se_client WHERE clientNum = ${clientNum}
@@ -422,179 +427,6 @@
   <!--鑾峰彇鐢ㄦ按鏂瑰紡鍒楄〃-->
   <select id="getWaterTypes" resultType="java.util.Map">
     SELECT id, typeName from se_water_type
-  </select>
-
-  <!-- 涓嬪垪鍐呭涓轰氦鏄撴槑缁嗘煡璇� -->
-  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璐按姹囨�诲拰璐崱姹囨��-->
-  <select id="getSums" resultType="java.util.Map">
-    SELECT
-        SUM(money) AS money,
-        SUM(cardCost) AS cardCost
-    FROM v_operate
-    <where>
-      <if test = "villageId != null and villageId > 0">
-        AND villageId = ${villageId}
-      </if>
-
-      <if test = "paymentId != null and paymentId >0">
-        AND paymentId = ${paymentId}
-      </if>
-
-      <if test = "operateTimeStart != null and operateTimeStop != null">
-        AND operateDt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
-      </if>
-    </where>
-  </select>
-
-  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍鏁�-->
-  <select id="getOperateRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
-    SELECT
-        COUNT(*) AS recordCount
-    FROM v_operate
-    <where>
-      <if test = "villageId != null and villageId > 0">
-        AND villageId = ${villageId}
-      </if>
-
-      <if test = "paymentId != null and paymentId >0">
-        AND paymentId = ${paymentId}
-      </if>
-
-      <if test = "operateTimeStart != null and operateTimeStop != null">
-        AND operateDt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
-      </if>
-    </where>
-  </select>
-
-  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍-->
-  <select id="getOperates" resultType="com.dy.pipIrrGlobal.voSe.VoOperate">
-    SELECT
-        villageId,
-        districtTitle,
-        clientNum,
-        `name`,
-        cardNum,
-        idCard,
-        phone,
-        money,
-        cardCost,
-        paymentId,
-        paymentMethod,
-        operateType,
-        operateDt,
-        operatorName
-    FROM v_operate
-    <where>
-      <if test = "villageId != null and villageId > 0">
-        AND villageId = ${villageId}
-      </if>
-
-      <if test = "paymentId != null and paymentId >0">
-        AND paymentId = ${paymentId}
-      </if>
-
-      <if test = "operateTimeStart != null and operateTimeStop != null">
-        AND operateDt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
-      </if>
-    </where>
-    ORDER BY operateDt
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
-  </select>
-
-  <!-- 涓嬪垪鍐呭涓轰氦鏄撶粺璁℃煡璇� -->
-  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗绗旀暟姹囨�诲拰浜ゆ槗閲戦姹囨��-->
-  <select id="getStatisticSums" resultType="java.util.Map">
-    SELECT
-    SUM(count) AS count,
-    SUM(money) AS money
-    FROM
-    (
-      SELECT
-      villageId,
-      districtTitle,
-      operateType,
-      operateDt,
-      count(*) AS count,
-      (sum(money) + sum(cardCost)) AS money
-      FROM v_operate
-      <where>
-        <if test = "villageId != null and villageId > 0">
-          AND villageId = ${villageId}
-        </if>
-
-<!--        <if test = "paymentId != null and paymentId >0">-->
-<!--          AND paymentId = ${paymentId}-->
-<!--        </if>-->
-
-        <if test = "operateTimeStart != null and operateTimeStop != null">
-          AND operateDt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
-        </if>
-      </where>
-      GROUP BY villageId, districtTitle, operateType, operateDt
-    ) temp
-  </select>
-
-  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇姹囨�昏褰曟暟-->
-  <select id="getStatisticRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
-    SELECT
-        COUNT(*) AS recordCount
-    FROM
-    (
-        SELECT
-          villageId,
-          districtTitle,
-          operateType,
-          operateDt,
-          count(*) AS count,
-          (sum(money) + sum(cardCost)) AS money
-        FROM v_operate
-        <where>
-          <if test = "villageId != null and villageId > 0">
-            AND villageId = ${villageId}
-          </if>
-
-<!--          <if test = "paymentId != null and paymentId >0">-->
-<!--            AND paymentId = ${paymentId}-->
-<!--          </if>-->
-
-          <if test = "operateTimeStart != null and operateTimeStop != null">
-            AND operateDt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
-          </if>
-        </where>
-        GROUP BY villageId, districtTitle, operateType, operateDt
-    ) temp
-  </select>
-
-  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇缁熻璁板綍-->
-  <select id="getStatistics" resultType="com.dy.pipIrrGlobal.voSe.VoStatistics">
-    SELECT
-        villageId,
-        districtTitle,
-        operateType,
-        operateDt,
-        count(*) AS count,
-        (sum(money) + sum(cardCost)) AS money
-    FROM v_operate
-    <where>
-      <if test = "villageId != null and villageId > 0">
-        AND villageId = ${villageId}
-      </if>
-
-<!--      <if test = "paymentId != null and paymentId >0">-->
-<!--        AND paymentId = ${paymentId}-->
-<!--      </if>-->
-
-      <if test = "operateTimeStart != null and operateTimeStop != null">
-        AND operateDt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
-      </if>
-    </where>
-    GROUP BY villageId, districtTitle, operateType, operateDt
-    ORDER BY operateDt
-    <if test="pageCurr != null and pageSize != null">
-      LIMIT ${pageCurr}, ${pageSize}
-    </if>
   </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
new file mode 100644
index 0000000..5dbd371
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml
@@ -0,0 +1,289 @@
+<?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.SeGeneralMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeGeneral">
+    <!--@mbg.generated-->
+    <!--@Table se_general-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="cashier_id" jdbcType="BIGINT" property="cashierId" />
+    <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="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
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from se_general
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from se_general
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <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, 
+      operate_date, audit_status)
+    values (#{id,jdbcType=BIGINT}, #{cashierId,jdbcType=BIGINT}, #{cashierName,jdbcType=VARCHAR}, 
+      #{tradeAmount,jdbcType=FLOAT}, #{gift,jdbcType=FLOAT}, #{totalAmount,jdbcType=FLOAT}, 
+      #{operateDate,jdbcType=TIMESTAMP}, #{auditStatus,jdbcType=TINYINT})
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeGeneral">
+    <!--@mbg.generated-->
+    insert into se_general
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="cashierId != null">
+        cashier_id,
+      </if>
+      <if test="cashierName != null">
+        cashier_name,
+      </if>
+      <if test="tradeAmount != null">
+        trade_amount,
+      </if>
+      <if test="gift != null">
+        gift,
+      </if>
+      <if test="totalAmount != null">
+        total_amount,
+      </if>
+      <if test="operateDate != null">
+        operate_date,
+      </if>
+      <if test="auditStatus != null">
+        audit_status,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="cashierId != null">
+        #{cashierId,jdbcType=BIGINT},
+      </if>
+      <if test="cashierName != null">
+        #{cashierName,jdbcType=VARCHAR},
+      </if>
+      <if test="tradeAmount != null">
+        #{tradeAmount,jdbcType=FLOAT},
+      </if>
+      <if test="gift != null">
+        #{gift,jdbcType=FLOAT},
+      </if>
+      <if test="totalAmount != null">
+        #{totalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="operateDate != null">
+        #{operateDate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="auditStatus != null">
+        #{auditStatus,jdbcType=TINYINT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeGeneral">
+    <!--@mbg.generated-->
+    update se_general
+    <set>
+      <if test="cashierId != null">
+        cashier_id = #{cashierId,jdbcType=BIGINT},
+      </if>
+      <if test="cashierName != null">
+        cashier_name = #{cashierName,jdbcType=VARCHAR},
+      </if>
+      <if test="tradeAmount != null">
+        trade_amount = #{tradeAmount,jdbcType=FLOAT},
+      </if>
+      <if test="gift != null">
+        gift = #{gift,jdbcType=FLOAT},
+      </if>
+      <if test="totalAmount != null">
+        total_amount = #{totalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="operateDate != null">
+        operate_date = #{operateDate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="auditStatus != null">
+        audit_status = #{auditStatus,jdbcType=TINYINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeGeneral">
+    <!--@mbg.generated-->
+    update se_general
+    set cashier_id = #{cashierId,jdbcType=BIGINT},
+      cashier_name = #{cashierName,jdbcType=VARCHAR},
+      trade_amount = #{tradeAmount,jdbcType=FLOAT},
+      gift = #{gift,jdbcType=FLOAT},
+      total_amount = #{totalAmount,jdbcType=FLOAT},
+      operate_date = #{operateDate,jdbcType=TIMESTAMP},
+      audit_status = #{auditStatus,jdbcType=TINYINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+
+  <!--鑾峰彇鏈敓鎴愭�昏处鐨勪氦鏄撴棩鏈熷垪琛紙褰撳ぉ鐨勪氦鏄撹褰曚笉鐢熸垚鎬昏处锛�-->
+  <select id="getDatesOfNotInGenerals" resultType="java.util.HashMap">
+    SELECT
+      DISTINCT Date(ope.operate_dt) AS operateDate
+    FROM se_card_operate ope
+    WHERE Date(ope.operate_dt) NOT IN(SELECT operate_date FROM se_general) AND Date(ope.operate_dt) != CURDATE()
+  </select>
+
+  <!--鏍规嵁浜ゆ槗鏃ユ湡鑾峰彇鎬昏处璁板綍鍒楄〃锛堝緟鐢熸垚鐨勶級  -->
+  <select id="getGeneralByOperateDate" resultType="com.dy.pipIrrGlobal.pojoSe.SeGeneral">
+    SELECT
+        us.id AS cashierId,
+        us.`name` AS cashierName,
+        IFNULL(SUM(ope.trade_amount),0) AS tradeAmount,
+        IFNULL(SUM(ope.gift),0) AS gift,
+        IFNULL((SUM(ope.trade_amount) + SUM(ope.gift)),0) AS totalAmount,
+        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)
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鎬昏处璁板綍鏁�-->
+  <select id="getRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT
+    COUNT(*) AS recordCount
+    FROM se_general
+    <where>
+      <if test = "cashierName != null and cashierName !=''">
+        AND cashier_name like CONCAT('%',#{cashierName},'%')
+      </if>
+
+      <if test = "auditStatus != null and auditStatus > 0">
+        AND audit_status = ${auditStatus}
+      </if>
+
+      <if test = "operateDateStart != null and operateDateStop != null">
+        AND Date(operate_date) BETWEEN #{operateDateStart} AND #{operateDateStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鎬昏处璁板綍-->
+  <select id="getGenerals" resultType="com.dy.pipIrrGlobal.voSe.VoGeneral">
+    SELECT
+        CAST(id AS  char) AS generalId,
+        CAST(cashier_id AS char) AS cashierId,
+        cashier_name AS cashierName,
+        trade_amount AS tradeAmount,
+        gift,
+        total_amount AS totalAmount,
+        Date(operate_date) AS operateDate,
+        (CASE
+          WHEN audit_status = 1 THEN "鏈鏍�"
+          WHEN audit_status = 2 THEN "鍚屾剰"
+          WHEN audit_status = 3 THEN "椹冲洖"
+        END) AS auditStatus
+    FROM se_general
+    <where>
+      <if test = "cashierName != null and cashierName !=''">
+        AND cashier_name like CONCAT('%',#{cashierName},'%')
+      </if>
+
+      <if test = "auditStatus != null and auditStatus > 0">
+        AND audit_status = ${auditStatus}
+      </if>
+
+      <if test = "operateDateStart != null and operateDateStop != null">
+        AND Date(operate_date) BETWEEN #{operateDateStart} AND #{operateDateStop}
+      </if>
+    </where>
+    ORDER BY Date(operate_date) DESC
+    <if test="pageCurr != null and pageSize != null">
+      LIMIT ${pageCurr}, ${pageSize}
+    </if>
+  </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>
+
+      <if test = "cashierId != null and cashierId >0">
+        AND ope.operator = ${cashierId}
+      </if>
+    </where>
+    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
+    <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>
+    </where>
+    ORDER BY tradeDate
+    <if test="pageCurr != null and pageSize != null">
+      LIMIT ${pageCurr}, ${pageSize}
+    </if>
+  </select>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideCtrl.java
index 4ad3396..5819ee3 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideCtrl.java
@@ -22,6 +22,12 @@
 import java.util.List;
 import java.util.Objects;
 
+/**
+ * @author wuzeyu
+ * @date 2023/12/26 11:12
+ * @LastEditTime 2023/12/26 11:12
+ * @Description
+ */
 @Slf4j
 @Tag(name = "鍒嗘按鍙g鐞�", description = "鍒嗘按鍙e鍒犳敼鏌ョ瓑鎿嶄綔")
 @RestController
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideSv.java
index 01e4f65..7bf7403 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideSv.java
@@ -12,6 +12,12 @@
 import java.util.List;
 import java.util.Map;
 
+/**
+ * @author wuzeyu
+ * @date 2023/12/26 11:12
+ * @LastEditTime 2023/12/26 11:12
+ * @Description
+ */
 @Slf4j
 @Service
 public class DivideSv {
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideVo.java
index e815bfb..7724a9a 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideVo.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideVo.java
@@ -4,6 +4,12 @@
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
+/**
+ * @author wuzeyu
+ * @date 2023/12/26 11:12
+ * @LastEditTime 2023/12/26 11:12
+ * @Description
+ */
 @Data
 @EqualsAndHashCode(callSuper = false)
 @ToString(callSuper = true)
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/result/SystemResultCode.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/result/SystemResultCode.java
index fc185ae..b757745 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/result/SystemResultCode.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/result/SystemResultCode.java
@@ -21,7 +21,13 @@
     ROLE_NAME_EXIST(10003, "瑙掕壊鍚嶇О宸插瓨鍦�"),
     NO_ROLES(10004, "娌℃湁绗﹀悎鏉′欢鐨勮鑹茶褰�"),
     PLEASE_INPUT_ROLE_ID(10005, "瑙掕壊缂栧彿涓嶈兘涓虹┖"),
-    DELETE_ROLE_FAIL(10006, "鍒犻櫎瑙掕壊澶辫触");
+    DELETE_ROLE_FAIL(10006, "鍒犻櫎瑙掕壊澶辫触"),
+    USER_NOT_EXIST(10007, "鍒犻櫎鐨勭敤鎴蜂笉瀛樺湪"),
+
+    /**
+     * 鐢ㄦ埛
+     */
+    THE_USER_NOT_EXIST(20001, "鐢ㄦ埛涓嶅瓨鍦�");
 
     private final Integer code;
     private final String message;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/DtoRole.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/DtoRole.java
index 1a07e74..af09b06 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/DtoRole.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/DtoRole.java
@@ -23,7 +23,7 @@
      */
     @Schema(description = "瑙掕壊缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @Positive(message = "瑙掕壊缂栧彿蹇呴』涓哄ぇ浜�0鐨勬暣鏁�")
-    private Long roleid;
+    private Long roleId;
 
     /**
      * 瑙掕壊鍚嶇О
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleCtrl.java
index ed76f2d..a14f8a3 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleCtrl.java
@@ -36,13 +36,7 @@
 @SuppressWarnings("unchecked")//java鐗堟湰瓒婇珮锛屽娉涘瀷绾︽潫瓒婁弗锛屾墍浠ラ厤缃甋uppressWarnings("unchecked")
 public class RoleCtrl {
 
-    //private RoleSv sv ;
     private final RoleSv roleSv;
-
-    //@Autowired
-    //private void setSv(RoleSv sv){
-    //    this.sv = sv ;
-    //}
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢锛堣鑹茬紪鍙枫�佽鑹插悕绉帮級鑾峰彇瑙掕壊鍒楄〃
@@ -80,68 +74,15 @@
     }
 
     /**
-     * 娣诲姞瑙掕壊鍙婃潈闄愬垪琛紝娣诲姞鍓嶅垽鏂鑹插悕鏄惁宸插瓨鍦�
-     * @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 = "save", consumes = MediaType.APPLICATION_JSON_VALUE)
-    @Transactional(rollbackFor = Exception.class)
-    @SsoAop()
-    public BaseResponse<Boolean> save(@RequestBody @Valid DtoRole po, BindingResult bindingResult){
-        if(bindingResult != null && bindingResult.hasErrors()){
-            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
-        }
-
-        // 鑾峰彇瑙掕壊鍚嶇О绾ф潈闄愬垪琛�
-        String roleName = Optional.ofNullable(po.getRoleName()).orElse("");
-        JSONArray permissions = Optional.ofNullable(JSONArray.parseArray(po.getPermissions())).orElse(JSONArray.parseArray("[]"));
-        Long operator = Optional.ofNullable(po.getOperator()).orElse(0L);
-
-        // 鍒ゆ柇瑙掕壊鍚嶇О鏄惁閲嶅悕
-        Integer recordCount = Optional.ofNullable(roleSv.getRecordCountByName(roleName)).orElse(0);
-        if(recordCount > 0)
-            return BaseResponseUtils.buildFail(SystemResultCode.ROLE_NAME_EXIST.getMessage());
-
-        // 娣诲姞瑙掕壊
-        BaRole baRole = new BaRole();
-        Long roleId = 0L;
-        try {
-            baRole.setName(roleName);
-            baRole.setOperator(operator);
-            Date operateTime = new Date();
-            baRole.setOperateDt(operateTime);
-            baRole.setDeleted(Deleted.NO.getCode());
-            roleId = roleSv.addRole(baRole);
-        } catch (Exception e) {
-            return BaseResponseUtils.buildException(e.getMessage()) ;
-        }
-
-        if(roleId <= 0)
-            return BaseResponseUtils.buildFail(SystemResultCode.ADD_ROLE_FAIL.getMessage());
-
-        // 娣诲姞鏉冮檺鍒楄〃
-        BaRolePermissions baRolePermissions = new BaRolePermissions();
-        baRolePermissions.setRoleid(roleId);
-        baRolePermissions.setPermissions(permissions);
-        Integer rc = Optional.ofNullable(roleSv.addPermissions(baRolePermissions)).orElse(0);
-        if(rc <= 0) {
-            return BaseResponseUtils.buildFail(SystemResultCode.ADD_ROLE_FAIL.getMessage());
-        }
-        return BaseResponseUtils.buildSuccess(true) ;
-    }
-
-    /**
-     * 瑙掕壊鎺堟潈锛屽綋瑙掕壊缂栧彿涓虹┖鏃讹紝瀹為檯涓烘坊鍔犺鑹插強鏉冮檺鍒楄〃
+     * 瑙掕壊鎺堟潈
+     * 1. 濡傛灉roleid鍜宺oleName閮界┖锛氭彁绀洪敊璇俊鎭�
+     * 2. 濡傛灉roleid涓虹┖锛氭柊寤鸿鑹蹭笖鎺堟潈
+     *      1. 娣诲姞瑙掕壊璁板綍
+     *      2. 娣诲姞瑙掕壊銆佹潈闄愬叧鑱旇褰�
+     * 3. 濡傛灉roleid涓嶄负绌猴細淇敼瑙掕壊鍙婃巿鏉�
+     *      1. 鍒犻櫎瑙掕壊銆佹潈闄愯褰�
+     *      2. 淇敼瑙掕壊淇℃伅
+     *      3. 娣诲姞瑙掕壊銆佹潈闄愯褰�
      * @param po
      * @param bindingResult
      * @return
@@ -163,19 +104,8 @@
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
-        /**
-         * 濡傛灉roleid鍜宺oleName閮界┖锛氭彁绀洪敊璇俊鎭�
-         * 濡傛灉roleid涓虹┖锛氭柊寤鸿鑹蹭笖鎺堟潈
-         *      1. 娣诲姞瑙掕壊璁板綍
-         *      2. 娣诲姞瑙掕壊銆佹潈闄愬叧鑱旇褰�
-         * 濡傛灉roleid涓嶄负绌猴細淇敼瑙掕壊鎺堟潈
-         *      1. 鍒犻櫎瑙掕壊銆佹潈闄愯褰�
-         *      2. 娣诲姞瑙掕壊銆佹潈闄愯褰�
-         */
-
-        Long roleId = Optional.ofNullable(po.getRoleid()).orElse(0L);
+        Long roleId = Optional.ofNullable(po.getRoleId()).orElse(0L);
         String roleName = Optional.ofNullable(po.getRoleName()).orElse("");
-        //String permissions = Optional.ofNullable(po.getPermissions()).orElse("");
         JSONArray permissions = Optional.ofNullable(JSONArray.parseArray(po.getPermissions())).orElse(JSONArray.parseArray("[]"));
         Long operator = Optional.ofNullable(po.getOperator()).orElse(0L);
 
@@ -199,60 +129,21 @@
             return BaseResponseUtils.buildSuccess(true) ;
         }
 
+        // 淇敼瑙掕壊淇℃伅
+        BaRole baRole = new BaRole();
+        baRole.setId(roleId);
+        baRole.setName(roleName);
+        baRole.setOperator(operator);
+        Date operateTime = new Date();
+        baRole.setOperateDt(operateTime);
+        roleSv.updateRole(baRole);
+
         // 淇敼瑙掕壊鎺堟潈
         BaRolePermissions baRolePermissions = new BaRolePermissions();
         baRolePermissions.setRoleid(roleId);
         baRolePermissions.setPermissions(permissions);
         roleSv.delPermissionsByRoleId(roleId);
         roleSv.addPermissions(baRolePermissions);
-        return BaseResponseUtils.buildSuccess(true) ;
-    }
-
-    /**
-     * 淇敼瑙掕壊
-     * @param po 淇濆瓨瑙掕壊form琛ㄥ崟瀵硅薄
-     * @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 = "update", consumes = MediaType.APPLICATION_JSON_VALUE)
-    @SsoAop()
-    public BaseResponse<Boolean> update(@RequestBody @Valid BaRole po, BindingResult bindingResult){
-        if(bindingResult != null && bindingResult.hasErrors()){
-            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
-        }
-
-        // 鎺ユ敹瑙掕壊缂栧彿銆佽鑹插悕绉般�佹搷浣滀汉缂栧彿
-        Long roleId = Optional.ofNullable(po.getId()).orElse(0L);
-        String roleName = Optional.ofNullable(po.getName()).orElse("");
-        Long operator = Optional.ofNullable(po.getOperator()).orElse(0L);
-
-        // 鍒ゆ柇涓婚敭鏄惁涓虹┖
-        if(roleId == 0)
-            return BaseResponseUtils.buildFail(SystemResultCode.PLEASE_INPUT_ROLE_ID.getMessage()) ;
-
-        Integer recordCount = 0;
-        try {
-            po.setName(roleName);
-            po.setOperator(operator);
-            Date operateTime = new Date();
-            po.setOperateDt(operateTime);
-
-            //po.deleted = null ;//璁剧疆涓簄ull锛屼笉鍋氭洿鏂�
-            recordCount = roleSv.updateRole(po);
-        } catch (Exception e) {
-            return BaseResponseUtils.buildException(e.getMessage()) ;
-        }
-
-        if(recordCount <= 0)
-            return BaseResponseUtils.buildFail("鏁版嵁搴撳瓨鍌ㄥけ璐�") ;
 
         return BaseResponseUtils.buildSuccess(true) ;
     }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java
index 3aa4298..9d58bd9 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java
@@ -9,6 +9,7 @@
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrBase.result.SystemResultCode;
 import com.dy.pipIrrGlobal.pojoBa.BaUser;
 import com.dy.pipIrrGlobal.util.Constant;
 import com.dy.pipIrrGlobal.voBa.VoUserInfo;
@@ -87,11 +88,11 @@
                             schema = @Schema(implementation = BaUser.class))}
             )
     })
-    @PostMapping(path = "some", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @GetMapping(path = "some")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<BaUser>>> some(@RequestBody @Valid QueryVo vo) {
+    public BaseResponse<QueryResultVo<List<VoUserInfo>>> some(QueryVo vo) {
         try {
-            QueryResultVo<List<BaUser>> res = this.sv.selectSome(vo);
+            QueryResultVo<List<VoUserInfo>> res = this.sv.selectSome(vo);
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
             log.error("鏌ヨ鐢ㄦ埛寮傚父", e);
@@ -141,7 +142,7 @@
         if (bindingResult != null && bindingResult.hasErrors()) {
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
-        po.id = null;
+        po.userId = null;
         int count;
         try {
             po.supperAdmin = Constant.no.byteValue() ;
@@ -158,7 +159,7 @@
                 po.password = MD5.encrypt(defaultPassword);
             }
             count = this.sv.save(po);
-            this.sv.setRoles(po.id, po.roleIds);
+            this.sv.setRoles(po.userId, po.roleIds);
         } catch (Exception e) {
             log.error("淇濆瓨鐢ㄦ埛寮傚父", e);
             return BaseResponseUtils.buildException(e.getMessage());
@@ -191,7 +192,7 @@
         if (bindingResult != null && bindingResult.hasErrors()) {
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
-        if (po.id == null) {
+        if (po.userId == null) {
             return BaseResponseUtils.buildFail("鏃犳暟鎹疄浣揑D");
         }
         int count;
@@ -200,7 +201,7 @@
             po.deleted = null;//璁剧疆涓簄ull锛屼笉鍋氭洿鏂�
             po.orgTag = null;//璁剧疆涓簄ull锛屼笉鍋氭洿鏂�
             count = this.sv.update(po);
-            this.sv.setRoles(po.id, po.roleIds);
+            this.sv.setRoles(po.userId, po.roleIds);
         } catch (Exception e) {
             log.error("淇濆瓨鐢ㄦ埛寮傚父", e);
             return BaseResponseUtils.buildException(e.getMessage());
@@ -469,7 +470,7 @@
             return BaseResponseUtils.buildException(e.getMessage());
         }
         if (count <= 0) {
-            return BaseResponseUtils.buildFail("鏁版嵁搴撳瓨鍌ㄥけ璐�");
+            return BaseResponseUtils.buildFail(SystemResultCode.USER_NOT_EXIST.getMessage());
         } else {
             return BaseResponseUtils.buildSuccess(true);
         }
@@ -494,6 +495,9 @@
     public BaseResponse<QueryResultVo<VoUserInfo>> getUserInfos(@PathVariable("userId") Long userId) {
         try {
             VoUserInfo res = this.sv.getUserInfos(userId);
+            if(res == null) {
+                return BaseResponseUtils.buildException(SystemResultCode.THE_USER_NOT_EXIST.getMessage());
+            }
             System.out.println("   :" + res);
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
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 77591e9..1c2ebd3 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
@@ -54,23 +54,68 @@
     }
 
     /**
-     * 寰楀埌涓�涓敤鎴�
-     *
-     * @param vo 鏌ヨ鏉′欢鍊煎璞�
-     * @return 鐢ㄦ埛瀹炰綋
+     * 鑾峰彇鐢ㄦ埛鍒楄〃
      */
-    @SuppressWarnings("unchecked")
-    public QueryResultVo<List<BaUser>> selectSome(QueryVo vo) {
-        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo);
-        Long itemTotal = this.dao.selectTotal(params);
+    public QueryResultVo<List<VoUserInfo>> selectSome(QueryVo queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
 
-        QueryResultVo<List<BaUser>> rsVo = new QueryResultVo<>();
-        rsVo.pageSize = vo.pageSize;
-        rsVo.pageCurr = vo.pageCurr;
+        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.calculateAndSet(itemTotal, params);
-        rsVo.obj = this.dao.selectSome(params);
 
-        return rsVo;
+        /**
+         * 鑾峰彇鐢ㄦ埛鍒楄〃锛屽彇鐢ㄦ埛ID
+         * 鏍规嵁鐢ㄦ埛ID鑾峰彇roleId鍒楄〃锛屽苟娣诲姞鍒拌繑鍥炲璞′腑
+         * 鏍规嵁鐢ㄦ埛ID鑾峰彇roleName鍒楄〃锛屽苟娣诲姞鍒拌繑鍥炲璞′腑
+         */
+        List<VoUserInfo> list_users = Optional.ofNullable(this.dao.getUsers(params)).orElse(new ArrayList<>());
+        if(list_users.size() > 0) {
+            for(int i = 0; i < list_users.size(); i++) {
+                VoUserInfo voUserInfo = list_users.get(i);
+                String userId = voUserInfo.getUserId();
+
+                JSONArray array_roleIds = new JSONArray();
+                List<Map<String, Object>> list_roleIds = Optional.ofNullable(this.dao.getRoleIdsByUserId(Long.parseLong(userId))).orElse(new ArrayList<>());
+                for (int j = 0; j < list_roleIds.size(); j++) {
+                    Map map_roleId = list_roleIds.get(j);
+                    if(map_roleId != null) {
+                        array_roleIds.add(map_roleId.get("roleId").toString());
+                    }
+
+                }
+                List<Map<String, Object>> list_roleId = (List<Map<String, Object>>) JSON.parse(array_roleIds.toJSONString());
+
+                JSONArray array_roleNames = new JSONArray();
+                List<Map<String, Object>> list_roleNames = Optional.ofNullable(this.dao.getRoleNamesByUserId(Long.parseLong(userId))).orElse(new ArrayList<>());
+                for (int j = 0; j < list_roleNames.size(); j++) {
+                    Map map_roleName = list_roleNames.get(j);
+                    if(map_roleName != null) {
+                        array_roleNames.add(map_roleName.get("roleName").toString());
+                    }
+                }
+                List<Map<String, Object>> list_roleName = (List<Map<String, Object>>) JSON.parse(array_roleNames.toJSONString());
+
+                voUserInfo.setRoleIds(list_roleId);
+                voUserInfo.setRoleNames(list_roleName);
+            }
+        }
+        rsVo.obj = list_users;
+        return rsVo ;
     }
 
     /**
@@ -181,10 +226,14 @@
         VoUserInfo voUserInfo = new VoUserInfo();
         JSONArray array_permission = new JSONArray();
         Map map = Optional.ofNullable(dao.getUserInfoById(userId)).orElse(new HashMap());
-        if(map.size() > 0) {
-            voUserInfo.setUserId(String.valueOf(userId));
-            voUserInfo.setUserName(map.get("userName").toString());
+        if(map.size() == 0) {
+            return null;
         }
+        voUserInfo.setUserId(String.valueOf(userId));
+        voUserInfo.setUserName(map.get("userName").toString());
+        voUserInfo.setPhone(map.get("phone").toString());
+        voUserInfo.setBlockId(map.get("blockId").toString());
+        voUserInfo.setBlockName(map.get("blockName").toString());
 
         /**
          * 娣诲姞瑙掕壊缂栧彿鍒楄〃銆佽鑹插悕绉板垪琛ㄣ�佹潈闄愬垪琛�
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/util/InitListener.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/util/InitListener.java
index a6ead7d..5a85dee 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/util/InitListener.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/util/InitListener.java
@@ -169,7 +169,7 @@
                 (password != null && !password.trim().equals("")) &&
                 supperAdmin != null){
             BaUser po = new BaUser() ;
-            po.name = name ;
+            po.userName = name ;
             po.phone = phone ;
             po.password = MD5.encrypt(password) ;//杩涜鍔犲瘑鐮� ;
             po.orgTag = orgTag ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-demo/src/main/java/com/dy/pipIrrDemo/demo/DemoCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-demo/src/main/java/com/dy/pipIrrDemo/demo/DemoCtrl.java
index 0d361bc..53bc971 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-demo/src/main/java/com/dy/pipIrrDemo/demo/DemoCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-demo/src/main/java/com/dy/pipIrrDemo/demo/DemoCtrl.java
@@ -116,8 +116,8 @@
     @GetMapping("test1")
     public BaseResponse<BaUser> test1(){
         BaUser po = new BaUser() ;
-        po.id = System.currentTimeMillis() ;
-        po.name = "寮犱笁" ;
+        po.userId = System.currentTimeMillis() ;
+        po.userName = "寮犱笁" ;
         po.phone = "13912345678" ;
 
         return BaseResponseUtils.buildSuccess(po);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java
index 6002806..30a1954 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java
@@ -1,5 +1,6 @@
 package com.dy.pipIrrProject.controller;
 
+import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.dy.common.aop.SsoAop;
@@ -179,6 +180,34 @@
     }
 
     /**
+     * 鑾峰彇鏈粦鎺у埗鍣ㄧ殑鍙栨按鍙e垪琛�
+     * @return
+     */
+    @Operation(summary = "鑾峰緱鏈粦鎺у埗鍣ㄧ殑鍙栨按鍙h褰�", description = "杩斿洖鏈粦鎺у埗鍣ㄧ殑鍙栨按鍙f暟鎹�")
+    @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 = "nobinding_intakes")
+    @SsoAop()
+    public BaseResponse<JSONArray> getNoBindingIntakes(){
+        try {
+            JSONArray array = controllerSv.getNoBindingIntakes();
+            if(array.size() <= 0) {
+                return BaseResponseUtils.buildFail(ProjectResultCode.NO_BINDING_INTAKE.getMessage());
+            }
+            return BaseResponseUtils.buildSuccess(array);
+        } catch (Exception e) {
+            log.error("鏌ヨ鎺у埗鍣ㄥ紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
      * 瀵煎嚭鎺у埗鍣ㄥ垪琛�
      * @param response
      * @param vo
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 12af178..9ff24a4 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
@@ -1,7 +1,10 @@
 package com.dy.pipIrrProject.controller;
 
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoPr.PrControllerMapper;
+import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrController;
 import com.dy.pipIrrGlobal.voPr.VoController;
 import lombok.extern.slf4j.Slf4j;
@@ -12,6 +15,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 /**
  * @author ZhuBaoMin
@@ -25,6 +29,9 @@
 public class ControllerSv {
     @Autowired
     private PrControllerMapper prControllerMapper;
+
+    @Autowired
+    private PrIntakeMapper prIntakeMapper;
 
     /**
      * 鏍规嵁鎸囧畾鑾峰彇鎺у埗鍣ㄨ褰�
@@ -94,7 +101,42 @@
         return rsVo ;
     }
 
+    /**
+     * 鏍规嵁鎺у埗鍣ㄧ紪鍙疯幏鍙栨湭鍒犻櫎鐨勬帶鍒跺櫒鏁伴噺
+     * @param controllerId
+     * @return
+     */
     public Integer getRecordCountOfController(Long controllerId) {
         return prControllerMapper.getRecordCountOfController(controllerId);
     }
+    /**
+     * 鏍规嵁鎺у埗鍣ㄧ紪鍙疯幏鍙栧凡缁戝畾璁板綍鏁�
+     * @param controllerId
+     * @return
+     */
+    public Integer getBindedCount(Long controllerId) {
+        return prControllerMapper.getBindedCount(controllerId);
+    }
+
+    /**
+     * 鏍规嵁涓婚敭鍒犻櫎澶栭敭
+     * @param controllerId
+     * @return
+     */
+    public Integer deleteIntakeId(Long controllerId) {
+        return prControllerMapper.deleteIntakeId(controllerId);
+    }
+
+    /**
+     * 鑾峰彇鏈粦鎺у埗鍣ㄧ殑鍙栨按鍙e垪琛�
+     * @return
+     */
+    public JSONArray getNoBindingIntakes() {
+        List<Map<String, Object>> list = Optional.ofNullable(prIntakeMapper.getNoBindingIntakes()).orElse(new ArrayList<>());
+        JSONArray array= null;
+        if(list.size() > 0) {
+            array= JSONArray.parseArray(JSON.toJSONString(list));
+        }
+        return array;
+    }
 }
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 ed8e8be..66ac3e0 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
@@ -115,7 +115,8 @@
      * @return 淇敼璁板綍鏉℃暟
      */
     public Integer updateByPrimaryKey(PrDivide po) {
-        return prDivideMapper.updateByPrimaryKey(po);
+        //return prDivideMapper.updateByPrimaryKey(po);
+        return prDivideMapper.updateByPrimaryKeySelective(po);
     }
 
     /**
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java
index fa5f55e..032631f 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java
@@ -33,10 +33,7 @@
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.time.format.DateTimeFormatter;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 
 /**
  * @author WuZeYu
@@ -48,13 +45,14 @@
 @Slf4j
 @Tag(name = "鍙栨按鍙g鐞�", description = "鍙栨按鍙f搷浣�")
 @RestController
-@RequestMapping(path="intake")
+@RequestMapping(path = "intake")
 @RequiredArgsConstructor
 public class IntakeCtrl {
     private final IntakeSv intakeSv;
 
     /**
      * 瀹㈡埛绔姹傚緱鍒版墍鏈夊彇姘村彛鍚嶅瓧
+     *
      * @return 鎵�鏈夊彇姘村彛鍚嶅瓧
      */
     @Operation(summary = "鑾峰緱鍏ㄩ儴鍙栨按鍙�", description = "杩斿洖鍏ㄩ儴鍙栨按鍙f暟鎹�")
@@ -68,22 +66,23 @@
     })
     @GetMapping(path = "all")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<PrIntake>>> all(){
+    public BaseResponse<QueryResultVo<List<PrIntake>>> all() {
         try {
             QueryResultVo<List<PrIntake>> res = this.intakeSv.selectAll();
-            if(res == null) {
+            if (res == null) {
                 return BaseResponseUtils.buildFail(ProjectResultCode.NO_INTAKES.getMessage());
-            }else {
+            } else {
                 return BaseResponseUtils.buildSuccess(res);
             }
         } catch (Exception e) {
             log.error("鏌ヨ鍙栨按鍙e紓甯�", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
         }
     }
 
     /**
      * 寰楀埌涓�涓彇姘村彛鏁版嵁
+     *
      * @return 涓�涓彇姘村彛鏁版嵁
      */
     @Operation(summary = "涓�涓彇姘村彛", description = "寰楀埌涓�涓彇姘村彛鏁版嵁")
@@ -97,10 +96,10 @@
     })
     @GetMapping(path = "one/{id}")
     @SsoAop()
-    public BaseResponse<PrIntake> one(@PathVariable("id") Long id){
-        if(this.intakeSv.selectById(id) == null) {
+    public BaseResponse<PrIntake> one(@PathVariable("id") Long id) {
+        if (this.intakeSv.selectById(id) == null) {
             return BaseResponseUtils.buildFail(ProjectResultCode.NO_INTAKES.getMessage());
-        }else {
+        } else {
             return BaseResponseUtils.buildSuccess(this.intakeSv.selectById(id));
         }
     }
@@ -114,18 +113,18 @@
                             schema = @Schema(implementation = VoActiveCard.class))}
             )
     })
-    @GetMapping(path = "getIntakes", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @GetMapping(path = "getIntakes")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<VoIntake>>> getIntakes(@RequestBody @Parameter(description = "鏌ヨform琛ㄥ崟json鏁版嵁", required = true) QueryVo vo){
+    public BaseResponse<QueryResultVo<List<VoIntake>>> getIntakes(QueryVo vo) {
         try {
             QueryResultVo<List<VoIntake>> res = intakeSv.getIntakes(vo);
-            if(res == null) {
+            if (res == null) {
                 return BaseResponseUtils.buildFail(ProjectResultCode.NO_INTAKES.getMessage());
             }
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
             log.error("鑾峰彇鍙栨按鍙h褰曞紓甯�", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
         }
     }
 
@@ -141,23 +140,25 @@
     @PostMapping(path = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid PrIntake po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> add(@RequestBody  @Valid PrIntake po, @Parameter(hidden = true) BindingResult bindingResult) {
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        if(bindingResult != null && bindingResult.hasErrors()){
+        if (bindingResult != null && bindingResult.hasErrors()) {
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         Date operateTime = new Date();
         po.setOperateDt(operateTime);
+        po.setDeleted((byte)0);
         Integer rec = Optional.ofNullable(intakeSv.addIntake(po)).orElse(0);
-        if(rec == 0) {
+        if (rec == 0) {
             return BaseResponseUtils.buildFail(ProjectResultCode.ADD_INTAKE_FAIL.getMessage());
         }
-        return BaseResponseUtils.buildSuccess(true) ;
+        return BaseResponseUtils.buildSuccess(true);
     }
 
     /**
      * 缂栬緫淇敼鍙栨按鍙�
+     *
      * @param po 淇濆瓨鍙栨按鍙orm琛ㄥ崟瀵硅薄
      * @return 鏄惁鎴愬姛
      */
@@ -172,8 +173,8 @@
     })
     @PostMapping(path = "update", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> update(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid PrIntake po, @Parameter(hidden = true) BindingResult bindingResult){
-        if(bindingResult != null && bindingResult.hasErrors()){
+    public BaseResponse<Boolean> update(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid PrIntake po, @Parameter(hidden = true) BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
         int count;
@@ -183,18 +184,19 @@
             count = this.intakeSv.update(po);
         } catch (Exception e) {
             log.error("淇濆瓨鍒嗘按鍙e紓甯�", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
         }
-        if(count <= 0){
-            return BaseResponseUtils.buildFail(ProjectResultCode.UPDATE_INTAKE.getMessage()) ;
-        }else{
-            return BaseResponseUtils.buildSuccess(true) ;
+        if (count <= 0) {
+            return BaseResponseUtils.buildFail(ProjectResultCode.UPDATE_INTAKE.getMessage());
+        } else {
+            return BaseResponseUtils.buildSuccess(true);
         }
     }
 
     /**
      * 鍒犻櫎鍙栨按鍙�
-     * @param id 鍙栨按鍙D
+     *
+     * @param map 鍙栨按鍙D
      * @return 鏄惁鎴愬姛
      */
     @Operation(summary = "鍒犻櫎鍒嗘按鍙�", description = "鎻愪氦鍙栨按鍙D锛岃繘琛岄�昏緫鍒犻櫎")
@@ -206,28 +208,32 @@
                             schema = @Schema(implementation = Boolean.class))}
             )
     })
-    @GetMapping(path = "delete/{id}")
+    @PostMapping(path = "delete")
     @SsoAop()
-    public BaseResponse<Boolean> delete(@PathVariable("id") Long id){
-        if(id == null ){
-            return BaseResponseUtils.buildFail(ProjectResultCode.PLEASE_INPUT_INTAKE_ID.getMessage()) ;
+    public BaseResponse<Boolean> delete(@RequestBody Map map) {
+        if (map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildFail(ProjectResultCode.PLEASE_INPUT_INTAKE_ID.getMessage());
         }
-        int count;
+        Long id = Long.parseLong(map.get("id").toString());
         try {
-            count = this.intakeSv.delete(id);
+            //鍙栨按鍙D
+            Integer recordCount = Optional.ofNullable(intakeSv.delete(id)).orElse(0);
+            if (recordCount == 0) {
+                return BaseResponseUtils.buildFail(ProjectResultCode.DELETE_INTAKE_FAIL.getMessage());
+            } else {
+                return BaseResponseUtils.buildSuccess(true);
+            }
         } catch (Exception e) {
             log.error("淇濆瓨鍒嗘按鍙e紓甯�", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
         }
-        if(count <= 0){
-            return BaseResponseUtils.buildFail(ProjectResultCode.DELETE_INTAKE_FAIL.getMessage()) ;
-        }else{
-            return BaseResponseUtils.buildSuccess(true) ;
-        }
+
+
     }
 
     /**
      * 瀵煎嚭鍙栨按鍙e垪琛�
+     *
      * @param response
      * @param vo
      */
@@ -247,6 +253,7 @@
 
     /**
      * 瀵煎叆鍙栨按鍙e垪琛�
+     *
      * @param file
      */
     @SneakyThrows
@@ -257,7 +264,7 @@
                 .head(VoIntake.class)
                 .sheet()
                 .doReadSync();
-        return BaseResponseUtils.buildSuccess(memberList) ;
+        return BaseResponseUtils.buildSuccess(memberList);
     }
 
     /**
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
index 56e50c2..7fd8e0b 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
@@ -1,6 +1,7 @@
 package com.dy.pipIrrProject.intake;
 
 import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoPr.PrDivideMapper;
 import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrIntake;
 import com.dy.pipIrrGlobal.voPr.VoIntake;
@@ -12,6 +13,7 @@
 
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 /**
  * @author wuzeyu
@@ -25,6 +27,8 @@
 public class IntakeSv {
     @Autowired
     private PrIntakeMapper prIntakeMapper;
+    @Autowired
+    private PrDivideMapper prDivideMapper;
 
     /**
      * 娣诲姞鍙栨按鍙�
@@ -34,41 +38,47 @@
      */
     @Transactional
     Integer addIntake(PrIntake po) {
-        if (po.getTownId()==null||po.getTownId()==0)
-        {
-            Long townId=getSupperByVillageId(po.getVillageId());
-            po.setTownId(townId);
+        Long villageId = Optional.ofNullable(po.getVillageId()).orElse(0L);
+
+        if (villageId != 0){
+            if (po.getTownId() == null || po.getTownId() == 0) {
+                Long townId = getSupperByVillageId(po.getVillageId());
+                po.setTownId(townId);
+            }
+            if (po.getCountyId() == null || po.getCountyId() == 0) {
+                Long countyId = getSupperByVillageId(getSupperByVillageId(po.getVillageId()));
+                po.setCountyId(countyId);
+            }
         }
-        if (po.getCountyId()==null||po.getCountyId()==0)
-        {
-            Long countyId=getSupperByVillageId(getSupperByVillageId(po.getVillageId()));
-            po.setCountyId(countyId);
+        if (po.getBlockId() == null || po.getBlockId() == 0) {
+            Long blockId = prDivideMapper.getBlockIdById(po.getDivideId());
+            po.setBlockId(blockId);
         }
         return prIntakeMapper.insertSelective(po);
     }
-    public Long getSupperByVillageId(long vaId){
+
+    public Long getSupperByVillageId(long vaId) {
         return prIntakeMapper.getSupperByVillageId(vaId);
     }
 
 
     /**
      * 淇濆瓨淇敼瀹炰綋
+     *
      * @param po 瀹炰綋
      * @return 鏁伴噺
      */
 
-    public int update(PrIntake po){
-        if (po.getTownId()==null||po.getTownId()==0)
-        {
-            Long townId=getSupperByVillageId(po.getVillageId());
+    public int update(PrIntake po) {
+        if (po.getTownId() == null || po.getTownId() == 0) {
+            Long townId = getSupperByVillageId(po.getVillageId());
             po.setTownId(townId);
         }
-        if (po.getCountyId()==null||po.getCountyId()==0)
-        {
-            Long countyId=getSupperByVillageId(getSupperByVillageId(po.getVillageId()));
+        if (po.getCountyId() == null || po.getCountyId() == 0) {
+            Long countyId = getSupperByVillageId(getSupperByVillageId(po.getVillageId()));
             po.setCountyId(countyId);
         }
-        return this.prIntakeMapper.updateByPrimaryKeySelective(po) ;
+        return this.prIntakeMapper.updateByPrimaryKeySelective(po);
 //        return this.prIntakeMapper.updateByPrimaryKey(po);
     }
 
@@ -79,6 +89,12 @@
      * @return 鍙栨按鍙h褰曞垪琛�
      */
     public QueryResultVo<List<VoIntake>> getIntakes(QueryVo queryVo) {
+//        String isBinded = queryVo.getIsBinded();
+//
+//        if(isBinded == null || isBinded.length() <= 0) {
+//
+//        }
+
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
         Long itemTotal = prIntakeMapper.getRecordCount(params);
 
@@ -104,35 +120,39 @@
 
     /**
      * 寰楀埌鎵�鏈夊彇姘村彛
+     *
      * @return 鎵�鏈夊彇姘村彛闆嗗悎
      */
     public QueryResultVo<List<PrIntake>> selectAll() {
-        QueryResultVo<List<PrIntake>> rsVo = new QueryResultVo<>() ;
-        rsVo.obj = this.prIntakeMapper.selectAll() ;
-        return rsVo ;
+        QueryResultVo<List<PrIntake>> rsVo = new QueryResultVo<>();
+        rsVo.obj = this.prIntakeMapper.selectAll();
+        return rsVo;
     }
 
     /**
      * 寰楀埌涓�涓彇姘村彛
+     *
      * @param id 鍙栨按鍙D
      * @return 鍙栨按鍙e疄浣�
      */
     public PrIntake selectById(Long id) {
-        return this.prIntakeMapper.selectByPrimaryKey(id) ;
+        return this.prIntakeMapper.selectByPrimaryKey(id);
     }
 
     /**
      * 閫昏緫鍒犻櫎瀹炰綋
+     *
      * @param id 瀹炰綋ID
      * @return 鏁伴噺
      */
     @Transactional
-    public int delete(Long id){
-        return this.prIntakeMapper.deleteLogicById(id) ;
+    public int delete(Long id) {
+        return this.prIntakeMapper.deleteLogicById(id);
     }
 
     /**
      * 鏍规嵁鍙栨按鍙g紪鍙疯幏鍙栨湭鍒犻櫎鐨勫彇姘村彛鏁伴噺
+     *
      * @param intakeId
      * @return
      */
@@ -142,19 +162,21 @@
 
     /**
      * 鏍规嵁鏉慖d鑾峰彇鍏ㄩ儴鍦板潃
+     *
      * @param villageId 鏉慖d
-     * @return  address  鍏ㄩ儴浜旂骇鍦板潃
+     * @return address  鍏ㄩ儴浜旂骇鍦板潃
      */
-    public String getAddressByVillageId(long villageId){
+    public String getAddressByVillageId(long villageId) {
         return prIntakeMapper.getAddressByVillageId(villageId);
     }
 
     /**
      * 鏍规嵁鍖哄煙Id鑾峰彇鍖哄煙绛夌骇
+     *
      * @param regionId 鍖哄煙Id
-     * @return  Level  鍖哄煙绛夌骇
+     * @return Level  鍖哄煙绛夌骇
      */
-    public int getLevelByRegionId(long regionId){
+    public int getLevelByRegionId(long regionId) {
         return prIntakeMapper.getLevelByRegionId(regionId);
     }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/QueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/QueryVo.java
index 4535b06..c6d47b1 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/QueryVo.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/QueryVo.java
@@ -4,6 +4,13 @@
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
+/**
+ * @author wuzeyu
+ * @date 2023/12/26 11:12
+ * @LastEditTime 2023/12/26 11:12
+ * @Description 鍙栨按鍙�
+ */
+
 @Data
 @EqualsAndHashCode(callSuper = false)
 @ToString(callSuper = true)
@@ -22,7 +29,8 @@
     public String blockName;
 
     @Schema(description = "鏄惁缁戝畾璁惧")
-    public String isBind;
+    //0鏈粦瀹�  1宸茬粦瀹�
+    public Integer isBinded;
 
     @Schema(description = "鍦板潃")
     public String address;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/DtoIntakeController.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/DtoIntakeController.java
index 451f3a5..05e545b 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/DtoIntakeController.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/DtoIntakeController.java
@@ -19,14 +19,14 @@
     public static final long serialVersionUID = 1L;
 
     /**
-     * 鍙栨按鍙g紪鍙�
+     * 鍙栨按鍙D
      */
     @Schema(description = "鍙栨按鍙D", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "鍙栨按鍙D涓嶈兘涓虹┖")
     private Long intakeId;
 
     /**
-     * 鎺у埗鍣ㄧ紪鍙�
+     * 鎺у埗鍣↖D
      */
     @Schema(description = "鎺у埗鍣↖D", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "鎺у埗鍣↖D涓嶈兘涓虹┖")
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerCtrl.java
index 1384dfa..d1324ff 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerCtrl.java
@@ -6,6 +6,8 @@
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.common.webUtil.ResultCodeMsg;
 import com.dy.pipIrrGlobal.pojoBa.BaClient;
+import com.dy.pipIrrGlobal.pojoPr.PrController;
+import com.dy.pipIrrGlobal.pojoPr.PrControllerTramp;
 import com.dy.pipIrrGlobal.pojoPr.PrIntakeController;
 import com.dy.pipIrrProject.controller.ControllerSv;
 import com.dy.pipIrrProject.intake.IntakeSv;
@@ -24,6 +26,8 @@
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
@@ -44,9 +48,15 @@
     private final ControllerSv controllerSv;
 
     /**
-     * 娣诲姞鍙栨按鍙�/鎺у埗鍣ㄦ崋缁戣褰�
-     *      鑻ュ彇姘村彛鎴栨帶鍒跺櫒涓嶅瓨鍦ㄩ渶鎻愮ず鐢ㄦ埛
-     *      鑻ュ彇姘村彛宸茬粡涓庢帶鍒跺櫒缁戝畾闇�鎻愮ず鐢ㄦ埛
+     * 鍙栨按鍙g粦瀹氭帶鍒跺櫒
+     * 1. 鎺ユ敹鍙栨按鍙D鍙婃祦娴帶鍒跺櫒ID锛屽苟楠岃瘉鍙栨按鍙e拰鎺у埗鍣ㄦ槸鍚﹀瓨鍦�
+     * 2. 鍒ゆ柇璇ユ帶鍒跺櫒鏄惁瀛樺湪鏈В缁戣褰曪紝濡傛灉瀛樺湪鎻愮ず鐢ㄦ埛璇ユ帶鍒跺櫒瀛樺湪鏈В缁戣褰�
+     * 3. 缁勮鎺у埗鍣ㄥ璞℃彃鍏ユ帶鍒跺櫒琛ㄤ腑
+     * 4. 娣诲姞缁戝畾璁板綍
+     * 5. 鍒犻櫎娴佹氮鎺у埗鍣紙鐗╃悊鍒犻櫎锛�
+     * @param po
+     * @param bindingResult
+     * @return
      */
     @Operation(summary = "娣诲姞缁戝畾璁板綍", description = "娣诲姞缁戝畾璁板綍")
     @ApiResponses(value = {
@@ -60,39 +70,70 @@
     @PostMapping(path = "bind", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> bind(@RequestBody @Valid DtoIntakeController po, BindingResult bindingResult){
+    public BaseResponse<Boolean> bind(@RequestBody @Valid DtoIntakeController po, BindingResult bindingResult) throws ParseException {
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
-        // 鏍规嵁缂栧彿鍒嗗埆鑾峰彇鍙栨按鍙c�佹帶鍒跺櫒鏈垹闄よ褰曟暟
-        Integer recIntke = Optional.ofNullable(intakeSv.getRecordCountOfIntake(po.getIntakeId())).orElse(0);
-        Integer recController = Optional.ofNullable(controllerSv.getRecordCountOfController(po.getControllerId())).orElse(0);
-        if(recIntke == 0 || recController == 0) {
+        // 鎺ユ敹鍙傛暟
+        Long intakeId = po.getIntakeId();
+        Long controllerId = po.getControllerId();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+
+        // 鏍规嵁缂栧彿鍒嗗埆鑾峰彇鍙栨按鍙h褰曟暟銆佹祦娴帶鍒跺櫒淇℃伅锛屽垽鏂彇姘村彛鍙婃帶鍒跺櫒鏄惁瀛樺湪
+        Integer recIntke = Optional.ofNullable(intakeSv.getRecordCountOfIntake(intakeId)).orElse(0);
+        PrControllerTramp prControllerTramp = intakeControllerSv.getTrampControllerInfo(controllerId);
+        //Map map_TrampController = Optional.ofNullable(intakeControllerSv.getTrampControllerInfo(controllerId)).orElse(new HashMap());
+        if(recIntke == 0 || prControllerTramp == null) {
             return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_OR_CONTROLLER_NO_EXIST.getMessage());
         }
 
-        Integer recordCount = Optional.ofNullable(intakeControllerSv.getBindRecordCount(po.getIntakeId(), po.getControllerId(), (byte)1)).orElse(0);
-        if(recordCount > 0) {
-            return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_HAS_BINDED_CONTROLLER.getMessage());
+        // 鏍规嵁鎺у埗鍣ㄧ紪鍙峰垽鏂鎺у埗鍣ㄦ槸鍚﹀瓨鍦ㄦ湭瑙g粦璁板綍
+        Integer recBinded = Optional.ofNullable(controllerSv.getBindedCount(controllerId)).orElse(0);
+        if(recBinded > 0) {
+            return BaseResponseUtils.buildFail(ProjectResultCode.CONTROLLER_BINDED.getMessage());
         }
 
-        PrIntakeController prIntakeController = DtoToPojo.INSTANCT.po2vo(po);
+        // 娣诲姞鎺у埗鍣ㄨ褰�
+        PrController prController = new PrController();
+        prController.setIntakeId(intakeId);
+        prController.setRtuAddr(prControllerTramp.getRtuAddr());
+        prController.setProtocol(prControllerTramp.getProtocol());
+        prController.setFindDt(prControllerTramp.getFindDt());
+        prController.setAddWays((byte)1);
+        prController.setOperator(operator);
         Date operateTime = new Date();
+        prController.setOperateDt(operateTime);
+        prController.setDeleted((byte)0);
+        Integer rec_addController = Optional.ofNullable(controllerSv.addController(prController)).orElse(0);
+        if(rec_addController == 0) {
+            return BaseResponseUtils.buildFail(ProjectResultCode.BIND_FAIL.getMessage());
+        }
+
+        // 娣诲姞缁戝畾璁板綍
+        PrIntakeController prIntakeController = DtoToPojo.INSTANCT.po2vo(po);
         prIntakeController.setOperatedt(operateTime);
         prIntakeController.setOperatetype((byte)1);
-
         Integer rec = Optional.ofNullable(intakeControllerSv.addRecord(prIntakeController)).orElse(0);
         if(rec == 0) {
             return BaseResponseUtils.buildFail(ProjectResultCode.BIND_FAIL.getMessage());
         }
+
+        // 鏍规嵁娴佹氮鎺у埗鍣ㄧ紪鍙峰垹闄ゆ祦娴帶鍒跺櫒璁板綍
+        intakeControllerSv.deleteTrampController(controllerId);
+
         return BaseResponseUtils.buildSuccess(true) ;
     }
 
     /**
-     * 娣诲姞鍙栨按鍙�/鎺у埗鍣ㄨВ缁戣褰�
-     * 1. 鍒ゆ柇鍙栨按鍙f槸鍚﹀瓨鍦�
-     * 2. 鍒ゆ柇鎺у埗鍣ㄦ槸鍚﹀瓨鍦�
-     * 3. 鍒ゆ柇鍙栨按鍙c�佹帶鍒跺櫒瑙g粦鍏崇郴鏄惁宸插瓨鍦�
+     * 鍙栨按鍙hВ缁戞帶鍒跺櫒
+     * 1. 鎺ユ敹鍙栨按鍙D鍙婃祦娴帶鍒跺櫒ID锛屽苟楠岃瘉鍙栨按鍙e拰鎺у埗鍣ㄦ槸鍚﹀瓨鍦�
+     * 2. 娣诲姞瑙g粦璁板綍
+     * 3. 鍒犻櫎鎺у埗鍣ㄥ閿�
+     * @param po
+     * @param bindingResult
+     * @return
      */
     @Operation(summary = "娣诲姞瑙g粦璁板綍", description = "娣诲姞瑙g粦璁板綍")
     @ApiResponses(value = {
@@ -118,20 +159,28 @@
             return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_OR_CONTROLLER_NO_EXIST.getMessage());
         }
 
-        Integer recordCount = Optional.ofNullable(intakeControllerSv.getBindRecordCount(po.getIntakeId(), po.getControllerId(), (byte)2)).orElse(0);
-        if(recordCount > 0) {
-            return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_CONTROLLER_HAS_UNBOUND.getMessage());
-        }
+        // 鍒ゆ柇鏈�鍚庢搷浣滆褰曟槸鍚︿负瑙g粦璁板綍
+        //Integer recordCount = Optional.ofNullable(intakeControllerSv.getBindRecordCount(po.getIntakeId(), po.getControllerId(), (byte)2)).orElse(0);
+        //if(recordCount > 0) {
+        //    return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_CONTROLLER_HAS_UNBOUND.getMessage());
+        //}
 
+        // 娣诲姞瑙g粦璁板綍
         PrIntakeController prIntakeController = DtoToPojo.INSTANCT.po2vo(po);
         Date operateTime = new Date();
         prIntakeController.setOperatedt(operateTime);
         prIntakeController.setOperatetype((byte)2);
-
         Integer rec = Optional.ofNullable(intakeControllerSv.addRecord(prIntakeController)).orElse(0);
         if(rec == 0) {
             return BaseResponseUtils.buildFail(ProjectResultCode.BIND_FAIL.getMessage());
         }
+
+        // 鍒犻櫎鎺у埗鍣ㄥ閿�
+        Integer rec_deleteIntakeId = Optional.ofNullable(controllerSv.deleteIntakeId(po.getControllerId())).orElse(0);
+        if(rec_deleteIntakeId == 0) {
+            return BaseResponseUtils.buildFail(ProjectResultCode.BIND_FAIL.getMessage());
+        }
+
         return BaseResponseUtils.buildSuccess(true) ;
     }
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerSv.java
index 42a8910..11928ca 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerSv.java
@@ -1,6 +1,8 @@
 package com.dy.pipIrrProject.intakeController;
 
+import com.dy.pipIrrGlobal.daoPr.PrControllerTrampMapper;
 import com.dy.pipIrrGlobal.daoPr.PrIntakeControllerMapper;
+import com.dy.pipIrrGlobal.pojoPr.PrControllerTramp;
 import com.dy.pipIrrGlobal.pojoPr.PrIntakeController;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +23,9 @@
 public class IntakeControllerSv {
     @Autowired
     private PrIntakeControllerMapper prIntakeControllerMapper;
+
+    @Autowired
+    private PrControllerTrampMapper prControllerTrampMapper;
 
     /**
      * 鏍规嵁鍙栨按鍙g紪鍙枫�佹帶鍒跺櫒缂栧彿銆佹搷浣滅被鍒幏鍙栬褰曟暟閲�
@@ -59,4 +64,31 @@
     List<Map<String, Object>> getBindsByControllerId(Long controllerId) {
         return prIntakeControllerMapper.getBindsByControllerId(controllerId);
     }
+
+    /**
+     * 鏍规嵁鎺у埗鍣ㄧ紪鍙疯幏鍙栨祦娴帶鍒跺櫒鍦板潃
+     * @param controllerId 娴佹氮鎺у埗鍣ㄧ紪鍙�
+     * @return 娴佹氮鎺у埗鍣ㄥ湴鍧�
+     */
+    //public String getTrampRtuAddr(Long controllerId) {
+    //    return prControllerTrampMapper.getTrampRtuAddr(controllerId);
+    //}
+
+    /**
+     * 鏍规嵁鎺у埗鍣ㄧ紪鍙疯幏鍙栨祦娴帶鍒跺櫒淇℃伅
+     * @param controllerId
+     * @return
+     */
+    public PrControllerTramp getTrampControllerInfo(Long controllerId) {
+        return prControllerTrampMapper.getTrampControllerInfo(controllerId);
+    }
+
+    /**
+     * 鏍规嵁娴佹氮鎺у埗鍣ㄧ紪鍙峰垹闄ゆ祦娴帶鍒跺櫒璁板綍
+     * @param controllerId
+     * @return
+     */
+    public Integer deleteTrampController(Long controllerId) {
+        return prControllerTrampMapper.deleteByPrimaryKey(controllerId);
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/result/ProjectResultCode.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/result/ProjectResultCode.java
index 95b9f3b..b2d3a86 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/result/ProjectResultCode.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/result/ProjectResultCode.java
@@ -28,6 +28,7 @@
     UPDATE_INTAKE(20003, "淇敼鍙栨按鍙f暟鎹け璐�"),
     PLEASE_INPUT_INTAKE_ID(20004, "鍙栨按鍙g紪鍙蜂笉涓虹┖"),
     DELETE_INTAKE_FAIL(20005, "鍙栨按鍙e垹闄ゅけ璐�"),
+    NO_BINDING_INTAKE(20006, "娌℃湁鏈粦瀹氱殑鍙栨按鍙�"),
 
     /**
      * 鎺у埗鍣�
@@ -46,6 +47,7 @@
     INTAKE_NO_RECORDS(40004, "璇ュ彇姘村彛鏃犵粦瀹氳褰�"),
     CONTROLLER_NO_RECORDS(40005, "璇ユ帶鍒跺櫒鏃犵粦瀹氳褰�"),
     INTAKE_OR_CONTROLLER_NO_EXIST(40006, "鍙栨按鍙f垨鎺у埗鍣ㄤ笉瀛樺湪"),
+    CONTROLLER_BINDED(40007, "璇ユ帶鍒跺櫒灏氭湭瑙g粦"),
 
     /**
      * 娴侀噺鐩戞祴绔�
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java
index 745991c..e31783a 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java
@@ -9,6 +9,7 @@
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.util.Constant;
 import com.dy.pipIrrGlobal.voSe.VoActiveCard;
+import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM;
 import com.dy.pipIrrSell.clientCard.CardStateENUM;
 import com.dy.pipIrrSell.clientCard.ClientCardSv;
 import com.dy.pipIrrSell.clientCard.LastOperateENUM;
@@ -262,7 +263,7 @@
         //String clientNum = "";
         Long clientId = 0L;
         Integer cardCost = po.getCardCost();
-        Double reissueAmount = po.getReissueAmount();
+        Float reissueAmount = po.getReissueAmount();
         Long paymentId = po.getPaymentId();
         String remarks = po.getRemarks();
         Long operator = po.getOperator();
@@ -304,7 +305,7 @@
         activeCard.setCardcost(cardCost);
         activeCard.setPaymentid(paymentId);
         activeCard.setReissueamount(reissueAmount);
-        activeCard.setOperatetype(OperateTypeENUM.REPLACE.getCode());
+        activeCard.setOperatetype(OperateTypeENUM.REISSUE.getCode());
         activeCard.setRemarks(remarks);
         activeCard.setOperator(operator);
         activeCard.setOperatedt(replaceTime);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/DtoActiveCard.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/DtoActiveCard.java
index b8b4e05..ab3451b 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/DtoActiveCard.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/DtoActiveCard.java
@@ -65,7 +65,7 @@
      */
     @Schema(description = "琛ュ崱閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @Min(value = 0, message="琛ュ崱閲戦涓嶈兘灏忎簬0")
-    private Double reissueAmount;
+    private Float reissueAmount;
 
     /**
      * 鏀粯鏂瑰紡缂栧彿
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/OperateTypeENUM.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/OperateTypeENUM.java
deleted file mode 100644
index a4012fb..0000000
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/OperateTypeENUM.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.dy.pipIrrSell.activeCard;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * @author ZhuBaoMin
- * @date 2023/12/8 10:56
- * @LastEditTime 2023/12/8 10:56
- * @Description 寮�鍗�/琛ュ崱绫诲瀷鏋氫妇
- */
-
-@Getter
-@AllArgsConstructor
-public enum OperateTypeENUM {
-    ACTIVE((byte)1, "寮�鍗�"),
-    REPLACE((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/cardOperate/CardOperateCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
new file mode 100644
index 0000000..13c1a20
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
@@ -0,0 +1,916 @@
+package com.dy.pipIrrSell.cardOperate;
+
+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.pojoBa.BaClient;
+import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
+import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
+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.pipIrrSell.cardOperate.converter.RechargeDtoMapper;
+import com.dy.pipIrrSell.cardOperate.dto.*;
+import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM;
+import com.dy.pipIrrSell.cardOperate.qo.*;
+import com.dy.pipIrrSell.clientCard.CardStateENUM;
+import com.dy.pipIrrSell.clientCard.ClientCardSv;
+import com.dy.pipIrrSell.clientCard.LastOperateENUM;
+import com.dy.pipIrrSell.result.SellResultCode;
+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 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.web.bind.annotation.*;
+
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-18 19:36
+ * @LastEditTime 2024-01-18 19:36
+ * @Description
+ */
+
+@Slf4j
+@Tag(name = "姘村崱鎿嶄綔绠$悊", description = "姘村崱鍚勭鎿嶄綔")
+@RestController
+@RequestMapping(path="card")
+@RequiredArgsConstructor
+public class CardOperateCtrl {
+    private final CardOperateSv cardOperateSv;
+    private final ClientCardSv clientCardSv;
+
+    /**
+     * 寮�鍗�
+     * @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 = "active", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add_active(@RequestBody @Valid DtoActiveCard po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        // 鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode
+        String areaCode = String.valueOf(cardOperateSv.getAreaCodeByNum(po.getClientNum()));
+
+        /**
+         * 鏍规嵁琛屾斂鍖哄垝涓诧紙areaCode锛夊湪姘村崱琛ㄤ腑閽堝姘村崱缂栧彿锛坈ardNum锛夎繘琛屾ā绯婃煡璇�
+         * 濡傛灉4浣嶉『搴忓彿宸茬粡杈惧埌鏈�澶у�硷紝鎻愮ず鐢ㄦ埛鑱旂郴绯荤粺绠$悊鍛�
+         * 濡傛灉4浣嶉『搴忓彿鏈揪鍒版渶澶у�硷紝鍒欏姞1
+         * cardNum涓烘柊鐨勫崱鍙�
+         */
+        String cardNum = Optional.ofNullable(cardOperateSv.getCardNumOfMax(areaCode)).orElse("");
+        if(cardNum != null && cardNum.trim().length() > 0) {
+            Integer number = Integer.parseInt(cardNum.substring(12));
+            number = number + 1;
+            if(number > 9999) {
+                return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_OVERRUN.getMessage());
+            }
+            cardNum = cardNum.substring(0, 12) + String.format("%04d", number);
+        } else {
+            cardNum = areaCode + "0001";
+        }
+
+        /**
+         * cardAddr         姘村崱鍦板潃锛堜粎浠呭啓鍏ワ紝鏃犱笟鍔★級
+         * clientNum        鍐滄埛缂栧彿
+         * cardCost         鍗$墖璐圭敤
+         * amount           鍏呭�奸噾棰�
+         * reissueAmount    琛ュ崱閲戦锛岃ˉ鍗℃椂浣跨敤
+         * paymentId        鏀粯鏂瑰紡缂栧彿
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         * activeTime       寮�鍗℃椂闂�
+         */
+        String cardAddr = po.getCardAddr();
+        String clientNum = po.getClientNum();
+        Integer cardCost = po.getCardCost();
+        Float amount = po.getAmount();
+        Long paymentId = po.getPaymentId();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+        Date activeTime = new Date();
+
+        /**
+         * 鏍规嵁鍐滄埛缂栧彿鑾峰彇鍐滄埛ID
+         */
+        Long clientId = cardOperateSv.getClientIdByNum(clientNum);
+
+        /**
+         * 娣诲姞鍐滄埛鍗¤褰�
+         */
+        SeClientCard seClientCard = new SeClientCard();
+        seClientCard.setCardaddr(cardAddr);
+        seClientCard.setCardnum(cardNum);
+        seClientCard.setClientid(clientId);
+        seClientCard.setMoney(0f);
+        seClientCard.setState(CardStateENUM.NORMAL.getCode());
+        seClientCard.setCreatedt(activeTime);
+        seClientCard.setLastoper(LastOperateENUM.ACTIVE.getCode());
+
+        Long cardId = Optional.ofNullable(clientCardSv.add(seClientCard)).orElse(0L) ;
+        if(cardId == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.ACTIVE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞寮�鍗¤褰�
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setCardCost(cardCost);
+        seCardOperate.setPaymentId(paymentId);
+        seCardOperate.setOperateType(OperateTypeENUM.ACTIVE.getCode());
+        seCardOperate.setRemarks(remarks);
+        seCardOperate.setOperator(operator);
+        seCardOperate.setOperateDt(activeTime);
+        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.ACTIVE_FAIL_WRITE_ACTIVE_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 濡傛灉鎿嶄綔浜哄憳寮�鍗℃椂杈撳叆浜嗗厖鍊奸噾棰濓紝鍒欏紑鍗″悗璋冪敤鍏呭�煎姛鑳�
+         */
+        po.setCardNum(cardNum);
+        if(amount != null && amount > 0) {
+            po.setClientId(clientId);
+            DtoRecharge dtoRecharge = RechargeDtoMapper.INSTANCT.po2vo(po);
+            dtoRecharge.setMoney(0f);
+            dtoRecharge.setGift(0f);
+            dtoRecharge.setPrice(0f);
+            BaseResponse<Boolean> job = cardOperateSv.addRecharge(dtoRecharge);
+            if(!job.getCode().equals("0001")) {
+                return BaseResponseUtils.buildFail(SellResultCode.ACTIVE_FAIL_RECHARGE_EXCEPTION.getMessage());
+            }
+        }
+
+        Map map = new HashMap();
+        map.put("projectCode", Constant.projectCode_ym);
+        map.put("cardNum", cardNum);
+        return BaseResponseUtils.buildSuccess(map) ;
+    }
+
+    /**
+     * 琛ュ崱
+     * @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 = "reissue", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add_reissue(@RequestBody @Valid DtoReissue po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        /**
+         * cardAddr         鏂扮殑姘村崱鍦板潃锛堜粎浠呭啓鍏ワ紝鏃犱笟鍔★級
+         * clientNum        鍐滄埛缂栧彿锛屽紑鏂板崱浣跨敤锛岄�氳繃鑰佸崱鍙疯幏鍙�
+         * cardNum          姘村崱缂栧彿锛屼紶鍏ョ殑鏄�佸崱鍙凤紝杩斿洖鐨勬槸鏂板崱鍙�
+         * moeny            浣欓锛屾寕澶辨椂浣跨敤
+         * cardCost         鍗$墖璐圭敤
+         * paymentId        鏀粯鏂瑰紡缂栧彿
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         */
+
+        String cardAddr = po.getCardAddr();
+        String clientNum = "";
+        String cardNum = po.getCardNum();
+        Float money = po.getMoney();
+        Integer cardCost = po.getCardCost();
+        Long paymentId = po.getPaymentId();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+
+        // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
+        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
+        if(stateName.length() == 0 || !stateName.equals("姝e父")) {
+            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        }
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if(map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        }
+        clientNum = map.get("clientNum").toString();
+
+        /**
+         * 娣诲姞鎸傚け璁板綍
+         */
+        DtoLoss dtoLoss = new DtoLoss();
+        dtoLoss.setCardNum(cardNum);
+        dtoLoss.setMoney(money);
+        dtoLoss.setRefund(0f);
+        dtoLoss.setRemarks(remarks);
+        dtoLoss.setOperator(operator);
+        BaseResponse<java.lang.Boolean> baseResponse_addLoss = this.add_loss(dtoLoss, null);
+
+        if(!baseResponse_addLoss.getCode().equals("0001")) {
+            return BaseResponseUtils.buildFail(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞寮�鍗¤褰�
+         */
+        DtoActiveCard dtoActiveCard = new DtoActiveCard();
+        dtoActiveCard.setCardAddr(cardAddr);
+        dtoActiveCard.setClientNum(clientNum);
+        dtoActiveCard.setCardCost(cardCost);
+        dtoActiveCard.setAmount(0f);
+        dtoActiveCard.setPaymentId(paymentId);
+        dtoActiveCard.setRemarks(remarks);
+        dtoActiveCard.setOperator(operator);
+        BaseResponse<java.lang.Boolean> baseResponse_addActive = add_active(dtoActiveCard, null);
+
+        if(!baseResponse_addActive.getCode().equals("0001")) {
+            return BaseResponseUtils.buildFail(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage());
+        }
+
+        String theContent = String.valueOf(baseResponse_addActive.getContent());
+        cardNum = theContent.substring(theContent.indexOf("=") + 1, theContent.indexOf(","));
+
+        Map map_response = new HashMap();
+        map_response.put("projectCode", Constant.projectCode_ym);
+        map_response.put("cardNum", cardNum);
+        return BaseResponseUtils.buildSuccess(map_response) ;
+    }
+
+    /**
+     * 鍏呭��
+     * @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 = "recharge", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add_recharge(@RequestBody @Valid DtoRecharge po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+        return cardOperateSv.addRecharge(po);
+    }
+
+    /**
+     * 閿�鍗�
+     * @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 = "cancel", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add_cancel(@RequestBody @Valid DtoCancel po, 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());
+        }
+
+        /**
+         * cardId           姘村崱缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛屼慨鏀瑰啘鎴峰崱浣跨敤锛�
+         * clientId         鍐滄埛缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
+         * cardNum          姘村崱缂栧彿
+         * refund           閫�娆鹃噾棰�
+         * refundType       閫�娆炬柟寮�
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         * cancelTime       娉ㄩ攢鏃堕棿
+         */
+        Long cardId = 0L;
+        Long clientId = 0L;
+        String cardNum = po.getCardNum();
+        Float refund = po.getRefund();
+        Byte refundType = po.getRefundType();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+        Date cancelTime = new Date();
+
+        // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
+        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
+        if(stateName.length() == 0 || !stateName.equals("姝e父")) {
+            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        }
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if(map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        }
+        cardId = Long.parseLong(map.get("cardId").toString());
+        clientId = Long.parseLong(map.get("clientId").toString());
+
+        /**
+         * 淇敼鍐滄埛鍗′俊鎭細
+         *      娉ㄩ攢鏃堕棿
+         *      鏈�鍚庢搷浣滅被鍨�-4
+         */
+        SeClientCard seClientCard = new SeClientCard();
+        seClientCard.setId(cardId);
+        seClientCard.setCanceldt(cancelTime);
+        seClientCard.setMoney(0f);
+        seClientCard.setState(CardStateENUM.CANCELLED.getCode());
+        seClientCard.setLastoper(LastOperateENUM.CANCEL.getCode());
+        Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
+        if(rec_updateClientCard == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.CANCEL_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞娉ㄩ攢璁板綍
+         * 鏀粯鏂瑰紡涓虹幇閲�
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setTradeAmount(-refund);
+        seCardOperate.setPaymentId(1L);
+        seCardOperate.setOperateType(OperateTypeENUM.CANCEL.getCode());
+        seCardOperate.setRemarks(remarks);
+        seCardOperate.setOperator(operator);
+        seCardOperate.setOperateDt(cancelTime);
+
+        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.CANCEL_FAIL_WRITE_CANCELL_ERROR.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 = "loss", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add_loss(@RequestBody @Valid DtoLoss po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        /**
+         * cardId           姘村崱缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
+         * clientId         鍐滄埛缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
+         * cardNum          姘村崱缂栧彿
+         * money            浣欓
+         * refund           閫�娆鹃噾棰�
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         * lossTime         鎸傚け鏃堕棿
+         */
+        Long cardId = 0L;
+        Long clientId = 0L;
+        String cardNum = po.getCardNum();
+        Float money = po.getMoney();
+        Float refund = po.getRefund();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+        Date lossTime = new Date();
+
+        // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
+        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
+        if(stateName.length() == 0 || !stateName.equals("姝e父")) {
+            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        }
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if(map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        }
+        cardId = Long.parseLong(map.get("cardId").toString());
+        clientId = Long.parseLong(map.get("clientId").toString());
+
+        /**
+         * 淇敼鍐滄埛鍗′俊鎭細
+         *      鎸傚け鏃堕棿
+         *      鏈�鍚庢搷浣滅被鍨�-4
+         */
+        SeClientCard seClientCard = new SeClientCard();
+        seClientCard.setId(cardId);
+        seClientCard.setMoney(money);
+        seClientCard.setLossdtdt(lossTime);
+        seClientCard.setState(CardStateENUM.LOSS.getCode());
+        seClientCard.setLastoper(LastOperateENUM.LOSS.getCode());
+        Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
+        if(rec_updateClientCard == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.LOSS_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞鎸傚け璁板綍
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(money);
+        seCardOperate.setTradeAmount(-refund);
+        seCardOperate.setOperateType(OperateTypeENUM.LOSS.getCode());
+        seCardOperate.setRemarks(remarks);
+        seCardOperate.setOperator(operator);
+        seCardOperate.setOperateDt(lossTime);
+        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.LOSS_FAIL_WRITE_LOSS_ERROR.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 = "reversal", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add_reversal(@RequestBody @Valid DtoReversal po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        /**
+         * cardId           姘村崱缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛屼慨鏀瑰啘鎴峰崱浣跨敤锛�
+         * clientId         鍐滄埛缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
+         * cardNum          姘村崱缂栧彿
+         * cardBalance      鍗$墖浣欓
+         * systemBalance    绯荤粺浣欓
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         * reversalTime     鍐叉鏃堕棿
+         */
+        Long cardId = 0L;
+        Long clientId = 0L;
+        String cardNum = po.getCardNum();
+        Float cardBalance = po.getCardBalance();
+        Float systemBalance = po.getSystemBalance();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+        Date reversalTime = new Date();
+
+        // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
+        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
+        if(stateName.length() == 0 || !stateName.equals("姝e父")) {
+            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        }
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if(map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        }
+        cardId = Long.parseLong(map.get("cardId").toString());
+        clientId = Long.parseLong(map.get("clientId").toString());
+
+        /**
+         * 淇敼鍐滄埛鍗′俊鎭細
+         *      鎸傚け鏃堕棿
+         *      鏈�鍚庢搷浣滅被鍨�-4
+         */
+        SeClientCard seClientCard = new SeClientCard();
+        seClientCard.setId(cardId);
+        seClientCard.setReversaldt(reversalTime);
+        seClientCard.setMoney(cardBalance);
+        seClientCard.setLastoper(LastOperateENUM.REVERSAL.getCode());
+        Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
+        if(rec_updateClientCard == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞鍐叉璁板綍
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(cardBalance);
+        seCardOperate.setSystemBalance(systemBalance);
+        seCardOperate.setOperateType(OperateTypeENUM.REVERSAL.getCode());
+        seCardOperate.setRemarks(remarks);
+        seCardOperate.setOperator(operator);
+        seCardOperate.setOperateDt(reversalTime);
+        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.REVERSAL_FAIL_WRITE_REVERSAL_ERROR.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 = "refund", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add_refund(@RequestBody @Valid DtoRefund po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        /**
+         * cardId           姘村崱缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛屼慨鏀瑰啘鎴峰崱浣跨敤锛�
+         * clientId         鍐滄埛缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
+         * cardNum          姘村崱缂栧彿
+         * money            鍗$墖浣欓
+         * refund           琛ユ墸浣欓
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         * refundTime       琛ユ墸鏃堕棿
+         */
+        Long cardId = 0L;
+        Long clientId = 0L;
+        String cardNum = po.getCardNum();
+        Float money = po.getMoney();
+        Float refund = po.getRefund();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+        Date refundTime = new Date();
+
+        // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
+        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
+        if(stateName.length() == 0 || !stateName.equals("姝e父")) {
+            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        }
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if(map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        }
+        cardId = Long.parseLong(map.get("cardId").toString());
+        clientId = Long.parseLong(map.get("clientId").toString());
+
+        /**
+         * 淇敼鍐滄埛鍗′俊鎭細
+         *      鎸傚け鏃堕棿
+         *      鏈�鍚庢搷浣滅被鍨�-4
+         */
+        SeClientCard seClientCard = new SeClientCard();
+        seClientCard.setId(cardId);
+        seClientCard.setRefunddt(refundTime);
+        seClientCard.setMoney(money + refund);
+        seClientCard.setLastoper(LastOperateENUM.REFUND.getCode());
+        Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
+        if(rec_updateClientCard == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞琛ユ墸璁板綍
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(money);
+        seCardOperate.setNoTradeAmount(refund);
+        seCardOperate.setOperateType(OperateTypeENUM.REFUND.getCode());
+        seCardOperate.setRemarks(remarks);
+        seCardOperate.setOperator(operator);
+        seCardOperate.setOperateDt(refundTime);
+        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.REFUND_FAIL_WRITE_REFUND_ERROR.getMessage());
+        }
+
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
+
+    /**
+     * 瑙i攣
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @Operation(summary = "娣诲姞瑙i攣璁板綍", description = "娣诲姞瑙i攣璁板綍")
+    @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 = "unlock", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add_unlock(@RequestBody @Valid DtoUnlock po, 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());
+        }
+
+        /**
+         * cardId           姘村崱缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardAddr鍙嶆煡锛屼慨鏀瑰啘鎴峰崱浣跨敤锛�
+         * clientId         鍐滄埛缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
+         * cardNum          姘村崱鍦板潃
+         * money            浣欓
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         * unlockTime       瑙i攣鏃堕棿
+         */
+        Long cardId = 0L;
+        Long clientId = 0L;
+        String cardNum = po.getCardNum();
+        Float money = po.getMoney();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+        Date unlockTime = new Date();
+
+        // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
+        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
+        if(stateName.length() == 0 || !stateName.equals("宸叉寕澶�")) {
+            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        }
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if(map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        }
+        cardId = Long.parseLong(map.get("cardId").toString());
+        clientId = Long.parseLong(map.get("clientId").toString());
+
+        /**
+         * 淇敼鍐滄埛鍗′俊鎭細
+         *      鎸傚け鏃堕棿
+         *      鏈�鍚庢搷浣滅被鍨�-4
+         */
+        SeClientCard seClientCard = new SeClientCard();
+        seClientCard.setId(cardId);
+        seClientCard.setUnlockdt(unlockTime);
+        seClientCard.setMoney(money);
+        seClientCard.setState(CardStateENUM.NORMAL.getCode());
+        seClientCard.setLastoper(LastOperateENUM.UNLOCK.getCode());
+        Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
+        if(rec_updateClientCard == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.UNLOCK_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞瑙i攣璁板綍
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(money);
+        seCardOperate.setOperateType(OperateTypeENUM.UNLOCK.getCode());
+        seCardOperate.setRemarks(remarks);
+        seCardOperate.setOperator(operator);
+        seCardOperate.setOperateDt(unlockTime);
+        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.UNLOCK_FAIL_WRITE_UNLOCK_ERROR.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 = VoRecharge.class))}
+            )
+    })
+    @GetMapping(path = "/getRecharges")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoRecharge>>> get(QoRecharge vo){
+        try {
+            QueryResultVo<List<VoRecharge>> res = cardOperateSv.getRecharges(vo);
+            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 = BaClient.class))}
+            )
+    })
+    @GetMapping(path = "getTransactions")
+    @SsoAop()
+    public BaseResponse<Map> getOperates(QoTransaction vo){
+        try {
+            Map res = cardOperateSv.getTransactions(vo);
+            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 = 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
+     */
+    @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 = "/getActiveCards")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoActiveCardNew>>> getActiveCards(QoActiveCard vo){
+        try {
+            QueryResultVo<List<VoActiveCardNew>> res = cardOperateSv.getActiveCards(vo);
+            if(res.itemTotal == 0) {
+                return BaseResponseUtils.buildFail(SellResultCode.No_ActiveCards.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 = "/getReissueCards")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoReissueCard>>> getReissueCards(QoReissueCard vo){
+        try {
+            QueryResultVo<List<VoReissueCard>> res = cardOperateSv.getReissueCards(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()) ;
+        }
+    }
+
+}
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
new file mode 100644
index 0000000..cd1518f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java
@@ -0,0 +1,473 @@
+package com.dy.pipIrrSell.cardOperate;
+
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper;
+import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
+import com.dy.pipIrrGlobal.daoSe.SeClientMapper;
+import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
+import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
+import com.dy.pipIrrGlobal.voSe.*;
+import com.dy.pipIrrSell.cardOperate.dto.DtoRecharge;
+import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM;
+import com.dy.pipIrrSell.cardOperate.qo.*;
+import com.dy.pipIrrSell.clientCard.ClientCardSv;
+import com.dy.pipIrrSell.clientCard.LastOperateENUM;
+import com.dy.pipIrrSell.result.SellResultCode;
+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.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-18 19:36
+ * @LastEditTime 2024-01-18 19:36
+ * @Description
+ */
+
+@Slf4j
+@Service
+public class CardOperateSv {
+    @Autowired
+    private SeCardOperateMapper seCardOperateMapper;
+
+    @Autowired
+    private SeClientCardMapper seClientCardMapper;
+
+    @Autowired
+    private SeClientMapper seClientMapper;
+
+    @Autowired
+    private ClientCardSv clientCardSv;
+
+
+    /**
+     * 娣诲姞寮�鍗¤褰�
+     * @param po 姘村崱鎿嶄綔瀵硅薄
+     * @return 寮�鍗¤褰曚富閿�
+     */
+    public Long activeCard(SeCardOperate po) {
+        seCardOperateMapper.insert(po);
+        return po.getId();
+    }
+
+    /**
+     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇5绾ц鏀垮尯鍒掍唬鐮侊紝寮�鍗′娇鐢�
+     * @param clientNum 鍐滄埛缂栧彿
+     * @return 5绾ц鏀垮尯鍒掍唬鐮�
+     */
+    public Long getAreaCodeByNum(String clientNum) {
+        return seClientMapper.getAreaCodeByNum(clientNum);
+    }
+
+    /**
+     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode锛岃ˉ鍗¤繃绋嬩腑寮�鏂板崱浣跨敤
+     * @param clientId
+     * @return
+     */
+    public Long getAreaCodeById(Long clientId) {
+        return seClientMapper.getAreaCodeById(clientId);
+    }
+    /**
+     * 鏍规嵁琛屾斂鍖哄垝涓叉ā鍧楁煡璇㈡按鍗$紪鍙凤紝寮�鍗′娇鐢�
+     * @param areaCode
+     * @return
+     */
+    String getCardNumOfMax(String areaCode) {
+        return seClientCardMapper.getCardNumOfMax(areaCode);
+    }
+
+    /**
+     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇鍐滄埛ID锛屽紑鍗′娇鐢�
+     * @param clientNum
+     * @return
+     */
+    public Long getClientIdByNum(String clientNum) {
+        return seClientMapper.getClientIdByNum(clientNum);
+    }
+
+    /**
+     * 娣诲姞姘村崱鎿嶄綔瀵硅薄锛屽悇鎿嶄綔閮戒娇鐢�
+     * @param po 姘村崱鎿嶄綔瀵硅薄
+     * @return 鎿嶄綔璁板綍涓婚敭
+     */
+    public Long add(SeCardOperate po) {
+        seCardOperateMapper.insert(po);
+        return po.getId();
+    }
+
+    /**
+     * 娣诲姞鍏呭�艰褰�
+     * 淇敼鍐滄埛淇℃伅銆佹坊鍔犲厖鍊艰褰�
+     * @param po
+     * @return
+     */
+    public BaseResponse<Boolean> addRecharge(DtoRecharge po){
+        /**
+         * cardId           姘村崱缂栧彿锛堜緷鎹按鍗$紪鍙疯幏鍙栵級
+         * clientId         鍐滄埛缂栧彿锛堜緷鎹按鍗$紪鍙疯幏鍙栵級
+         * cardNum          姘村崱缂栧彿
+         * money            鍗$墖浣欓
+         * amount           鍏呭�奸噾棰�
+         * gift             璧犻�侀噾棰�
+         * afterRecharge    鍏呭�煎悗浣欓
+         * paymentId        鏀粯鏂瑰紡缂栧彿
+         * price            姘翠环
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         * rechargeTime     鍏呭�兼椂闂�
+         */
+        Long cardId = 0L;
+        Long clientId = 0L;
+        String cardNum = po.getCardNum();
+        Float money = po.getMoney();
+        Float amount = po.getAmount();
+        Float gift = po.getGift();
+        Float afterRecharge = money + amount + gift;
+        Long paymentId = po.getPaymentId();
+        Float price = po.getPrice();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+        Date rechargeTime = new Date();
+
+
+        // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
+        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
+        if(stateName.length() == 0 || !stateName.equals("姝e父")) {
+            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        }
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if(map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        }
+        cardId = Long.parseLong(map.get("cardId").toString());
+        clientId = Long.parseLong(map.get("clientId").toString());
+
+        /**
+         * 淇敼鍐滄埛鍗′俊鎭細
+         *      琛ュ崱鏃堕棿
+         *      鏈�鍚庢搷浣滅被鍨�-2
+         */
+        SeClientCard seClientCard = new SeClientCard();
+        seClientCard.setId(cardId);
+        seClientCard.setMoney(afterRecharge);
+        seClientCard.setRechargedt(rechargeTime);
+        seClientCard.setLastoper(LastOperateENUM.RECHARGE.getCode ());
+        Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
+        if(rec_updateClientCard == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞鍏呭�艰褰�
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(money);
+        seCardOperate.setTradeAmount(amount);
+        seCardOperate.setGift(gift);
+        seCardOperate.setOperateType(OperateTypeENUM.RECHARGE.getCode());
+        seCardOperate.setPaymentId(paymentId);
+        seCardOperate.setPrice(price);
+        seCardOperate.setRemarks(remarks);
+        seCardOperate.setOperator(operator);
+        seCardOperate.setOperateDt(rechargeTime);
+
+        seCardOperateMapper.insert(seCardOperate);
+        Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage());
+        }
+
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
+
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鍏呭�艰褰�
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoRecharge>> getRecharges(QoRecharge queryVo) {
+        //瀹屽杽鏌ヨ鍏呭�艰褰曠殑璧锋鏃堕棿
+        String rechargeTimeStart = queryVo.rechargeTimeStart;
+        String rechargeTimeStop = queryVo.rechargeTimeStop;
+        if(rechargeTimeStart != null) {
+            rechargeTimeStart = rechargeTimeStart + " 00:00:00";
+            queryVo.setRechargeTimeStart(rechargeTimeStart);
+        }
+        if(rechargeTimeStop != null) {
+            rechargeTimeStop = rechargeTimeStop + " 23:59:59";
+            queryVo.setRechargeTimeStop(rechargeTimeStop);
+        }
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        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.calculateAndSet(itemTotal, params);
+        rsVo.obj = seCardOperateMapper.getRecharges(params);
+        return rsVo ;
+    }
+
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍
+     * @param vo
+     * @return
+     */
+    public Map getTransactions(QoTransaction vo){
+        // 琛ラ綈鏌ヨ鏃堕棿
+        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) ;
+
+        // 鑾峰彇姹囨�荤殑璐按閲戦銆佽喘鍗¢噾棰�
+        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 = seCardOperateMapper.getTransactionRecordCount(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<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("records", map_record);
+        map_result.put("paymentSums", array_paymentSums);
+
+        return map_result;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇寮�鍗¤褰�
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoActiveCardNew>> getActiveCards(QoActiveCard queryVo) {
+        //瀹屽杽鏌ヨ鍏呭�艰褰曠殑璧锋鏃堕棿
+        String activeTimeStart = queryVo.activeTimeStart;
+        String activeTimeStop = queryVo.activeTimeStop;
+        if(activeTimeStart != null) {
+            activeTimeStart = activeTimeStart + " 00:00:00";
+            queryVo.setActiveTimeStart(activeTimeStart);
+        }
+        if(activeTimeStop != null) {
+            activeTimeStop = activeTimeStop + " 23:59:59";
+            queryVo.setActiveTimeStop(activeTimeStop);
+        }
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        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);
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = seCardOperateMapper.getActiveCards(params);
+        return rsVo ;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇琛ュ崱璁板綍
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoReissueCard>> getReissueCards(QoReissueCard queryVo) {
+        //瀹屽杽鏌ヨ鍏呭�艰褰曠殑璧锋鏃堕棿
+        String reissueCardTimeStart = queryVo.reissueCardTimeStart;
+        String reissueCardTimeStop = queryVo.reissueCardTimeStop;
+        if(reissueCardTimeStart != null) {
+            reissueCardTimeStart = reissueCardTimeStart + " 00:00:00";
+            queryVo.setReissueCardTimeStart(reissueCardTimeStart);
+        }
+        if(reissueCardTimeStop != null) {
+            reissueCardTimeStop = reissueCardTimeStop + " 23:59:59";
+            queryVo.setReissueCardTimeStop(reissueCardTimeStop);
+        }
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        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.calculateAndSet(itemTotal, params);
+        rsVo.obj = seCardOperateMapper.getReissueCards(params);
+        return rsVo ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/converter/RechargeDtoMapper.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/converter/RechargeDtoMapper.java
new file mode 100644
index 0000000..fb35ed1
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/converter/RechargeDtoMapper.java
@@ -0,0 +1,26 @@
+package com.dy.pipIrrSell.cardOperate.converter;
+
+import com.dy.pipIrrSell.cardOperate.dto.DtoActiveCard;
+import com.dy.pipIrrSell.cardOperate.dto.DtoRecharge;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-19 9:41
+ * @LastEditTime 2024-01-19 9:41
+ * @Description
+ */
+
+@Mapper
+public interface RechargeDtoMapper {
+    RechargeDtoMapper INSTANCT = Mappers.getMapper(RechargeDtoMapper.class);
+
+    @Mapping(target = "cardNum", source = "cardNum")
+    @Mapping(target = "amount", source = "amount")
+    @Mapping(target = "paymentId", source = "paymentId")
+    @Mapping(target = "remarks", source = "remarks")
+    @Mapping(target = "operator", source = "operator")
+    DtoRecharge po2vo(DtoActiveCard po);
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoActiveCard.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoActiveCard.java
new file mode 100644
index 0000000..2be38ca
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoActiveCard.java
@@ -0,0 +1,89 @@
+package com.dy.pipIrrSell.cardOperate.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-18 19:44
+ * @LastEditTime 2024-01-18 19:44
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "寮�鍗′紶鍏ュ璞�")
+public class DtoActiveCard {
+    public static final long serialVersionUID = 202401181945001L;
+    /**
+     * 姘村崱鍦板潃锛屼粎淇濆瓨锛屾棤涓氬姟
+     */
+    @Schema(description = "姘村崱鍦板潃", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank(message = "姘村崱鍦板潃涓嶈兘涓虹┖")
+    private String cardAddr;
+
+    /**
+     * 鍐滄埛缂栧彿锛屽紑鍗′娇鐢�
+     */
+    @Schema(description = "鍐滄埛缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String clientNum;
+
+    /**
+     * 鍐滄埛ID锛堜富閿級锛屼笉鏄紑鍗℃帴鍙d紶鍏ワ紝鐢卞啘鎴风紪鍙疯幏寰楋紝淇濆瓨寮�鍗¤褰曞拰鍏呭�艰褰曢兘闇�瑕�
+     */
+    @Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long clientId;
+
+    /**
+     * 姘村崱缂栧彿锛屼笉鏄紑鍗℃帴鍙d紶鍏ワ紝鐢卞啘鎴风紪鍙疯幏寰楋紝鍏呭�奸渶瑕�
+     */
+    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String cardNum;
+
+    /**
+     * 鍗$墖璐圭敤
+     */
+    @Schema(description = "鍗$墖璐圭敤", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鍗$墖璐圭敤蹇呴』涓哄ぇ浜�0鐨勬暣鏁�")
+    private Integer cardCost;
+
+    /**
+     * 鍏呭�奸噾棰�
+     */
+    @Schema(description = "鍏呭�奸噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="鍏呭�奸噾棰濅笉鑳藉皬浜�0")
+    private Float amount;
+
+    /**
+     * 琛ュ崱閲戦
+     */
+    @Schema(description = "琛ュ崱閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="琛ュ崱閲戦涓嶈兘灏忎簬0")
+    private Double reissueAmount;
+
+    /**
+     * 鏀粯鏂瑰紡缂栧彿
+     */
+    @Schema(description = "鏀粯鏂瑰紡缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鏀粯鏂瑰紡缂栧彿蹇呴』涓哄ぇ浜�0鐨勬暣鏁�")
+    private Long paymentId;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoCancel.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoCancel.java
new file mode 100644
index 0000000..250b1e1
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoCancel.java
@@ -0,0 +1,64 @@
+package com.dy.pipIrrSell.cardOperate.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-19 10:08
+ * @LastEditTime 2024-01-19 10:08
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "娉ㄩ攢浼犲叆瀵硅薄")
+public class DtoCancel {
+    public static final long serialVersionUID = 202401191009001L;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank
+    private String cardNum;
+
+    /**
+     * 鍐滄埛缂栧彿
+     */
+    //@Schema(description = "鍐滄埛缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    //private Long clientId;
+
+    /**
+     * 閫�娆鹃噾棰�
+     */
+    @Schema(description = "閫�娆鹃噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="閫�娆鹃噾棰濅笉鑳藉皬浜�0")
+    private Float refund;
+
+    /**
+     * 閫�娆炬柟寮�;1-鐜伴噾
+     */
+    @Schema(description = "閫�娆炬柟寮�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "閫�娆炬柟寮忓繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Byte refundType;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoLoss.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoLoss.java
new file mode 100644
index 0000000..60008b7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoLoss.java
@@ -0,0 +1,58 @@
+package com.dy.pipIrrSell.cardOperate.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-19 10:32
+ * @LastEditTime 2024-01-19 10:32
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鎸傚け浼犲叆瀵硅薄")
+public class DtoLoss {
+    public static final long serialVersionUID = 202401191033001L;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank(message = "姘村崱缂栧彿涓嶈兘涓虹┖")
+    private String cardNum;
+
+    /**
+     * 浣欓
+     */
+    @Schema(description = "浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="浣欓涓嶈兘灏忎簬0")
+    private Float money;
+
+    /**
+     * 閫�娆鹃噾棰�
+     */
+    @Schema(description = "閫�娆鹃噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="閫�娆鹃噾棰濅笉鑳藉皬浜�0")
+    private Float refund;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoRecharge.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoRecharge.java
new file mode 100644
index 0000000..d1e4f28
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoRecharge.java
@@ -0,0 +1,84 @@
+package com.dy.pipIrrSell.cardOperate.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-19 9:06
+ * @LastEditTime 2024-01-19 9:06
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鍏呭�间紶鍏ュ璞�")
+public class DtoRecharge {
+    public static final long serialVersionUID = 202401190907001L;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank(message = "姘村崱缂栧彿涓嶈兘涓虹┖")
+    private String cardNum;
+
+    /**
+     * 鍐滄埛ID锛屼笉鏄厖鍊兼帴鍙d紶鍏ワ紝鐢卞紑鍗″璞′紶鍏ワ紝淇濆瓨鍏呭�艰褰曢渶瑕�
+     */
+    @Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long clientId;
+
+    /**
+     * 鍗$墖浣欓
+     */
+    @Schema(description = "鍗$墖浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="鍗$墖浣欓涓嶈兘灏忎簬0")
+    private Float money;
+
+    /**
+     * 鍏呭�奸噾棰�
+     */
+    @Schema(description = "鍏呭�奸噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="鍏呭�奸噾棰濅笉鑳藉皬浜�0")
+    private Float amount;
+
+    /**
+     * 璧犻�侀噾棰�
+     */
+    @Schema(description = "璧犻�侀噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="璧犻�侀噾棰濅笉鑳藉皬浜�0")
+    private Float gift;
+
+    /**
+     * 浠樻鏂瑰紡缂栧彿
+     */
+    @Schema(description = "浠樻鏂瑰紡缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long paymentId;
+
+    /**
+     * 姘翠环
+     */
+    @Schema(description = "姘翠环", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="姘翠环涓嶈兘灏忎簬0")
+    private Float price;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoRefund.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoRefund.java
new file mode 100644
index 0000000..be52da2
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoRefund.java
@@ -0,0 +1,58 @@
+package com.dy.pipIrrSell.cardOperate.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-19 18:35
+ * @LastEditTime 2024-01-19 18:35
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "琛ユ墸浼犲叆瀵硅薄")
+public class DtoRefund {
+    public static final long serialVersionUID = 202401191836001L;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank(message = "姘村崱缂栧彿涓嶈兘涓虹┖")
+    private String cardNum;
+
+    /**
+     * 鍗$墖浣欓
+     */
+    @Schema(description = "鍗$墖浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="鍗$墖浣欓涓嶈兘灏忎簬0")
+    private Float money;
+
+    /**
+     * 琛ュ崱閲戦
+     */
+    @Schema(description = "琛ュ崱閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="琛ュ崱閲戦涓嶈兘灏忎簬0")
+    private Float refund;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoReissue.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoReissue.java
new file mode 100644
index 0000000..eb52aa5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoReissue.java
@@ -0,0 +1,89 @@
+package com.dy.pipIrrSell.cardOperate.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-19 20:43
+ * @LastEditTime 2024-01-19 20:43
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "琛ュ崱浼犲叆瀵硅薄")
+public class DtoReissue {
+    public static final long serialVersionUID = 202401192044001L;
+    /**
+     * 姘村崱鍦板潃锛屼粎淇濆瓨锛屾棤涓氬姟
+     */
+    @Schema(description = "姘村崱鍦板潃", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank(message = "姘村崱鍦板潃涓嶈兘涓虹┖")
+    private String cardAddr;
+
+    ///**
+    // * 鍐滄埛缂栧彿锛屽紑鍗′娇鐢�
+    // */
+    //@Schema(description = "鍐滄埛缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    //private String clientNum;
+
+    /**
+     * 鍐滄埛ID锛堜富閿級锛屼笉鏄紑鍗℃帴鍙d紶鍏ワ紝鐢卞啘鎴风紪鍙疯幏寰楋紝淇濆瓨寮�鍗¤褰曞拰鍏呭�艰褰曢兘闇�瑕�
+     */
+    //@Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    //private Long clientId;
+
+    /**
+     * 姘村崱缂栧彿锛屼笉鏄紑鍗℃帴鍙d紶鍏ワ紝鐢卞啘鎴风紪鍙疯幏寰楋紝鍏呭�奸渶瑕�
+     */
+    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String cardNum;
+
+    /**
+     * 閲戦
+     */
+    @Schema(description = "閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="閲戦涓嶈兘灏忎簬0")
+    private Float money;
+
+    /**
+     * 鍗$墖璐圭敤
+     */
+    @Schema(description = "鍗$墖璐圭敤", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鍗$墖璐圭敤蹇呴』涓哄ぇ浜�0鐨勬暣鏁�")
+    private Integer cardCost;
+
+    /**
+     * 琛ュ崱閲戦锛屽紑鍗℃椂鍏呭�肩敤
+     */
+    //@Schema(description = "琛ュ崱閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    //@Min(value = 0, message="琛ュ崱閲戦涓嶈兘灏忎簬0")
+    //private Float reissueAmount;
+
+    /**
+     * 鏀粯鏂瑰紡缂栧彿
+     */
+    @Schema(description = "鏀粯鏂瑰紡缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鏀粯鏂瑰紡缂栧彿蹇呴』涓哄ぇ浜�0鐨勬暣鏁�")
+    private Long paymentId;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoReversal.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoReversal.java
new file mode 100644
index 0000000..1fde2fc
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoReversal.java
@@ -0,0 +1,64 @@
+package com.dy.pipIrrSell.cardOperate.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-19 13:36
+ * @LastEditTime 2024-01-19 13:36
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鍐叉浼犲叆瀵硅薄")
+public class DtoReversal {
+    public static final long serialVersionUID = 202401191337001L;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank(message = "姘村崱缂栧彿涓嶈兘涓虹┖")
+    private String cardNum;
+
+    /**
+     * 鍐滄埛缂栧彿
+     */
+    //@Schema(description = "鍐滄埛缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    //private String clientNum;
+
+    /**
+     * 鍗$墖浣欓
+     */
+    @Schema(description = "鍗$墖浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="鍗$墖浣欓涓嶈兘灏忎簬0")
+    private Float cardBalance;
+
+    /**
+     * 绯荤粺浣欓
+     */
+    @Schema(description = "绯荤粺浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="绯荤粺浣欓涓嶈兘灏忎簬0")
+    private Float systemBalance;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoUnlock.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoUnlock.java
new file mode 100644
index 0000000..8c849c0
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoUnlock.java
@@ -0,0 +1,57 @@
+package com.dy.pipIrrSell.cardOperate.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-19 20:18
+ * @LastEditTime 2024-01-19 20:18
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "瑙i攣浼犲叆瀵硅薄")
+public class DtoUnlock {
+    public static final long serialVersionUID = 202401192019001L;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank(message = "姘村崱缂栧彿涓嶈兘涓虹┖")
+    private String cardNum;
+
+    /**
+     * 鍐滄埛缂栧彿
+     */
+    @Schema(description = "鍐滄埛缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String clientNum;
+
+    /**
+     * 浣欓
+     */
+    @Schema(description = "浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="浣欓涓嶈兘灏忎簬0")
+    private Float money;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/enums/OperateTypeENUM.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/enums/OperateTypeENUM.java
new file mode 100644
index 0000000..f584ab5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/enums/OperateTypeENUM.java
@@ -0,0 +1,28 @@
+package com.dy.pipIrrSell.cardOperate.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023/12/8 10:56
+ * @LastEditTime 2023/12/8 10:56
+ * @Description 寮�鍗�/琛ュ崱绫诲瀷鏋氫妇
+ */
+
+@Getter
+@AllArgsConstructor
+public enum OperateTypeENUM {
+    ACTIVE((byte)1, "寮�鍗�"),
+    RECHARGE((byte)2, "鍏呭��"),
+    CANCEL((byte)3, "閿�鍗�"),
+    REISSUE((byte)4, "琛ュ崱"),
+    REFUND((byte)5, "琛ユ墸"),
+    LOSS((byte)6, "鎸傚け"),
+    REVERSAL((byte)7, "鍐叉"),
+    UNLOCK((byte)8, "瑙i攣"),
+    CONSUME((byte)9, "娑堣垂");
+
+    private final Byte code;
+    private final String message;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoActiveCard.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoActiveCard.java
new file mode 100644
index 0000000..251c52d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoActiveCard.java
@@ -0,0 +1,47 @@
+package com.dy.pipIrrSell.cardOperate.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/1/23  14:41
+ * @LastEditTime :2024/1/23  14:41
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "IC鍗″紑鍗¤褰曟煡璇㈡潯浠�")
+public class QoActiveCard extends QueryConditionVo {
+
+//    @Schema(description = "鎿嶄綔绫诲瀷 1-寮�鍗★紝2-琛ュ崱")
+//    private Byte operateType;
+
+    @Schema(description = "鍐滄埛濮撳悕")
+    public String clientName;
+
+    @Schema(description = "IC鍗″彿")
+    //public String cardAddr;
+    public String cardNum;
+
+    @Schema(description = "鍗$墖鐘舵��")
+    private Byte state;
+
+    //@Schema(description = "寮�鍗℃椂闂確寮�濮�")
+    //public LocalDateTime activeTimeStart;
+    //
+    //@Schema(description = "寮�鍗℃椂闂確缁撴潫")
+    //public LocalDateTime activeTimeStop;
+
+    @Schema(description = "寮�鍗℃椂闂確寮�濮�")
+    public String activeTimeStart;
+
+    @Schema(description = "寮�鍗℃椂闂確缁撴潫")
+    public String activeTimeStop;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoRecharge.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoRecharge.java
new file mode 100644
index 0000000..543e308
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoRecharge.java
@@ -0,0 +1,46 @@
+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-01-20 11:35
+ * @LastEditTime 2024-01-20 11:35
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "IC鍗″厖鍊艰褰曟煡璇㈡潯浠�")
+public class QoRecharge extends QueryConditionVo {
+
+    @Schema(description = "鍐滄埛濮撳悕")
+    public String clientName;
+
+    @Schema(description = "鍐滄埛缂栧彿")
+    private Long clientId;
+
+    @Schema(description = "IC鍗″彿")
+    public String cardAddr;
+
+    @Schema(description = "浠樻鏂瑰紡")
+    public Integer paymentId;
+
+    //@Schema(description = "鍏呭�兼椂闂確寮�濮�")
+    //public LocalDateTime rechargeTimeStart;
+    //
+    //@Schema(description = "鍏呭�兼椂闂確缁撴潫")
+    //public LocalDateTime rechargeTimeStop;
+
+    @Schema(description = "鍏呭�兼椂闂確寮�濮�")
+    public String rechargeTimeStart;
+
+    @Schema(description = "鍏呭�兼椂闂確缁撴潫")
+    public String rechargeTimeStop;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoReissueCard.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoReissueCard.java
new file mode 100644
index 0000000..9f746b6
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoReissueCard.java
@@ -0,0 +1,35 @@
+package com.dy.pipIrrSell.cardOperate.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/1/26  9:17
+ * @LastEditTime :2024/1/26  9:17
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "IC鍗¤ˉ鍗¤褰曟煡璇㈡潯浠�")
+public class QoReissueCard extends QueryConditionVo {
+
+    @Schema(description = "鍐滄埛濮撳悕")
+    public String clientName;
+
+    @Schema(description = "IC鍗″彿")
+    //public String cardAddr;
+    public String cardNum;
+
+    @Schema(description = "琛ュ崱鏃堕棿_寮�濮�")
+    public String reissueCardTimeStart;
+
+    @Schema(description = "琛ュ崱鏃堕棿_缁撴潫")
+    public String reissueCardTimeStop;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryOperate.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoTransaction.java
similarity index 61%
rename from pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryOperate.java
rename to pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoTransaction.java
index 628bcd6..fbea65b 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryOperate.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoTransaction.java
@@ -1,4 +1,4 @@
-package com.dy.pipIrrSell.client;
+package com.dy.pipIrrSell.cardOperate.qo;
 
 import com.dy.common.webUtil.QueryConditionVo;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -6,8 +6,8 @@
 
 /**
  * @author ZhuBaoMin
- * @date 2023-12-26 21:00
- * @LastEditTime 2023-12-26 21:00
+ * @date 2024-01-22 10:57
+ * @LastEditTime 2024-01-22 10:57
  * @Description
  */
 
@@ -17,18 +17,20 @@
 @NoArgsConstructor
 @AllArgsConstructor
 @Builder
-@Schema(name = "浜ゆ槗鏌ヨ鏉′欢")
-public class QueryOperate extends QueryConditionVo {
-
+@Schema(name = "浜ゆ槗鏄庣粏鏌ヨ鏉′欢")
+public class QoTransaction extends QueryConditionVo {
     @Schema(description = "鏉慖D")
     public Long villageId;
 
-    @Schema(description = "鏀粯鏂瑰紡缂栧彿")
-    public Long paymentId;
+    @Schema(description = "姘村崱缂栧彿")
+    public Long cardNum;
 
     @Schema(description = "浜ゆ槗鏌ヨ璧峰鏃堕棿")
     public String operateTimeStart;
 
     @Schema(description = "浜ゆ槗鏌ヨ鎴鏃堕棿")
     public String operateTimeStop;
+
+    @Schema(description = "鏀堕摱鍛業D")
+    public Long cashierId;
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryStatistic.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoTransactionStatistics.java
similarity index 63%
rename from pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryStatistic.java
rename to pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoTransactionStatistics.java
index 5ac6c22..ffcca6f 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryStatistic.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoTransactionStatistics.java
@@ -1,4 +1,4 @@
-package com.dy.pipIrrSell.client;
+package com.dy.pipIrrSell.cardOperate.qo;
 
 import com.dy.common.webUtil.QueryConditionVo;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -6,8 +6,8 @@
 
 /**
  * @author ZhuBaoMin
- * @date 2023-12-27 15:33
- * @LastEditTime 2023-12-27 15:33
+ * @date 2024-01-22 18:32
+ * @LastEditTime 2024-01-22 18:32
  * @Description
  */
 
@@ -18,13 +18,7 @@
 @AllArgsConstructor
 @Builder
 @Schema(name = "浜ゆ槗姹囨�绘煡璇㈡潯浠�")
-public class QueryStatistic extends QueryConditionVo {
-    @Schema(description = "鏉慖D")
-    public Long villageId;
-
-    //@Schema(description = "鏀粯鏂瑰紡缂栧彿")
-    //public Long paymentId;
-
+public class QoTransactionStatistics extends QueryConditionVo {
     @Schema(description = "浜ゆ槗鏌ヨ璧峰鏃堕棿")
     public String operateTimeStart;
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java
index ae5d363..29de085 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java
@@ -66,58 +66,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 = "getOperates")
-    @SsoAop()
-    public BaseResponse<Map> getOperates(QueryOperate vo){
-        try {
-           Map res = clientSv.getOperates(vo);
-            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 = BaClient.class))}
-            )
-    })
-    @GetMapping(path = "getStatistics")
-    @SsoAop()
-    public BaseResponse<Map> getStatistics(QueryStatistic vo){
-        try {
-            Map res = clientSv.getStatistics(vo);
-            return BaseResponseUtils.buildSuccess(res);
-        } catch (Exception e) {
-            log.error("鏌ヨ浜ゆ槗姹囨�昏褰曞紓甯�", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
-        }
-    }
-
-    /**
      * 鏍规嵁涓婚敭鑾峰彇涓�涓啘鎴峰璞�
      * @param id
      * @return
@@ -228,7 +176,7 @@
     }
 
     /**
-     * 鐢熸垚10涓哄啘鎴风紪鍙�
+     * 鐢熸垚10浣嶅啘鎴风紪鍙�
      * 1. 鍒板啘鎴疯〃涓煡璇�6浣嶅尯鍒掍覆寮�澶寸殑鏈�澶х殑鍐滄埛缂栧彿
      * 2. 鏄惁鍙栧埌璁板綍
      *      2.1 鍙栧埌
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 a3f631b..ebeccf1 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
@@ -5,17 +5,13 @@
 import com.dy.pipIrrGlobal.daoSe.SeClientMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeClient;
 import com.dy.pipIrrGlobal.voSe.VoClient;
-import com.dy.pipIrrGlobal.voSe.VoOperate;
-import com.dy.pipIrrGlobal.voSe.VoStatistics;
 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
@@ -60,122 +56,6 @@
         rsVo.obj = seClientMapper.getClients(params);
 
         return rsVo ;
-    }
-
-    /**
-     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍
-     * @param vo
-     * @return
-     */
-    public Map getOperates(QueryOperate vo){
-        // 琛ラ綈鏌ヨ鏃堕棿
-        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) ;
-
-        // 鑾峰彇姹囨�荤殑璐按閲戦銆佽喘鍗¢噾棰�
-        Float money = 0f;
-        Float cardCost = 0f;
-        Map map_sum = Optional.ofNullable(seClientMapper.getSums(params)).orElse(new HashMap());
-        if(map_sum.size() > 0) {
-            money = Float.parseFloat(map_sum.get("money").toString());
-            cardCost = Float.parseFloat(map_sum.get("cardCost").toString());
-        }
-
-        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
-        Long itemTotal = seClientMapper.getOperateRecordCount(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<VoOperate> lit = seClientMapper.getOperates(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("money", money);
-        map_result.put("cardCost", cardCost);
-        map_result.put("records", map_record);
-
-        return map_result;
-    }
-
-    /**
-     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇缁熻璁板綍
-     * @param vo 浜ゆ槗姹囨�绘煡璇㈡潯浠�
-     * @return 浜ゆ槗姹囨�昏褰�
-     */
-    public Map getStatistics(QueryStatistic vo){
-        // 琛ラ綈鏌ヨ鏃堕棿
-        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 count = 0;
-        Float money = 0f;
-        Map map_sum = Optional.ofNullable(seClientMapper.getStatisticSums(params)).orElse(new HashMap());
-        if(map_sum.size() > 0) {
-            count = Integer.parseInt(map_sum.get("count").toString());
-            money = Float.parseFloat(map_sum.get("money").toString());
-        }
-
-        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
-        Long itemTotal = seClientMapper.getStatisticRecordCount(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<VoStatistics> lit = seClientMapper.getStatistics(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("count", count);
-        map_result.put("money", money);
-        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/clientCard/ClientCardCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardCtrl.java
index d0abec4..01b56eb 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardCtrl.java
@@ -7,6 +7,9 @@
 import com.dy.common.webUtil.ResultCodeMsg;
 import com.dy.pipIrrGlobal.pojoBa.BaClient;
 import com.dy.pipIrrGlobal.voSe.VoCardInfo;
+import com.dy.pipIrrGlobal.voSe.VoCards;
+import com.dy.pipIrrSell.clientCard.qo.QoCards;
+import com.dy.pipIrrSell.result.SellResultCode;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -113,4 +116,34 @@
             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 = "getcards")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoCards>>> getcards(QoCards vo){
+        try {
+            QueryResultVo<List<VoCards>> res = clientCardSv.getCards(vo);
+            if(res.itemTotal != null && res.itemTotal > 0) {
+                return BaseResponseUtils.buildSuccess(res);
+            }else {
+                return BaseResponseUtils.buildFail(SellResultCode.THE_CARD_NOT_EXIST.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/clientCard/ClientCardSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java
index 8517231..7cc032e 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
@@ -1,9 +1,13 @@
 package com.dy.pipIrrSell.clientCard;
 
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voSe.VoCardInfo;
+import com.dy.pipIrrGlobal.voSe.VoCards;
+import com.dy.pipIrrSell.clientCard.qo.QoCards;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -107,4 +111,33 @@
         String stateName = Optional.ofNullable(seClientCardMapper.getCardStateByCardNum(cardNum)).orElse("");
         return stateName;
     }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃锛屽簲鐢ㄧ▼搴忎娇鐢�
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoCards>> getCards(QoCards queryVo){
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo) ;
+        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.calculateAndSet(itemTotal, params);
+        rsVo.obj = seClientCardMapper.getCards(params);
+
+        return rsVo ;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/LastOperateENUM.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/LastOperateENUM.java
index 46ee9d6..63b4107 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/LastOperateENUM.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/LastOperateENUM.java
@@ -14,13 +14,14 @@
 @AllArgsConstructor
 public enum LastOperateENUM {
     ACTIVE((byte)1, "寮�鍗�"),
-    REPLACE((byte)2, "琛ュ崱"),
-    RECHARGE((byte)3, "鍏呭��"),
-    LOSS((byte)4, "鎸傚け"),
-    CANCEL((byte)5, "娉ㄩ攢"),
-    UNLOCK((byte)6, "瑙i攣"),
+    RECHARGE((byte)2, "鍏呭��"),
+    CANCEL((byte)3, "娉ㄩ攢"),
+    REPLACE((byte)4, "琛ュ崱"),
+    REFUND((byte)5, "琛ユ墸"),
+    LOSS((byte)6, "鎸傚け"),
     REVERSAL((byte)7, "鍐叉"),
-    CONSUME((byte)8, "娑堣垂");
+    UNLOCK((byte)8, "瑙i攣"),
+    CONSUME((byte)9, "娑堣垂");
 
     private final Byte code;
     private final String message;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/qo/QoCards.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/qo/QoCards.java
new file mode 100644
index 0000000..9a577f5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/qo/QoCards.java
@@ -0,0 +1,31 @@
+package com.dy.pipIrrSell.clientCard.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-26 19:11
+ * @LastEditTime 2024-01-26 19:11
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "姘村崱璁板綍鏌ヨ鏉′欢")
+public class QoCards extends QueryConditionVo {
+
+    @Schema(description = "鍐滄埛缂栧彿")
+    public Long clientNum;
+
+    @Schema(description = "鍐滄埛濮撳悕")
+    private String clientName;
+
+    @Schema(description = "姘村崱缂栧彿")
+    public Long cardNum;
+}
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
new file mode 100644
index 0000000..dabaf7f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java
@@ -0,0 +1,189 @@
+package com.dy.pipIrrSell.general;
+
+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.pojoBa.BaClient;
+import com.dy.pipIrrGlobal.pojoSe.SeAudits;
+import com.dy.pipIrrGlobal.pojoSe.SeGeneral;
+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.QoToAudit;
+import com.dy.pipIrrSell.result.SellResultCode;
+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 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.web.bind.annotation.*;
+
+import java.util.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-24 19:01
+ * @LastEditTime 2024-01-24 19:01
+ * @Description
+ */
+
+@Slf4j
+@Tag(name = "鎬昏处绠$悊", description = "鎬昏处绠$悊")
+@RestController
+@RequestMapping(path="general")
+@RequiredArgsConstructor
+public class GeneralCtrl {
+    private final GeneralSv generalSv;
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鎬昏处璁板綍
+     * 鏌ヨ鍓嶅厛鐢熸垚鏈敓鎴愮殑鎬昏处璁板綍
+     * @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_generals")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoGeneral>>> getOperates(QoGeneral vo){
+        try {
+            add_general();
+            QueryResultVo<List<VoGeneral>> res = generalSv.getGenerals(vo);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨ浜ゆ槗璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鐢熸垚鎬昏处
+     *      鑾峰彇鏈敓鎴愭�昏处鐨勪氦鏄撴棩鏈熷垪琛紙褰撳ぉ鐨勪氦鏄撹褰曚笉鐢熸垚鎬昏处锛�
+     *      灏嗘寚瀹氭棩鏈熺殑浜ゆ槗璁板綍姹囨�诲埌鎬昏处琛�
+     * @return
+     */
+    public void add_general(){
+        // 鑾峰彇鏈敓鎴愭�昏处鐨勪氦鏄撴棩鏈熷垪琛紙褰撳ぉ鐨勪氦鏄撹褰曚笉鐢熸垚鎬昏处锛�
+        List<Map<String, Object>> list_operateDate = Optional.ofNullable(generalSv.getDatesOfNotInGenerals()).orElse(new ArrayList<>());
+        if(list_operateDate.size() > 0) {
+            for(int i = 0; i < list_operateDate.size(); i++) {
+                String operateDate = list_operateDate.get(i).get("operateDate").toString();
+                // 鏍规嵁浜ゆ槗鏃ユ湡鑾峰彇鎬昏处璁板綍鍒楄〃锛堝緟鐢熸垚鐨勶級
+                List<SeGeneral> list_general = Optional.ofNullable(generalSv.getGeneralByOperateDate(operateDate)).orElse(new ArrayList<>());
+                if(list_general.size() > 0) {
+                    for(int j = 0; j < list_general.size(); j++) {
+                        SeGeneral general = list_general.get(j);
+                        generalSv.addGeneral(general);
+                    }
+                }
+
+            }
+        }
+    }
+
+    /**
+     * 瀹℃牳鎬昏处
+     *  1. 淇敼鎬昏处瀹℃牳鐘舵��
+     *  2. 娣诲姞鎬昏处瀹℃牳璁板綍
+     * @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", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> audit(@RequestBody @Valid DtoGeneral po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+        Long generalId = po.getGeneralId();
+        Byte auditStatus = po.getAuditStatus();
+        String auditOpinion = po.getAuditOpinion();
+        Long operator = po.getOperator();
+        Date auditTime = new Date();
+
+        if(generalId == null) {
+            return BaseResponseUtils.buildFail(SellResultCode.GENERAL_ID_CANNOT_BE_NULL.getMessage());
+        }
+
+        /**
+         * 鍒ゆ柇鎬昏处鏄惁瀛樺湪
+         */
+        if(generalSv.getGeneralById(generalId) == null) {
+            return BaseResponseUtils.buildFail(SellResultCode.GENERAL_NOT_EXIST.getMessage());
+        }
+
+        /**
+         * 淇敼鎬昏处瀹℃牳鐘舵��
+         */
+        SeGeneral seGeneral = new SeGeneral();
+        seGeneral.setId(generalId);
+        seGeneral.setAuditStatus(auditStatus);
+        Integer rec_updateGeneral = Optional.ofNullable(generalSv.updateGeneral(seGeneral)).orElse(0);
+        if(rec_updateGeneral == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.GENERAL_AUDIT_FAIL.getMessage());
+        }
+
+        /**
+         * 娣诲姞鎬昏处瀹℃牳璁板綍
+         */
+        SeAudits seAudits = new SeAudits();
+        seAudits.setGeneralId(generalId);
+        seAudits.setAuditStatus(auditStatus);
+        seAudits.setAuditOpinion(auditOpinion);
+        seAudits.setOperator(operator);
+        seAudits.setOperateDt(auditTime);
+        Integer rec_addAucits = Optional.ofNullable(generalSv.addAudits(seAudits)).orElse(0);
+        if(rec_addAucits == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.AUDITS_ADD_FAIL.getMessage());
+        }
+
+        return BaseResponseUtils.buildSuccess() ;
+    }
+
+    @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 = "getToAudit")
+    @SsoAop()
+    public BaseResponse<Map> getToAudit(QoToAudit vo){
+        try {
+            Map res = generalSv.getToAudit(vo);
+            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/general/GeneralSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java
new file mode 100644
index 0000000..76d9be0
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java
@@ -0,0 +1,178 @@
+package com.dy.pipIrrSell.general;
+
+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.pojoSe.SeAudits;
+import com.dy.pipIrrGlobal.pojoSe.SeGeneral;
+import com.dy.pipIrrGlobal.voSe.VoGeneral;
+import com.dy.pipIrrGlobal.voSe.VoTransactionStatistics;
+import com.dy.pipIrrSell.general.qo.QoGeneral;
+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.util.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-24 19:02
+ * @LastEditTime 2024-01-24 19:02
+ * @Description
+ */
+
+@Slf4j
+@Service
+public class GeneralSv {
+    @Autowired
+    private SeGeneralMapper seGeneralMapper;
+
+    @Autowired
+    private SeAuditsMapper seAuditsMapper;
+
+    @Autowired
+    private SeCardOperateMapper seCardOperateMapper;
+
+    /**
+     * 鑾峰彇鏈敓鎴愭�昏处鐨勪氦鏄撴棩鏈熷垪琛紙褰撳ぉ鐨勪氦鏄撹褰曚笉鐢熸垚鎬昏处锛�
+     * @return
+     */
+    public List<Map<String, Object>> getDatesOfNotInGenerals() {
+        return seGeneralMapper.getDatesOfNotInGenerals();
+    }
+
+    /**
+     * 娣诲姞鎬昏处
+     * @param po 鎬昏处瀵硅薄
+     * @return
+     */
+    public Integer addGeneral(SeGeneral po) {
+        return seGeneralMapper.insert(po);
+    }
+
+    /**
+     * 鏍规嵁浜ゆ槗鏃ユ湡鑾峰彇鎬昏处璁板綍鍒楄〃锛堝緟鐢熸垚鐨勶級
+     * @param operateDate 浜ゆ槗鏃ユ湡
+     * @return 鍙栨�昏处璁板綍鍒楄〃
+     */
+    public List<SeGeneral> getGeneralByOperateDate(String operateDate) {
+        return seGeneralMapper.getGeneralByOperateDate(operateDate);
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鎬昏处璁板綍
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoGeneral>> getGenerals(QoGeneral queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        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.calculateAndSet(itemTotal, params);
+        rsVo.obj = seGeneralMapper.getGenerals(params);
+        return rsVo ;
+    }
+
+    /**
+     * 淇敼鎬昏处瀹℃牳鎰忚
+     * @param po
+     * @return
+     */
+    public Integer updateGeneral(SeGeneral po) {
+        return seGeneralMapper.updateByPrimaryKeySelective(po);
+    }
+
+    /**
+     * 鏍规嵁缂栧彿鏌ヨ鎬昏处
+     * @param id
+     * @return
+     */
+    public SeGeneral getGeneralById(Long id) {
+        return seGeneralMapper.selectByPrimaryKey(id);
+    }
+
+    /**
+     * t娣诲姞鎬昏处瀹℃牳璁板綍
+     * @param po
+     * @return
+     */
+    public Integer addAudits(SeAudits po) {
+        return seAuditsMapper.insert(po);
+    }
+
+    /**
+     * 璐㈠姟瀵硅处瀹℃牳椤碉紝鏀堕摱鍛�+鏃ユ湡鍒嗙粍锛屾帓闄や氦鏄撶被鍨嬪垎缁�
+     * @param vo
+     * @return
+     */
+    public Map getToAudit(QoToAudit vo) {
+        /**
+         * 鍙栧嚭鎸囧畾鏃ユ湡涓夌鏀粯鏂瑰紡锛堢幇閲戙�佹壂鐮併�佽浆璐︼級瀹炴敹閲戦
+         */
+        JSONArray array_paymentSums = new JSONArray();
+        String tradeDate = vo.getTradeDate();
+        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);
+
+        // 鐢熸垚鏌ヨ鍙傛暟
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo) ;
+
+        //鑾峰彇绗旀暟鍚堣銆佸疄鏀堕噾棰濆悎璁°�佽禒閫侀噾棰濆悎璁�
+        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());
+        }
+
+        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
+        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("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("records", map_record);
+        map_result.put("paymentSums", array_paymentSums);
+
+        return map_result;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/dto/DtoGeneral.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/dto/DtoGeneral.java
new file mode 100644
index 0000000..92985c7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/dto/DtoGeneral.java
@@ -0,0 +1,54 @@
+package com.dy.pipIrrSell.general.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+import org.hibernate.validator.constraints.Length;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-25 10:19
+ * @LastEditTime 2024-01-25 10:19
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鎬昏处瀹℃牳浼犲叆瀵硅薄")
+public class DtoGeneral {
+    public static final long serialVersionUID = 202401251020001L;
+
+    /**
+     * 鎬昏处ID
+     */
+    @Schema(description = "鎬昏处ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "鎬昏处ID涓嶈兘涓虹┖")
+    @Positive(message = "鎬昏处缂栧彿蹇呴』涓哄ぇ浜�0鐨勬暣鏁�")
+    private Long generalId;
+
+    /**
+     * 瀹℃牳鐘舵��
+     */
+    @Schema(description = "瀹℃牳鐘舵��", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "瀹℃牳鐘舵�佷笉鑳戒负绌�")
+    private Byte auditStatus;
+
+    /**
+     * 瀹℃牳鎰忚
+     */
+    @Schema(description = "瀹℃牳鎰忚", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(max = 200, message = "瀹℃牳鎰忚鏈�澶�200瀛�")
+    private String auditOpinion;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "鎿嶄綔浜虹紪鍙蜂笉鑳戒负绌�")
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoGeneral.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoGeneral.java
new file mode 100644
index 0000000..fde1f9a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoGeneral.java
@@ -0,0 +1,34 @@
+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-01-24 20:25
+ * @LastEditTime 2024-01-24 20:25
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "鎬昏处鏌ヨ鏉′欢")
+public class QoGeneral extends QueryConditionVo {
+    @Schema(description = "鏀堕摱鍛樺鍚�")
+    public String cashierName;
+
+    @Schema(description = "浜ゆ槗鏌ヨ璧峰鏃ユ湡")
+    public String operateDateStart;
+
+    @Schema(description = "浜ゆ槗鏌ヨ鎴鏃ユ湡")
+    public String operateDateStop;
+
+    @Schema(description = "瀹℃牳鐘舵��")
+    private Byte auditStatus;
+
+}
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
new file mode 100644
index 0000000..809a5ee
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoToAudit.java
@@ -0,0 +1,27 @@
+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-01-25 20:13
+ * @LastEditTime 2024-01-25 20:13
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "寰呭鏍镐氦鏄撴眹鎬绘煡璇㈡潯浠�")
+public class QoToAudit extends QueryConditionVo {
+    @Schema(description = "浜ゆ槗鏃堕棿")
+    public String tradeDate;
+
+    @Schema(description = "鏀堕摱鍛業D")
+    public Long cashierId;
+}
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 38c69da..8d92e08 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
@@ -24,6 +24,11 @@
     CARD_NUMBER_ERROR(10006, "鍗″彿閿欒锛岃鍗′笉瀛樺湪"),
     REPLACE_FAIL_WRITE_CLIENT_CARD_ERROR(10007, "琛ュ崱澶辫触-鍐滄埛鍗′慨鏀瑰紓甯�"),
     REPLACE_FAIL_WRITE_RECHARGE_ERROR(10008, "琛ュ崱澶辫触-琛ュ崱璁板綍鍐欏叆寮傚父"),
+    No_ActiveCards(10009, "娌℃湁绗﹀悎鏉′欢鐨勫紑鍗℃暟鎹�"),
+    No_ReissueCards(10010, "娌℃湁绗﹀悎鏉′欢鐨勮ˉ鍗℃暟鎹�"),
+
+    THE_CARD_NOT_EXIST(10011, "娌℃湁绗﹀悎鏉′欢鐨勬按鍗�"),
+    THE_CARD_NOT_SUPPORT_THIS_OPERATION(10012, "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔"),
 
     /**
      * 鍏呭��
@@ -55,7 +60,20 @@
      * 鍐叉
      */
     REVERSAL_FAIL_WRITE_CLIENT_CARD_ERROR(60001, "鍐叉澶辫触-鍐滄埛鍗′慨鏀瑰紓甯�"),
-    REVERSAL_FAIL_WRITE_REVERSAL_ERROR(60002, "鍐叉澶辫触-鍐叉璁板綍鍐欏叆寮傚父");
+    REVERSAL_FAIL_WRITE_REVERSAL_ERROR(60002, "鍐叉澶辫触-鍐叉璁板綍鍐欏叆寮傚父"),
+
+    /**
+     * 琛ユ墸
+     */
+    REFUND_FAIL_WRITE_REFUND_ERROR(70001, "琛ユ墸澶辫触-琛ユ墸璁板綍鍐欏叆寮傚父"),
+
+    /**
+     * 鎬昏处
+     */
+    GENERAL_ID_CANNOT_BE_NULL(80001, "鎬昏处缂栧彿涓嶈兘涓虹┖"),
+    GENERAL_NOT_EXIST(80001, "鎬昏处涓嶅瓨鍦�"),
+    GENERAL_AUDIT_FAIL(80001, "鎬昏处瀹℃牳澶辫触"),
+    AUDITS_ADD_FAIL(80001, "鎬昏处瀹℃牳璁板綍娣诲姞澶辫触");
 
     private final Integer code;
     private final String message;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java
index 07c5702..725177d 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java
@@ -7,7 +7,6 @@
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.ResultCodeMsg;
 import com.dy.pipIrrGlobal.pojoBa.BaUser;
-import com.dy.pipIrrGlobal.util.DistrictLevel;
 import com.dy.pipIrrGlobal.util.Org;
 import com.mysql.cj.util.StringUtils;
 import io.swagger.v3.oas.annotations.Hidden;
@@ -22,15 +21,15 @@
 import jakarta.validation.Valid;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.cache.CacheManager;
 import org.springframework.http.MediaType;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 import java.util.UUID;
+
+//import org.springframework.cache.CacheManager;
 
 /**
  * 娉ㄨВTag 鍦ˋPI涓樉绀猴細 Tag 娉ㄨВ, 缁欐暣涓帴鍙h捣浜嗕釜鍚嶅瓧涓庢弿杩�"
@@ -230,7 +229,7 @@
     @GetMapping(path = "loginUserId")
     public Long loginUserId(String token){
         BaUser userPo = this.sv.getByUuid(token) ;
-        return userPo == null ? null : userPo.id ;
+        return userPo == null ? null : userPo.userId ;
     }
     /**
      * 姝ゆ柟娉曚緵瀛愭ā鍧楃郴缁熻皟鐢紝鎵�浠ヤ笉鍏紑鍦ˋPI鎺ュ彛涓�
@@ -307,8 +306,8 @@
         BaUser userPo = this.sv.getByUuid(token) ;
         CurUserVo vo = new CurUserVo();
         if(userPo != null){
-            vo.id = userPo.id ;
-            vo.name = userPo.name ;
+            vo.id = userPo.userId ;
+            vo.name = userPo.userName;
         }
         return vo ;
     }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoSv.java
index e1ddefe..c72b64b 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoSv.java
@@ -41,8 +41,8 @@
     @Cacheable(cacheNames=CacheConstants.cacheNames, key="'" + CacheConstants.loginUserKeyPrefix + "' + #uuid", sync=true)
     public BaUser loginWithMapperXml(String uuid, String phone, String password){
         BaUser baUser = this.baUserMapper.login(phone, password) ;
-        if(baUser !=  null  && baUser.id != null){
-            baUser.privileges = this.baPrivilegeMapper.selectPrivilegeByUserId(baUser.id) ;
+        if(baUser !=  null  && baUser.userId != null){
+            baUser.privileges = this.baPrivilegeMapper.selectPrivilegeByUserId(baUser.userId) ;
         }
         return baUser;
     }
@@ -66,8 +66,8 @@
                 .eq("phone", phone)
                 .eq("password", password);
         BaUser baUser = this.baUserMapper.selectOne(qw) ;
-        if(baUser !=  null  && baUser.id != null){
-            baUser.privileges = this.baPrivilegeMapper.selectPrivilegeByUserId(baUser.id) ;
+        if(baUser !=  null  && baUser.userId != null){
+            baUser.privileges = this.baPrivilegeMapper.selectPrivilegeByUserId(baUser.userId) ;
         }
         return baUser;
     }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/UserVoMapper.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/UserVoMapper.java
index ef6d03b..0ffefbb 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/UserVoMapper.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/UserVoMapper.java
@@ -15,8 +15,8 @@
      * @param po
      * @return
      */
-    @Mapping(target = "id", source = "id")
-    @Mapping(target = "name", source = "name")
+    @Mapping(target = "id", source = "userId")
+    @Mapping(target = "name", source = "userName")
     @Mapping(target = "phone", source = "phone")
     @Mapping(target = "token", ignore=true)
     UserVo po2vo(BaUser po);

--
Gitblit v1.8.0