From 5cc8e75a7c432e133beb3220d8ce2f15ea16e084 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期三, 25 六月 2025 11:18:31 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStManureMapper.xml                                               |   49 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/ManureCtrl.java               |   33 +
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/QueryVo.java                    |   23 +
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/QueryVo.java                 |   23 +
 pipIrr-platform/文档/水肥气象墒情/MQTT指令不执行解决备忘.docx                                                                               |    0 
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java                      |  129 +++-
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoWeather.java                                        |   63 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeManagementCard.java                               |   70 +-
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoManure.java                                         |   63 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java                        |  257 +++++++++--
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/SoilCtrl.java                   |   34 +
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/CreateManagementCardDto.java   |   81 +++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml                                             |   17 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/SoilSv.java                     |   25 +
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/WeatherCtrl.java             |   34 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStManureMapper.java                                |   20 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStWeatherMapper.xml                                              |   48 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/enums/ManagementCardStateENUM.java |   23 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStSoilMapper.xml                                                 |   47 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStSoilMapper.java                                  |   18 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeManagementCardMapper.xml                                         |   30 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStWeatherMapper.java                               |   18 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/QueryVo.java                  |   23 +
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoCallBack.java               |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoSoil.java                                           |   63 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/WeatherSv.java               |   25 +
 pipIrr-platform/文档/水肥气象墒情/MQTT设定时间参数备忘.docx                                                                                |    0 
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/enums/OperateTypeENUM.java         |   25 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java                              |   62 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/ManureSv.java                 |   26 +
 README.md                                                                                                                  |   41 +
 31 files changed, 1,215 insertions(+), 157 deletions(-)

diff --git a/README.md b/README.md
index 8797567..82aa550 100644
--- a/README.md
+++ b/README.md
@@ -58,6 +58,47 @@
 - **宸ュ叿闆�**: Hutool 5.8.22
 - **鏃ュ織妗嗘灦**: Log4j2 2.20.0
 
