From 5fefff8c747cbf5d526f6108a215bd813ac36034 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 11 六月 2025 13:44:17 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeManagerCardMapper.xml                            |   58 +++++-
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java        |  137 ++++++++++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoUnlock.java |   43 ++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeManagerCard.java                  |   48 ++--
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml                             |   19 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/client/ClientCtrl.java  |   15 +
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java      |   80 +++++++-
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeManagerCardMapper.java             |   12 +
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/client/ClientSv.java    |   16 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java              |   12 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTermCard.java                       |   74 ++++++++
 11 files changed, 456 insertions(+), 58 deletions(-)

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 15f798f..0773dfd 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
@@ -2,10 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
-import com.dy.pipIrrGlobal.voSe.VoCardInfo;
-import com.dy.pipIrrGlobal.voSe.VoCardInfo1;
-import com.dy.pipIrrGlobal.voSe.VoCards;
-import com.dy.pipIrrGlobal.voSe.VoCards2;
+import com.dy.pipIrrGlobal.voSe.*;
 import com.dy.pipIrrGlobal.voSt.VoCardUsage;
 import com.dy.pipIrrGlobal.voWe.VoCards3;
 import org.apache.ibatis.annotations.Mapper;
@@ -264,4 +261,11 @@
      * @return
      */
     Integer emptyCardBalance(@Param("orderNumber")String orderNumber);
+
+    /**
+     * 鍏呭�兼満鐢ㄨ幏鍙栧啘鎴锋按鍗′俊鎭�
+     * @param cardAddr
+     * @return
+     */
+    VoTermCard getTermCardInfo(@Param("cardAddr")String cardAddr);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeManagerCardMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeManagerCardMapper.java
index 6df948a..f552a42 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeManagerCardMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeManagerCardMapper.java
@@ -2,13 +2,14 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeManagerCard;
+import com.dy.pipIrrGlobal.voSe.VoTermCard;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 /**
  * @author ZhuBaoMin
- * @date 2024-07-24 10:36
- * @LastEditTime 2024-07-24 10:36
+ * @date 2025-06-11 10:34
+ * @LastEditTime 2025-06-11 10:34
  * @Description
  */
 
@@ -32,4 +33,11 @@
      * @return
      */
     String getManagerCardNumOfMax(@Param("areaCode") String areaCode);
+
+    /**
+     * 鍏呭�兼満鐢ㄨ幏鍙栫鐞嗗崱淇℃伅
+     * @param cardAddr
+     * @return
+     */
+    VoTermCard getTermManagerCardInfo(@Param("cardAddr")String cardAddr);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeManagerCard.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeManagerCard.java
index 932ba30..e22b5e9 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeManagerCard.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeManagerCard.java
@@ -10,18 +10,13 @@
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.*;
-import org.hibernate.validator.constraints.Length;
-
 import java.util.Date;
 
 /**
  * @author ZhuBaoMin
- * @date 2024-07-24 10:36
- * @LastEditTime 2024-07-24 10:36
- * @Description
- */
-/**
- * 绠$悊鍛樻按鍗¤〃
+ * @date 2025-06-11 10:34
+ * @LastEditTime 2025-06-11 10:34
+ * @Description 绠$悊鍛樻按鍗¤〃
  */
 
 @TableName(value = "se_manager_card", autoResultMap = true)
