From ee1800e3988e4913f5328c2cba07735fb4d06eff Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期五, 06 六月 2025 17:30:37 +0800
Subject: [PATCH] 操作回调开卡附加充值部分

---
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeRechargeHistory.java                             |   26 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd15/CdSv.java         |    1 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClientCard.java                                  |   28 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java                 |    1 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java                       |    1 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml                                           |   23 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd15/CdCtrl.java       |    1 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java                     |    3 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java                            |   24 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRechargeHistoryMapper.xml                                       |   93 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandSv.java                      |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java                     |   27 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd92/CdSv.java         |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java                             |   11 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoAfterRecharge.java                                 |   23 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java                       |    1 
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java                       |   78 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/statistics/StChargeByIcSv.java     |    1 
 pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardSv.java                 |    1 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java                     |    4 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml                                            | 1447 +++++++++++++++++++++++-----------------------
 pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/statistics/StChargeByClientSv.java |    1 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCardSv.java                   |    1 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRechargeHistoryMapper.java                        |   13 
 24 files changed, 981 insertions(+), 832 deletions(-)

diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java
index e20d911..0e602ba 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java
@@ -4,6 +4,7 @@
 import com.dy.pipIrrGlobal.voSe.*;
 import com.dy.pipIrrGlobal.voSt.VoClientOpenCardCount;
 import com.dy.pipIrrGlobal.voSt.VoClientRechargeTotal;
+import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -15,6 +16,7 @@
  * @LastEditTime 2025-05-08 17:15
  * @Description
  */