+## ID鐢熸垚鍣ㄤ娇鐢ㄨ鏄�
+
+绯荤粺浣跨敤鑷畾涔夌殑IDLongGenerator鏉ョ敓鎴愬敮涓�鐨凩ong鍨婭D锛岀‘淇濆湪鍒嗗竷寮忕幆澧冧笅鐨処D鍞竴鎬с��
+
+### IDLongGenerator鐗规��
+
+- **鏍煎紡**: `骞存湀鏃ユ椂鍒嗙` + `3浣嶈嚜澧炲簭鍒梎 + `2浣嶇郴缁熷悗缂�`
+- **闀垮害**: 19浣嶆暟瀛楋紙濡傦細20231218104504069**00**锛�
+- **骞跺彂鎬�**: 鏀寔鍚屼竴绉掑唴鐢熸垚1000涓笉鍚孖D
+- **鍒嗗竷寮�**: 閫氳繃鍚庣紑鍖哄垎涓嶅悓瀛愮郴缁燂紝閬垮厤ID鍐茬獊
+
+### 浣跨敤鏂瑰紡
+
+```java
+// 渚濊禆娉ㄥ叆
+@Autowired
+private IDLongGenerator idLongGenerator;
+
+// 鐢熸垚ID
+Long id = idLongGenerator.generate();
+```
+
+### 搴旂敤鍦烘櫙
+
+- **绠$悊鍗″垱寤�**: createManagementCard鏂规硶涓娇鐢↖DLongGenerator鐢熸垚绠$悊鍗D
+- **瀹炰綋涓婚敭**: 鎵�鏈変笟鍔″疄浣撶殑涓婚敭ID鐢熸垚
+- **璁㈠崟鍙�**: 涓氬姟娴佹按鍙风敓鎴�
+- **鏃ュ織璁板綍**: 鎿嶄綔璁板綍鐨勫敮涓�鏍囪瘑
+
+### 閰嶇疆璇存槑
+
+绯荤粺鍚姩鏃朵細鑷姩璁剧疆ID鍚庣紑锛屼笉鍚岀殑鏈嶅姟妯″潡浣跨敤涓嶅悓鐨勫悗缂�鏉ラ伩鍏岻D鍐茬獊锛�
+
+```xml
+<!-- web.xml鎴朣pring閰嶇疆 -->
+<context-param>
+    <param-name>idSuffix</param-name>
+    <param-value>01</param-value> <!-- 涓嶅悓鏈嶅姟浣跨敤涓嶅悓鍚庣紑 -->
+</context-param>
+```
+
 ## 寮�鍙戠幆澧冩惌寤�
 
 ### 鍓嶇疆鏉′欢
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStManureMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStManureMapper.java
index 62a2163..a36c38c 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStManureMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStManureMapper.java
@@ -2,10 +2,13 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrStManure;
+import com.dy.pipIrrGlobal.voPr.VoManure;
 import com.dy.pipIrrGlobal.voPr.VoMqttSimple;
+import com.dy.pipIrrGlobal.voPr.VoSoil;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -31,6 +34,23 @@
 
     List<VoMqttSimple> selectAllSimple() ;
 
+
+    VoManure selectOne(Long id) ;
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍鎬绘暟
+     * @param params
+     * @return
+     */
+    Long totalCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     * @param params
+     * @return
+     */
+    List<VoManure> selectSome(Map<?, ?> params);
+
+
     int updateByPrimaryKeySelective(PrStManure record);
 
     int updateByPrimaryKey(PrStManure record);
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStSoilMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStSoilMapper.java
index 63e744b..9e3dfcf 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStSoilMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStSoilMapper.java
@@ -3,9 +3,11 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrStSoil;
 import com.dy.pipIrrGlobal.voPr.VoMqttSimple;
+import com.dy.pipIrrGlobal.voPr.VoSoil;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -31,6 +33,22 @@
 
     List<VoMqttSimple> selectAllSimple() ;
 
+
+    VoSoil selectOne(Long id) ;
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍鎬绘暟
+     * @param params
+     * @return
+     */
+    Long totalCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     * @param params
+     * @return
+     */
+    List<VoSoil> selectSome(Map<?, ?> params);
+
     int updateByPrimaryKeySelective(PrStSoil record);
 
     int updateByPrimaryKey(PrStSoil record);
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStWeatherMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStWeatherMapper.java
index 0a66151..385526c 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStWeatherMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrStWeatherMapper.java
@@ -3,9 +3,11 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrStWeather;
 import com.dy.pipIrrGlobal.voPr.VoMqttSimple;
+import com.dy.pipIrrGlobal.voPr.VoWeather;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -29,6 +31,22 @@
 
     PrStWeather selectByPrimaryKey(Long id);
 
+
+    VoWeather selectOne(Long id) ;
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍鎬绘暟
+     * @param params
+     * @return
+     */
+    Long totalCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     * @param params
+     * @return
+     */
+    List<VoWeather> selectSome(Map<?, ?> params);
+
     List<VoMqttSimple> selectAllSimple() ;
 
     int updateByPrimaryKeySelective(PrStWeather record);
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 1029716..8757677 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
@@ -35,6 +35,7 @@
     /**
      * 渚濇嵁姘村崱鍦板潃鑾峰彇姘村崱缂栧彿锛�12鏈�19鏃ュ簾寮冿級
      * 2024-06-30鍙栨秷搴熷純锛屾仮澶嶄娇鐢�
+     * 
      * @param cardAddr
      * @return
      */
@@ -42,6 +43,7 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿紙12鏈�19鏃ユ坊鍔犲悗搴熷純锛�
+     * 
      * @param cardNum 16浣嶆按鍗$紪鍙�
      * @return 姘村崱琛ㄤ富閿�
      */
@@ -49,6 +51,7 @@
 
     /**
      * 鏍规嵁琛屾斂鍖哄垝涓叉ā鍧楁煡璇㈡按鍗$紪鍙�
+     * 
      * @param areaCode
      * @return
      */
@@ -56,6 +59,7 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+     * 
      * @param cardNum
      * @return
      */
@@ -63,6 +67,7 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鑾峰彇姘村崱瀵瑰簲鐨勫啘鎴穒d鍜屽鍚�
+     * 
      * @param cardAddr
      * @param cardNum
      * @return
@@ -71,6 +76,7 @@
 
     /**
      * 寰楀埌姘村崱瀵硅薄
+     * 
      * @param cardAddr
      * @param cardNum
      * @return
@@ -79,6 +85,7 @@
 
     /**
      * 鏍规嵁鍐滄埛涓婚敭鑾峰彇姘村崱鍒楄〃锛堢墿鐞嗗崱+铏氭嫙鍗★級
+     * 
      * @param clientId
      * @return
      */
@@ -86,6 +93,7 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鑾峰彇鎿嶄綔璁板綍鍒楄〃
+     * 
      * @param cardNum 姘村崱缂栧彿
      * @return 姘村崱鎿嶄綔璁板綍鍒楄〃
      */
@@ -93,6 +101,7 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鑾峰彇浣欓
+     * 
      * @param cardNum 姘村崱缂栧彿
      * @return 浣欓
      */
@@ -100,6 +109,7 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鑾峰彇鍏呭�兼�婚
+     * 
      * @param cardNum
      * @return
      */
@@ -107,6 +117,7 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鑾峰彇鍗$墖鐘舵��
+     * 
      * @param cardNum
      * @return
      */
@@ -114,6 +125,7 @@
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃璁板綍鏁帮紝搴旂敤绋嬪簭浣跨敤
+     * 
      * @param params
      * @return
      */
@@ -121,6 +133,7 @@
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃锛屽簲鐢ㄧ▼搴忎娇鐢�
+     * 
      * @param params
      * @return
      */
@@ -128,18 +141,21 @@
 
     /**
      * 鑾峰彇宸叉寕澶憋紝鏈ˉ鍗$殑璁板綍鏁伴噺锛屽簲鐢ㄧ▼搴忎娇鐢�
+     * 
      * @return
      */
     Long getUnreplacedRecordCount();
 
     /**
      * 鑾峰彇宸叉寕澶憋紝鏈ˉ鍗$殑璁板綍锛屽簲鐢ㄧ▼搴忎娇鐢�
+     * 
      * @return
      */
     List<VoCards> getUnreplaced(Map<?, ?> params);
 
     /**
      * 鏍规嵁鎸囧畾姘村崱缂栧彿鑾峰彇鎸傚け璁板綍鏁伴噺锛堣ˉ鍗°�佽В閿佷娇鐢級
+     * 
      * @param cardNum
      * @return
      */
@@ -147,6 +163,7 @@
 
     /**
      * 鏍规嵁鎸囧畾姘村崱缂栧彿鑾峰彇宸茶ˉ鍗℃暟閲忥紙琛ュ崱銆佽В閿佷娇鐢級
+     * 
      * @param cardNum 姘村崱缂栧彿
      * @return 绗﹀悎鏉′欢璁板綍鏁帮紝鏈�澶氫竴鏉�
      */
@@ -154,6 +171,7 @@
 
     /**
      * 鏍规嵁鍐滄埛濮撳悕鍜屾墜鏈哄彿鑾峰彇姘村崱鍒楄〃璁板綍鏁帮紝搴旂敤绋嬪簭浣跨敤
+     * 
      * @param params
      * @return
      */
@@ -161,14 +179,15 @@
 
     /**
      * 鏍规嵁鍐滄埛濮撳悕鍜屾墜鏈哄彿鑾峰彇姘村崱鍒楄〃锛屽簲鐢ㄧ▼搴忎娇鐢�
+     * 
      * @param params
      * @return
      */
     List<VoCards2> getCardsByClientNameAndPhone(Map<?, ?> params);
 
-
     /**
      * 鏍规嵁鍐滄埛ID鏌ヨ姝e父鐘舵�佺殑姘村崱鍒楄〃,灏忕▼搴忎娇鐢�
+     * 
      * @param clientId
      * @return
      */
@@ -176,13 +195,15 @@
 
     /**
      * 鏇存柊瀹炰綋鍗″墿浣欓噾棰�
+     * 
      * @param id
      * @param money
      */
-    void updateMoney(@Param("id")Long id , @Param("money")Double money);
+    void updateMoney(@Param("id") Long id, @Param("money") Double money);
 
     /**
-     *褰撳墠浣欓鎬婚噺锛堢墿鐞嗗崱锛�
+     * 褰撳墠浣欓鎬婚噺锛堢墿鐞嗗崱锛�
+     * 
      * @param
      * @return
      */
@@ -190,6 +211,7 @@
 
     /**
      * 鏍规嵁姘村崱鍦板潃鑾峰彇姘村崱鏁伴噺锛岀敤鏉ュ垽鏂鍗℃槸鍚﹀厑璁稿紑鍗★紝鏃犳晥鍗$墖鎺掗櫎鍦ㄥ
+     * 
      * @param cardAddr
      * @return
      */
@@ -197,14 +219,15 @@
 
     /**
      * 鏍规嵁姘村崱鍦板潃鑾峰彇鎸囧畾鐘舵�佺殑姘村崱鏁伴噺锛岀敤鏉ュ垽鏂鍗℃槸鍚﹀厑璁稿紑鍗�
+     * 
      * @param cardAddr
      * @return
      */
     Long getCountByCardAddrAndState(String cardAddr);
 
-
     /**
      * 鑾峰彇鎸囧畾鏃堕棿娈垫按鍗′娇鐢ㄦ儏鍐佃褰曟暟閲�
+     * 
      * @param params
      * @return
      */
@@ -212,6 +235,7 @@
 
     /**
      * 鑾峰彇鎸囧畾鏃堕棿娈垫按鍗′娇鐢ㄦ儏鍐碉細鍏呭�煎悎璁°�佹秷璐瑰悎璁°�佷綑棰�
+     * 
      * @param params
      * @return
      */
@@ -219,37 +243,42 @@
 
     /**
      * 鑾峰彇鎸囧畾鏃堕棿娈靛唴姘村崱鍏呭�兼�昏
+     * 
      * @param timeStart
      * @param timeStop
      * @return
      */
-    Float getTotalRecharge(@Param("timeStart")String timeStart, @Param("timeStop")String timeStop);
+    Float getTotalRecharge(@Param("timeStart") String timeStart, @Param("timeStop") String timeStop);
 
     /**
      * 鑾峰彇鎸囧畾鏃堕棿娈靛唴姘村崱娑堣垂鎬昏
+     * 
      * @param timeStart
      * @param timeStop
      * @return
      */
-    Float getTotalConsumption(@Param("timeStart")String timeStart, @Param("timeStop")String timeStop);
+    Float getTotalConsumption(@Param("timeStart") String timeStart, @Param("timeStop") String timeStop);
 
     /**
      * 渚濇嵁姘村崱鍦板潃灏嗘渶鍚庝竴鏉℃棤鏁堢姸鎬佺殑鎸囧畾鎿嶄綔璁板綍鏀逛负鏈夋晥
+     * 
      * @param cardAddr
      * @param operateType
      * @return
      */
-    Integer turnCardValidByAddr(@Param("cardAddr")String cardAddr, @Param("operateType")Integer operateType);
+    Integer turnCardValidByAddr(@Param("cardAddr") String cardAddr, @Param("operateType") Integer operateType);
 
     /**
      * 鍏呭�兼満鐢ㄦ牴鎹鍗曞彿灏嗘按鍗℃敼涓烘湁鏁�
+     * 
      * @param orderNumber
      * @return
      */
-    Integer turnCardValidByOrderNumber(@Param("orderNumber")String orderNumber);
+    Integer turnCardValidByOrderNumber(@Param("orderNumber") String orderNumber);
 
     /**
      * 鏍规嵁姘村崱ID鑾峰彇鍘熸按鍗D锛岃ˉ鍗¢�氱煡涓娇鐢�
+     * 
      * @param cardId
      * @return
      */
@@ -257,20 +286,23 @@
 
     /**
      * 鍏呭�兼満鐢ㄦ牴鎹ˉ鍗$殑璁㈠崟鍙峰皢鎸傚け姘村崱浣欓缃浂
+     * 
      * @param orderNumber
      * @return
      */
-    Integer emptyCardBalance(@Param("orderNumber")String orderNumber);
+    Integer emptyCardBalance(@Param("orderNumber") String orderNumber);
 
     /**
      * 鍏呭�兼満鐢ㄨ幏鍙栧啘鎴锋按鍗′俊鎭�
+     * 
      * @param cardAddr
      * @return
      */
-    VoTermCard getTermCardInfo(@Param("cardAddr")String cardAddr);
+    VoTermCard getTermCardInfo(@Param("cardAddr") String cardAddr);
 
     /**
      * 鑾峰彇宸叉寕澶辨按鍗″垪琛ㄨ褰曟暟閲�
+     * 
      * @param params
      * @return
      */
@@ -278,6 +310,7 @@
 
     /**
      * 鑾峰彇宸叉寕澶辨按鍗″垪琛�
+     * 
      * @param params
      * @return
      */
@@ -285,8 +318,17 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鑾峰彇鍗′俊鎭�
+     * 
      * @param cardNum
      * @return
      */
     VoCardByClientNum getCardByCardNum(@Param("cardNum") String cardNum);
+
+    /**
+     * 妫�鏌ュ崱鍦板潃鏄惁宸插瓨鍦紙绠$悊鍗¤〃 + 鍐滄埛姘村崱琛級
+     * 
+     * @param cardAddr 鍗″湴鍧�
+     * @return 瀛樺湪鐨勮褰曟暟閲�
+     */
+    Long checkCardAddrExists(@Param("cardAddr") String cardAddr);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeManagementCard.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeManagementCard.java
index 9daf090..b6372c8 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeManagementCard.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeManagementCard.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson2.annotation.JSONField;
 import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.dy.common.po.BaseEntity;
@@ -20,7 +21,7 @@
  * @Description 鍏呭�兼満鐢ㄧ鐞嗗崱
  */
 
-@TableName(value="se_management_card", autoResultMap = true)
+@TableName(value = "se_management_card", autoResultMap = true)
 @Data
 @Builder
 @ToString
@@ -30,76 +31,89 @@
     public static final long serialVersionUID = 202506240651001L;
 
     /**
-    * 涓婚敭
-    */
-    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+     * 涓婚敭
+     */
+    @JSONField(serializeUsing = ObjectWriterImplToString.class)
     @TableId(type = IdType.INPUT)
     private Long id;
 
     /**
-    * 閫氳鍗忚
-    */
+     * 閫氳鍗忚
+     */
     @NotBlank(message = "閫氳鍗忚涓嶈兘涓虹┖")
     private String protocol;
 
     /**
-    * 鍗$墖鍦板潃
-    */
+     * 鍗$墖鍦板潃
+     */
     @NotBlank(message = "鍗$墖鍦板潃涓嶈兘涓虹┖")
     private String cardAddr;
 
     /**
-    * 璇嗗埆鐮�
-    */
+     * 璇嗗埆鐮�
+     */
     @NotBlank(message = "璇嗗埆鐮佷笉鑳戒负绌�")
     private String securityCode;
 
     /**
-    * 鍗$墖绫诲瀷;2-璁剧疆鍖哄煙琛ㄥ彿鍗★紝3-鍙栨暟鍗★紝4-妫�鏌ュ崱锛�5-娴嬭瘯鍗★紝6-娓呴浂鍗★紝7-IP璁剧疆鍗★紝8-鍩熷悕璁剧疆鍗★紝9-GPS鍗★紝10-鏃堕棿閰嶇疆鍗�
-    */
+     * 鍗$墖绫诲瀷;2-璁剧疆鍖哄煙琛ㄥ彿鍗★紝3-鍙栨暟鍗★紝4-妫�鏌ュ崱锛�5-娴嬭瘯鍗★紝6-娓呴浂鍗★紝7-IP璁剧疆鍗★紝8-鍩熷悕璁剧疆鍗★紝9-GPS鍗★紝10-鏃堕棿閰嶇疆鍗�
+     */
     @NotNull(message = "鍗$墖绫诲瀷涓嶈兘涓虹┖")
     private Byte cardType;
 
     /**
-    * 寮�鍗℃椂闂�
-    */
+     * 寮�鍗℃椂闂�
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @NotNull(message = "寮�鍗℃椂闂翠笉鑳戒负绌�")
     private Date createTime;
 
     /**
-    * 璁㈠崟鍙�
-    */
+     * 璁㈠崟鍙�
+     */
     private String orderNo;
 
     /**
-    * 5绾ц鏀垮尯鍒掔紪鐮�
-    */
+     * 5绾ц鏀垮尯鍒掔紪鐮�
+     */
     private String districtCode;
 
     /**
-    * 椤圭洰缂栫爜
-    */
+     * 椤圭洰缂栫爜
+     */
     private Integer projectNo;
 
     /**
-    * IP鍦板潃
-    */
+     * IP鍦板潃
+     */
     private String ip;
 
     /**
-    * 鍩熷悕
-    */
+     * 鍩熷悕
+     */
     private String domain;
 
     /**
-    * 寮�鍏抽榾鏃堕棿
-    */
+     * 寮�鍏抽榾鏃堕棿
+     */
     private Integer openClostTime;
 
     /**
-    * 澶囨敞淇℃伅
-    */
+     * 澶囨敞淇℃伅
+     */
     private String remarks;
 
+    /**
+     * 娉ㄩ攢鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField("cancel_time")
+    private Date cancelTime;
+
+    /**
+     * 鍗$墖鐘舵��;1-姝e父锛�2-宸叉敞閿�锛�3-宸叉寕澶憋紝4-鏈啓鍗�
+     */
+    @NotNull(message = "鍗$墖鐘舵�佷笉鑳戒负绌�")
+    private Byte state;
+
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoManure.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoManure.java
new file mode 100644
index 0000000..3aa6df7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoManure.java
@@ -0,0 +1,63 @@
+package com.dy.pipIrrGlobal.voPr;
+
+import com.dy.common.po.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/24 17:11
+ * @Description
+ */
+@Data
+@JsonPropertyOrder({ "id", "fboxId", "no", "name", "lng", "lat", "remark"})
+@Schema(title = "姘磋偉鏈哄�煎璞�")
+public class VoManure  implements BaseEntity {
+    private static final long serialVersionUID = 202506241715001L;
+    /**
+     * 涓婚敭
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    @Schema(title = "姘磋偉鏈篒D")
+    public Long id;
+
+    /**
+     * FBox搴忓垪鍙�
+     */
+    @Schema(title = "FBox搴忓垪鍙�")
+    public String fboxId ;
+
+    /**
+     * 姘磋偉绔欑紪鍙�
+     */
+    @Schema(title = "缂栧彿")
+    public Integer no ;
+
+    /**
+     * 姘磋偉绔欏悕绉�
+     */
+    @Schema(title = "鍚嶇О")
+    public String name;
+
+    /**
+     * 缁忓害
+     */
+    @Schema(title = "缁忓害")
+    public Double lng;
+
+    /**
+     * 绾害
+     */
+    @Schema(title = "绾害")
+    public Double lat;
+
+    /**
+     * 澶囨敞
+     */
+    @Schema(title = "澶囨敞")
+    public String remark;
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoSoil.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoSoil.java
new file mode 100644
index 0000000..13b32d9
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoSoil.java
@@ -0,0 +1,63 @@
+package com.dy.pipIrrGlobal.voPr;
+
+import com.dy.common.po.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/24 17:11
+ * @Description
+ */
+@Data
+@JsonPropertyOrder({ "id", "fboxId", "no", "name", "lng", "lat", "remark"})
+@Schema(title = "澧掓儏绔欏�煎璞�")
+public class VoSoil implements BaseEntity {
+    private static final long serialVersionUID = 202506241715002L;
+    /**
+     * 涓婚敭
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    @Schema(title = "澧掓儏绔橧D")
+    public Long id;
+
+    /**
+     * FBox搴忓垪鍙�
+     */
+    @Schema(title = "FBox搴忓垪鍙�")
+    public String fboxId ;
+
+    /**
+     * 姘磋偉绔欑紪鍙�
+     */
+    @Schema(title = "缂栧彿")
+    public Integer no ;
+
+    /**
+     * 姘磋偉绔欏悕绉�
+     */
+    @Schema(title = "鍚嶇О")
+    public String name;
+
+    /**
+     * 缁忓害
+     */
+    @Schema(title = "缁忓害")
+    public Double lng;
+
+    /**
+     * 绾害
+     */
+    @Schema(title = "绾害")
+    public Double lat;
+
+    /**
+     * 澶囨敞
+     */
+    @Schema(title = "澶囨敞")
+    public String remark;
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoWeather.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoWeather.java
new file mode 100644
index 0000000..8da86b2
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoWeather.java
@@ -0,0 +1,63 @@
+package com.dy.pipIrrGlobal.voPr;
+
+import com.dy.common.po.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/24 17:11
+ * @Description
+ */
+@Data
+@JsonPropertyOrder({ "id", "fboxId", "no", "name", "lng", "lat", "remark"})
+@Schema(title = "姘旇薄绔欏�煎璞�")
+public class VoWeather implements BaseEntity {
+    private static final long serialVersionUID = 202506241715003L;
+    /**
+     * 涓婚敭
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    @Schema(title = "姘旇薄绔橧D")
+    public Long id;
+
+    /**
+     * FBox搴忓垪鍙�
+     */
+    @Schema(title = "FBox搴忓垪鍙�")
+    public String fboxId ;
+
+    /**
+     * 姘磋偉绔欑紪鍙�
+     */
+    @Schema(title = "缂栧彿")
+    public Integer no ;
+
+    /**
+     * 姘磋偉绔欏悕绉�
+     */
+    @Schema(title = "鍚嶇О")
+    public String name;
+
+    /**
+     * 缁忓害
+     */
+    @Schema(title = "缁忓害")
+    public Double lng;
+
+    /**
+     * 绾害
+     */
+    @Schema(title = "绾害")
+    public Double lat;
+
+    /**
+     * 澶囨敞
+     */
+    @Schema(title = "澶囨敞")
+    public String remark;
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStManureMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStManureMapper.xml
index a70239a..eed8ceb 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStManureMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStManureMapper.xml
@@ -39,6 +39,55 @@
     from pr_st_manure
     where deleted != 1 ;
   </select>
+
+  <select id="selectOne" parameterType="java.lang.Long" resultType="com.dy.pipIrrGlobal.voPr.VoManure">
+    <!--@mbg.generated-->
+    SELECT tb.id,
+    tb.fbox_id AS fboxId,
+    tb.`no`,
+    tb.`name`,
+    tb.lng,
+    tb.lat,
+    tb.remark
+    FROM pr_st_manure tb
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ鎬绘暟-->
+  <select id="totalCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT COUNT(*) AS recordCount
+    FROM pr_st_manure tb
+    <where>
+      tb.deleted != 1
+      <if test="name != null and name != ''">
+        AND tb.name LIKE CONCAT('%', #{name}, '%')
+      </if>
+    </where>
+  </select>
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ-->
+  <select id="selectSome" parameterType="java.util.Map" resultType="com.dy.pipIrrGlobal.voPr.VoManure">
+    SELECT tb.id,
+    tb.fbox_id AS fboxId,
+    tb.`no`,
+    tb.`name`,
+    tb.lng,
+    tb.lat,
+    tb.remark
+    FROM pr_st_manure tb
+    <where>
+      tb.deleted != 1
+      <if test="name != null and name != ''">
+        AND tb.name LIKE CONCAT('%', #{name}, '%')
+      </if>
+    </where>
+    ORDER BY tb.id DESC
+    <trim prefix="limit ">
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
     <!--@mbg.generated-->
     delete from pr_st_manure
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStSoilMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStSoilMapper.xml
index 598436b..f07307c 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStSoilMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStSoilMapper.xml
@@ -39,6 +39,53 @@
     from pr_st_soil
     where deleted != 1 ;
   </select>
+
+  <select id="selectOne" parameterType="java.lang.Long" resultType="com.dy.pipIrrGlobal.voPr.VoSoil">
+    <!--@mbg.generated-->
+    SELECT tb.id,
+    tb.fbox_id AS fboxId,
+    tb.`no`,
+    tb.`name`,
+    tb.lng,
+    tb.lat,
+    tb.remark
+    FROM pr_st_soil tb
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ鎬绘暟-->
+  <select id="totalCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT COUNT(*) AS recordCount
+    FROM pr_st_soil tb
+    <where>
+      tb.deleted != 1
+      <if test="name != null and name != ''">
+        AND tb.name LIKE CONCAT('%', #{name}, '%')
+      </if>
+    </where>
+  </select>
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ-->
+  <select id="selectSome" parameterType="java.util.Map" resultType="com.dy.pipIrrGlobal.voPr.VoSoil">
+    SELECT tb.id,
+    tb.fbox_id AS fboxId,
+    tb.`no`,
+    tb.`name`,
+    tb.lng,
+    tb.lat,
+    tb.remark
+    FROM pr_st_soil tb
+    <where>
+      tb.deleted != 1
+      <if test="name != null and name != ''">
+        AND tb.name LIKE CONCAT('%', #{name}, '%')
+      </if>
+    </where>
+    ORDER BY tb.id DESC
+    <trim prefix="limit ">
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
     <!--@mbg.generated-->
     delete from pr_st_soil
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStWeatherMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStWeatherMapper.xml
index ade2d3c..84f86e4 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStWeatherMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStWeatherMapper.xml
@@ -32,6 +32,54 @@
     from pr_st_weather
     where id = #{id,jdbcType=BIGINT}
   </select>
+
+
+  <select id="selectOne" parameterType="java.lang.Long" resultType="com.dy.pipIrrGlobal.voPr.VoWeather">
+    <!--@mbg.generated-->
+    SELECT tb.id,
+    tb.fbox_id AS fboxId,
+    tb.`no`,
+    tb.`name`,
+    tb.lng,
+    tb.lat,
+    tb.remark
+    FROM pr_st_weather tb
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ鎬绘暟-->
+  <select id="totalCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT COUNT(*) AS recordCount
+    FROM pr_st_weather tb
+    <where>
+      tb.deleted != 1
+      <if test="name != null and name != ''">
+        AND tb.name LIKE CONCAT('%', #{name}, '%')
+      </if>
+    </where>
+  </select>
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ-->
+  <select id="selectSome" parameterType="java.util.Map" resultType="com.dy.pipIrrGlobal.voPr.VoWeather">
+    SELECT tb.id,
+    tb.fbox_id AS fboxId,
+    tb.`no`,
+    tb.`name`,
+    tb.lng,
+    tb.lat,
+    tb.remark
+    FROM pr_st_weather tb
+    <where>
+      tb.deleted != 1
+      <if test="name != null and name != ''">
+        AND tb.name LIKE CONCAT('%', #{name}, '%')
+      </if>
+    </where>
+    ORDER BY tb.id DESC
+    <trim prefix="limit ">
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
   <select id="selectAllSimple" resultType="com.dy.pipIrrGlobal.voPr.VoMqttSimple">
     <!--@mbg.generated-->
     select
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 f00cfd5..76c469e 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -864,4 +864,21 @@
     ORDER BY card.createDt DESC
     LIMIT 1
   </select>
+
+  <!--妫�鏌ュ崱鍦板潃鏄惁宸插瓨鍦紙绠$悊鍗¤〃 + 鍐滄埛姘村崱琛級-->
+  <select id="checkCardAddrExists" resultType="java.lang.Long">
+    SELECT COUNT(*) AS totalCount FROM (
+      -- 妫�鏌ョ鐞嗗崱琛ㄤ腑姝e父(1)鍜屾寕澶�(3)鐘舵�佺殑璁板綍锛屾帓闄ゅ凡娉ㄩ攢(2)鍜屾湭鍐欏崱(4)
+      SELECT card_addr FROM se_management_card 
+      WHERE card_addr = #{cardAddr}
+        AND state IN (1, 3)
+      
+      UNION ALL
+      
+      -- 妫�鏌ュ啘鎴锋按鍗¤〃涓甯�(1)鍜屾寕澶�(3)鐘舵�佺殑璁板綍
+      SELECT cardAddr FROM se_client_card 
+      WHERE cardAddr = #{cardAddr} 
+        AND state IN (1, 3)
+    ) AS combined_result
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeManagementCardMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeManagementCardMapper.xml
index 0e28a72..e3e5445 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeManagementCardMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeManagementCardMapper.xml
@@ -17,11 +17,13 @@
     <result column="domain" jdbcType="VARCHAR" property="domain" />
     <result column="open_clost_time" jdbcType="INTEGER" property="openClostTime" />
     <result column="remarks" jdbcType="VARCHAR" property="remarks" />
+    <result column="cancel_time" jdbcType="TIMESTAMP" property="cancelTime" />
+    <result column="state" jdbcType="TINYINT" property="state" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, protocol, card_addr, security_code, card_type, create_time, order_no, district_code, 
-    project_no, ip, `domain`, open_clost_time, remarks
+    project_no, ip, `domain`, open_clost_time, remarks, cancel_time, state
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
@@ -41,12 +43,12 @@
       security_code, card_type, create_time, 
       order_no, district_code, project_no, 
       ip, `domain`, open_clost_time, 
-      remarks)
+      remarks, cancel_time, state)
     values (#{id,jdbcType=BIGINT}, #{protocol,jdbcType=VARCHAR}, #{cardAddr,jdbcType=VARCHAR}, 
       #{securityCode,jdbcType=VARCHAR}, #{cardType,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, 
       #{orderNo,jdbcType=VARCHAR}, #{districtCode,jdbcType=VARCHAR}, #{projectNo,jdbcType=INTEGER}, 
       #{ip,jdbcType=VARCHAR}, #{domain,jdbcType=VARCHAR}, #{openClostTime,jdbcType=INTEGER}, 
-      #{remarks,jdbcType=VARCHAR})
+      #{remarks,jdbcType=VARCHAR}, #{cancelTime,jdbcType=TIMESTAMP}, #{state,jdbcType=TINYINT})
   </insert>
   <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeManagementCard">
     <!--@mbg.generated-->
@@ -91,6 +93,12 @@
       <if test="remarks != null">
         remarks,
       </if>
+      <if test="cancelTime != null">
+        cancel_time,
+      </if>
+      <if test="state != null">
+        state,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
@@ -131,6 +139,12 @@
       </if>
       <if test="remarks != null">
         #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="cancelTime != null">
+        #{cancelTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="state != null">
+        #{state,jdbcType=TINYINT},
       </if>
     </trim>
   </insert>
@@ -174,6 +188,12 @@
       <if test="remarks != null">
         remarks = #{remarks,jdbcType=VARCHAR},
       </if>
+      <if test="cancelTime != null">
+        cancel_time = #{cancelTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="state != null">
+        state = #{state,jdbcType=TINYINT},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -191,7 +211,9 @@
       ip = #{ip,jdbcType=VARCHAR},
       `domain` = #{domain,jdbcType=VARCHAR},
       open_clost_time = #{openClostTime,jdbcType=INTEGER},
-      remarks = #{remarks,jdbcType=VARCHAR}
+      remarks = #{remarks,jdbcType=VARCHAR},
+      cancel_time = #{cancelTime,jdbcType=TIMESTAMP},
+      state = #{state,jdbcType=TINYINT}
     where id = #{id,jdbcType=BIGINT}
   </update>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/ManureCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/ManureCtrl.java
index 19dad05..9963af5 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/ManureCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/ManureCtrl.java
@@ -3,8 +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.common.webUtil.ResultCodeMsg;
 import com.dy.pipIrrGlobal.pojoPr.PrStManure;
+import com.dy.pipIrrGlobal.voPr.VoManure;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -19,6 +21,7 @@
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -39,6 +42,30 @@
         this.sv = sv ;
     }
 
+    /**
+     * 鍒嗛〉鏌ヨ姘磋偉鏈鸿褰�
+     * @param vo
+     * @return
+     */
+    @Operation(summary = "鑾峰緱涓�椤垫按鑲ユ満璁板綍", description = "杩斿洖涓�椤垫按鑲ユ満鏁版嵁")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤垫按鑲ユ満鏁版嵁锛圔aseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoManure.class))}
+            )
+    })
+    @GetMapping(path = "/some")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoManure>>> some(QueryVo vo){
+        try {
+            return BaseResponseUtils.buildSuccess(this.sv.selectSome(vo));
+        } catch (Exception e) {
+            log.error("鑾峰彇姘磋偉鏈鸿褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
 
     /**
      * 寰楀埌涓�濂楁按鑲ユ満鏁版嵁
@@ -50,13 +77,13 @@
                     responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
                     description = "杩斿洖涓�濂楁按鑲ユ満鏁版嵁锛圔aseResponse.content:{}锛�",
                     content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = PrStManure.class))}
+                            schema = @Schema(implementation = VoManure.class))}
             )
     })
     @GetMapping(path = "one")
     @SsoAop()
-    public BaseResponse<PrStManure> one(Long id){
-        return BaseResponseUtils.buildSuccess(this.sv.selectById(id));
+    public BaseResponse<VoManure> one(Long id){
+        return BaseResponseUtils.buildSuccess(this.sv.selectOne(id));
     }
 
     /**
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/ManureSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/ManureSv.java
index afcf207..59040a7 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/ManureSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/ManureSv.java
@@ -1,14 +1,18 @@
 package com.dy.pipIrrProject.mqtt.manure;
 
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoPr.PrStManureMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrStManure;
+import com.dy.pipIrrGlobal.voPr.VoManure;
 import com.dy.pipIrrGlobal.voPr.VoMqttSimple;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -27,12 +31,30 @@
     }
 
     /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     *
+     * @param queryVo 鏌ヨ鍊煎璞�
+     * @return 璁板綍鍒楄〃
+     */
+    public QueryResultVo<List<VoManure>> selectSome(QueryVo queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+        Long itemTotal = dao.totalCount(params);
+
+        QueryResultVo<List<VoManure>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = queryVo.pageSize;
+        rsVo.pageCurr = queryVo.pageCurr;
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = dao.selectSome(params);
+        return rsVo;
+    }
+
+    /**
      * 寰楀埌涓�涓疄浣�
      * @param id 瀹炰綋ID
      * @return 瀹炰綋
      */
-    public PrStManure selectById(Long id){
-        return this.dao.selectById(id) ;
+    public VoManure selectOne(Long id){
+        return this.dao.selectOne(id) ;
     }
     /**
      * 淇濆瓨锛堟坊鍔狅級瑙嗛鐩戞帶鐐�
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/QueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/QueryVo.java
new file mode 100644
index 0000000..a19e1ec
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/manure/QueryVo.java
@@ -0,0 +1,23 @@
+package com.dy.pipIrrProject.mqtt.manure;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/24 17:21
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "姘磋偉鏈烘煡璇㈡潯浠�")
+public class QueryVo extends QueryConditionVo {
+    @Schema(description = "姘磋偉鏈哄悕绉�")
+    public String name;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/QueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/QueryVo.java
new file mode 100644
index 0000000..19e9145
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/QueryVo.java
@@ -0,0 +1,23 @@
+package com.dy.pipIrrProject.mqtt.soil;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/24 17:21
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "澧掓儏绔欐煡璇㈡潯浠�")
+public class QueryVo extends QueryConditionVo {
+    @Schema(description = "澧掓儏绔欏悕绉�")
+    public String name;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/SoilCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/SoilCtrl.java
index 7386c4f..0adc5d2 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/SoilCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/SoilCtrl.java
@@ -3,8 +3,11 @@
 import com.dy.common.aop.SsoAop;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.common.webUtil.ResultCodeMsg;
 import com.dy.pipIrrGlobal.pojoPr.PrStSoil;
+import com.dy.pipIrrGlobal.voPr.VoSoil;
+import com.dy.pipIrrProject.mqtt.manure.QueryVo;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -19,6 +22,7 @@
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -39,6 +43,30 @@
         this.sv = sv ;
     }
 
+    /**
+     * 鍒嗛〉鏌ヨ澧掓儏绔欒褰�
+     * @param vo
+     * @return
+     */
+    @Operation(summary = "鑾峰緱涓�椤靛鎯呯珯璁板綍", description = "杩斿洖涓�椤靛鎯呯珯鏁版嵁")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛鎯呯珯鏁版嵁锛圔aseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoSoil.class))}
+            )
+    })
+    @GetMapping(path = "/some")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoSoil>>> some(QueryVo vo){
+        try {
+            return BaseResponseUtils.buildSuccess(this.sv.selectSome(vo));
+        } catch (Exception e) {
+            log.error("鑾峰彇澧掓儏绔欒褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
 
     /**
      * 寰楀埌涓�濂楀鎯呯珯鏁版嵁
@@ -50,13 +78,13 @@
                     responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
                     description = "杩斿洖涓�濂楀鎯呯珯鏁版嵁锛圔aseResponse.content:{}锛�",
                     content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = PrStSoil.class))}
+                            schema = @Schema(implementation = VoSoil.class))}
             )
     })
     @GetMapping(path = "one")
     @SsoAop()
-    public BaseResponse<PrStSoil> one(Long id){
-        return BaseResponseUtils.buildSuccess(this.sv.selectById(id));
+    public BaseResponse<VoSoil> one(Long id){
+        return BaseResponseUtils.buildSuccess(this.sv.selectOne(id));
     }
 
     /**
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/SoilSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/SoilSv.java
index e0303c6..1cd4277 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/SoilSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/soil/SoilSv.java
@@ -1,14 +1,19 @@
 package com.dy.pipIrrProject.mqtt.soil;
 
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoPr.PrStSoilMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrStSoil;
+import com.dy.pipIrrGlobal.voPr.VoSoil;
 import com.dy.pipIrrGlobal.voPr.VoMqttSimple;
+import com.dy.pipIrrProject.mqtt.manure.QueryVo;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -25,15 +30,31 @@
     public List<VoMqttSimple> allSimple(){
         return this.dao.selectAllSimple() ;
     }
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     *
+     * @param queryVo 鏌ヨ鍊煎璞�
+     * @return 璁板綍鍒楄〃
+     */
+    public QueryResultVo<List<VoSoil>> selectSome(QueryVo queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+        Long itemTotal = dao.totalCount(params);
 
+        QueryResultVo<List<VoSoil>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = queryVo.pageSize;
+        rsVo.pageCurr = queryVo.pageCurr;
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = dao.selectSome(params);
+        return rsVo;
+    }
 
     /**
      * 寰楀埌涓�涓疄浣�
      * @param id 瀹炰綋ID
      * @return 瀹炰綋
      */
-    public PrStSoil selectById(Long id){
-        return this.dao.selectById(id) ;
+    public VoSoil selectOne(Long id){
+        return this.dao.selectOne(id) ;
     }
     /**
      * 淇濆瓨锛堟坊鍔狅級瑙嗛鐩戞帶鐐�
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/QueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/QueryVo.java
new file mode 100644
index 0000000..3cf8d3d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/QueryVo.java
@@ -0,0 +1,23 @@
+package com.dy.pipIrrProject.mqtt.weather;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/24 17:21
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "姘旇薄绔欐煡璇㈡潯浠�")
+public class QueryVo extends QueryConditionVo {
+    @Schema(description = "姘旇薄绔欏悕绉�")
+    public String name;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/WeatherCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/WeatherCtrl.java
index f40de60..e4c0c3e 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/WeatherCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/WeatherCtrl.java
@@ -3,8 +3,11 @@
 import com.dy.common.aop.SsoAop;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.common.webUtil.ResultCodeMsg;
 import com.dy.pipIrrGlobal.pojoPr.PrStWeather;
+import com.dy.pipIrrGlobal.voPr.VoWeather;
+import com.dy.pipIrrProject.mqtt.manure.QueryVo;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -19,6 +22,7 @@
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -39,6 +43,30 @@
         this.sv = sv ;
     }
 
+    /**
+     * 鍒嗛〉鏌ヨ姘旇薄绔欒褰�
+     * @param vo
+     * @return
+     */
+    @Operation(summary = "鑾峰緱涓�椤垫皵璞$珯璁板綍", description = "杩斿洖涓�椤垫皵璞$珯鏁版嵁")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤垫皵璞$珯鏁版嵁锛圔aseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoWeather.class))}
+            )
+    })
+    @GetMapping(path = "/some")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoWeather>>> some(QueryVo vo){
+        try {
+            return BaseResponseUtils.buildSuccess(this.sv.selectSome(vo));
+        } catch (Exception e) {
+            log.error("鑾峰彇姘旇薄绔欒褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
 
     /**
      * 寰楀埌涓�濂楁皵璞$珯鏁版嵁
@@ -50,13 +78,13 @@
                     responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
                     description = "杩斿洖涓�濂楁皵璞$珯鏁版嵁锛圔aseResponse.content:{}锛�",
                     content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = PrStWeather.class))}
+                            schema = @Schema(implementation = VoWeather.class))}
             )
     })
     @GetMapping(path = "one")
     @SsoAop()
-    public BaseResponse<PrStWeather> one(Long id){
-        return BaseResponseUtils.buildSuccess(this.sv.selectById(id));
+    public BaseResponse<VoWeather> one(Long id){
+        return BaseResponseUtils.buildSuccess(this.sv.selectOne(id));
     }
 
     /**
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/WeatherSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/WeatherSv.java
index 6b93d7e..bfa8707 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/WeatherSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/mqtt/weather/WeatherSv.java
@@ -1,14 +1,19 @@
 package com.dy.pipIrrProject.mqtt.weather;
 
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoPr.PrStWeatherMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrStWeather;
 import com.dy.pipIrrGlobal.voPr.VoMqttSimple;
+import com.dy.pipIrrGlobal.voPr.VoWeather;
+import com.dy.pipIrrProject.mqtt.manure.QueryVo;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -25,15 +30,31 @@
     public List<VoMqttSimple> allSimple(){
         return this.dao.selectAllSimple() ;
     }
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     *
+     * @param queryVo 鏌ヨ鍊煎璞�
+     * @return 璁板綍鍒楄〃
+     */
+    public QueryResultVo<List<VoWeather>> selectSome(QueryVo queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+        Long itemTotal = dao.totalCount(params);
 
+        QueryResultVo<List<VoWeather>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = queryVo.pageSize;
+        rsVo.pageCurr = queryVo.pageCurr;
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = dao.selectSome(params);
+        return rsVo;
+    }
 
     /**
      * 寰楀埌涓�涓疄浣�
      * @param id 瀹炰綋ID
      * @return 瀹炰綋
      */
-    public PrStWeather selectById(Long id){
-        return this.dao.selectById(id) ;
+    public VoWeather selectOne(Long id){
+        return this.dao.selectOne(id) ;
     }
     /**
      * 淇濆瓨锛堟坊鍔狅級瑙嗛鐩戞帶鐐�
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 6720c46..ea8f0f8 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
@@ -48,9 +48,11 @@
      */
     @PostMapping(path = "termActiveCard", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<VoTermActiveCard> termActiveCard(@RequestBody @Valid ActiveCard po, BindingResult bindingResult) {
+    public BaseResponse<VoTermActiveCard> termActiveCard(@RequestBody @Valid ActiveCard po,
+            BindingResult bindingResult) {
         if (bindingResult != null && bindingResult.hasErrors()) {
-            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+            return BaseResponseUtils
+                    .buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         Map map_result = cardSv.activeOrReissueTermCard(po);
@@ -72,7 +74,8 @@
     @SsoAop()
     public BaseResponse<VoTermCommon> termRecharge(@RequestBody @Valid DtoRecharge po, BindingResult bindingResult) {
         if (bindingResult != null && bindingResult.hasErrors()) {
-            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+            return BaseResponseUtils
+                    .buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         Map map_result = cardSv.addRecharge(po, null);
@@ -94,7 +97,8 @@
     @SsoAop()
     public BaseResponse<Boolean> termReportLoss(@RequestBody @Valid DtoLoss po, BindingResult bindingResult) {
         if (bindingResult != null && bindingResult.hasErrors()) {
-            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+            return BaseResponseUtils
+                    .buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         Map map_result = cardSv.reportLoss(po);
@@ -116,7 +120,8 @@
     @SsoAop()
     public BaseResponse<Boolean> termUnlock(@RequestBody @Valid DtoUnlock po, BindingResult bindingResult) {
         if (bindingResult != null && bindingResult.hasErrors()) {
-            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+            return BaseResponseUtils
+                    .buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         Map map_result = cardSv.unlock(po);
@@ -138,7 +143,8 @@
     @SsoAop()
     public BaseResponse<VoTermCommon> termReissue(@RequestBody @Valid DtoReissue po, BindingResult bindingResult) {
         if (bindingResult != null && bindingResult.hasErrors()) {
-            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+            return BaseResponseUtils
+                    .buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         Map map_result = cardSv.reissue(po);
@@ -160,7 +166,8 @@
     @SsoAop()
     public BaseResponse<VoTermCommon> termCancel(@RequestBody @Valid DtoCancel po, BindingResult bindingResult) {
         if (bindingResult != null && bindingResult.hasErrors()) {
-            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+            return BaseResponseUtils
+                    .buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         Map map_result = cardSv.cancel(po);
@@ -173,22 +180,25 @@
 
     /**
      * 琛ユ墸
+     * 
      * @param po
      * @param bindingResult
      * @return
      */
     @PostMapping(path = "termRepay", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<VoRepaySupplement> termRepay(@RequestBody @Valid DtoRepaySupplement po, BindingResult bindingResult) {
+    public BaseResponse<VoRepaySupplement> termRepay(@RequestBody @Valid DtoRepaySupplement po,
+            BindingResult bindingResult) {
         if (bindingResult != null && bindingResult.hasErrors()) {
-            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+            return BaseResponseUtils
+                    .buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
-        if(po.getRepayMorny()  == null || po.getRepayMorny() <= 0) {
+        if (po.getRepayMorny() == null || po.getRepayMorny() <= 0) {
             return BaseResponseUtils.buildErrorMsg("琛ユ墸閲戦涓嶈兘涓虹┖涓旈渶澶т簬0");
         }
 
-        if(po.getRepayMorny() > po.getBalance()) {
+        if (po.getRepayMorny() > po.getBalance()) {
             return BaseResponseUtils.buildErrorMsg("琛ユ墸閲戦涓嶈兘澶т簬琛ユ墸鍓嶄綑棰�");
         }
 
@@ -201,18 +211,21 @@
 
     /**
      * 杩旇繕
+     * 
      * @param po
      * @param bindingResult
      * @return
      */
     @PostMapping(path = "supplement", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<VoRepaySupplement> supplement(@RequestBody @Valid DtoRepaySupplement po, BindingResult bindingResult) {
+    public BaseResponse<VoRepaySupplement> supplement(@RequestBody @Valid DtoRepaySupplement po,
+            BindingResult bindingResult) {
         if (bindingResult != null && bindingResult.hasErrors()) {
-            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+            return BaseResponseUtils
+                    .buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
-        if(po.getSupplementMoney() == null || po.getSupplementMoney() <= 0) {
+        if (po.getSupplementMoney() == null || po.getSupplementMoney() <= 0) {
             return BaseResponseUtils.buildErrorMsg("杩旇繕閲戦涓嶈兘涓虹┖涓旈渶澶т簬0");
         }
 
@@ -234,7 +247,8 @@
     @SsoAop()
     public BaseResponse<Boolean> termCallBack(@RequestBody @Valid DtoCallBack po, BindingResult bindingResult) {
         if (bindingResult != null && bindingResult.hasErrors()) {
-            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+            return BaseResponseUtils
+                    .buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         Map map_result = cardSv.callBack(po);
@@ -246,93 +260,85 @@
 
     /**
      * 璇诲彇鍗′俊鎭�
+     * 
      * @param cardAddr
      * @return
      */
     @GetMapping(path = "readCard")
     @SsoAop()
-    public BaseResponse<VoTermCard> readCard(@RequestParam String cardAddr){
+    public BaseResponse<VoTermCard> readCard(@RequestParam String cardAddr) {
         try {
             VoTermCard voTermCard = cardSv.readCard(cardAddr);
-            if(voTermCard == null) {
+            if (voTermCard == null) {
                 return BaseResponseUtils.buildNonExist();
             }
             return BaseResponseUtils.buildSuccess(voTermCard);
         } catch (Exception e) {
             log.error("鏌ヨ鍐滄埛寮傚父", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
         }
     }
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃锛岀粓绔簲鐢ㄧ▼搴忎娇鐢�
+     * 
      * @param vo
      * @return
      */
     @Operation(summary = "鑾峰緱涓�椤垫按鍗¤褰�", description = "杩斿洖涓�椤垫按鍗℃暟鎹�")
     @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "杩斿洖涓�椤垫按鍗℃暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = VoCards.class))}
-            )
+            @ApiResponse(responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "杩斿洖涓�椤垫按鍗℃暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�", content = {
+                    @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = VoCards.class)) })
     })
     @GetMapping(path = "getcards")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<VoCards>>> getcards(QoCards vo){
+    public BaseResponse<QueryResultVo<List<VoCards>>> getcards(QoCards vo) {
         try {
             QueryResultVo<List<VoCards>> res = cardSv.getCards(vo);
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
             log.error("鏌ヨ姘村崱寮傚父", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
         }
     }
 
     /**
      * 鑾峰彇宸叉寕澶辩殑姘村崱鍒楄〃锛岀粓绔簲鐢ㄧ▼搴忎娇鐢�
+     * 
      * @param vo
      * @return
      */
     @Operation(summary = "鑾峰緱涓�椤靛凡鎸傚け姘村崱璁板綍", description = "杩斿洖涓�椤靛凡鎸傚け姘村崱鏁版嵁")
     @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "杩斿洖涓�椤靛凡鎸傚け姘村崱鏁版嵁锛圔aseResponse.content:QueryResultVo[{}]锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = VoCards.class))}
-            )
+            @ApiResponse(responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "杩斿洖涓�椤靛凡鎸傚け姘村崱鏁版嵁锛圔aseResponse.content:QueryResultVo[{}]锛�", content = {
+                    @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = VoCards.class)) })
     })
     @GetMapping(path = "getlostcards")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<VoCards>>> getLostCards(QoLostCards vo){
+    public BaseResponse<QueryResultVo<List<VoCards>>> getLostCards(QoLostCards vo) {
         try {
             QueryResultVo<List<VoCards>> res = cardSv.getLostCards(vo);
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
             log.error("鏌ヨ宸叉寕澶辨按鍗″紓甯�", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
         }
     }
 
     /**
      * 鏍规嵁姘村崱缂栧彿鑾峰彇鍗′俊鎭�
+     * 
      * @param cardNum 姘村崱缂栧彿
      * @return
      */
     @Operation(summary = "鏍规嵁姘村崱缂栧彿鑾峰彇鍗′俊鎭�", description = "鏍规嵁姘村崱缂栧彿鑾峰彇瀵瑰簲鐨勫崱淇℃伅")
     @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "杩斿洖鍗′俊鎭紙BaseResponse.content:VoCardByClientNum锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = VoCardByClientNum.class))}
-            )
+            @ApiResponse(responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "杩斿洖鍗′俊鎭紙BaseResponse.content:VoCardByClientNum锛�", content = {
+                    @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = VoCardByClientNum.class)) })
     })
     @GetMapping(path = "getcardbycardnum")
     @SsoAop()
-    public BaseResponse<VoCardByClientNum> getCardByCardNum(@RequestParam String cardNum){
+    public BaseResponse<VoCardByClientNum> getCardByCardNum(@RequestParam String cardNum) {
         try {
             VoCardByClientNum res = cardSv.getCardByCardNum(cardNum);
             if (res == null) {
@@ -341,7 +347,46 @@
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
             log.error("鏍规嵁姘村崱缂栧彿鏌ヨ鍗′俊鎭紓甯�", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+    /**
+     * 鍒涘缓绠$悊鍗�
+     *
+     * @param dto           鍒涘缓绠$悊鍗″弬鏁�
+     * @param bindingResult 鍙傛暟楠岃瘉缁撴灉
+     * @return 鍒涘缓缁撴灉
+     */
+    @Operation(summary = "鍒涘缓绠$悊鍗�", description = "鍒涘缓鍏呭�兼満鐢ㄧ鐞嗗崱")
+    @ApiResponses(value = {
+            @ApiResponse(responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "鍒涘缓鎴愬姛锛岃繑鍥炶鍗曞彿", content = {
+                    @Content(mediaType = MediaType.APPLICATION_JSON_VALUE) })
+    })
+    @PostMapping(path = "createManagementCard", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @SsoAop()
+    public BaseResponse<String> createManagementCard(@RequestBody @Valid CreateManagementCardDto dto,
+            BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils
+                    .buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        // 楠岃瘉鍗$墖绫诲瀷鏄惁鍦ㄥ厑璁歌寖鍥村唴
+        if (dto.getCardType() < 2 || dto.getCardType() > 10) {
+            return BaseResponseUtils.buildErrorMsg("鍗$墖绫诲瀷蹇呴』鍦�2-10涔嬮棿");
+        }
+
+        // 妫�鏌ュ崱鐗囧湴鍧�鏄惁宸插瓨鍦�
+        if (cardSv.isCardAddrExists(dto.getCardAddr())) {
+            return BaseResponseUtils.buildErrorMsg("璇ュ崱鐗囧湴鍧�宸插瓨鍦紝璇蜂娇鐢ㄥ叾浠栧湴鍧�");
+        }
+
+        Map<String, Object> result = cardSv.createManagementCard(dto);
+        if ((Boolean) result.get("success")) {
+            return BaseResponseUtils.buildSuccess((String) result.get("content"));
+        } else {
+            return BaseResponseUtils.buildErrorMsg(result.get("msg").toString());
         }
     }
 }
\ 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 0aeff56..31520d5 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
@@ -6,6 +6,7 @@
 import com.dy.pipIrrGlobal.daoSe.*;
 import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
+import com.dy.pipIrrGlobal.pojoSe.SeManagementCard;
 import com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory;
 import com.dy.pipIrrGlobal.voSe.*;
 import com.dy.pipIrrTerminal.card.dto.*;
@@ -13,6 +14,7 @@
 import com.dy.pipIrrTerminal.card.qo.QoLostCards;
 import com.dy.pipIrrTerminal.card.enums.CardStateENUM;
 import com.dy.pipIrrTerminal.card.enums.LastOperateENUM;
+import com.dy.pipIrrTerminal.card.enums.ManagementCardStateENUM;
 import com.dy.pipIrrTerminal.card.enums.OperateTypeENUM;
 import com.dy.pipIrrTerminal.card.enums.RechargeTypeENUM;
 import lombok.extern.slf4j.Slf4j;
@@ -21,6 +23,7 @@
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import com.dy.common.util.IDLongGenerator;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -54,11 +57,18 @@
     @Autowired
     private SeManagerCardMapper seManagerCardMapper;
 
+    @Autowired
+    private SeManagementCardMapper seManagementCardMapper;
+
+    @Autowired
+    private IDLongGenerator idLongGenerator;
+
     @Value("${project.projectNo}")
     private Integer projectNo;
 
     /**
      * 鏍规嵁姘村崱鍦板潃鍒ゆ柇璇ュ崱鏄惁鍙互寮�鍗�
+     * 
      * @param cardAddr
      * @return true:鍙互寮�鍗�
      */
@@ -80,6 +90,7 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互鍏呭��
+     * 
      * @param po
      * @return true:鍙互鍏呭��
      */
@@ -90,7 +101,7 @@
 
         String stateName = Optional.ofNullable(seClientCardMapper.getCardStateByCardNum(po.getCardNum())).orElse("");
         // 鍗曠嫭鍏呭�兼椂鍗$墖蹇呴』涓烘甯�
-        if((po.getRechargeType() == RechargeTypeENUM.RECHARGE.getCode()) && !stateName.equals("姝e父")) {
+        if ((po.getRechargeType() == RechargeTypeENUM.RECHARGE.getCode()) && !stateName.equals("姝e父")) {
             map.put("msg", stateName + ", " + "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔");
             return map;
         }
@@ -101,6 +112,7 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互鎸傚け
+     * 
      * @param po
      * @return true:鍙互鎶ュけ
      */
@@ -111,7 +123,7 @@
 
         Long cardNum = po.getCardNum();
         String stateName = seClientCardMapper.getCardStateByCardNum(cardNum);
-        if(stateName == null || stateName.equals("") || !stateName.equals("姝e父")) {
+        if (stateName == null || stateName.equals("") || !stateName.equals("姝e父")) {
             map.put("msg", stateName + ", " + "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔");
             return map;
         }
@@ -127,7 +139,7 @@
         CardSimple card = new CardSimple();
         card.setCardId(Long.parseLong(map_card.get("cardId").toString()));
         card.setClientId(Long.parseLong(map_card.get("clientId").toString()));
-        //card.setProtocol(map_card.get("protocol").toString());
+        // card.setProtocol(map_card.get("protocol").toString());
 
         map.put("success", true);
         map.put("content", card);
@@ -136,6 +148,7 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互瑙i攣
+     * 
      * @param po
      * @return
      */
@@ -167,8 +180,10 @@
         map.put("content", card);
         return map;
     }
+
     /**
      * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互琛ュ崱
+     * 
      * @param po
      * @return true:鍙互琛ュ崱
      */
@@ -180,7 +195,7 @@
         Long cardNum = po.getCardNum();
         Integer lostCount = seClientCardMapper.getLostCount(cardNum);
         Integer replacedCount = seClientCardMapper.getReplacedCount(cardNum);
-        if(lostCount == 0 || replacedCount > 0) {
+        if (lostCount == 0 || replacedCount > 0) {
             map.put("msg", "姘村崱鏈寕澶辨垨宸茶ˉ鍗★紝涓嶈兘琛ュ崱");
             return map;
         }
@@ -212,6 +227,7 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互娉ㄩ攢
+     * 
      * @param po
      * @return
      */
@@ -222,7 +238,7 @@
 
         Long cardNum = po.getCardNum();
         String stateName = seClientCardMapper.getCardStateByCardNum(cardNum);
-        if(stateName == null || stateName.equals("") || !stateName.equals("姝e父")) {
+        if (stateName == null || stateName.equals("") || !stateName.equals("姝e父")) {
             map.put("msg", stateName + ", " + "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔");
             return map;
         }
@@ -246,6 +262,7 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互琛ユ墸
+     * 
      * @param po
      * @return
      */
@@ -256,7 +273,7 @@
 
         Long cardNum = po.getCardNum();
         String stateName = seClientCardMapper.getCardStateByCardNum(cardNum);
-        if(stateName == null || stateName.equals("") || !stateName.equals("姝e父")) {
+        if (stateName == null || stateName.equals("") || !stateName.equals("姝e父")) {
             map.put("msg", stateName + ", " + "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔");
             return map;
         }
@@ -280,6 +297,7 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互杩旇繕
+     * 
      * @param po
      * @return
      */
@@ -290,7 +308,7 @@
 
         Long cardNum = po.getCardNum();
         String stateName = seClientCardMapper.getCardStateByCardNum(cardNum);
-        if(stateName == null || stateName.equals("") || !stateName.equals("姝e父")) {
+        if (stateName == null || stateName.equals("") || !stateName.equals("姝e父")) {
             map.put("msg", stateName + ", " + "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔");
             return map;
         }
@@ -314,6 +332,7 @@
 
     /**
      * 鏍规嵁鍐滄埛缂栧彿鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode锛岃ˉ鍗¤繃绋嬩腑寮�鏂板崱浣跨敤
+     * 
      * @param clientId
      * @return
      */
@@ -435,6 +454,7 @@
 
     /**
      * 寮�鍗¢檮鍔犲厖鍊�
+     * 
      * @param po
      * @param cardNum
      * @return
@@ -468,6 +488,7 @@
 
     /**
      * 婵�娲绘垨琛ュ崱
+     * 
      * @param po
      * @return
      */
@@ -485,7 +506,7 @@
         }
 
         Map map_cardNum = generateCardNum(po.getClientId());
-        if(map_cardNum.get("success").equals(false)) {
+        if (map_cardNum.get("success").equals(false)) {
             map.put("msg", map_cardNum.get("msg").toString());
             return map;
         }
@@ -493,14 +514,14 @@
 
         String orderNo = generateOrderNo();
         Map map_addCardAndOperate = addCardAndOperate(po, cardNum, orderNo);
-        if(map_addCardAndOperate.get("success").equals(false)) {
+        if (map_addCardAndOperate.get("success").equals(false)) {
             map.put("msg", map_addCardAndOperate.get("msg").toString());
             return map;
         }
 
         if (amount != null && amount > 0 && originalCardId == null) {
             Map map_plusRecharge = plusRecharge(po, cardNum, orderNo);
-            if(map_plusRecharge.get("success").equals(false)) {
+            if (map_plusRecharge.get("success").equals(false)) {
                 map.put("msg", map_plusRecharge.get("msg").toString());
                 return map;
             }
@@ -525,6 +546,7 @@
 
     /**
      * 鍏呭��
+     * 
      * @param po
      * @return
      */
@@ -535,7 +557,7 @@
         map.put("content", null);
 
         Map map_canRecharge = canRecharge(po);
-        if(map_canRecharge.get("success").equals(false)) {
+        if (map_canRecharge.get("success").equals(false)) {
             map.put("msg", map_canRecharge.get("msg").toString());
             return map;
         }
@@ -550,7 +572,7 @@
         }
         Long cardId = Long.parseLong(map_cardAndClient.get("cardId").toString());
         Long clientId = Long.parseLong(map_cardAndClient.get("clientId").toString());
-        if(orderNo == null || orderNo.length() <= 0) {
+        if (orderNo == null || orderNo.length() <= 0) {
             orderNo = generateOrderNo();
         }
 
@@ -617,6 +639,7 @@
 
     /**
      * 琛ュ崱
+     * 
      * @param po
      * @return
      */
@@ -627,7 +650,7 @@
         map.put("content", null);
 
         Map map_canReissue = canReissue(po);
-        if(map_canReissue.get("success").equals(false)) {
+        if (map_canReissue.get("success").equals(false)) {
             map.put("msg", map_canReissue.get("msg").toString());
             return map;
         }
@@ -661,6 +684,7 @@
 
     /**
      * 鎸傚け
+     * 
      * @param po
      * @return
      */
@@ -671,7 +695,7 @@
         map.put("content", null);
 
         Map map_canReportLoss = canReportLoss(po);
-        if(map_canReportLoss.get("success").equals(false)) {
+        if (map_canReportLoss.get("success").equals(false)) {
             map.put("msg", map_canReportLoss.get("msg").toString());
             return map;
         }
@@ -688,7 +712,8 @@
         seClientCard.setLossdtdt(new Date());
         seClientCard.setState(CardStateENUM.LOSS.getCode());
         seClientCard.setLastoper(LastOperateENUM.LOSS.getCode());
-        Integer rec_updateClientCard = Optional.ofNullable(seClientCardMapper.updateByPrimaryKeySelective(seClientCard)).orElse(0);
+        Integer rec_updateClientCard = Optional.ofNullable(seClientCardMapper.updateByPrimaryKeySelective(seClientCard))
+                .orElse(0);
         if (rec_updateClientCard == 0) {
             map.put("msg", "鎸傚け澶辫触-鍐滄埛鍗′慨鏀瑰紓甯�");
             return map;
@@ -718,6 +743,7 @@
 
     /**
      * 瑙i攣
+     * 
      * @param po
      * @return
      */
@@ -728,7 +754,7 @@
         map.put("content", null);
 
         Map map_canUnlock = canUnlock(po);
-        if(map_canUnlock.get("success").equals(false)) {
+        if (map_canUnlock.get("success").equals(false)) {
             map.put("msg", map_canUnlock.get("msg").toString());
             return map;
         }
@@ -738,8 +764,8 @@
 
         /**
          * 淇敼鍐滄埛鍗′俊鎭細
-         *      鎸傚け鏃堕棿
-         *      鏈�鍚庢搷浣滅被鍨�-4
+         * 鎸傚け鏃堕棿
+         * 鏈�鍚庢搷浣滅被鍨�-4
          */
         SeClientCard seClientCard = new SeClientCard();
         seClientCard.setId(cardId);
@@ -747,7 +773,8 @@
         seClientCard.setMoney(po.getMoney());
         seClientCard.setState(CardStateENUM.NORMAL.getCode());
         seClientCard.setLastoper(LastOperateENUM.UNLOCK.getCode());
-        Integer rec_updateClientCard = Optional.ofNullable(seClientCardMapper.updateByPrimaryKeySelective(seClientCard)).orElse(0);
+        Integer rec_updateClientCard = Optional.ofNullable(seClientCardMapper.updateByPrimaryKeySelective(seClientCard))
+                .orElse(0);
         if (rec_updateClientCard == 0) {
             map.put("msg", "瑙i攣澶辫触-鍐滄埛鍗′慨鏀瑰紓甯�");
             return map;
@@ -779,6 +806,7 @@
 
     /**
      * 閿�鍗�
+     * 
      * @param po
      * @return
      */
@@ -789,8 +817,8 @@
         map.put("content", null);
         String orderNo = generateOrderNo();
 
-        Map map_canCancel  = canCancel(po);
-        if(map_canCancel.get("success").equals(false)) {
+        Map map_canCancel = canCancel(po);
+        if (map_canCancel.get("success").equals(false)) {
             map.put("msg", map_canCancel.get("msg").toString());
             return map;
         }
@@ -828,6 +856,7 @@
 
     /**
      * 琛ユ墸
+     * 
      * @param po
      * @return
      */
@@ -840,8 +869,8 @@
         Date operateTime = new Date();
         Double waterPrice = Optional.ofNullable(prWaterPriceMapper.getPrice()).orElse(0.0);
 
-        Map map_canRepay  = canRepay(po);
-        if(map_canRepay.get("success").equals(false)) {
+        Map map_canRepay = canRepay(po);
+        if (map_canRepay.get("success").equals(false)) {
             map.put("msg", map_canRepay.get("msg").toString());
             return map;
         }
@@ -880,6 +909,7 @@
 
     /**
      * 杩旇繕
+     * 
      * @param po
      * @return
      */
@@ -892,8 +922,8 @@
         Date operateTime = new Date();
         Double waterPrice = Optional.ofNullable(prWaterPriceMapper.getPrice()).orElse(0.0);
 
-        Map map_canSupplement  = canSupplement(po);
-        if(map_canSupplement.get("success").equals(false)) {
+        Map map_canSupplement = canSupplement(po);
+        if (map_canSupplement.get("success").equals(false)) {
             map.put("msg", map_canSupplement.get("msg").toString());
             return map;
         }
@@ -906,7 +936,7 @@
         seCardOperate.setClientId(clientId);
         seCardOperate.setMoney(po.getBalance());
         seCardOperate.setRefundAmount(po.getSupplementMoney());
-        seCardOperate.setOperateType(OperateTypeENUM.WRITE_BACK.getCode());
+        seCardOperate.setOperateType(OperateTypeENUM.SUPPLEMENT.getCode());
         seCardOperate.setRemarks(po.getRemarks());
         seCardOperate.setOperator(po.getOperator());
         seCardOperate.setOperateDt(operateTime);
@@ -931,6 +961,7 @@
 
     /**
      * 鎿嶄綔鍥炶皟
+     * 
      * @param po
      * @return
      */
@@ -944,21 +975,28 @@
         Integer operateType = po.getOperateType();
         String orderNumber = po.getOrderNumber();
 
+        // 鍏堟鏌ユ槸鍚︿负绠$悊鍗�
+        if (operateType.equals(OperateTypeENUM.MANAGEMENT_CARD_WRITE.getCode().intValue())) {
+            // 绠$悊绫诲瀷鍗″啓鍗¢�昏緫
+            return handleManagementCardWrite(cardAddr, orderNumber);
+        }
+
+        // 澶勭悊鍐滄埛鍗¢�昏緫
         Long cardId = seClientCardMapper.getCardIdByAddr(cardAddr);
         if (cardId == null || cardId.equals(0)) {
             map.put("msg", "鎮ㄦ寚瀹氱殑姘村崱涓嶅瓨鍦�");
             return map;
         }
 
-        if(operateType == 1) {
+        if (operateType.equals(OperateTypeENUM.ACTIVE.getCode().intValue())) {
             /**
              * 寮�鍗℃搷浣滄墽琛岄�氱煡
-             *  1.渚濇嵁璁㈠崟鍙峰皢鏃犳晥鐘舵�佺殑鎿嶄綔璁板綍鏀逛负鏈夋晥
-             *  2.渚濇嵁姘村崱ID灏嗘棤鏁堢姸鎬佺殑姘村崱璁板綍鏀逛负鏈夋晥
-             *  3.濡傛灉寮�鍗″悓姝ュ厖鍊�
-             *      淇敼鍏呭�兼搷浣滆褰曚负鏈夋晥
-             *      淇敼鍏呭�煎巻鍙茶褰曚负鏈夋晥
-             *      淇敼姘村崱琛ㄧ殑鎿嶄綔淇℃伅
+             * 1.渚濇嵁璁㈠崟鍙峰皢鏃犳晥鐘舵�佺殑鎿嶄綔璁板綍鏀逛负鏈夋晥
+             * 2.渚濇嵁姘村崱ID灏嗘棤鏁堢姸鎬佺殑姘村崱璁板綍鏀逛负鏈夋晥
+             * 3.濡傛灉寮�鍗″悓姝ュ厖鍊�
+             * 淇敼鍏呭�兼搷浣滆褰曚负鏈夋晥
+             * 淇敼鍏呭�煎巻鍙茶褰曚负鏈夋晥
+             * 淇敼姘村崱琛ㄧ殑鎿嶄綔淇℃伅
              */
             Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
             Integer rec_card = turnCardValidByOrderNumber(orderNumber);
@@ -967,12 +1005,12 @@
                 return map;
             }
 
-            if(isMergeRecharge(cardId)) {
+            if (isMergeRecharge(cardId)) {
                 turnOperateValidByOrderNumber(orderNumber + "p");
                 turnRechargeHistoryValidByOrderNumber(orderNumber);
-                updateCard(cardId, orderNumber+"p");
+                updateCard(cardId, orderNumber + "p");
             }
-        } else if (operateType == 2) {
+        } else if (operateType.equals(OperateTypeENUM.RECHARGE.getCode().intValue())) {
             /**
              * 鍏呭�兼搷浣滄墽琛岄�氱煡
              * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
@@ -981,8 +1019,8 @@
              */
             turnOperateValidByOrderNumber(orderNumber + "p");
             turnRechargeHistoryValidByOrderNumber(orderNumber);
-            updateCard(cardId, orderNumber+"p");
-        }else if (operateType == 3) {
+            updateCard(cardId, orderNumber + "p");
+        } else if (operateType.equals(OperateTypeENUM.CANCEL.getCode().intValue())) {
             /**
              * 閿�鍗℃搷浣滄墽琛岄�氱煡
              * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
@@ -996,13 +1034,13 @@
                 return map;
             }
 
-        } else if (operateType == 4) {
+        } else if (operateType.equals(OperateTypeENUM.REISSUE.getCode().intValue())) {
             /**
              * 琛ュ崱鎿嶄綔鎵ц閫氱煡
              * 1. 鏂版按鍗¤褰曟敼涓烘湁鏁�
              * 2. 寮�鍗℃搷浣滆褰曟敼涓烘湁鏁�
              * 3. 濡傛灉瀛樺湪閫�杩橀噾棰�
-             *     娓呯┖鍘熷崱浣欓
+             * 娓呯┖鍘熷崱浣欓
              */
             Integer rec_card = turnCardValidByOrderNumber(orderNumber);
             Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
@@ -1011,7 +1049,7 @@
                 map.put("msg", "琛ュ崱鍥炶皟澶辫触");
                 return map;
             }
-        } else if (operateType == 5) {
+        } else if (operateType.equals(OperateTypeENUM.REFUND.getCode().intValue())) {
             /**
              * 琛ユ墸鎿嶄綔鎵ц閫氱煡
              * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
@@ -1023,7 +1061,7 @@
                 map.put("msg", "琛ユ墸鍥炶皟澶辫触");
                 return map;
             }
-        } else if (operateType == 6) {
+        } else if (operateType.equals(OperateTypeENUM.SUPPLEMENT.getCode().intValue())) {
             /**
              * 杩旇繕鎿嶄綔鎵ц閫氱煡
              * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
@@ -1039,6 +1077,48 @@
 
         map.put("success", true);
         map.put("msg", "鎿嶄綔鎴愬姛");
+        return map;
+    }
+
+    /**
+     * 澶勭悊绠$悊绫诲瀷鍗″啓鍗″洖璋�
+     * 
+     * @param cardAddr    鍗″湴鍧�
+     * @param orderNumber 璁㈠崟鍙�
+     * @return 澶勭悊缁撴灉
+     */
+    private Map<String, Object> handleManagementCardWrite(String cardAddr, String orderNumber) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+
+        try {
+            // 鏍规嵁鍗″湴鍧�鍜岃鍗曞彿鏌ユ壘绠$悊鍗�
+            SeManagementCard managementCard = seManagementCardMapper.selectOne(
+                    com.baomidou.mybatisplus.core.toolkit.Wrappers.<SeManagementCard>lambdaQuery()
+                            .eq(SeManagementCard::getCardAddr, cardAddr)
+                            .eq(SeManagementCard::getOrderNo, orderNumber));
+
+            if (managementCard == null) {
+                map.put("msg", "鏈壘鍒板搴旂殑绠$悊鍗¤褰�");
+                return map;
+            }
+
+            // 鏇存柊绠$悊鍗$姸鎬佷负姝e父
+            managementCard.setState(ManagementCardStateENUM.NORMAL.getCode());
+
+            int updateResult = seManagementCardMapper.updateByPrimaryKeySelective(managementCard);
+            if (updateResult > 0) {
+                map.put("success", true);
+                map.put("msg", "绠$悊鍗″啓鍗″畬鎴愶紝鐘舵�佸凡鏇存柊涓烘甯�");
+            } else {
+                map.put("msg", "绠$悊鍗$姸鎬佹洿鏂板け璐�");
+            }
+        } catch (Exception e) {
+            log.error("澶勭悊绠$悊鍗″啓鍗″洖璋冨紓甯�", e);
+            map.put("msg", "澶勭悊绠$悊鍗″啓鍗″洖璋冩椂鍙戠敓寮傚父锛�" + e.getMessage());
+        }
+
         return map;
     }
 
@@ -1084,12 +1164,13 @@
 
     /**
      * 濡傛灉琛ュ崱鏃堕��杩樹簡閲戦锛屾竻绌烘寕澶卞崱浣欓
+     * 
      * @param orderNumber
      */
     public Integer emptyCardBalance(String orderNumber) {
         Integer rec_empty = 0;
         Float noTradeAmount = seCardOperateMapper.getNoTradeAmount(orderNumber);
-        if(noTradeAmount != null && noTradeAmount > 0) {
+        if (noTradeAmount != null && noTradeAmount > 0) {
             rec_empty = seClientCardMapper.emptyCardBalance(orderNumber);
         }
         return rec_empty;
@@ -1097,6 +1178,7 @@
 
     /**
      * 淇敼娉ㄩ攢姘村崱琛ㄧ殑璁板綍鍙婁綑棰濓紙0锛�
+     * 
      * @param orderNumber
      * @return
      */
@@ -1114,6 +1196,7 @@
 
     /**
      * 淇敼琛ユ墸姘村崱琛ㄨ褰曞強浣欓
+     * 
      * @param cardId
      * @param orderNumber
      * @return
@@ -1135,6 +1218,7 @@
 
     /**
      * 淇敼杩旇繕姘村崱琛ㄨ褰曞強浣欓
+     * 
      * @param cardId
      * @param orderNumber
      * @return
@@ -1156,6 +1240,7 @@
 
     /**
      * 鍒ゆ柇鎸囧畾姘村崱鏄惁涓烘寕澶辩姸鎬佷笖鏃犺ˉ鍗¤褰�
+     * 
      * @param cardNum
      * @return
      */
@@ -1170,17 +1255,18 @@
 
     /**
      * 璇诲彇姘村崱淇℃伅
+     * 
      * @param cardAddr
      * @return
      */
     public VoTermCard readCard(String cardAddr) {
         VoTermCard voTermCard = seClientCardMapper.getTermCardInfo(cardAddr);
-        if(voTermCard != null) {
+        if (voTermCard != null) {
             return voTermCard;
         }
 
         VoTermCard voTermManagerCard = seManagerCardMapper.getTermManagerCardInfo(cardAddr);
-        if(voTermManagerCard != null) {
+        if (voTermManagerCard != null) {
             return voTermManagerCard;
         }
 
@@ -1189,6 +1275,7 @@
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃
+     * 
      * @param vo 鏌ヨ鏉′欢
      * @return 姘村崱鍒楄〃
      */
@@ -1214,6 +1301,7 @@
 
     /**
      * 鑾峰彇宸叉寕澶辩殑姘村崱鍒楄〃
+     * 
      * @param vo 鏌ヨ鏉′欢
      * @return 宸叉寕澶辩殑姘村崱鍒楄〃
      */
@@ -1222,7 +1310,7 @@
         params.put("pageCurr", vo.pageCurr);
         params.put("pageSize", vo.pageSize);
         params.put("state", 2); // 鎸傚け鐘舵��
-        
+
         Long itemTotal = seClientCardMapper.getLostCardsCount(params);
 
         QueryResultVo<List<VoCards>> rsVo = new QueryResultVo<>();
@@ -1243,10 +1331,87 @@
 
     /**
      * 鏍规嵁姘村崱缂栧彿鑾峰彇鍗′俊鎭�
+     * 
      * @param cardNum 姘村崱缂栧彿
      * @return 鍗′俊鎭�
      */
     public VoCardByClientNum getCardByCardNum(String cardNum) {
         return seClientCardMapper.getCardByCardNum(cardNum);
     }
+
+    /**
+     * 鍒涘缓绠$悊鍗�
+     * 
+     * @param dto 鍒涘缓绠$悊鍗TO
+     * @return 鍒涘缓缁撴灉
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> createManagementCard(CreateManagementCardDto dto) {
+        Map<String, Object> result = new HashMap<>();
+        result.put("success", false);
+
+        try {
+            // 妫�鏌ュ崱鍦板潃鏄惁宸插瓨鍦�
+            if (isCardAddrExists(dto.getCardAddr())) {
+                result.put("msg", "鍒涘缓澶辫触-姝ゅ崱鍦板潃宸插瓨鍦�");
+                return result;
+            }
+
+            // 鍙傝�僼ermActiveCard閫昏緫锛氱敓鎴愯鍗曞彿
+            String orderNo = generateOrderNo();
+
+            // 浣跨敤IDLongGenerator鐢熸垚鍞竴ID
+            Long id = idLongGenerator.generate();
+            Date createTime = new Date();
+
+            // 鏋勫缓绠$悊鍗″璞�
+            SeManagementCard managementCard = SeManagementCard.builder()
+                    .id(id)
+                    .protocol(dto.getProtocol())
+                    .cardAddr(dto.getCardAddr())
+                    .securityCode(dto.getSecurityCode())
+                    .cardType(dto.getCardType())
+                    .createTime(createTime)
+                    .orderNo(orderNo)
+                    .districtCode(dto.getDistrictCode())
+                    .projectNo(dto.getProjectNo() != null ? dto.getProjectNo() : this.projectNo)
+                    .ip(dto.getIp())
+                    .domain(dto.getDomain())
+                    .openClostTime(dto.getOpenClostTime())
+                    .remarks(dto.getRemarks())
+                    .state(ManagementCardStateENUM.UNWRITTEN.getCode()) // 榛樿鐘舵�佷负鏈啓鍗�
+                    .build();
+
+            // 鎻掑叆鏁版嵁搴�
+            int insertResult = seManagementCardMapper.insertSelective(managementCard);
+
+            if (insertResult > 0) {
+                result.put("success", true);
+                result.put("content", orderNo); // 杩斿洖璁㈠崟鍙�
+                result.put("msg", "璇锋眰鎴愬姛");
+            } else {
+                result.put("msg", "绠$悊鍗″垱寤哄け璐�-鏁版嵁搴撴彃鍏ュ紓甯�");
+            }
+
+        } catch (Exception e) {
+            log.error("鍒涘缓绠$悊鍗″紓甯�: {}", e.getMessage(), e);
+            result.put("msg", "绠$悊鍗″垱寤哄け璐�: " + e.getMessage());
+        }
+
+        return result;
+    }
+
+    /**
+     * 妫�鏌ュ崱鐗囧湴鍧�鏄惁宸插瓨鍦�
+     * 
+     * @param cardAddr 鍗$墖鍦板潃
+     * @return true-宸插瓨鍦紝false-涓嶅瓨鍦�
+     */
+    public boolean isCardAddrExists(String cardAddr) {
+        // 浣跨敤涓�娆℃煡璇㈡鏌ヤ袱涓〃涓槸鍚﹀瓨鍦ㄨ鍗″湴鍧�
+        // 1. 绠$悊鍗¤〃锛氭墍鏈夎褰曢兘妫�鏌�
+        // 2. 鍐滄埛姘村崱琛細鍙鏌ユ甯�(1)鍜屾寕澶�(3)鐘舵�佺殑璁板綍
+        Long totalCount = seClientCardMapper.checkCardAddrExists(cardAddr);
+        return totalCount != null && totalCount > 0;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/CreateManagementCardDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/CreateManagementCardDto.java
new file mode 100644
index 0000000..11497e9
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/CreateManagementCardDto.java
@@ -0,0 +1,81 @@
+package com.dy.pipIrrTerminal.card.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-01-20
+ * @Description 鍒涘缓绠$悊鍗TO
+ */
+@Data
+@Schema(name = "鍒涘缓绠$悊鍗TO")
+public class CreateManagementCardDto {
+
+    /**
+     * 閫氳鍗忚
+     */
+    @NotBlank(message = "閫氳鍗忚涓嶈兘涓虹┖")
+    @Schema(description = "閫氳鍗忚", example = "RS485")
+    private String protocol;
+
+    /**
+     * 鍗$墖鍦板潃
+     */
+    @NotBlank(message = "鍗$墖鍦板潃涓嶈兘涓虹┖")
+    @Schema(description = "鍗$墖鍦板潃", example = "001")
+    private String cardAddr;
+
+    /**
+     * 璇嗗埆鐮�
+     */
+    @NotBlank(message = "璇嗗埆鐮佷笉鑳戒负绌�")
+    @Schema(description = "璇嗗埆鐮�", example = "A0B1C289")
+    private String securityCode;
+
+    /**
+     * 鍗$墖绫诲瀷
+     * 2-璁剧疆鍖哄煙琛ㄥ彿鍗★紝3-鍙栨暟鍗★紝4-妫�鏌ュ崱锛�5-娴嬭瘯鍗★紝6-娓呴浂鍗★紝7-IP璁剧疆鍗★紝8-鍩熷悕璁剧疆鍗★紝9-GPS鍗★紝10-鏃堕棿閰嶇疆鍗�
+     */
+    @NotNull(message = "鍗$墖绫诲瀷涓嶈兘涓虹┖")
+    @Schema(description = "鍗$墖绫诲瀷", example = "2", allowableValues = { "2", "3", "4", "5", "6", "7", "8", "9", "10" })
+    private Byte cardType;
+
+    /**
+     * 5绾ц鏀垮尯鍒掔紪鐮�
+     */
+    @Schema(description = "5绾ц鏀垮尯鍒掔紪鐮�", example = "110101")
+    private String districtCode;
+
+    /**
+     * 椤圭洰缂栫爜
+     */
+    @Schema(description = "椤圭洰缂栫爜", example = "1001")
+    private Integer projectNo;
+
+    /**
+     * IP鍦板潃
+     */
+    @Schema(description = "IP鍦板潃", example = "192.168.1.100")
+    private String ip;
+
+    /**
+     * 鍩熷悕
+     */
+    @Schema(description = "鍩熷悕", example = "example.com")
+    private String domain;
+
+    /**
+     * 寮�鍏抽榾鏃堕棿
+     */
+    @Schema(description = "寮�鍏抽榾鏃堕棿(绉�)", example = "30")
+    private Integer openClostTime;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞淇℃伅", example = "绠$悊鍗″娉�")
+    private String remarks;
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoCallBack.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoCallBack.java
index 678657f..d11f154 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoCallBack.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoCallBack.java
@@ -32,7 +32,7 @@
     private String orderNumber;
 
     /**
-     * 鎿嶄綔绫诲瀷锛�1-寮�鍗★紝2-鍏呭�硷紝3-閿�鍗★紝4-琛ュ崱锛�5-琛ユ墸
+     * 鎿嶄綔绫诲瀷锛�1-寮�鍗★紝2-鍏呭�硷紝3-閿�鍗★紝4-琛ュ崱锛�5-琛ユ墸锛�6-杩旇繕锛�7-绠$悊绫诲瀷鍗″啓鍗�
      */
     @NotNull(message = "鎿嶄綔绫诲瀷涓嶈兘涓虹┖")
     private Integer operateType;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/enums/ManagementCardStateENUM.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/enums/ManagementCardStateENUM.java
new file mode 100644
index 0000000..685faae
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/enums/ManagementCardStateENUM.java
@@ -0,0 +1,23 @@
+package com.dy.pipIrrTerminal.card.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-01-20
+ * @LastEditTime 2025-01-20
+ * @Description 绠$悊鍗$姸鎬佹灇涓�
+ */
+
+@Getter
+@AllArgsConstructor
+public enum ManagementCardStateENUM {
+    NORMAL((byte) 1, "姝e父"),
+    CANCELLED((byte) 2, "宸叉敞閿�"),
+    LOSS((byte) 3, "宸叉寕澶�"),
+    UNWRITTEN((byte) 4, "鏈啓鍗�");
+
+    private final Byte code;
+    private final String message;
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/enums/OperateTypeENUM.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/enums/OperateTypeENUM.java
index 059420e..bce3ba5 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/enums/OperateTypeENUM.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/enums/OperateTypeENUM.java
@@ -7,22 +7,25 @@
  * @author ZhuBaoMin
  * @date 2025-05-08 11:45
  * @LastEditTime 2025-05-08 11:45
- * @Description
+ * @Description 鎿嶄綔绫诲瀷鏋氫妇
  */
 
 @Getter
 @AllArgsConstructor
 public enum OperateTypeENUM {
-    ACTIVE((byte)1, "寮�鍗�"),
-    RECHARGE((byte)2, "鍏呭��"),
-    CANCEL((byte)3, "閿�鍗�"),
-    REISSUE((byte)4, "琛ュ崱"),
-    REFUND((byte)5, "琛ユ墸"),
-    LOSS((byte)6, "鎸傚け"),
-    REVERSAL((byte)7, "鍐叉"),
-    UNLOCK((byte)8, "瑙i攣"),
-    CONSUME((byte)9, "娑堣垂"),
-    WRITE_BACK((byte)10, "鍙嶅啓");
+    ACTIVE((byte) 1, "寮�鍗�"),
+    RECHARGE((byte) 2, "鍏呭��"),
+    CANCEL((byte) 3, "閿�鍗�"),
+    REISSUE((byte) 4, "琛ュ崱"),
+    REFUND((byte) 5, "琛ユ墸"),
+    SUPPLEMENT((byte) 6, "杩旇繕"),
+    MANAGEMENT_CARD_WRITE((byte) 7, "绠$悊绫诲瀷鍗″啓鍗�"),
+    // 淇濈暀鍏朵粬绯荤粺浣跨敤鐨勬灇涓惧��
+    LOSS((byte) 8, "鎸傚け"),
+    UNLOCK((byte) 9, "瑙i攣"),
+    REVERSAL((byte) 10, "鍐叉"),
+    CONSUME((byte) 11, "娑堣垂"),
+    WRITE_BACK((byte) 12, "鍙嶅啓");
 
     private final Byte code;
     private final String message;
diff --git "a/pipIrr-platform/\346\226\207\346\241\243/\346\260\264\350\202\245\346\260\224\350\261\241\345\242\222\346\203\205/MQTT\346\214\207\344\273\244\344\270\215\346\211\247\350\241\214.docx" "b/pipIrr-platform/\346\226\207\346\241\243/\346\260\264\350\202\245\346\260\224\350\261\241\345\242\222\346\203\205/MQTT\346\214\207\344\273\244\344\270\215\346\211\247\350\241\214\350\247\243\345\206\263\345\244\207\345\277\230.docx"
similarity index 100%
rename from "pipIrr-platform/\346\226\207\346\241\243/\346\260\264\350\202\245\346\260\224\350\261\241\345\242\222\346\203\205/MQTT\346\214\207\344\273\244\344\270\215\346\211\247\350\241\214.docx"
rename to "pipIrr-platform/\346\226\207\346\241\243/\346\260\264\350\202\245\346\260\224\350\261\241\345\242\222\346\203\205/MQTT\346\214\207\344\273\244\344\270\215\346\211\247\350\241\214\350\247\243\345\206\263\345\244\207\345\277\230.docx"
Binary files differ
diff --git "a/pipIrr-platform/\346\226\207\346\241\243/\346\260\264\350\202\245\346\260\224\350\261\241\345\242\222\346\203\205/MQTT\350\256\276\345\256\232\346\227\266\351\227\264\345\217\202\346\225\260.docx" "b/pipIrr-platform/\346\226\207\346\241\243/\346\260\264\350\202\245\346\260\224\350\261\241\345\242\222\346\203\205/MQTT\350\256\276\345\256\232\346\227\266\351\227\264\345\217\202\346\225\260\345\244\207\345\277\230.docx"
similarity index 100%
rename from "pipIrr-platform/\346\226\207\346\241\243/\346\260\264\350\202\245\346\260\224\350\261\241\345\242\222\346\203\205/MQTT\350\256\276\345\256\232\346\227\266\351\227\264\345\217\202\346\225\260.docx"
rename to "pipIrr-platform/\346\226\207\346\241\243/\346\260\264\350\202\245\346\260\224\350\261\241\345\242\222\346\203\205/MQTT\350\256\276\345\256\232\346\227\266\351\227\264\345\217\202\346\225\260\345\244\207\345\277\230.docx"
Binary files differ

--
Gitblit v1.8.0