@@ -31,42 +26,51 @@
 @NoArgsConstructor
 @AllArgsConstructor
 public class SeManagerCard implements BaseEntity {
-    public static final long serialVersionUID = 202407241040001L;
+    public static final long serialVersionUID = 202506111039001L;
 
     /**
-    * 涓婚敭
-    */
+     * 涓婚敭
+     */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
     @TableId(type = IdType.INPUT)
     private Long id;
 
     /**
-    * 鍗$墖鍦板潃
-    */
+     * 閫氳鍗忚
+     */
+    private String protocol;
+
+    /**
+     * 鍗$墖鍦板潃
+     */
     @NotBlank(message = "鍗$墖鍦板潃涓嶈兘涓虹┖")
     private String cardAddr;
 
     /**
-    * 鍗$墖缂栧彿
-    */
+     * 鍗$墖缂栧彿
+     */
     @NotBlank(message = "鍗$墖缂栧彿涓嶈兘涓虹┖")
     private String cardNum;
 
     /**
-    * 鍗$墖绫诲瀷;2-绠$悊绉戯紝4-宸℃鍗★紝5娓呯┖鍗�
-    */
+     * 鍗$墖绫诲瀷;2-绠$悊绉戯紝4-宸℃鍗★紝5娓呯┖鍗�
+     */
     @NotNull(message = "鍗$墖绫诲瀷涓嶈兘涓虹┖")
     private Byte cardType;
 
     /**
-    * 寮�鍗℃椂闂�
-    */
+     * 寮�鍗℃椂闂�
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
     /**
-    * 澶囨敞淇℃伅
-    */
-    @Length(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/voSe/VoTermCard.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTermCard.java
new file mode 100644
index 0000000..4619578
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTermCard.java
@@ -0,0 +1,74 @@
+package com.dy.pipIrrGlobal.voSe;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-06-11 9:31
+ * @LastEditTime 2025-06-11 9:31
+ * @Description 鍏呭�兼満鐢ㄦ按鍗¤鍥惧璞�
+ */
+
+@Data
+@JsonPropertyOrder({"cardNum", "cardType", "money", "state", "userName", "clientNum", "phone", "address", "lastRechargeTime",  "cardAgreement"})
+public class VoTermCard {
+    private static final long serialVersionUID = 202506110933001L;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    private Long cardNum;
+
+    /**
+     * 姘村崱绫诲瀷锛�1-鍐滄埛鍗★紝锛�
+     */
+    private Integer cardType;
+
+    /**
+     * 姘村崱浣欓
+     */
+    private Double money;
+
+    /*
+    姘村崱鐘舵��:1-姝e父锛�2-宸叉敞閿�锛�3-宸叉寕澶憋紝4-鏃犳晥鍗$墖
+     */
+    private Integer state;
+
+    /**
+     * 鐢ㄦ埛鍚嶇О
+     */
+    private String userName;
+
+    /**
+     * 鐢ㄦ埛缂栧彿
+     */
+    private String clientNum;
+
+    /**
+     * 鎵嬫満鍙风爜
+     */
+    private String phone;
+
+    /**
+     * 鍦板潃
+     */
+    private String address;
+
+    /**
+     * 鏈�鍚庡厖鍊兼椂闂�
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date lastRechargeTime;
+
+    /**
+     * 鍗″崗璁�
+     */
+    private String cardAgreement;
+}
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 cd74144..4ec263b 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -788,4 +788,23 @@
     SET money = 0
     WHERE id = (SELECT original_card_id FROM se_client_card WHERE id = (SELECT card_id FROM se_card_operate WHERE order_no = #{orderNumber}))
   </update>
+
+  <!--鍏呭�兼満鐢ㄨ幏鍙栧啘鎴锋按鍗′俊鎭�-->
+  <select id="getTermCardInfo" resultType="com.dy.pipIrrGlobal.voSe.VoTermCard">
+    SELECT
+        card.cardNum,
+        1 AS cardType,
+        card.money,
+        card.state,
+        cli.name AS userName,
+        cli.clientNum,
+        cli.phone,
+        cli.address,
+        card.rechargeDt AS lastRechargeTime,
+        card.protocol AS cardAgreement
+    FROM se_client_card card
+        INNER JOIN se_client cli ON cli.id = card.clientId
+    WHERE card.cardAddr = #{cardAddr}
+    LIMIT 1
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeManagerCardMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeManagerCardMapper.xml
index dc41740..01a62d3 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeManagerCardMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeManagerCardMapper.xml
@@ -5,15 +5,17 @@
     <!--@mbg.generated-->
     <!--@Table se_manager_card-->
     <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="protocol" jdbcType="VARCHAR" property="protocol" />
     <result column="card_addr" jdbcType="VARCHAR" property="cardAddr" />
     <result column="card_num" jdbcType="VARCHAR" property="cardNum" />
     <result column="card_type" jdbcType="TINYINT" property="cardType" />
     <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
     <result column="remarks" jdbcType="VARCHAR" property="remarks" />
+    <result column="order_no" jdbcType="VARCHAR" property="orderNo" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, card_addr, card_num, card_type, create_time, remarks
+    id, protocol, card_addr, card_num, card_type, create_time, remarks, order_no
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
@@ -29,12 +31,12 @@
   </delete>
   <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeManagerCard">
     <!--@mbg.generated-->
-    insert into se_manager_card (id, card_addr, card_num, 
-      card_type, create_time, remarks
-      )
-    values (#{id,jdbcType=BIGINT}, #{cardAddr,jdbcType=VARCHAR}, #{cardNum,jdbcType=VARCHAR}, 
-      #{cardType,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, #{remarks,jdbcType=VARCHAR}
-      )
+    insert into se_manager_card (id, protocol, card_addr, 
+      card_num, card_type, create_time, 
+      remarks, order_no)
+    values (#{id,jdbcType=BIGINT}, #{protocol,jdbcType=VARCHAR}, #{cardAddr,jdbcType=VARCHAR}, 
+      #{cardNum,jdbcType=VARCHAR}, #{cardType,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, 
+      #{remarks,jdbcType=VARCHAR}, #{orderNo,jdbcType=VARCHAR})
   </insert>
   <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeManagerCard">
     <!--@mbg.generated-->
@@ -42,6 +44,9 @@
     <trim prefix="(" suffix=")" suffixOverrides=",">
       <if test="id != null">
         id,
+      </if>
+      <if test="protocol != null">
+        protocol,
       </if>
       <if test="cardAddr != null">
         card_addr,
@@ -58,10 +63,16 @@
       <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},
@@ -78,12 +89,18 @@
       <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.SeManagerCard">
     <!--@mbg.generated-->
     update se_manager_card
     <set>
+      <if test="protocol != null">
+        protocol = #{protocol,jdbcType=VARCHAR},
+      </if>
       <if test="cardAddr != null">
         card_addr = #{cardAddr,jdbcType=VARCHAR},
       </if>
@@ -99,17 +116,22 @@
       <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.SeManagerCard">
     <!--@mbg.generated-->
     update se_manager_card
-    set card_addr = #{cardAddr,jdbcType=VARCHAR},
+    set protocol = #{protocol,jdbcType=VARCHAR},
+      card_addr = #{cardAddr,jdbcType=VARCHAR},
       card_num = #{cardNum,jdbcType=VARCHAR},
       card_type = #{cardType,jdbcType=TINYINT},
       create_time = #{createTime,jdbcType=TIMESTAMP},
-      remarks = #{remarks,jdbcType=VARCHAR}
+      remarks = #{remarks,jdbcType=VARCHAR},
+      order_no = #{orderNo,jdbcType=VARCHAR}
     where id = #{id,jdbcType=BIGINT}
   </update>
 
@@ -121,4 +143,22 @@
     ORDER BY card_num desc
     LIMIT 0,1
   </select>
+
+  <!--鍏呭�兼満鐢ㄨ幏鍙栫鐞嗗崱淇℃伅-->
+  <select id="getTermManagerCardInfo" resultType="com.dy.pipIrrGlobal.voSe.VoTermCard">
+    SELECT
+      card_num AS cardNum,
+      card_type AS cardType,
+      NULL AS money,
+      NULL AS state,
+      NULL AS userName,
+      NULL AS clientNum,
+      NULL AS phone,
+      NULL AS address,
+      NULL AS lastRechargeTime,
+      card.protocol AS cardcardAgreement
+    FROM se_manager_card card
+    WHERE card.card_addr = #{cardAddr}
+      LIMIT 1
+  </select>
 </mapper>
\ No newline at end of file
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 8e56ce4..defb115 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
@@ -3,7 +3,10 @@
 import com.dy.common.aop.SsoAop;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.voSe.VoTermActiveCard;
+import com.dy.pipIrrGlobal.voSe.VoTermCard;
+import com.dy.pipIrrGlobal.voSe.VoTermClient;
 import com.dy.pipIrrGlobal.voSe.VoTermCommon;
 import com.dy.pipIrrTerminal.card.dto.*;
 import jakarta.validation.Valid;
@@ -11,11 +14,9 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;
 import org.springframework.validation.BindingResult;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
@@ -35,6 +36,7 @@
 
     /**
      * 寮�鍗★紙鍚厖鍊硷級
+     *
      * @param po
      * @param bindingResult
      * @return
@@ -47,15 +49,16 @@
         }
 
         Map map_result = cardSv.activeOrReissueTermCard(po);
-        if(map_result.get("success").equals(false)) {
+        if (map_result.get("success").equals(false)) {
             return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
         }
-        return BaseResponseUtils.buildSuccess(map_result.get("content")) ;
+        return BaseResponseUtils.buildSuccess(map_result.get("content"));
 
     }
 
     /**
      * 鍏呭��
+     *
      * @param po
      * @param bindingResult
      * @return
@@ -68,15 +71,16 @@
         }
 
         Map map_result = cardSv.addRecharge(po, null);
-        if(map_result.get("success").equals(false)) {
+        if (map_result.get("success").equals(false)) {
             return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
         }
-        return BaseResponseUtils.buildSuccess(map_result.get("content")) ;
+        return BaseResponseUtils.buildSuccess(map_result.get("content"));
 
     }
 
     /**
      * 鎸傚け
+     *
      * @param po
      * @param bindingResult
      * @return
@@ -89,15 +93,38 @@
         }
 
         Map map_result = cardSv.reportLoss(po);
-        if(map_result.get("success").equals(false)) {
+        if (map_result.get("success").equals(false)) {
             return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
         }
-        return BaseResponseUtils.buildSuccess(map_result.get("content")) ;
+        return BaseResponseUtils.buildSuccess(map_result.get("content"));
+
+    }
+
+    /**
+     * 瑙i攣
+     *
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @PostMapping(path = "termUnlock", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @SsoAop()
+    public BaseResponse<Boolean> termUnlock(@RequestBody @Valid DtoUnlock po, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        Map map_result = cardSv.unlock(po);
+        if (map_result.get("success").equals(false)) {
+            return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
+        }
+        return BaseResponseUtils.buildSuccess(map_result.get("content"));
 
     }
 
     /**
      * 琛ュ崱
+     *
      * @param po
      * @param bindingResult
      * @return
@@ -110,15 +137,16 @@
         }
 
         Map map_result = cardSv.reissue(po);
-        if(map_result.get("success").equals(false)) {
+        if (map_result.get("success").equals(false)) {
             return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
         }
-        return BaseResponseUtils.buildSuccess(map_result.get("content")) ;
+        return BaseResponseUtils.buildSuccess(map_result.get("content"));
 
     }
 
     /**
      * 閿�鍗�
+     *
      * @param po
      * @param bindingResult
      * @return
@@ -131,15 +159,16 @@
         }
 
         Map map_result = cardSv.cancel(po);
-        if(map_result.get("success").equals(false)) {
+        if (map_result.get("success").equals(false)) {
             return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
         }
-        return BaseResponseUtils.buildSuccess(map_result.get("content")) ;
+        return BaseResponseUtils.buildSuccess(map_result.get("content"));
 
     }
 
     /**
      * 鎿嶄綔鎵ц鍥炶皟
+     *
      * @param po
      * @param bindingResult
      * @return
@@ -152,9 +181,26 @@
         }
 
         Map map_result = cardSv.callBack(po);
-        if(map_result.get("success").equals(false)) {
+        if (map_result.get("success").equals(false)) {
             return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
         }
-        return BaseResponseUtils.buildSuccess(map_result.get("content")) ;
+        return BaseResponseUtils.buildSuccess(map_result.get("content"));
     }
-}
+
+    /**
+     * 璇诲彇鍗′俊鎭�
+     * @param cardAddr
+     * @return
+     */
+    @GetMapping(path = "readCard")
+    @SsoAop()
+    public BaseResponse<VoTermCard> readCard(@RequestParam String cardAddr){
+        try {
+            return BaseResponseUtils.buildSuccess(cardSv.readCard(cardAddr));
+        } catch (Exception e) {
+            log.error("鏌ヨ鍐滄埛寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+}
\ No newline at end of file
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 5c63db2..d915722 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
@@ -1,15 +1,14 @@
 package com.dy.pipIrrTerminal.card;
 
+import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
-import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper;
-import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
-import com.dy.pipIrrGlobal.daoSe.SeClientMapper;
-import com.dy.pipIrrGlobal.daoSe.SeRechargeHistoryMapper;
+import com.dy.pipIrrGlobal.daoSe.*;
 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.VoTermCard;
 import com.dy.pipIrrGlobal.voSe.VoTermCommon;
 import com.dy.pipIrrTerminal.card.dto.*;
 import com.dy.pipIrrTerminal.card.enums.CardStateENUM;
@@ -50,6 +49,9 @@
 
     @Autowired
     private SeRechargeHistoryMapper seRechargeHistoryMapper;
+
+    @Autowired
+    private SeManagerCardMapper seManagerCardMapper;
 
     @Value("${project.projectNo}")
     private Integer projectNo;
@@ -131,6 +133,39 @@
         return map;
     }
 
+    /**
+     * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互瑙i攣
+     * @param po
+     * @return
+     */
+    public Map canUnlock(DtoUnlock po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+
+        Long cardNum = po.getCardNum();
+        // 鍒ゆ柇褰撳墠姘村崱鏄惁涓烘寕澶辩姸鎬佷笖鏈ˉ鍗★紝浠呭凡缁忔寕澶卞叾鏈ˉ鍗$殑鍙互瑙i攣
+        if (!isLostAndUnreplaced(cardNum)) {
+            map.put("msg", "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔");
+            return map;
+        }
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map_card = Optional.ofNullable(seClientCardMapper.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if (map_card == null || map_card.size() <= 0) {
+            map.put("msg", "鍗″彿閿欒锛岃鍗′笉瀛樺湪");
+            return map;
+        }
+        CardSimple card = new CardSimple();
+        card.setCardId(Long.parseLong(map_card.get("cardId").toString()));
+        card.setClientId(Long.parseLong(map_card.get("clientId").toString()));
+
+        map.put("success", true);
+        map.put("content", card);
+        return map;
+    }
     /**
      * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互琛ュ崱
      * @param po
@@ -612,6 +647,67 @@
     }
 
     /**
+     * 瑙i攣
+     * @param po
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Map unlock(DtoUnlock po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+
+        Map map_canUnlock = canUnlock(po);
+        if(map_canUnlock.get("success").equals(false)) {
+            map.put("msg", map_canUnlock.get("msg").toString());
+            return map;
+        }
+        CardSimple card = (CardSimple) map_canUnlock.get("content");
+        Long cardId = card.getCardId();
+        Long clientId = card.getClientId();
+
+        /**
+         * 淇敼鍐滄埛鍗′俊鎭細
+         *      鎸傚け鏃堕棿
+         *      鏈�鍚庢搷浣滅被鍨�-4
+         */
+        SeClientCard seClientCard = new SeClientCard();
+        seClientCard.setId(cardId);
+        seClientCard.setUnlockdt(new Date());
+        seClientCard.setMoney(po.getMoney());
+        seClientCard.setState(CardStateENUM.NORMAL.getCode());
+        seClientCard.setLastoper(LastOperateENUM.UNLOCK.getCode());
+        Integer rec_updateClientCard = Optional.ofNullable(seClientCardMapper.updateByPrimaryKeySelective(seClientCard)).orElse(0);
+        if (rec_updateClientCard == 0) {
+            map.put("msg", "瑙i攣澶辫触-鍐滄埛鍗′慨鏀瑰紓甯�");
+            return map;
+        }
+
+        /**
+         * 娣诲姞瑙i攣璁板綍
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(po.getMoney());
+        seCardOperate.setOperateType(OperateTypeENUM.UNLOCK.getCode());
+        seCardOperate.setRemarks(po.getRemarks());
+        seCardOperate.setOperator(po.getOperator());
+        seCardOperate.setOperateDt(new Date());
+        seCardOperate.setOperateValid((byte) 2);
+        seCardOperateMapper.insert(seCardOperate);
+        Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L);
+        if (rec == 0) {
+            map.put("msg", "瑙i攣澶辫触-瑙i攣璁板綍鍐欏叆寮傚父");
+            return map;
+        }
+
+        map.put("success", true);
+        map.put("msg", "鎿嶄綔鎴愬姛");
+        return map;
+    }
+
+    /**
      * 閿�鍗�
      * @param po
      * @return
@@ -819,4 +915,37 @@
         clientCard.setLastoper(LastOperateENUM.CANCEL.getCode());
         return seClientCardMapper.updateByPrimaryKeySelective(clientCard);
     }
+
+    /**
+     * 鍒ゆ柇鎸囧畾姘村崱鏄惁涓烘寕澶辩姸鎬佷笖鏃犺ˉ鍗¤褰�
+     * @param cardNum
+     * @return
+     */
+    public Boolean isLostAndUnreplaced(Long cardNum) {
+        Integer lostCount = seClientCardMapper.getLostCount(cardNum);
+        Integer replacedCount = seClientCardMapper.getReplacedCount(cardNum);
+        if (lostCount > 0 && replacedCount == 0) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 璇诲彇姘村崱淇℃伅
+     * @param cardAddr
+     * @return
+     */
+    public VoTermCard readCard(String cardAddr) {
+        VoTermCard voTermCard = seClientCardMapper.getTermCardInfo(cardAddr);
+        if(voTermCard != null) {
+            return voTermCard;
+        }
+
+        VoTermCard voTermManagerCard = seManagerCardMapper.getTermManagerCardInfo(cardAddr);
+        if(voTermManagerCard != null) {
+            return voTermManagerCard;
+        }
+
+        return null;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoUnlock.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoUnlock.java
new file mode 100644
index 0000000..fdde30f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoUnlock.java
@@ -0,0 +1,43 @@
+package com.dy.pipIrrTerminal.card.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-06-10 17:01
+ * @LastEditTime 2025-06-10 17:01
+ * @Description 瑙i攣浼犺緭瀵硅薄
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class DtoUnlock {
+    public static final long serialVersionUID = 202506101702001L;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @NotNull(message = "姘村崱缂栧彿涓嶈兘涓虹┖")
+    private Long cardNum;
+
+    /**
+     * 浣欓
+     */
+    @NotNull(message = "浣欓涓嶈兘涓虹┖")
+    private Float money;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @NotNull(message = "鎿嶄綔浜虹紪鍙蜂笉鑳戒负绌�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/client/ClientCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/client/ClientCtrl.java
index 59e84d5..4fff75c 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/client/ClientCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/client/ClientCtrl.java
@@ -64,4 +64,19 @@
             return BaseResponseUtils.buildException(e.getMessage()) ;
         }
     }
+
+    /**
+     * 鑾峰彇姘翠环
+     * @return
+     */
+    @GetMapping(path = "getWaterPrice")
+    @SsoAop()
+    public BaseResponse<Boolean> getWaterPrice(){
+        try {
+            return BaseResponseUtils.buildSuccess(clientSv.getWaterPrice());
+        } catch (Exception e) {
+            log.error("鏌ヨ鍐滄埛寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/client/ClientSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/client/ClientSv.java
index 2760b73..af3bc13 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/client/ClientSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/client/ClientSv.java
@@ -1,6 +1,8 @@
 package com.dy.pipIrrTerminal.client;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
 import com.dy.pipIrrGlobal.daoSe.SeClientMapper;
 import com.dy.pipIrrGlobal.voSe.VoClient;
 import com.dy.pipIrrGlobal.voSe.VoTermClient;
@@ -27,6 +29,8 @@
     @Autowired
     private SeClientMapper seClientMapper;
 
+    @Autowired
+    private PrWaterPriceMapper prWaterPriceMapper;
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鍐滄埛鏁版嵁_鍏呭�兼満
      * @param queryVo
@@ -54,4 +58,16 @@
     public VoTermClient getTermOneClient(Long clientId) {
         return seClientMapper.getTermOneClient(clientId);
     }
+
+
+    /**
+     * 鑾峰彇姘翠环
+     * @return
+     */
+    public JSONObject getWaterPrice() {
+        Double price = prWaterPriceMapper.getPrice();
+        JSONObject rs = new JSONObject();
+        rs.put("price", price);
+        return rs;
+    }
 }

--
Gitblit v1.8.0