From 836ec39fdad422b1a148699a4c5fb8c5b4d395f0 Mon Sep 17 00:00:00 2001
From: zuoxiao <lf_zuo@163.com>
Date: 星期三, 25 六月 2025 11:04:33 +0800
Subject: [PATCH] feat(card): 添加管理类型卡写卡功能并优化卡片相关逻辑- 在 OperateTypeENUM 中添加 SUPPLEMENT 和 MANAGEMENT_CARD_WRITE 枚举值 - 在 SeManagementCard 中添加 cancelTime 和 state 字段 - 更新相关 mapper 和 XML 文件以支持新增字段 - 修改 CardSv 中的回调处理逻辑,支持管理类型卡写卡 - 优化 CreateManagementCardDto 中识别码的示例值

---
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java |  266 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 220 insertions(+), 46 deletions(-)

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 1c33313..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<>();
@@ -1240,4 +1328,90 @@
 
         return rsVo;
     }
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鑾峰彇鍗′俊鎭�
+     * 
+     * @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;
+    }
 }

--
Gitblit v1.8.0