+@Mapper
 public interface SeCardOperateMapper {
     int deleteByPrimaryKey(Long id);
 
@@ -229,6 +231,28 @@
      */
     Integer turnOperateValidByCardId(@Param("cardId") Long cardId, @Param("operateType") Integer operateType);
 
+    /**
+     * 鍏呭�兼満鐢ㄦ牴鎹鍗曞彿灏嗘搷浣滆褰曟敼涓烘湁鏁�
+     * @param orderNumber
+     * @return
+     */
+    Integer turnOperateValidByOrderNumber(String orderNumber);
+
+    /**
+     * 鍏呭�兼満鐢ㄨ幏鍙栧厖鍊兼搷浣滃悗鏂扮殑浣欓鍙婂厖鍊兼椂闂�
+     * @param orderNumber
+     * @return
+     */
+    //Float getBalanceAfterRecharge(String orderNumber);
+    VoAfterRecharge getBalanceAfterRecharge(String orderNumber);
+
+    /**
+     * 鍏呭�兼満鐢ㄦ牴鎹按鍗D鑾峰彇鍚屾鍏呭�艰褰曟暟閲�
+     * @param cardId
+     * @return
+     */
+    Integer getPlusRechargeCount(Long cardId);
+
 
     /**
      * 鏍规嵁姘村崱ID銆佹搷浣滅被鍨嬭幏鍙栬幏鍙栨渶鍚庝竴鏉¤褰曪紝鍒ゆ柇寮�鍗℃槸鍚﹀悓姝ュ厖鍊间娇鐢�
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 6b9c775..6c15b86 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
@@ -16,8 +16,8 @@
 
 /**
  * @author ZhuBaoMin
- * @date 2023/12/22 16:04
- * @LastEditTime 2023/12/22 16:04
+ * @date 2025-06-06 10:21
+ * @LastEditTime 2025-06-06 10:21
  * @Description
  */
 
@@ -245,6 +245,13 @@
     Integer turnCardValidByAddr(@Param("cardAddr")String cardAddr, @Param("operateType")Integer operateType);
 
     /**
+     * 鍏呭�兼満鐢ㄦ牴鎹鍗曞彿灏嗘按鍗℃敼涓烘湁鏁�
+     * @param orderNumber
+     * @return
+     */
+    Integer turnCardValidByOrderNumber(@Param("orderNumber")String orderNumber);
+
+    /**
      * 鏍规嵁姘村崱ID鑾峰彇鍘熸按鍗D锛岃ˉ鍗¢�氱煡涓娇鐢�
      * @param cardId
      * @return
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRechargeHistoryMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRechargeHistoryMapper.java
index d8bc37e..ba81a50 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRechargeHistoryMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRechargeHistoryMapper.java
@@ -11,8 +11,8 @@
 
 /**
  * @author ZhuBaoMin
- * @date 2023/12/23 8:47
- * @LastEditTime 2023/12/23 8:47
+ * @date 2025-06-06 10:34
+ * @LastEditTime 2025-06-06 10:34
  * @Description
  */
 
@@ -37,9 +37,12 @@
      */
     Integer turnRechargeHistoryValidByCardId(@Param("cardId") Long cardId);
 
-
-    ///////////////////////////////
-    //缁熻鐩稿叧
+    /**
+     * 鍏呭�兼満鐢ㄦ牴鎹鍗曞彿灏嗗厖鍊煎巻鍙茶褰曟敼涓烘湁鏁�
+     * @param orderNumber
+     * @return
+     */
+    Integer turnRechargeHistoryValidByOrderNumber(@Param("orderNumber") String orderNumber);
 
     /**
      * 浠ュ啘鎴峰拰IC鍗′负鍗曚綅缁熻涓�鏃ョ殑鍏呭��
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 075c426..6c891aa 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
@@ -18,9 +18,9 @@
 
 /**
  * @author ZhuBaoMin
- * @date 2023/12/7 9:06
- * @LastEditTime 2023/12/18 10:14
- * @Description 娣诲姞姘村崱缂栧彿锛坈ardnum锛夊瓧娈�
+ * @date 2025-06-06 10:21
+ * @LastEditTime 2025-06-06 10:21
+ * @Description
  */
 
 /**
@@ -33,7 +33,6 @@
 @ToString
 @NoArgsConstructor
 @AllArgsConstructor
-@Schema(name = "鍐滄埛姘村崱瀹炰綋")
 public class SeClientCard implements BaseEntity {
     public static final long serialVersionUID = 202401151518004L;
 
@@ -42,7 +41,6 @@
      */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
     @TableId(type = IdType.INPUT)
-    @Schema(description = "瀹炰綋id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     private Long id;
 
     @NotBlank(message = "閫氳鍗忚涓嶈兘涓虹┖")
@@ -51,35 +49,30 @@
     /**
      * 姘村崱鍦板潃
      */
-    @Schema(description = "姘村崱鍦板潃", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @NotBlank(message = "姘村崱鍦板潃涓嶈兘涓虹┖")
     private String cardaddr;
 
     /**
      * 姘村崱缂栧彿
      */
-    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @NotBlank(message = "姘村崱缂栧彿涓嶈兘涓虹┖")
     private String cardnum;
 
     /**
      * 鍐滄埛ID
      */
-    @Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @NotBlank(message = "鍐滄埛ID涓嶈兘涓虹┖")
     private Long clientid;
 
     /**
      * 浣欓
      */
-    @Schema(description = "浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
     private Float money;
 
     /**
      * 鍗$墖鐘舵��;1-姝e父锛�2-宸叉敞閿�锛�3-宸叉寕澶�
      */
-    @Schema(description = "鍗$墖鐘舵��", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @Positive(message = "鍗$墖鐘舵�佸繀椤讳负1鎴�2鎴�3")
     @Size(min = 1, max = 3)
     private Byte state;
@@ -87,32 +80,27 @@
     /**
      * 鍘熸寕澶卞崱ID
      */
-    @Schema(description = "鍗$墖鐘舵��", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @Positive(message = "鍘熸寕澶卞崱ID蹇呴』涓烘鏁�")
     private Long originalCardId;
 
     /**
      * 寮�鍗℃椂闂�
      */
-    @Schema(description = "寮�鍗℃椂闂�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     private Date createdt;
 
     /**
      * 琛ュ崱鏃堕棿
      */
-    @Schema(description = "琛ュ崱鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     private Date replacedt;
 
     /**
      * 鍏呭�兼椂闂�
      */
-    @Schema(description = "鍏呭�兼椂闂�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     private Date rechargedt;
 
     /**
      * 鎸傚け鏃堕棿
      */
-    @Schema(description = "鎸傚け鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     private Date lossdtdt;
 
     /**
@@ -124,31 +112,26 @@
     /**
      * 瑙i攣鏃堕棿
      */
-    @Schema(description = "瑙i攣鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     private Date unlockdt;
 
     /**
      * 鍐叉鏃堕棿
      */
-    @Schema(description = "鍐叉鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     private Date reversaldt;
 
     /**
      * 琛ユ墸鏃堕棿
      */
-    @Schema(description = "琛ユ墸鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     private Date refunddt;
 
     /**
      * 娑堣垂鏃堕棿
      */
-    @Schema(description = "娑堣垂鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     private Date consumedt;
 
     /**
      * 鏈�鍚庢搷浣滅被鍨�;1-寮�鍗★紝2-琛ュ崱锛�3-鍏呭�硷紝4-鎸傚け锛�5-娉ㄩ攢锛�6-瑙i攣锛�7-鍐叉锛�8-娑堣垂
      */
-    @Schema(description = "鏈�鍚庢搷浣滅被鍨�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @Positive(message = "鍗$墖鐘舵�佸繀椤讳负1鍒�8鐨勬鏁存暟")
     @Size(min = 1, max = 8)
     private Byte lastoper;
@@ -156,8 +139,11 @@
     /**
      * 澶囨敞淇℃伅
      */
-    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @Length(message = "澶囨敞闀垮害灏忎簬{max}瀛�", min = 1, max = 200)
     private String remarks;
 
+    /**
+     * 璁㈠崟鍙�
+     */
+    private String orderNo;
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeRechargeHistory.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeRechargeHistory.java
index 09e5094..63a8902 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeRechargeHistory.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeRechargeHistory.java
@@ -17,8 +17,8 @@
 
 /**
  * @author ZhuBaoMin
- * @date 2023/12/7 20:33
- * @LastEditTime 2023/12/7 20:33
+ * @date 2025-06-06 10:34
+ * @LastEditTime 2025-06-06 10:34
  * @Description
  */
 
@@ -32,7 +32,6 @@
 @ToString
 @NoArgsConstructor
 @AllArgsConstructor
-@Schema(name = "姘村崱鍏呭�煎巻鍙插疄浣�")
 public class SeRechargeHistory implements BaseEntity {
     public static final long serialVersionUID = 202401151519002L;
 
@@ -41,31 +40,23 @@
      */
     @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)
-    //@NotBlank(message = "姘村崱ID涓嶈兘涓虹┖")
-    //private String cardnum;
     @NotNull(message = "姘村崱ID涓嶈兘涓虹┖")
     private Long cardid;
 
     /**
      * 鍐滄埛ID
      */
-    @Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    //@NotBlank(message = "鍐滄埛ID涓嶈兘涓虹┖")
-    //private String clientnum;
     @NotNull(message = "鍐滄埛ID涓嶈兘涓虹┖")
     private Long clientid;
 
     /**
      * 鍗$墖浣欓
      */
-    @Schema(description = "鍗$墖浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @NotNull(message = "鍗$墖浣欓涓嶈兘涓虹┖")
     @Length(message = "鍗$墖浣欓涓嶅皬浜巤min}", min = 0)
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
@@ -74,7 +65,6 @@
     /**
      * 鍏呭�奸噾棰�
      */
-    @Schema(description = "鍏呭�奸噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @NotNull(message = "鍏呭�奸噾棰濅笉鑳戒负绌�")
     @Length(message = "鍏呭�奸噾棰濅笉灏忎簬{min}", min = 0)
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
@@ -83,7 +73,6 @@
     /**
      * 璧犻�侀噾棰�
      */
-    @Schema(description = "璧犻�侀噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @Length(message = "璧犻�侀噾棰濅笉灏忎簬{min}", min = 0)
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
     private Float gift;
@@ -91,7 +80,6 @@
     /**
      * 鍏呭�煎悗浣欓
      */
-    @Schema(description = "鍏呭�煎悗浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @Length(message = "鍏呭�煎悗浣欓涓嶅皬浜巤min}", min = 0)
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
     private Float afterrecharge;
@@ -99,14 +87,12 @@
     /**
      * 浠樻鏂瑰紡缂栧彿
      */
-    @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 = "姘翠环涓嶅皬浜巤min}", min = 0)
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
     private Float price;
@@ -114,21 +100,18 @@
     /**
      * 澶囨敞淇℃伅
      */
-    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @Length(message = "澶囨敞闀垮害灏忎簬{max}瀛�", min = 1, max = 200)
     private String remarks;
 
     /**
      * 鎿嶄綔浜篒D
      */
-    @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;
 
     /**
@@ -137,4 +120,9 @@
     @Length(message = "鎿嶄綔鏈夋晥鎬т笉澶т簬{max}锛屼笉灏忎簬{min}", min = 1, max = 2)
     private Byte operateValid;
 
+    /**
+     * 璁㈠崟鍙�
+     */
+    private String orderNo;
+
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoAfterRecharge.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoAfterRecharge.java
new file mode 100644
index 0000000..1c0d9c0
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoAfterRecharge.java
@@ -0,0 +1,23 @@
+package com.dy.pipIrrGlobal.voSe;
+
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-06-06 16:02
+ * @LastEditTime 2025-06-06 16:02
+ * @Description 鍏呭�兼満鐢ㄥ厖鍊煎悗淇℃伅
+ */
+
+@Data
+@JsonPropertyOrder({"balanceAfterRecharge", "operateTime"})
+public class VoAfterRecharge {
+    private static final long serialVersionUID = 202506061605001L;
+
+    private float balanceAfterRecharge;
+
+    private Date operateTime;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
index 84dc129..853405e 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
@@ -1083,6 +1083,29 @@
     );
   </update>
 
+  <!--鍏呭�兼満鐢ㄦ牴鎹鍗曞彿灏嗘搷浣滆褰曟敼涓烘湁鏁�-->
+  <update id="turnOperateValidByOrderNumber">
+    UPDATE se_card_operate
+    SET operate_valid = 2
+    WHERE operate_valid = 1 AND order_no = #{orderNumber}
+  </update>
+
+  <!--鍏呭�兼満鐢ㄨ幏鍙栧厖鍊兼搷浣滃悗鏂扮殑浣欓鍙婂厖鍊兼椂闂�-->
+  <select id="getBalanceAfterRecharge" resultType="com.dy.pipIrrGlobal.voSe.VoAfterRecharge">
+    SELECT
+        (money + trade_amount + gift) AS balanceAfterRecharge,
+        operate_dt AS operateTime
+    FROM se_card_operate
+    WHERE order_no = #{orderNumber}
+  </select>
+
+  <!--鍏呭�兼満鐢ㄦ牴鎹按鍗D鑾峰彇鍚屾鍏呭�艰褰曟暟閲�-->
+  <select id="getPlusRechargeCount" resultType="java.lang.Integer">
+    SELECT COUNT(*)
+    FROM se_card_operate
+    WHERE operate_type = 2 AND order_no = CONCAT((SELECT order_no FROM se_card_operate WHERE operate_type = 1 AND card_id = #{cardId}),'p')
+  </select>
+
   <!--鏍规嵁鎿嶄綔绫诲瀷銆佹按鍗D鑾峰彇鑾峰彇鏈�鍚庝竴鏉¤褰�-->
   <select id="getCardOperate" resultType="com.dy.pipIrrGlobal.pojoSe.SeCardOperate">
     SELECT * FROM se_card_operate
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 ae9b1ff..a6c5b32 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -1,783 +1,784 @@
 <?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.SeClientCardMapper">
-    <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
-        <!--@mbg.generated-->
-        <!--@Table se_client_card-->
-        <id column="id" jdbcType="BIGINT" property="id"/>
-        <result column="protocol" jdbcType="VARCHAR" property="protocol"/>
-        <result column="cardAddr" jdbcType="VARCHAR" property="cardaddr"/>
-        <result column="cardNum" jdbcType="BIGINT" property="cardnum"/>
-        <result column="clientId" jdbcType="BIGINT" property="clientid"/>
-        <result column="money" jdbcType="FLOAT" property="money"/>
-        <result column="state" jdbcType="TINYINT" property="state"/>
-        <result column="original_card_id" jdbcType="BIGINT" property="originalCardId"/>
-        <result column="createDt" jdbcType="TIMESTAMP" property="createdt"/>
-        <result column="replaceDt" jdbcType="TIMESTAMP" property="replacedt"/>
-        <result column="rechargeDt" jdbcType="TIMESTAMP" property="rechargedt"/>
-        <result column="lossDtDt" jdbcType="TIMESTAMP" property="lossdtdt"/>
-        <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-->
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
+    <!--@mbg.generated-->
+    <!--@Table se_client_card-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="protocol" jdbcType="VARCHAR" property="protocol" />
+    <result column="cardAddr" jdbcType="VARCHAR" property="cardaddr" />
+    <result column="cardNum" jdbcType="BIGINT" property="cardnum" />
+    <result column="clientId" jdbcType="BIGINT" property="clientid" />
+    <result column="money" jdbcType="FLOAT" property="money" />
+    <result column="state" jdbcType="TINYINT" property="state" />
+    <result column="original_card_id" jdbcType="BIGINT" property="originalCardId" />
+    <result column="createDt" jdbcType="TIMESTAMP" property="createdt" />
+    <result column="replaceDt" jdbcType="TIMESTAMP" property="replacedt" />
+    <result column="rechargeDt" jdbcType="TIMESTAMP" property="rechargedt" />
+    <result column="lossDtDt" jdbcType="TIMESTAMP" property="lossdtdt" />
+    <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" />
+    <result column="order_no" jdbcType="VARCHAR" property="orderNo" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, protocol, cardAddr, cardNum, clientId, money, `state`, original_card_id, createDt, 
+    replaceDt, rechargeDt, lossDtDt, cancelDt, unlockDt, reversalDt, refundDt, consumeDt, 
+    lastOper, remarks, order_no
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from se_client_card
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from se_client_card
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
+    <!--@mbg.generated-->
+    insert into se_client_card (id, protocol, cardAddr, 
+      cardNum, clientId, money, 
+      `state`, original_card_id, createDt, 
+      replaceDt, rechargeDt, lossDtDt, 
+      cancelDt, unlockDt, reversalDt, 
+      refundDt, consumeDt, lastOper, 
+      remarks, order_no)
+    values (#{id,jdbcType=BIGINT}, #{protocol,jdbcType=VARCHAR}, #{cardaddr,jdbcType=VARCHAR}, 
+      #{cardnum,jdbcType=BIGINT}, #{clientid,jdbcType=BIGINT}, #{money,jdbcType=FLOAT}, 
+      #{state,jdbcType=TINYINT}, #{originalCardId,jdbcType=BIGINT}, #{createdt,jdbcType=TIMESTAMP}, 
+      #{replacedt,jdbcType=TIMESTAMP}, #{rechargedt,jdbcType=TIMESTAMP}, #{lossdtdt,jdbcType=TIMESTAMP}, 
+      #{canceldt,jdbcType=TIMESTAMP}, #{unlockdt,jdbcType=TIMESTAMP}, #{reversaldt,jdbcType=TIMESTAMP}, 
+      #{refunddt,jdbcType=TIMESTAMP}, #{consumedt,jdbcType=TIMESTAMP}, #{lastoper,jdbcType=TINYINT}, 
+      #{remarks,jdbcType=VARCHAR}, #{orderNo,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
+    <!--@mbg.generated-->
+    insert into se_client_card
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
         id,
+      </if>
+      <if test="protocol != null">
         protocol,
+      </if>
+      <if test="cardaddr != null">
         cardAddr,
+      </if>
+      <if test="cardnum != null">
         cardNum,
+      </if>
+      <if test="clientid != null">
         clientId,
+      </if>
+      <if test="money != null">
         money,
+      </if>
+      <if test="state != null">
         `state`,
+      </if>
+      <if test="originalCardId != null">
         original_card_id,
+      </if>
+      <if test="createdt != null">
         createDt,
+      </if>
+      <if test="replacedt != null">
         replaceDt,
+      </if>
+      <if test="rechargedt != null">
         rechargeDt,
+      </if>
+      <if test="lossdtdt != null">
         lossDtDt,
+      </if>
+      <if test="canceldt != null">
         cancelDt,
+      </if>
+      <if test="unlockdt != null">
         unlockDt,
+      </if>
+      <if test="reversaldt != null">
         reversalDt,
+      </if>
+      <if test="refunddt != null">
         refundDt,
+      </if>
+      <if test="consumedt != null">
         consumeDt,
+      </if>
+      <if test="lastoper != null">
         lastOper,
-        remarks
-    </sql>
-    <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
-        <!--@mbg.generated-->
-        select
-        <include refid="Base_Column_List"/>
-        from se_client_card
-        where id = #{id,jdbcType=BIGINT}
-    </select>
-    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
-        <!--@mbg.generated-->
-        delete
-        from se_client_card
-        where id = #{id,jdbcType=BIGINT}
-    </delete>
+      </if>
+      <if test="remarks != null">
+        remarks,
+      </if>
+      <if test="orderNo != null">
+        order_no,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="protocol != null">
+        #{protocol,jdbcType=VARCHAR},
+      </if>
+      <if test="cardaddr != null">
+        #{cardaddr,jdbcType=VARCHAR},
+      </if>
+      <if test="cardnum != null">
+        #{cardnum,jdbcType=BIGINT},
+      </if>
+      <if test="clientid != null">
+        #{clientid,jdbcType=BIGINT},
+      </if>
+      <if test="money != null">
+        #{money,jdbcType=FLOAT},
+      </if>
+      <if test="state != null">
+        #{state,jdbcType=TINYINT},
+      </if>
+      <if test="originalCardId != null">
+        #{originalCardId,jdbcType=BIGINT},
+      </if>
+      <if test="createdt != null">
+        #{createdt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="replacedt != null">
+        #{replacedt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="rechargedt != null">
+        #{rechargedt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="lossdtdt != null">
+        #{lossdtdt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="canceldt != null">
+        #{canceldt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="unlockdt != null">
+        #{unlockdt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="reversaldt != null">
+        #{reversaldt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="refunddt != null">
+        #{refunddt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="consumedt != null">
+        #{consumedt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="lastoper != null">
+        #{lastoper,jdbcType=TINYINT},
+      </if>
+      <if test="remarks != null">
+        #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="orderNo != null">
+        #{orderNo,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
+    <!--@mbg.generated-->
+    update se_client_card
+    <set>
+      <if test="protocol != null">
+        protocol = #{protocol,jdbcType=VARCHAR},
+      </if>
+      <if test="cardaddr != null">
+        cardAddr = #{cardaddr,jdbcType=VARCHAR},
+      </if>
+      <if test="cardnum != null">
+        cardNum = #{cardnum,jdbcType=BIGINT},
+      </if>
+      <if test="clientid != null">
+        clientId = #{clientid,jdbcType=BIGINT},
+      </if>
+      <if test="money != null">
+        money = #{money,jdbcType=FLOAT},
+      </if>
+      <if test="state != null">
+        `state` = #{state,jdbcType=TINYINT},
+      </if>
+      <if test="originalCardId != null">
+        original_card_id = #{originalCardId,jdbcType=BIGINT},
+      </if>
+      <if test="createdt != null">
+        createDt = #{createdt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="replacedt != null">
+        replaceDt = #{replacedt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="rechargedt != null">
+        rechargeDt = #{rechargedt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="lossdtdt != null">
+        lossDtDt = #{lossdtdt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="canceldt != null">
+        cancelDt = #{canceldt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="unlockdt != null">
+        unlockDt = #{unlockdt,jdbcType=TIMESTAMP},
+      </if>
+      <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>
+      <if test="lastoper != null">
+        lastOper = #{lastoper,jdbcType=TINYINT},
+      </if>
+      <if test="remarks != null">
+        remarks = #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="orderNo != null">
+        order_no = #{orderNo,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
+    <!--@mbg.generated-->
+    update se_client_card
+    set protocol = #{protocol,jdbcType=VARCHAR},
+      cardAddr = #{cardaddr,jdbcType=VARCHAR},
+      cardNum = #{cardnum,jdbcType=BIGINT},
+      clientId = #{clientid,jdbcType=BIGINT},
+      money = #{money,jdbcType=FLOAT},
+      `state` = #{state,jdbcType=TINYINT},
+      original_card_id = #{originalCardId,jdbcType=BIGINT},
+      createDt = #{createdt,jdbcType=TIMESTAMP},
+      replaceDt = #{replacedt,jdbcType=TIMESTAMP},
+      rechargeDt = #{rechargedt,jdbcType=TIMESTAMP},
+      lossDtDt = #{lossdtdt,jdbcType=TIMESTAMP},
+      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},
+      order_no = #{orderNo,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
 
-    <!--渚濇嵁姘村崱鍦板潃鑾峰彇姘村崱缂栧彿锛�12鏈�19鏃ュ簾寮冿級-->
-    <!--2024-06-30鍙栨秷搴熷純锛屾仮澶嶄娇鐢�-->
-    <select id="getCardIdByAddr" resultType="java.lang.Long">
-        SELECT id AS cardId
-        FROM se_client_card
-        WHERE cardAddr = #{cardAddr}
-        ORDER BY id DESC
-        LIMIT 1
-    </select>
+  <!--渚濇嵁姘村崱鍦板潃鑾峰彇姘村崱缂栧彿锛�12鏈�19鏃ュ簾寮冿級-->
+  <!--2024-06-30鍙栨秷搴熷純锛屾仮澶嶄娇鐢�-->
+  <select id="getCardIdByAddr" resultType="java.lang.Long">
+    SELECT id AS cardId
+    FROM se_client_card
+    WHERE cardAddr = #{cardAddr}
+    ORDER BY id DESC
+    LIMIT 1
+  </select>
 
-    <!--鏍规嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿紙12鏈�19鏃ユ坊鍔犲悗搴熷純锛�-->
-    <select id="getCardIdByNum" resultType="java.lang.Long">
-        SELECT id AS cardId
-        FROM se_client_card
-        WHERE cardNum = #{cardNum}
-    </select>
+  <!--鏍规嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿紙12鏈�19鏃ユ坊鍔犲悗搴熷純锛�-->
+  <select id="getCardIdByNum" resultType="java.lang.Long">
+    SELECT id AS cardId
+    FROM se_client_card
+    WHERE cardNum = #{cardNum}
+  </select>
 
-    <!--鏍规嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿-->
-    <select id="getCardIdAndClientNum" resultType="java.util.Map">
-        <!--    SELECT id AS cardId, clientNum FROM se_client_card WHERE cardNum = #{cardNum}-->
-        SELECT card.id AS cardId,
-               cli.clientNum,
-               cli.id  AS clientId,
-               protocol
-        FROM se_client_card card
-                 INNER JOIN se_client cli ON card.clientId = cli.id
-        WHERE card.cardNum = #{cardNum}
-    </select>
+  <!--鏍规嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿-->
+  <select id="getCardIdAndClientNum" resultType="java.util.Map">
+    <!--    SELECT id AS cardId, clientNum FROM se_client_card WHERE cardNum = #{cardNum}-->
+    SELECT card.id AS cardId,
+    cli.clientNum,
+    cli.id  AS clientId,
+    protocol
+    FROM se_client_card card
+    INNER JOIN se_client cli ON card.clientId = cli.id
+    WHERE card.cardNum = #{cardNum}
+  </select>
 
-    <!-- 鏍规嵁姘村崱缂栧彿鑾峰彇姘村崱瀵瑰簲鐨勫啘鎴穒d鍜屽鍚� -->
-    <select id="getClientIdAndNameByCardAddrAndCardNo" resultType="java.util.Map">
-        SELECT cli.id   AS clientId,
-               cli.name AS clientName,
-               cli.address AS clientAddress
-        FROM se_client_card card
-                 INNER JOIN se_client cli ON card.clientId = cli.id
-        WHERE card.cardAddr = #{cardAddr}
-          and card.cardNum = #{cardNum}
-    </select>
+  <!-- 鏍规嵁姘村崱缂栧彿鑾峰彇姘村崱瀵瑰簲鐨勫啘鎴穒d鍜屽鍚� -->
+  <select id="getClientIdAndNameByCardAddrAndCardNo" resultType="java.util.Map">
+    SELECT cli.id   AS clientId,
+    cli.name AS clientName,
+    cli.address AS clientAddress
+    FROM se_client_card card
+    INNER JOIN se_client cli ON card.clientId = cli.id
+    WHERE card.cardAddr = #{cardAddr}
+    and card.cardNum = #{cardNum}
+  </select>
 
 
-    <!-- 鏍规嵁姘村崱缂栧彿鑾峰彇姘村崱 -->
-    <select id="getCardsByAddrAndNum" resultType="com.dy.pipIrrGlobal.voSe.VoCardInfo1">
-        SELECT id,
-               money
-        FROM se_client_card
-        WHERE cardAddr = #{cardAddr}
-          and cardNum = #{cardNum}
-    </select>
+  <!-- 鏍规嵁姘村崱缂栧彿鑾峰彇姘村崱 -->
+  <select id="getCardsByAddrAndNum" resultType="com.dy.pipIrrGlobal.voSe.VoCardInfo1">
+    SELECT id,
+    money
+    FROM se_client_card
+    WHERE cardAddr = #{cardAddr}
+    and cardNum = #{cardNum}
+  </select>
 
-    <!--鏍规嵁琛屾斂鍖哄垝涓叉ā绯婃煡璇㈡按鍗$紪鍙�-->
-    <select id="getCardNumOfMax" resultType="java.lang.String">
-        SELECT cardNum
-        FROM se_client_card
-        WHERE cardNum LIKE CONCAT(#{areaCode}, '%')
-        ORDER BY cardNum desc
-        LIMIT 0,1
-    </select>
+  <!--鏍规嵁琛屾斂鍖哄垝涓叉ā绯婃煡璇㈡按鍗$紪鍙�-->
+  <select id="getCardNumOfMax" resultType="java.lang.String">
+    SELECT cardNum
+    FROM se_client_card
+    WHERE cardNum LIKE CONCAT(#{areaCode}, '%')
+    ORDER BY cardNum desc
+    LIMIT 0,1
+  </select>
 
-    <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
-        <!--@mbg.generated-->
-        insert into se_client_card (id, protocol, cardAddr, cardNum, clientId,
-                                    money, `state`, original_card_id, createDt,
-                                    replaceDt, rechargeDt, lossDtDt,
-                                    cancelDt, unlockDt, reversalDt, refundDt,
-                                    consumeDt, lastOper, remarks)
-        values (#{id,jdbcType=BIGINT}, #{protocol,jdbcType=VARCHAR}, #{cardaddr,jdbcType=VARCHAR},
-                #{cardnum,jdbcType=BIGINT}, #{clientid,jdbcType=BIGINT},
-                #{money,jdbcType=FLOAT}, #{state,jdbcType=TINYINT}, #{originalCardId,jdbcType=BIGINT},
-                #{createdt,jdbcType=TIMESTAMP},
-                #{replacedt,jdbcType=TIMESTAMP}, #{rechargedt,jdbcType=TIMESTAMP}, #{lossdtdt,jdbcType=TIMESTAMP},
-                #{canceldt,jdbcType=TIMESTAMP}, #{unlockdt,jdbcType=TIMESTAMP}, #{reversaldt,jdbcType=TIMESTAMP},
-                #{refunddt,jdbcType=TIMESTAMP}, #{consumedt,jdbcType=TIMESTAMP}, #{lastoper,jdbcType=TINYINT},
-                #{remarks,jdbcType=VARCHAR})
-    </insert>
-    <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard"
-            useGeneratedKeys="true">
-        <!--@mbg.generated-->
-        insert into se_client_card
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null">
-                id,
-            </if>
-            <if test="protocol != null">
-                protocol,
-            </if>
-            <if test="cardaddr != null">
-                cardAddr,
-            </if>
-            <if test="cardnum != null">
-                cardNum,
-            </if>
-            <if test="clientid != null">
-                clientId,
-            </if>
-            <if test="money != null">
-                money,
-            </if>
-            <if test="state != null">
-                `state`,
-            </if>
-            <if test="originalCardId != null">
-                original_card_id,
-            </if>
-            <if test="createdt != null">
-                createDt,
-            </if>
-            <if test="replacedt != null">
-                replaceDt,
-            </if>
-            <if test="rechargedt != null">
-                rechargeDt,
-            </if>
-            <if test="lossdtdt != null">
-                lossDtDt,
-            </if>
-            <if test="canceldt != null">
-                cancelDt,
-            </if>
-            <if test="unlockdt != null">
-                unlockDt,
-            </if>
-            <if test="reversaldt != null">
-                reversalDt,
-            </if>
-            <if test="refunddt != null">
-                refundDt,
-            </if>
-            <if test="consumedt != null">
-                consumeDt,
-            </if>
-            <if test="lastoper != null">
-                lastOper,
-            </if>
-            <if test="remarks != null">
-                remarks,
-            </if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null">
-                #{id,jdbcType=BIGINT},
-            </if>
-            <if test="protocol != null">
-                #{protocol,jdbcType=VARCHAR},
-            </if>
-            <if test="cardaddr != null">
-                #{cardaddr,jdbcType=VARCHAR},
-            </if>
-            <if test="cardnum != null">
-                #{cardnum,jdbcType=BIGINT},
-            </if>
-            <if test="clientid != null">
-                #{clientid,jdbcType=BIGINT},
-            </if>
-            <if test="money != null">
-                #{money,jdbcType=FLOAT},
-            </if>
-            <if test="state != null">
-                #{state,jdbcType=TINYINT},
-            </if>
-            <if test="originalCardId != null">
-                #{originalCardId,jdbcType=BIGINT},
-            </if>
-            <if test="createdt != null">
-                #{createdt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="replacedt != null">
-                #{replacedt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="rechargedt != null">
-                #{rechargedt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="lossdtdt != null">
-                #{lossdtdt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="canceldt != null">
-                #{canceldt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="unlockdt != null">
-                #{unlockdt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="reversaldt != null">
-                #{reversaldt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="refunddt != null">
-                #{refunddt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="consumedt != null">
-                #{consumedt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="lastoper != null">
-                #{lastoper,jdbcType=TINYINT},
-            </if>
-            <if test="remarks != null">
-                #{remarks,jdbcType=VARCHAR},
-            </if>
-        </trim>
-    </insert>
-    <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
-        <!--@mbg.generated-->
-        update se_client_card
-        <set>
-            <if test="protocol != null">
-                protocol = #{protocol,jdbcType=VARCHAR},
-            </if>
-            <if test="cardaddr != null">
-                cardAddr = #{cardaddr,jdbcType=VARCHAR},
-            </if>
-            <if test="cardnum != null">
-                cardNum = #{cardnum,jdbcType=BIGINT},
-            </if>
-            <if test="clientid != null">
-                clientId = #{clientid,jdbcType=BIGINT},
-            </if>
-            <if test="money != null">
-                money = #{money,jdbcType=FLOAT},
-            </if>
-            <if test="state != null">
-                `state` = #{state,jdbcType=TINYINT},
-            </if>
-            <if test="originalCardId != null">
-                `original_card_id` = #{originalCardId,jdbcType=BIGINT},
-            </if>
-            <if test="createdt != null">
-                createDt = #{createdt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="replacedt != null">
-                replaceDt = #{replacedt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="rechargedt != null">
-                rechargeDt = #{rechargedt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="lossdtdt != null">
-                lossDtDt = #{lossdtdt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="canceldt != null">
-                cancelDt = #{canceldt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="unlockdt != null">
-                unlockDt = #{unlockdt,jdbcType=TIMESTAMP},
-            </if>
-            <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>
-            <if test="lastoper != null">
-                lastOper = #{lastoper,jdbcType=TINYINT},
-            </if>
-            <if test="remarks != null">
-                remarks = #{remarks,jdbcType=VARCHAR},
-            </if>
-        </set>
-        where id = #{id,jdbcType=BIGINT}
-    </update>
-    <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
-        <!--@mbg.generated-->
-        update se_client_card
-        set protocol         = #{protocol,jdbcType=VARCHAR},
-            cardAddr         = #{cardaddr,jdbcType=VARCHAR},
-            cardNum          = #{cardnum,jdbcType=BIGINT},
-            clientId         = #{clientid,jdbcType=BIGINT},
-            money            = #{money,jdbcType=FLOAT},
-            `state`          = #{state,jdbcType=TINYINT},
-            original_card_id = #{originalCardId,jdbcType=BIGINT},
-            createDt         = #{createdt,jdbcType=TIMESTAMP},
-            replaceDt        = #{replacedt,jdbcType=TIMESTAMP},
-            rechargeDt       = #{rechargedt,jdbcType=TIMESTAMP},
-            lossDtDt         = #{lossdtdt,jdbcType=TIMESTAMP},
-            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}
-        where id = #{id,jdbcType=BIGINT}
-    </update>
-    <update id="updateMoney">
-        update se_client_card
-        set money = #{money,jdbcType=FLOAT}
-        where id = #{id,jdbcType=BIGINT}
-    </update>
-    <!--鏍规嵁鍐滄埛涓婚敭鑾峰彇姘村崱鍒楄〃锛堢墿鐞嗗崱+铏氭嫙鍗★級-->
-    <select id="getCardInfoByClientId" resultType="com.dy.pipIrrGlobal.voSe.VoCardInfo">
-        SELECT *
-        FROM (SELECT
-                '鐗╃悊鍗�' AS cardType,
-                card.cardNum AS cardNum,
-                card.money   AS money,
-                (CASE
-                    WHEN card.state = 1 THEN '姝e父'
-                    WHEN card.state = 2 THEN '宸叉敞閿�'
-                    ELSE '宸叉寕澶�'
-                END) AS state
-              FROM se_client_card card
-                INNER JOIN se_client cli ON cli.id = card.clientId
-              WHERE state != 4 AND card.clientId = #{clientId,jdbcType=BIGINT}
-              UNION ALL
-              SELECT
-                '铏氭嫙鍗�' AS cardType,
-                vc.vc_num AS cardNum,
-                ROUND(vc.money /100, 2)  AS money,
-                (CASE
-                    WHEN vc.in_use = 0 THEN '鏈娇鐢�'
-                    WHEN vc.in_use = 1 THEN '浣跨敤涓�'
-                END) AS state
-              FROM se_virtual_card vc
-                INNER JOIN se_client cli ON cli.id = vc.client_id
-              WHERE vc.state = 1 AND vc.client_id = #{clientId,jdbcType=BIGINT}
-        ) card
-        ORDER BY card.Money DESC, card.State DESC
-    </select>
+  <update id="updateMoney">
+    update se_client_card
+    set money = #{money,jdbcType=FLOAT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <!--鏍规嵁鍐滄埛涓婚敭鑾峰彇姘村崱鍒楄〃锛堢墿鐞嗗崱+铏氭嫙鍗★級-->
+  <select id="getCardInfoByClientId" resultType="com.dy.pipIrrGlobal.voSe.VoCardInfo">
+    SELECT *
+    FROM (SELECT
+    '鐗╃悊鍗�' AS cardType,
+    card.cardNum AS cardNum,
+    card.money   AS money,
+    (CASE
+    WHEN card.state = 1 THEN '姝e父'
+    WHEN card.state = 2 THEN '宸叉敞閿�'
+    ELSE '宸叉寕澶�'
+    END) AS state
+    FROM se_client_card card
+    INNER JOIN se_client cli ON cli.id = card.clientId
+    WHERE state != 4 AND card.clientId = #{clientId,jdbcType=BIGINT}
+    UNION ALL
+    SELECT
+    '铏氭嫙鍗�' AS cardType,
+    vc.vc_num AS cardNum,
+    ROUND(vc.money /100, 2)  AS money,
+    (CASE
+    WHEN vc.in_use = 0 THEN '鏈娇鐢�'
+    WHEN vc.in_use = 1 THEN '浣跨敤涓�'
+    END) AS state
+    FROM se_virtual_card vc
+    INNER JOIN se_client cli ON cli.id = vc.client_id
+    WHERE vc.state = 1 AND vc.client_id = #{clientId,jdbcType=BIGINT}
+    ) card
+    ORDER BY card.Money DESC, card.State DESC
+  </select>
 
-    <!--鏍规嵁姘村崱缂栧彿鑾峰彇鎿嶄綔璁板綍鍒楄〃-->
-    <select id="getOperateRecordsByCardNum" resultType="java.util.HashMap">
-        SELECT
-            ope.id AS orderNumber,
-            cli.villageId,
-            cli.districtTitle,
-            cli.clientNum,
-            cli.`name`,
-            card.cardNum,
-            cli.idCard,
-            cli.phone,
-            IFNULL(ope.money,0) AS money,
-            IFNULL(ope.gift,0) AS gift,
-            IFNULL(ope.card_cost,0) AS cardCost,
-            IFNULL((ope.money + ope.trade_amount + ope.gift),0) AS afterRecharge,
-            ope.payment_id AS paymentId,
-            pay.name AS paymentMethod,
-            CASE
-            WHEN ope.operate_type = 1 THEN '寮�鍗�'
-            WHEN ope.operate_type = 2 THEN '鍏呭��'
-            WHEN ope.operate_type = 3 THEN '閿�鍗�'
-            END AS operateType,
-            ope.operate_dt AS operateDt,
-            user.name AS operatorName
-        FROM se_card_operate ope
-            LEFT JOIN se_client cli ON cli.id = ope.client_id
-            LEFT JOIN se_client_card card ON card.id = ope.card_id
-            LEFT JOIN se_payment_method pay ON pay.id = ope.payment_id
-            LEFT JOIN ba_user user ON user.id = ope.operator
-        WHERE ope.operate_valid = 2 AND ope.operate_type in (1,2,3) AND cardNum = #{cardNum,jdbcType=BIGINT}
-<!--        SELECT *-->
-<!--        FROM v_operate-->
-<!--        WHERE cardNum = #{cardNum,jdbcType=BIGINT}-->
-    </select>
+  <!--鏍规嵁姘村崱缂栧彿鑾峰彇鎿嶄綔璁板綍鍒楄〃-->
+  <select id="getOperateRecordsByCardNum" resultType="java.util.HashMap">
+    SELECT
+    ope.id AS orderNumber,
+    cli.villageId,
+    cli.districtTitle,
+    cli.clientNum,
+    cli.`name`,
+    card.cardNum,
+    cli.idCard,
+    cli.phone,
+    IFNULL(ope.money,0) AS money,
+    IFNULL(ope.gift,0) AS gift,
+    IFNULL(ope.card_cost,0) AS cardCost,
+    IFNULL((ope.money + ope.trade_amount + ope.gift),0) AS afterRecharge,
+    ope.payment_id AS paymentId,
+    pay.name AS paymentMethod,
+    CASE
+    WHEN ope.operate_type = 1 THEN '寮�鍗�'
+    WHEN ope.operate_type = 2 THEN '鍏呭��'
+    WHEN ope.operate_type = 3 THEN '閿�鍗�'
+    END AS operateType,
+    ope.operate_dt AS operateDt,
+    user.name AS operatorName
+    FROM se_card_operate ope
+    LEFT JOIN se_client cli ON cli.id = ope.client_id
+    LEFT JOIN se_client_card card ON card.id = ope.card_id
+    LEFT JOIN se_payment_method pay ON pay.id = ope.payment_id
+    LEFT JOIN ba_user user ON user.id = ope.operator
+    WHERE ope.operate_valid = 2 AND ope.operate_type in (1,2,3) AND cardNum = #{cardNum,jdbcType=BIGINT}
+    <!--        SELECT *-->
+    <!--        FROM v_operate-->
+    <!--        WHERE cardNum = #{cardNum,jdbcType=BIGINT}-->
+  </select>
 
-    <!--鏍规嵁姘村崱缂栧彿鑾峰彇浣欓-->
-    <select id="getMoneyByCardNum" resultType="java.lang.Float">
-        SELECT money
-        FROM se_client_card
-        WHERE cardNum = #{cardNum,jdbcType=BIGINT}
-    </select>
+  <!--鏍规嵁姘村崱缂栧彿鑾峰彇浣欓-->
+  <select id="getMoneyByCardNum" resultType="java.lang.Float">
+    SELECT money
+    FROM se_client_card
+    WHERE cardNum = #{cardNum,jdbcType=BIGINT}
+  </select>
 
-    <!--鏍规嵁姘村崱缂栧彿鑾峰彇鍏呭�兼�婚-->
-    <select id="sumRechargeByCardNum" resultType="java.lang.Float">
-        SELECT SUM(his.amount) AS amount
-        FROM se_recharge_history his
-                 INNER JOIN se_client_card card ON his.cardId = card.id
-        WHERE card.cardNum = #{cardNum,jdbcType=BIGINT}
-    </select>
+  <!--鏍规嵁姘村崱缂栧彿鑾峰彇鍏呭�兼�婚-->
+  <select id="sumRechargeByCardNum" resultType="java.lang.Float">
+    SELECT SUM(his.amount) AS amount
+    FROM se_recharge_history his
+    INNER JOIN se_client_card card ON his.cardId = card.id
+    WHERE card.cardNum = #{cardNum,jdbcType=BIGINT}
+  </select>
 
-    <!--鏍规嵁姘村崱缂栧彿鑾峰彇鍗$墖鐘舵�侊細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 state = 1 THEN '姝e父'
-                    WHEN state = 2 THEN '宸叉敞閿�'
-                    WHEN state = 3 THEN '宸叉寕澶�'
-                    WHEN state = 4 THEN '鏃犳晥鍗$墖'
-            END) AS stateName
-        FROM se_client_card
-        WHERE cardNum = #{cardNum,jdbcType=BIGINT}
-    </select>
+  <!--鏍规嵁姘村崱缂栧彿鑾峰彇鍗$墖鐘舵�侊細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 state = 1 THEN '姝e父'
+    WHEN state = 2 THEN '宸叉敞閿�'
+    WHEN state = 3 THEN '宸叉寕澶�'
+    WHEN state = 4 THEN '鏃犳晥鍗$墖'
+    END) AS stateName
+    FROM se_client_card
+    WHERE cardNum = #{cardNum,jdbcType=BIGINT}
+  </select>
 
-    <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃璁板綍鏁帮紝搴旂敤绋嬪簭浣跨敤-->
-    <select id="getCardsCount" parameterType="java.util.Map" resultType="java.lang.Long">
-        SELECT COUNT(*) AS recordCount
-        FROM se_client_card card
-            LEFT JOIN se_client cli ON card.clientId = cli.id
-        <where>
-            AND card.state = 1
-            <if test="clientNum != null and clientNum != ''">
-                AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
-            </if>
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃璁板綍鏁帮紝搴旂敤绋嬪簭浣跨敤-->
+  <select id="getCardsCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT COUNT(*) AS recordCount
+    FROM se_client_card card
+    LEFT JOIN se_client cli ON card.clientId = cli.id
+    <where>
+      AND card.state = 1
+      <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="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>
+      <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,
-            cardNum,
-            cli.phone,
-            cli.idCard,
-            card.state AS cardState,
-            '姝e父' AS stateName,
-            '鍐滄埛鍗�' AS cardType,
-            FORMAT(card.money, 2) AS money
-        FROM se_client_card card
-            LEFT JOIN se_client cli ON card.clientId = cli.id
-        <where>
-            AND card.state = 1
-            <if test="clientNum != null and clientNum != ''">
-                AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
-            </if>
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃锛屽簲鐢ㄧ▼搴忎娇鐢�-->
+  <select id="getCards" resultType="com.dy.pipIrrGlobal.voSe.VoCards">
+    SELECT cli.clientNum,
+    cli.name AS clientName,
+    cardNum,
+    cli.phone,
+    cli.idCard,
+    card.state AS cardState,
+    '姝e父' AS stateName,
+    '鍐滄埛鍗�' AS cardType,
+    FORMAT(card.money, 2) AS money
+    FROM se_client_card card
+    LEFT JOIN se_client cli ON card.clientId = cli.id
+    <where>
+      AND card.state = 1
+      <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="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
-        <trim prefix="limit ">
-            <if test="start != null and count != null">
-                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
-            </if>
-        </trim>
-    </select>
+      <if test="cardNum != null and cardNum != ''">
+        AND card.cardNum like CONCAT('%', #{cardNum}, '%')
+      </if>
+    </where>
+    ORDER BY card.id
+    <trim prefix="limit ">
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
 
-    <!--鑾峰彇宸叉寕澶辨湭琛ュ崱鐨勮褰曟暟閲�-->
-    <select id="getUnreplacedRecordCount" resultType="java.lang.Long">
-        SELECT COUNT(*) AS recordCount
-        FROM se_client_card card
-                 INNER JOIN se_client cli ON card.clientId = cli.id
-        WHERE card.state = 3
-          AND NOT EXISTS(SELECT * FROM se_client_card card2 WHERE card2.original_card_id = card.cardNum)
-    </select>
+  <!--鑾峰彇宸叉寕澶辨湭琛ュ崱鐨勮褰曟暟閲�-->
+  <select id="getUnreplacedRecordCount" resultType="java.lang.Long">
+    SELECT COUNT(*) AS recordCount
+    FROM se_client_card card
+           INNER JOIN se_client cli ON card.clientId = cli.id
+    WHERE card.state = 3
+      AND NOT EXISTS(SELECT * FROM se_client_card card2 WHERE card2.original_card_id = card.cardNum)
+  </select>
 
-    <!--鑾峰彇宸叉寕澶辨湭琛ュ崱鐨勮褰�-->
-    <select id="getUnreplaced" resultType="com.dy.pipIrrGlobal.voSe.VoCards">
-        SELECT
-            cli.clientNum,
-            cli.name AS clientName,
-            cardNum,
-            cli.phone,
-            cli.idCard,
-            card.state AS cardState,
-            '宸叉寕澶�' AS stateName,
-            '鍐滄埛鍗�' AS cardType,
-            FORMAT(card.money, 2) AS money
-        FROM se_client_card card
-            INNER JOIN se_client cli ON card.clientId = cli.id
-        WHERE card.state = 3
-            AND NOT EXISTS(SELECT * FROM se_client_card card2 WHERE card2.original_card_id = card.id)
-        ORDER BY card.id
-        <trim prefix="limit ">
-            <if test="start != null and count != null">
-                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
-            </if>
-        </trim>
-    </select>
+  <!--鑾峰彇宸叉寕澶辨湭琛ュ崱鐨勮褰�-->
+  <select id="getUnreplaced" resultType="com.dy.pipIrrGlobal.voSe.VoCards">
+    SELECT
+    cli.clientNum,
+    cli.name AS clientName,
+    cardNum,
+    cli.phone,
+    cli.idCard,
+    card.state AS cardState,
+    '宸叉寕澶�' AS stateName,
+    '鍐滄埛鍗�' AS cardType,
+    FORMAT(card.money, 2) AS money
+    FROM se_client_card card
+    INNER JOIN se_client cli ON card.clientId = cli.id
+    WHERE card.state = 3
+    AND NOT EXISTS(SELECT * FROM se_client_card card2 WHERE card2.original_card_id = card.id)
+    ORDER BY card.id
+    <trim prefix="limit ">
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
 
-    <!--鏍规嵁鎸囧畾姘村崱缂栧彿鑾峰彇鎸傚け璁板綍鏁伴噺锛堣ˉ鍗°�佽В閿佷娇鐢級-->
-    <select id="getLostCount" resultType="java.lang.Integer">
-        SELECT COUNT(*) AS recordCount
-        FROM se_client_card card
-        <where>
-            AND card.state = 3
-            <if test="cardNum != null and cardNum > 0">
-                AND card.cardNum = #{cardNum}
-            </if>
-        </where>
-    </select>
+  <!--鏍规嵁鎸囧畾姘村崱缂栧彿鑾峰彇鎸傚け璁板綍鏁伴噺锛堣ˉ鍗°�佽В閿佷娇鐢級-->
+  <select id="getLostCount" resultType="java.lang.Integer">
+    SELECT COUNT(*) AS recordCount
+    FROM se_client_card card
+    <where>
+      AND card.state = 3
+      <if test="cardNum != null and cardNum > 0">
+        AND card.cardNum = #{cardNum}
+      </if>
+    </where>
+  </select>
 
-    <!--鏍规嵁鎸囧畾姘村崱缂栧彿鑾峰彇宸茶ˉ鍗℃暟閲忥紙琛ュ崱銆佽В閿佷娇鐢級-->
-    <select id="getReplacedCount" resultType="java.lang.Integer">
-        SELECT COUNT(*) AS recordCount
-        FROM se_client_card card
-                 INNER JOIN se_client_card card2 ON card2.original_card_id = card.id
-        <where>
-            <if test="cardNum != null and cardNum > 0">
-                AND card.cardNum = #{cardNum}
-            </if>
-        </where>
-    </select>
-    <!--鏍规嵁鍐滄埛濮撳悕鍜屾墜鏈哄彿鑾峰彇姘村崱鍒楄〃璁板綍鏁帮紝搴旂敤绋嬪簭浣跨敤-->
-    <select id="getCardsByClientNameAndPhoneCount" resultType="java.lang.Long">
-        SELECT COUNT(*) AS recordCount
-        FROM se_client_card card
-            INNER JOIN se_client cli ON card.clientId = cli.id
-        <where>
-            card.state = 1
-            <if test="clientName != null and clientName != ''">
-                AND cli.name like CONCAT('%', #{clientName}, '%')
-            </if>
+  <!--鏍规嵁鎸囧畾姘村崱缂栧彿鑾峰彇宸茶ˉ鍗℃暟閲忥紙琛ュ崱銆佽В閿佷娇鐢級-->
+  <select id="getReplacedCount" resultType="java.lang.Integer">
+    SELECT COUNT(*) AS recordCount
+    FROM se_client_card card
+    INNER JOIN se_client_card card2 ON card2.original_card_id = card.id
+    <where>
+      <if test="cardNum != null and cardNum > 0">
+        AND card.cardNum = #{cardNum}
+      </if>
+    </where>
+  </select>
+  <!--鏍规嵁鍐滄埛濮撳悕鍜屾墜鏈哄彿鑾峰彇姘村崱鍒楄〃璁板綍鏁帮紝搴旂敤绋嬪簭浣跨敤-->
+  <select id="getCardsByClientNameAndPhoneCount" resultType="java.lang.Long">
+    SELECT COUNT(*) AS recordCount
+    FROM se_client_card card
+    INNER JOIN se_client cli ON card.clientId = cli.id
+    <where>
+      card.state = 1
+      <if test="clientName != null and clientName != ''">
+        AND cli.name like CONCAT('%', #{clientName}, '%')
+      </if>
 
-            <if test="phone != null and phone != ''">
-                AND cli.phone like CONCAT('%', #{phone}, '%')
-            </if>
-        </where>
-    </select>
-    <!--鏍规嵁鍐滄埛濮撳悕鍜屾墜鏈哄彿鑾峰彇姘村崱鍒楄〃锛屽簲鐢ㄧ▼搴忎娇鐢�-->
-    <select id="getCardsByClientNameAndPhone" resultType="com.dy.pipIrrGlobal.voSe.VoCards2">
-        SELECT card.id               AS clientCardId,
-               cli.id                AS clientId,
-               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,
-               FORMAT(card.money, 2) AS money
-        FROM se_client_card card
-            LEFT JOIN se_client cli ON card.clientId = cli.id
-        <where>
-            card.state = 1
-            <if test="clientName != null and clientName != ''">
-                AND cli.name like CONCAT('%', #{clientName}, '%')
-            </if>
+      <if test="phone != null and phone != ''">
+        AND cli.phone like CONCAT('%', #{phone}, '%')
+      </if>
+    </where>
+  </select>
+  <!--鏍规嵁鍐滄埛濮撳悕鍜屾墜鏈哄彿鑾峰彇姘村崱鍒楄〃锛屽簲鐢ㄧ▼搴忎娇鐢�-->
+  <select id="getCardsByClientNameAndPhone" resultType="com.dy.pipIrrGlobal.voSe.VoCards2">
+    SELECT card.id               AS clientCardId,
+    cli.id                AS clientId,
+    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,
+    FORMAT(card.money, 2) AS money
+    FROM se_client_card card
+    LEFT JOIN se_client cli ON card.clientId = cli.id
+    <where>
+      card.state = 1
+      <if test="clientName != null and clientName != ''">
+        AND cli.name like CONCAT('%', #{clientName}, '%')
+      </if>
 
-            <if test="phone != null and phone != ''">
-                AND cli.phone like CONCAT('%', #{phone}, '%')
-            </if>
-        </where>
-        ORDER BY card.id
-        <trim prefix="limit ">
-            <if test="start != null and count != null">
-                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
-            </if>
-        </trim>
-    </select>
-    <!--鏍规嵁鍐滄埛ID鏌ヨ姝e父鐘舵�佺殑姘村崱鍒楄〃,灏忕▼搴忎娇鐢�-->
-    <select id="getCardsByClientID" resultType="com.dy.pipIrrGlobal.voWe.VoCards3">
-        SELECT card.id               AS clientCardId,
-               cli.id                AS clientId,
-               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,
-               FORMAT(card.money, 2) AS money
-        FROM se_client_card card
-                 INNER JOIN se_client cli ON card.clientId = cli.id
-        where card.state = 1
-          AND cli.id like CONCAT('%', #{clientId}, '%')
+      <if test="phone != null and phone != ''">
+        AND cli.phone like CONCAT('%', #{phone}, '%')
+      </if>
+    </where>
+    ORDER BY card.id
+    <trim prefix="limit ">
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+  <!--鏍规嵁鍐滄埛ID鏌ヨ姝e父鐘舵�佺殑姘村崱鍒楄〃,灏忕▼搴忎娇鐢�-->
+  <select id="getCardsByClientID" resultType="com.dy.pipIrrGlobal.voWe.VoCards3">
+    SELECT card.id               AS clientCardId,
+    cli.id                AS clientId,
+    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,
+    FORMAT(card.money, 2) AS money
+    FROM se_client_card card
+    INNER JOIN se_client cli ON card.clientId = cli.id
+    where card.state = 1
+    AND cli.id like CONCAT('%', #{clientId}, '%')
 
 
-        ORDER BY card.id
-    </select>
-    <!--褰撳墠浣欓鎬婚噺锛堢墿鐞嗗崱锛�-->
-    <select id="getTotalMoneyIcCards" resultType="java.lang.Double">
-        SELECT IFNULL(SUM(money), 0) AS totalMoney
-        FROM `se_client_card`
-        WHERE state = 1
-    </select>
+    ORDER BY card.id
+  </select>
+  <!--褰撳墠浣欓鎬婚噺锛堢墿鐞嗗崱锛�-->
+  <select id="getTotalMoneyIcCards" resultType="java.lang.Double">
+    SELECT IFNULL(SUM(money), 0) AS totalMoney
+    FROM `se_client_card`
+    WHERE state = 1
+  </select>
 
-    <!--鏍规嵁姘村崱鍦板潃鑾峰彇姘村崱鏁伴噺锛屾棤鏁堝崱鐗囨帓闄ゅ湪澶�-->
-    <select id="getCountByCardAddr" resultType="java.lang.Long">
-        SELECT COUNT(*) AS recordCount
-        FROM se_client_card
-        WHERE cardAddr = #{cardAddr} AND se_client_card.state != 4
-    </select>
+  <!--鏍规嵁姘村崱鍦板潃鑾峰彇姘村崱鏁伴噺锛屾棤鏁堝崱鐗囨帓闄ゅ湪澶�-->
+  <select id="getCountByCardAddr" resultType="java.lang.Long">
+    SELECT COUNT(*) AS recordCount
+    FROM se_client_card
+    WHERE cardAddr = #{cardAddr} AND se_client_card.state != 4
+  </select>
 
-    <!--鏍规嵁姘村崱鍦板潃鑾峰彇鎸囧畾鐘舵�佺殑姘村崱鏁伴噺-->
-    <select id="getCountByCardAddrAndState" resultType="java.lang.Long">
-        SELECT COUNT(*) AS recordCount
-        FROM se_client_card
-        WHERE cardAddr = #{cardAddr}
-          AND state IN (1, 3)
-    </select>
+  <!--鏍规嵁姘村崱鍦板潃鑾峰彇鎸囧畾鐘舵�佺殑姘村崱鏁伴噺-->
+  <select id="getCountByCardAddrAndState" resultType="java.lang.Long">
+    SELECT COUNT(*) AS recordCount
+    FROM se_client_card
+    WHERE cardAddr = #{cardAddr}
+    AND state IN (1, 3)
+  </select>
 
-    <!--鑾峰彇鎸囧畾鏃堕棿娈垫按鍗′娇鐢ㄦ儏鍐佃褰曟暟閲�-->
-    <select id="getCardUsagesCount" resultType="com.dy.pipIrrGlobal.voSt.VoCardUsage">
-        SELECT
-        card.id as cardId,
-        cli.name AS clientName,
-        card.cardNum,
-        a.cl_ic_card_no,
-        card.money AS balance,
-        a.totalConsumption,
-        b.totalRecharge
-        FROM  se_client_card card
-        INNER JOIN se_client cli ON cli.id = card.clientId
-        LEFT JOIN  (
-        SELECT his.cl_ic_card_no, SUM(his.cl_this_money) AS totalConsumption
-        FROM rm_open_close_valve_history his
-        WHERE his.cl_dt BETWEEN #{timeStart} AND #{timeStop}
-        GROUP BY his.cl_ic_card_no
-        ) a ON  a.cl_ic_card_no = CAST(card.cardNum AS CHAR)
-        LEFT JOIN  (
-        SELECT rch.cardId,ROUND(SUM(rch.amount),2) as totalRecharge
-        FROM se_recharge_history rch
-        WHERE rch.operate_valid = 2  AND rch.operateDt BETWEEN #{timeStart} AND #{timeStop}
-        GROUP BY rch.cardId
-        ) b ON b.cardId = card.id
-        <where>
-            <if test="clientName != null and clientName != ''">
-                AND cli.name like CONCAT('%', #{clientName}, '%')
-            </if>
+  <!--鑾峰彇鎸囧畾鏃堕棿娈垫按鍗′娇鐢ㄦ儏鍐佃褰曟暟閲�-->
+  <select id="getCardUsagesCount" resultType="com.dy.pipIrrGlobal.voSt.VoCardUsage">
+    SELECT
+    card.id as cardId,
+    cli.name AS clientName,
+    card.cardNum,
+    a.cl_ic_card_no,
+    card.money AS balance,
+    a.totalConsumption,
+    b.totalRecharge
+    FROM  se_client_card card
+    INNER JOIN se_client cli ON cli.id = card.clientId
+    LEFT JOIN  (
+    SELECT his.cl_ic_card_no, SUM(his.cl_this_money) AS totalConsumption
+    FROM rm_open_close_valve_history his
+    WHERE his.cl_dt BETWEEN #{timeStart} AND #{timeStop}
+    GROUP BY his.cl_ic_card_no
+    ) a ON  a.cl_ic_card_no = CAST(card.cardNum AS CHAR)
+    LEFT JOIN  (
+    SELECT rch.cardId,ROUND(SUM(rch.amount),2) as totalRecharge
+    FROM se_recharge_history rch
+    WHERE rch.operate_valid = 2  AND rch.operateDt BETWEEN #{timeStart} AND #{timeStop}
+    GROUP BY rch.cardId
+    ) b ON b.cardId = card.id
+    <where>
+      <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="cardNum != null and cardNum != ''">
+        AND card.cardNum like CONCAT('%', #{cardNum}, '%')
+      </if>
 
-            <if test="clientNum != null and clientNum != ''">
-                AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
-            </if>
-        </where>
-    </select>
+      <if test="clientNum != null and clientNum != ''">
+        AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
+      </if>
+    </where>
+  </select>
 
-    <!--鑾峰彇鎸囧畾鏃堕棿娈垫按鍗′娇鐢ㄦ儏鍐碉細鍏呭�煎悎璁°�佹秷璐瑰悎璁°�佷綑棰�-->
-    <select id="getCardUsages" resultType="com.dy.pipIrrGlobal.voSt.VoCardUsage">
-        SELECT
-        card.id as cardId,
-        cli.name AS clientName,
-        card.cardNum,
-        a.cl_ic_card_no,
-        card.money AS balance,
-        a.totalConsumption,
-        b.totalRecharge
-        FROM  se_client_card card
-        INNER JOIN se_client cli ON cli.id = card.clientId
-        LEFT JOIN  (
-        SELECT his.cl_ic_card_no, SUM(his.cl_this_money) AS totalConsumption
-        FROM rm_open_close_valve_history his
-        WHERE his.cl_dt BETWEEN #{timeStart} AND #{timeStop}
-        GROUP BY his.cl_ic_card_no
-        ) a ON  a.cl_ic_card_no = CAST(card.cardNum AS CHAR)
-        LEFT JOIN  (
-        SELECT rch.cardId,ROUND(SUM(rch.amount),2) as totalRecharge
-        FROM se_recharge_history rch
-        WHERE rch.operate_valid = 2  AND rch.operateDt BETWEEN #{timeStart} AND #{timeStop}
-        GROUP BY rch.cardId
-        ) b ON b.cardId = card.id
-        <where>
-            <if test="clientName != null and clientName != ''">
-                AND cli.name like CONCAT('%', #{clientName}, '%')
-            </if>
+  <!--鑾峰彇鎸囧畾鏃堕棿娈垫按鍗′娇鐢ㄦ儏鍐碉細鍏呭�煎悎璁°�佹秷璐瑰悎璁°�佷綑棰�-->
+  <select id="getCardUsages" resultType="com.dy.pipIrrGlobal.voSt.VoCardUsage">
+    SELECT
+    card.id as cardId,
+    cli.name AS clientName,
+    card.cardNum,
+    a.cl_ic_card_no,
+    card.money AS balance,
+    a.totalConsumption,
+    b.totalRecharge
+    FROM  se_client_card card
+    INNER JOIN se_client cli ON cli.id = card.clientId
+    LEFT JOIN  (
+    SELECT his.cl_ic_card_no, SUM(his.cl_this_money) AS totalConsumption
+    FROM rm_open_close_valve_history his
+    WHERE his.cl_dt BETWEEN #{timeStart} AND #{timeStop}
+    GROUP BY his.cl_ic_card_no
+    ) a ON  a.cl_ic_card_no = CAST(card.cardNum AS CHAR)
+    LEFT JOIN  (
+    SELECT rch.cardId,ROUND(SUM(rch.amount),2) as totalRecharge
+    FROM se_recharge_history rch
+    WHERE rch.operate_valid = 2  AND rch.operateDt BETWEEN #{timeStart} AND #{timeStop}
+    GROUP BY rch.cardId
+    ) b ON b.cardId = card.id
+    <where>
+      <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="cardNum != null and cardNum != ''">
+        AND card.cardNum like CONCAT('%', #{cardNum}, '%')
+      </if>
 
-            <if test="clientNum != null and clientNum != ''">
-                AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
-            </if>
-        </where>
-        ORDER BY cli.name, card.cardNum
-        <trim prefix="limit ">
-            <if test="start != null and count != null">
-                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
-            </if>
-        </trim>
-    </select>
+      <if test="clientNum != null and clientNum != ''">
+        AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
+      </if>
+    </where>
+    ORDER BY cli.name, card.cardNum
+    <trim prefix="limit ">
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
 
-    <!--鑾峰彇鎸囧畾鏃堕棿娈靛唴姘村崱鍏呭�兼�昏-->
-    <select id="getTotalRecharge" resultType="java.lang.Float">
-        SELECT ROUND(SUM(amount),2) AS totalRecharge
-        FROM se_recharge_history
-        WHERE operateDt BETWEEN #{timeStart} AND #{timeStop}
-    </select>
+  <!--鑾峰彇鎸囧畾鏃堕棿娈靛唴姘村崱鍏呭�兼�昏-->
+  <select id="getTotalRecharge" resultType="java.lang.Float">
+    SELECT ROUND(SUM(amount),2) AS totalRecharge
+    FROM se_recharge_history
+    WHERE operateDt BETWEEN #{timeStart} AND #{timeStop}
+  </select>
 
-    <!--鑾峰彇鎸囧畾鏃堕棿娈靛唴姘村崱娑堣垂鎬昏-->
-    <select id="getTotalConsumption" resultType="java.lang.Float">
-        SELECT ROUND(SUM(cl_this_money),2) AS totalConsumption
-        FROM rm_open_close_valve_history
-        WHERE cl_dt BETWEEN #{timeStart} AND #{timeStop}
-    </select>
+  <!--鑾峰彇鎸囧畾鏃堕棿娈靛唴姘村崱娑堣垂鎬昏-->
+  <select id="getTotalConsumption" resultType="java.lang.Float">
+    SELECT ROUND(SUM(cl_this_money),2) AS totalConsumption
+    FROM rm_open_close_valve_history
+    WHERE cl_dt BETWEEN #{timeStart} AND #{timeStop}
+  </select>
 
-    <!--渚濇嵁姘村崱鍦板潃灏嗘渶鍚庝竴鏉℃棤鏁堢姸鎬佺殑鎸囧畾鎿嶄綔璁板綍鏀逛负鏈夋晥-->
-    <update id="turnCardValidByAddr">
-        UPDATE se_client_card
-        SET state = 1
-        WHERE id = (
-            SELECT id FROM (
-                SELECT id
-                FROM se_client_card
-                WHERE state = 4 AND cardAddr = #{cardAddr} AND lastOper  = #{operateType}
-                ORDER BY id DESC
-                LIMIT 1) AS subquery
-        );
-    </update>
+  <!--渚濇嵁姘村崱鍦板潃灏嗘渶鍚庝竴鏉℃棤鏁堢姸鎬佺殑鎸囧畾鎿嶄綔璁板綍鏀逛负鏈夋晥-->
+  <update id="turnCardValidByAddr">
+    UPDATE se_client_card
+    SET state = 1
+    WHERE id = (
+    SELECT id FROM (
+    SELECT id
+    FROM se_client_card
+    WHERE state = 4 AND cardAddr = #{cardAddr} AND lastOper  = #{operateType}
+    ORDER BY id DESC
+    LIMIT 1) AS subquery
+    );
+  </update>
 
-    <!--鏍规嵁姘村崱ID鑾峰彇鍘熸按鍗D锛岃ˉ鍗¢�氱煡涓娇鐢�-->
-    <select id="getOriginalCardIdByCardId" resultType="java.lang.Long">
-        SELECT original_card_id AS originalCardId FROM se_client_card WHERE id = #{cardId};
-    </select>
+  <!--鍏呭�兼満鐢ㄦ牴鎹鍗曞彿灏嗘按鍗℃敼涓烘湁鏁�-->
+  <update id="turnCardValidByOrderNumber">
+    UPDATE se_client_card
+    SET state = 1
+    WHERE state = 4 AND order_no = #{orderNumber}
+  </update>
+
+  <!--鏍规嵁姘村崱ID鑾峰彇鍘熸按鍗D锛岃ˉ鍗¢�氱煡涓娇鐢�-->
+  <select id="getOriginalCardIdByCardId" resultType="java.lang.Long">
+    SELECT original_card_id AS originalCardId FROM se_client_card WHERE id = #{cardId};
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRechargeHistoryMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRechargeHistoryMapper.xml
index bc639e8..c845a2d 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRechargeHistoryMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRechargeHistoryMapper.xml
@@ -16,11 +16,13 @@
     <result column="remarks" jdbcType="VARCHAR" property="remarks" />
     <result column="operator" jdbcType="BIGINT" property="operator" />
     <result column="operateDt" jdbcType="TIMESTAMP" property="operatedt" />
+    <result column="operate_valid" jdbcType="TINYINT" property="operateValid" />
+    <result column="order_no" jdbcType="VARCHAR" property="orderNo" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, cardId, clientId, money, amount, gift, afterRecharge, paymentId, price, remarks, 
-    `operator`, operateDt
+    `operator`, operateDt, operate_valid, order_no
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
@@ -34,23 +36,26 @@
     delete from se_recharge_history
     where id = #{id,jdbcType=BIGINT}
   </delete>
-
-  <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory">
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory">
     <!--@mbg.generated-->
-    insert into se_recharge_history (id, cardId, clientId, money,
-      amount, gift, afterRecharge, 
+    insert into se_recharge_history (id, cardId, clientId, 
+      money, amount, gift, afterRecharge, 
       paymentId, price, remarks, 
-      `operator`, operateDt)
-    values (#{id,jdbcType=BIGINT}, #{cardid,jdbcType=BIGINT}, #{clientid,jdbcType=BIGINT}, #{money,jdbcType=FLOAT},
-      #{amount,jdbcType=FLOAT}, #{gift,jdbcType=FLOAT}, #{afterrecharge,jdbcType=FLOAT}, 
+      `operator`, operateDt, operate_valid, 
+      order_no)
+    values (#{id,jdbcType=BIGINT}, #{cardid,jdbcType=BIGINT}, #{clientid,jdbcType=BIGINT}, 
+      #{money,jdbcType=FLOAT}, #{amount,jdbcType=FLOAT}, #{gift,jdbcType=FLOAT}, #{afterrecharge,jdbcType=FLOAT}, 
       #{paymentid,jdbcType=BIGINT}, #{price,jdbcType=FLOAT}, #{remarks,jdbcType=VARCHAR}, 
-      #{operator,jdbcType=BIGINT}, #{operatedt,jdbcType=TIMESTAMP})
+      #{operator,jdbcType=BIGINT}, #{operatedt,jdbcType=TIMESTAMP}, #{operateValid,jdbcType=TINYINT}, 
+      #{orderNo,jdbcType=VARCHAR})
   </insert>
-
-  <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory" useGeneratedKeys="true">
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory">
     <!--@mbg.generated-->
     insert into se_recharge_history
     <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
       <if test="cardid != null">
         cardId,
       </if>
@@ -84,8 +89,17 @@
       <if test="operatedt != null">
         operateDt,
       </if>
+      <if test="operateValid != null">
+        operate_valid,
+      </if>
+      <if test="orderNo != null">
+        order_no,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
       <if test="cardid != null">
         #{cardid,jdbcType=BIGINT},
       </if>
@@ -118,6 +132,12 @@
       </if>
       <if test="operatedt != null">
         #{operatedt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="operateValid != null">
+        #{operateValid,jdbcType=TINYINT},
+      </if>
+      <if test="orderNo != null">
+        #{orderNo,jdbcType=VARCHAR},
       </if>
     </trim>
   </insert>
@@ -158,6 +178,12 @@
       <if test="operatedt != null">
         operateDt = #{operatedt,jdbcType=TIMESTAMP},
       </if>
+      <if test="operateValid != null">
+        operate_valid = #{operateValid,jdbcType=TINYINT},
+      </if>
+      <if test="orderNo != null">
+        order_no = #{orderNo,jdbcType=VARCHAR},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -174,34 +200,43 @@
       price = #{price,jdbcType=FLOAT},
       remarks = #{remarks,jdbcType=VARCHAR},
       `operator` = #{operator,jdbcType=BIGINT},
-      operateDt = #{operatedt,jdbcType=TIMESTAMP}
+      operateDt = #{operatedt,jdbcType=TIMESTAMP},
+      operate_valid = #{operateValid,jdbcType=TINYINT},
+      order_no = #{orderNo,jdbcType=VARCHAR}
     where id = #{id,jdbcType=BIGINT}
   </update>
 
   <!--渚濇嵁姘村崱ID灏嗘渶鍚庝竴鏉℃棤鏁堢姸鎬佺殑鍏呭�煎巻鍙茶褰曟敼涓烘湁鏁�-->
   <update id="turnRechargeHistoryValidByCardId">
     UPDATE se_recharge_history
-        SET operate_valid = 2
+    SET operate_valid = 2
     WHERE id = (
-        SELECT id FROM (
-            SELECT id
-            FROM se_recharge_history
-            WHERE operate_valid = 1 AND cardId = #{cardId}
-            ORDER BY id DESC
-        LIMIT 1) AS subquery
+    SELECT id FROM (
+    SELECT id
+    FROM se_recharge_history
+    WHERE operate_valid = 1 AND cardId = #{cardId}
+    ORDER BY id DESC
+    LIMIT 1) AS subquery
     );
   </update>
 
+  <!--鍏呭�兼満鐢ㄦ牴鎹鍗曞彿灏嗗厖鍊煎巻鍙茶褰曟敼涓烘湁鏁�-->
+  <update id="turnRechargeHistoryValidByOrderNumber">
+    UPDATE se_recharge_history
+    SET operate_valid = 2
+    WHERE operate_valid = 1 AND order_no = #{orderNumber}
+  </update>
 
-<!-- /////////////////////////////////// -->
-<!-- 缁熻鐩稿叧                              -->
-<!-- /////////////////////////////////// -->
+
+  <!-- /////////////////////////////////// -->
+  <!-- 缁熻鐩稿叧                              -->
+  <!-- /////////////////////////////////// -->
   <select id="statisticsByIc" resultType="com.dy.pipIrrGlobal.voSt.VoIcRechargeStatistics">
     select clientId as clientId,
-           cardId as cardId,
-           sum(amount) as amount,
-           sum(gift) as gift,
-           count(*) as times
+    cardId as cardId,
+    sum(amount) as amount,
+    sum(gift) as gift,
+    count(*) as times
     from se_recharge_history
     where operate_valid = 2
     and id <![CDATA[>=]]> #{startId, jdbcType=BIGINT}
@@ -210,9 +245,9 @@
   </select>
   <select id="statisticsByClient" resultType="com.dy.pipIrrGlobal.voSt.VoClientRechargeStatistics">
     select clientId as clientId,
-           sum(amount) as amount,
-           sum(gift) as gift,
-           count(*) as times
+    sum(amount) as amount,
+    sum(gift) as gift,
+    count(*) as times
     from se_recharge_history
     where operate_valid = 2
     and id <![CDATA[>=]]> #{startId, jdbcType=BIGINT}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandSv.java
index 60e5c20..3fbbe44 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandSv.java
@@ -61,7 +61,7 @@
     private String pro_mw = "mw";
     private String key_mw = "comSendUrl";
     @Autowired
-    public CommandSv(RmCommandHistoryMapper rmCommandHistoryMapper,RmOpenCloseValveLastMapper rmOpenCloseValveLastMapper, SeVirtualCardMapper seVirtualCardMapper, PrIntakeMapper prIntakeMapper, PrWaterPriceMapper prWaterPriceMapper, PrIntakeVcMapper prIntakeVcMapper, SeClientCardMapper seClientCardMapper, Environment env) {
+    public CommandSv(RmCommandHistoryMapper rmCommandHistoryMapper, RmOpenCloseValveLastMapper rmOpenCloseValveLastMapper, SeVirtualCardMapper seVirtualCardMapper, PrIntakeMapper prIntakeMapper, PrWaterPriceMapper prWaterPriceMapper, PrIntakeVcMapper prIntakeVcMapper, SeClientCardMapper seClientCardMapper, Environment env) {
         this.rmCommandHistoryMapper = rmCommandHistoryMapper;
         this.rmOpenCloseValveLastMapper = rmOpenCloseValveLastMapper;
         this.seVirtualCardMapper = seVirtualCardMapper;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd15/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd15/CdCtrl.java
index 81663a2..ff2aee6 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd15/CdCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd15/CdCtrl.java
@@ -9,7 +9,6 @@
 import com.dy.common.util.NumUtil;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
-import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrRemote.common.dto.DtoBase;
 import com.dy.pipIrrRemote.monitor.common.ComCtrl;
 import io.swagger.v3.oas.annotations.tags.Tag;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd15/CdSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd15/CdSv.java
index 36d659b..ab500c7 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd15/CdSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd15/CdSv.java
@@ -1,6 +1,5 @@
 package com.dy.pipIrrRemote.monitor.p202404V201.cd15;
 
-import com.dy.pipIrrGlobal.daoPr.PrControllerMapper;
 import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrRemote.monitor.common.ComSv;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd92/CdSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd92/CdSv.java
index b74f6f3..afd477b 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd92/CdSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd92/CdSv.java
@@ -2,9 +2,7 @@
 
 import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper;
 import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
-import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
 import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
-import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
 import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
 import com.dy.pipIrrRemote.monitor.common.ComSv;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java
index 9823cfe..4c4b193 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java
@@ -19,7 +19,6 @@
 import com.dy.pipIrrGlobal.command.ComSupport;
 import com.dy.pipIrrGlobal.command.dto.Param;
 import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
-import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedParam;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
 import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
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 2121d22..76ad104 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
@@ -8,7 +8,6 @@
 import com.dy.pipIrrGlobal.daoBa.BaSettingsMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeActiveCard;
 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;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java
index f3138c9..8ce8ac2 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java
@@ -8,7 +8,6 @@
 import com.dy.pipIrrGlobal.voSe.VoRecharge;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardSv.java
index f798af0..473fc85 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardSv.java
@@ -2,7 +2,6 @@
 
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper;
-import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
 import com.dy.pipIrrGlobal.voSt.VoCardUsage;
 import com.dy.pipIrrGlobal.voSt.VoICCard;
 import com.dy.pipIrrStatistics.card.IcCardqo.CommonQO;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/statistics/StChargeByClientSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/statistics/StChargeByClientSv.java
index 39fb322..50b2aa3 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/statistics/StChargeByClientSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/statistics/StChargeByClientSv.java
@@ -1,6 +1,5 @@
 package com.dy.pipIrrStatistics.statistics;
 
-import com.dy.pipIrrGlobal.daoSe.SeRechargeHistoryMapper;
 import com.dy.pipIrrGlobal.daoSt.StRechargeClientDayMapper;
 import com.dy.pipIrrGlobal.daoSt.StRechargeClientMonthMapper;
 import com.dy.pipIrrGlobal.daoSt.StRechargeClientYearMapper;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/statistics/StChargeByIcSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/statistics/StChargeByIcSv.java
index 28ad3f3..f85215d 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/statistics/StChargeByIcSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/statistics/StChargeByIcSv.java
@@ -1,6 +1,5 @@
 package com.dy.pipIrrStatistics.statistics;
 
-import com.dy.pipIrrGlobal.daoSe.SeRechargeHistoryMapper;
 import com.dy.pipIrrGlobal.daoSt.StRechargeIcDayMapper;
 import com.dy.pipIrrGlobal.daoSt.StRechargeIcMonthMapper;
 import com.dy.pipIrrGlobal.daoSt.StRechargeIcYearMapper;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java
index 2af6117..bb657d2 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java
@@ -5,10 +5,7 @@
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.pipIrrGlobal.voSe.VoTermActiveCard;
 import com.dy.pipIrrGlobal.voSe.VoTermRecharge;
-import com.dy.pipIrrTerminal.card.dto.ActiveCard;
-import com.dy.pipIrrTerminal.card.dto.DtoLoss;
-import com.dy.pipIrrTerminal.card.dto.DtoRecharge;
-import com.dy.pipIrrTerminal.card.dto.DtoReissue;
+import com.dy.pipIrrTerminal.card.dto.*;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -70,7 +67,7 @@
             return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
-        Map map_result = cardSv.addRecharge(po);
+        Map map_result = cardSv.addRecharge(po, null);
         if(map_result.get("success").equals(false)) {
             return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
         }
@@ -119,4 +116,24 @@
         return BaseResponseUtils.buildSuccess(map_result.get("content")) ;
 
     }
+
+    /**
+     * 鎿嶄綔鎵ц鍥炶皟
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @PostMapping(path = "termCallBack", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @SsoAop()
+    public BaseResponse<Boolean> termCallBack(@RequestBody @Valid DtoCallBack po, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        Map map_result = cardSv.callBack(po);
+        if(map_result.get("success").equals(false)) {
+            return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
+        }
+        return BaseResponseUtils.buildSuccess(map_result.get("content")) ;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java
index a5e5bbe..af93c99 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java
@@ -9,6 +9,7 @@
 import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory;
+import com.dy.pipIrrGlobal.voSe.VoAfterRecharge;
 import com.dy.pipIrrGlobal.voSe.VoTermActiveCard;
 import com.dy.pipIrrGlobal.voSe.VoTermRecharge;
 import com.dy.pipIrrTerminal.card.dto.*;
@@ -22,6 +23,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.Duration;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -245,6 +247,7 @@
         seClientCard.setClientid(po.getClientId());
         seClientCard.setMoney(po.getAmount());
         seClientCard.setState(CardStateENUM.INVALID.getCode());
+        seClientCard.setOrderNo(orderNo);
         if (po.getOriginalCardId() != null) {
             // 琛ュ崱
             seClientCard.setOriginalCardId(po.getOriginalCardId());
@@ -301,7 +304,7 @@
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
-    public Map plusRecharge(ActiveCard po, Long cardNum) {
+    public Map plusRecharge(ActiveCard po, Long cardNum, String orderNo) {
         Map map = new HashMap<>();
         map.put("success", false);
         map.put("content", null);
@@ -318,7 +321,7 @@
         dtoRecharge.setMoney(0f);
         dtoRecharge.setGift(0f);
         dtoRecharge.setPrice(0f);
-        Map map_plusRecharge = addRecharge(dtoRecharge);
+        Map map_plusRecharge = addRecharge(dtoRecharge, orderNo);
         if (!map_plusRecharge.get("success").equals(true)) {
             map.put("msg", "寮�鍗″け璐�-鍏呭�煎紓甯�");
             return map;
@@ -360,7 +363,7 @@
         }
 
         if (amount != null && amount > 0 && originalCardId == null) {
-            Map map_plusRecharge = plusRecharge(po, cardNum);
+            Map map_plusRecharge = plusRecharge(po, cardNum, orderNo);
             if(map_plusRecharge.get("success").equals(false)) {
                 map.put("msg", map_plusRecharge.get("msg").toString());
                 return map;
@@ -390,7 +393,7 @@
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
-    public Map addRecharge(DtoRecharge po) {
+    public Map addRecharge(DtoRecharge po, String orderNo) {
         Map map = new HashMap<>();
         map.put("success", false);
         map.put("content", null);
@@ -411,7 +414,9 @@
         }
         Long cardId = Long.parseLong(map_cardAndClient.get("cardId").toString());
         Long clientId = Long.parseLong(map_cardAndClient.get("clientId").toString());
-        String orderNo = generateOrderNo();
+        if(orderNo == null || orderNo.length() <= 0) {
+            orderNo = generateOrderNo();
+        }
 
         /**
          * 娣诲姞姘村崱鍏呭�兼搷浣滆褰�
@@ -428,7 +433,7 @@
         seCardOperate.setRemarks(po.getRemarks());
         seCardOperate.setOperator(po.getOperator());
         seCardOperate.setOperateDt(new Date());
-        seCardOperate.setOrderNo(orderNo);
+        seCardOperate.setOrderNo(orderNo + "p");
         seCardOperate.setOperateValid((byte) 1);
         seCardOperateMapper.insert(seCardOperate);
         Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L);
@@ -454,6 +459,7 @@
         seRechargeHistory.setOperator(po.getOperator());
         seRechargeHistory.setOperatedt(new Date());
         seRechargeHistory.setOperateValid((byte) 1);
+        seRechargeHistory.setOrderNo(orderNo);
         seRechargeHistoryMapper.insert(seRechargeHistory);
         Long rec_seRechargeHistory = Optional.ofNullable(seRechargeHistory.getId()).orElse(0L);
         if (rec_seRechargeHistory == 0) {
@@ -568,6 +574,11 @@
         return map;
     }
 
+    /**
+     * 鎿嶄綔鍥炶皟
+     * @param po
+     * @return
+     */
     @Transactional(rollbackFor = Exception.class)
     public Map callBack(DtoCallBack po) {
         Map map = new HashMap<>();
@@ -587,20 +598,69 @@
         if(operateType == 1) {
             /**
              * 寮�鍗℃搷浣滄墽琛岄�氱煡
-             *  1.渚濇嵁姘村崱鍦板潃銆佽鍗曞彿灏嗘棤鏁堢姸鎬佺殑鎿嶄綔璁板綍鏀逛负鏈夋晥
+             *  1.渚濇嵁璁㈠崟鍙峰皢鏃犳晥鐘舵�佺殑鎿嶄綔璁板綍鏀逛负鏈夋晥
              *  2.渚濇嵁姘村崱ID灏嗘棤鏁堢姸鎬佺殑姘村崱璁板綍鏀逛负鏈夋晥
              *  3.濡傛灉寮�鍗″悓姝ュ厖鍊�
              *      淇敼鍏呭�兼搷浣滆褰曚负鏈夋晥
              *      淇敼鍏呭�煎巻鍙茶褰曚负鏈夋晥
              *      淇敼姘村崱琛ㄧ殑鎿嶄綔淇℃伅
              */
+            Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
+            Integer rec_card = turnCardValidByOrderNumber(orderNumber);
+            if (rec_ope == 0 || rec_card == 0) {
+                map.put("msg", "涓嶅瓨鍦ㄦ湭鐢熸晥鐨勬按鍗�");
+                return map;
+            }
 
+            if(isMergeRecharge(cardId)) {
+                turnOperateValidByOrderNumber(orderNumber + "p");
+                turnRechargeHistoryValidByOrderNumber(orderNumber);
+                updateCard(cardId, orderNumber+"p");
+            }
         }
-
-
 
         map.put("success", true);
         map.put("msg", "鎿嶄綔鎴愬姛");
         return map;
     }
+
+    // 鏍规嵁璁㈠崟鍙峰皢鎿嶄綔璁板綍鏀逛负鏈夋晥
+    public Integer turnOperateValidByOrderNumber(String orderNumber) {
+        return seCardOperateMapper.turnOperateValidByOrderNumber(orderNumber);
+    }
+
+    // 鏍规嵁璁㈠崟鍙峰皢姘村崱鏀逛负鏈夋晥
+    public Integer turnCardValidByOrderNumber(String orderNumber) {
+        return seClientCardMapper.turnCardValidByOrderNumber(orderNumber);
+    }
+
+    // 鏍规嵁璁㈠崟鍙峰皢鍏呭�煎巻鍙叉敼涓烘湁鏁�
+    public Integer turnRechargeHistoryValidByOrderNumber(String orderNumber) {
+        return seRechargeHistoryMapper.turnRechargeHistoryValidByOrderNumber(orderNumber);
+    }
+
+    // 鏍规嵁cardId鍒ゆ柇鏄惁鏄悎骞跺厖鍊�
+    public Boolean isMergeRecharge(Long cardId) {
+        Integer plusRechargeCount = seCardOperateMapper.getPlusRechargeCount(cardId);
+        if (plusRechargeCount == 0) {
+            return false;
+        }
+        return true;
+    }
+
+    // 淇敼姘村崱淇℃伅
+    public Boolean updateCard(Long cardId, String orderNumber) {
+        VoAfterRecharge voAfterRecharge = seCardOperateMapper.getBalanceAfterRecharge(orderNumber);
+
+        SeClientCard clientCard = new SeClientCard();
+        clientCard.setId(cardId);
+        clientCard.setMoney(voAfterRecharge.getBalanceAfterRecharge());
+        clientCard.setRechargedt(voAfterRecharge.getOperateTime());
+        clientCard.setLastoper(LastOperateENUM.RECHARGE.getCode());
+        Integer rec_updateClientCard = seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+        if (rec_updateClientCard == null || rec_updateClientCard == 0) {
+            return false;
+        }
+        return true;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCardSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCardSv.java
index 043abf9..12ff508 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCardSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCardSv.java
@@ -1,6 +1,5 @@
 package com.dy.pipIrrWechat.client;
 
-import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
 import com.dy.pipIrrGlobal.voWe.VoCards3;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
index 8e2a50c..b9b3d5e 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
@@ -17,7 +17,6 @@
 import com.dy.common.mw.protocol.p206V202404.downVos.ComCd93_A3Vo;
 import com.dy.common.util.IDLongGenerator;
 import com.dy.common.webUtil.BaseResponse;
-import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.command.ComSupport;
 import com.dy.pipIrrGlobal.command.dto.Param;
@@ -29,11 +28,9 @@
 import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper;
 import com.dy.pipIrrGlobal.daoRm.RmIrrigateProfileMapper;
 import com.dy.pipIrrGlobal.daoRm.RmOpenCloseValveLastMapper;
-import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
 import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
 import com.dy.pipIrrGlobal.pojoIr.IrIntakeOperate;
 import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
-import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voRm.VoIrrigaterProfile;
 import com.dy.pipIrrGlobal.voRm.VoRtuAndVc;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
@@ -41,7 +38,6 @@
 import com.dy.pipIrrWechat.command.dto.AutomaticClose;
 import com.dy.pipIrrWechat.command.dto.ValveClose;
 import com.dy.pipIrrWechat.command.dto.ValveOpen;
-import com.dy.pipIrrWechat.irrigatePlan.IrrigatePlanSv;
 import com.dy.pipIrrWechat.irrigation.IrrigationSv;
 import com.dy.pipIrrWechat.result.WechatResultCode;
 import lombok.RequiredArgsConstructor;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
index c00d8c6..3ea14fc 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
@@ -9,8 +9,6 @@
 import com.dy.common.mw.protocol.p206V202404.CodeV202404;
 import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404;
 import com.dy.common.mw.protocol.p206V202404.downVos.ComCd15Vo;
-import com.dy.common.mw.protocol.p206V202404.downVos.ComCd92_A2Vo;
-import com.dy.common.mw.protocol.p206V202404.downVos.ComCd93_A3Vo;
 import com.dy.common.util.IDLongGenerator;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
@@ -18,7 +16,6 @@
 import com.dy.pipIrrGlobal.command.ComSupport;
 import com.dy.pipIrrGlobal.command.dto.Param;
 import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
-import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voRm.VoIrrigaterProfile;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
 import com.dy.pipIrrGlobal.voSe.VoVirtualCard;

--
Gitblit v1.8.0