From 8948a1c990bc4036628eabaf1b64ee677c634693 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期二, 10 六月 2025 19:59:41 +0800
Subject: [PATCH] 解锁

---
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java        |  109 ++++++++++++++++++++++++++++++++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoUnlock.java |   43 ++++++++++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java      |   21 +++++++
 3 files changed, 173 insertions(+), 0 deletions(-)

diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java
index 8e56ce4..4cbafbc 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
@@ -97,6 +97,27 @@
     }
 
     /**
+     * 瑙i攣
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @PostMapping(path = "termUnlock", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @SsoAop()
+    public BaseResponse<Boolean> termUnlock(@RequestBody @Valid DtoUnlock po, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        Map map_result = cardSv.unlock(po);
+        if(map_result.get("success").equals(false)) {
+            return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
+        }
+        return BaseResponseUtils.buildSuccess(map_result.get("content")) ;
+
+    }
+
+    /**
      * 琛ュ崱
      * @param po
      * @param bindingResult
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java
index 5c63db2..6c762ce 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java
@@ -1,5 +1,6 @@
 package com.dy.pipIrrTerminal.card;
 
+import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
 import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper;
 import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
@@ -131,6 +132,39 @@
         return map;
     }
 
+    /**
+     * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互瑙i攣
+     * @param po
+     * @return
+     */
+    public Map canUnlock(DtoUnlock po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+
+        Long cardNum = po.getCardNum();
+        // 鍒ゆ柇褰撳墠姘村崱鏄惁涓烘寕澶辩姸鎬佷笖鏈ˉ鍗★紝浠呭凡缁忔寕澶卞叾鏈ˉ鍗$殑鍙互瑙i攣
+        if (!isLostAndUnreplaced(cardNum)) {
+            map.put("msg", "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔");
+            return map;
+        }
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map_card = Optional.ofNullable(seClientCardMapper.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if (map_card == null || map_card.size() <= 0) {
+            map.put("msg", "鍗″彿閿欒锛岃鍗′笉瀛樺湪");
+            return map;
+        }
+        CardSimple card = new CardSimple();
+        card.setCardId(Long.parseLong(map_card.get("cardId").toString()));
+        card.setClientId(Long.parseLong(map_card.get("clientId").toString()));
+
+        map.put("success", true);
+        map.put("content", card);
+        return map;
+    }
     /**
      * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互琛ュ崱
      * @param po
@@ -612,6 +646,67 @@
     }
 
     /**
+     * 瑙i攣
+     * @param po
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Map unlock(DtoUnlock po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+
+        Map map_canUnlock = canUnlock(po);
+        if(map_canUnlock.get("success").equals(false)) {
+            map.put("msg", map_canUnlock.get("msg").toString());
+            return map;
+        }
+        CardSimple card = (CardSimple) map_canUnlock.get("content");
+        Long cardId = card.getCardId();
+        Long clientId = card.getClientId();
+
+        /**
+         * 淇敼鍐滄埛鍗′俊鎭細
+         *      鎸傚け鏃堕棿
+         *      鏈�鍚庢搷浣滅被鍨�-4
+         */
+        SeClientCard seClientCard = new SeClientCard();
+        seClientCard.setId(cardId);
+        seClientCard.setUnlockdt(new Date());
+        seClientCard.setMoney(po.getMoney());
+        seClientCard.setState(CardStateENUM.NORMAL.getCode());
+        seClientCard.setLastoper(LastOperateENUM.UNLOCK.getCode());
+        Integer rec_updateClientCard = Optional.ofNullable(seClientCardMapper.updateByPrimaryKeySelective(seClientCard)).orElse(0);
+        if (rec_updateClientCard == 0) {
+            map.put("msg", "瑙i攣澶辫触-鍐滄埛鍗′慨鏀瑰紓甯�");
+            return map;
+        }
+
+        /**
+         * 娣诲姞瑙i攣璁板綍
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(po.getMoney());
+        seCardOperate.setOperateType(OperateTypeENUM.UNLOCK.getCode());
+        seCardOperate.setRemarks(po.getRemarks());
+        seCardOperate.setOperator(po.getOperator());
+        seCardOperate.setOperateDt(new Date());
+        seCardOperate.setOperateValid((byte) 2);
+        seCardOperateMapper.insert(seCardOperate);
+        Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L);
+        if (rec == 0) {
+            map.put("msg", "瑙i攣澶辫触-瑙i攣璁板綍鍐欏叆寮傚父");
+            return map;
+        }
+
+        map.put("success", true);
+        map.put("msg", "鎿嶄綔鎴愬姛");
+        return map;
+    }
+
+    /**
      * 閿�鍗�
      * @param po
      * @return
@@ -819,4 +914,18 @@
         clientCard.setLastoper(LastOperateENUM.CANCEL.getCode());
         return seClientCardMapper.updateByPrimaryKeySelective(clientCard);
     }
+
+    /**
+     * 鍒ゆ柇鎸囧畾姘村崱鏄惁涓烘寕澶辩姸鎬佷笖鏃犺ˉ鍗¤褰�
+     * @param cardNum
+     * @return
+     */
+    public Boolean isLostAndUnreplaced(Long cardNum) {
+        Integer lostCount = seClientCardMapper.getLostCount(cardNum);
+        Integer replacedCount = seClientCardMapper.getReplacedCount(cardNum);
+        if (lostCount > 0 && replacedCount == 0) {
+            return true;
+        }
+        return false;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoUnlock.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoUnlock.java
new file mode 100644
index 0000000..fdde30f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoUnlock.java
@@ -0,0 +1,43 @@
+package com.dy.pipIrrTerminal.card.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-06-10 17:01
+ * @LastEditTime 2025-06-10 17:01
+ * @Description 瑙i攣浼犺緭瀵硅薄
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class DtoUnlock {
+    public static final long serialVersionUID = 202506101702001L;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @NotNull(message = "姘村崱缂栧彿涓嶈兘涓虹┖")
+    private Long cardNum;
+
+    /**
+     * 浣欓
+     */
+    @NotNull(message = "浣欓涓嶈兘涓虹┖")
+    private Float money;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @NotNull(message = "鎿嶄綔浜虹紪鍙蜂笉鑳戒负绌�")
+    private Long operator;
+}

--
Gitblit v1.8.0