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

---
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java |  446 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 438 insertions(+), 8 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 5c63db2..47a1f73 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,22 +1,22 @@
 package com.dy.pipIrrTerminal.card;
 
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
-import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper;
-import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
-import com.dy.pipIrrGlobal.daoSe.SeClientMapper;
-import com.dy.pipIrrGlobal.daoSe.SeRechargeHistoryMapper;
+import com.dy.pipIrrGlobal.daoSe.*;
 import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory;
-import com.dy.pipIrrGlobal.voSe.VoAfterRecharge;
-import com.dy.pipIrrGlobal.voSe.VoTermActiveCard;
-import com.dy.pipIrrGlobal.voSe.VoTermCommon;
+import com.dy.pipIrrGlobal.voSe.*;
 import com.dy.pipIrrTerminal.card.dto.*;
+import com.dy.pipIrrTerminal.card.qo.QoCards;
+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.OperateTypeENUM;
 import com.dy.pipIrrTerminal.card.enums.RechargeTypeENUM;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -50,6 +50,9 @@
 
     @Autowired
     private SeRechargeHistoryMapper seRechargeHistoryMapper;
+
+    @Autowired
+    private SeManagerCardMapper seManagerCardMapper;
 
     @Value("${project.projectNo}")
     private Integer projectNo;
@@ -132,6 +135,39 @@
     }
 
     /**
+     * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互瑙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
      * @return true:鍙互琛ュ崱
@@ -180,6 +216,74 @@
      * @return
      */
     public Map canCancel(DtoCancel po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+
+        Long cardNum = po.getCardNum();
+        String stateName = seClientCardMapper.getCardStateByCardNum(cardNum);
+        if(stateName == null || stateName.equals("") || !stateName.equals("姝e父")) {
+            map.put("msg", stateName + ", " + "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔");
+            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
+     * @return
+     */
+    public Map canRepay(DtoRepaySupplement po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+
+        Long cardNum = po.getCardNum();
+        String stateName = seClientCardMapper.getCardStateByCardNum(cardNum);
+        if(stateName == null || stateName.equals("") || !stateName.equals("姝e父")) {
+            map.put("msg", stateName + ", " + "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔");
+            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
+     * @return
+     */
+    public Map canSupplement(DtoRepaySupplement po) {
         Map map = new HashMap<>();
         map.put("success", false);
         map.put("content", null);
@@ -503,6 +607,7 @@
         voTermRecharge.setProjectNo(projectNo);
         voTermRecharge.setCardNum(po.getCardNum());
         voTermRecharge.setOrderNo(orderNo);
+        voTermRecharge.setBalance(afterRecharge);
 
         map.put("success", true);
         map.put("msg", "鎿嶄綔鎴愬姛");
@@ -612,6 +717,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
@@ -657,6 +823,109 @@
         map.put("success", true);
         map.put("msg", "鎿嶄綔鎴愬姛");
         map.put("content", voTermCandel);
+        return map;
+    }
+
+    /**
+     * 琛ユ墸
+     * @param po
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Map repay(DtoRepaySupplement po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+        String orderNo = generateOrderNo();
+        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.put("msg", map_canRepay.get("msg").toString());
+            return map;
+        }
+        CardSimple card = (CardSimple) map_canRepay.get("content");
+        Long cardId = card.getCardId();
+        Long clientId = card.getClientId();
+
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(po.getBalance());
+        seCardOperate.setRefundAmount(po.getRepayMorny());
+        seCardOperate.setOperateType(OperateTypeENUM.REFUND.getCode());
+        seCardOperate.setRemarks(po.getRemarks());
+        seCardOperate.setOperator(po.getOperator());
+        seCardOperate.setOperateDt(operateTime);
+        seCardOperate.setOrderNo(orderNo);
+        seCardOperate.setOperateValid((byte) 1);
+        seCardOperateMapper.insert(seCardOperate);
+        if (seCardOperate.getId() == 0) {
+            map.put("msg", "琛ユ墸澶辫触-琛ユ墸璁板綍鍐欏叆寮傚父");
+            return map;
+        }
+
+        VoRepaySupplement voRepaySupplement = new VoRepaySupplement();
+        voRepaySupplement.setBalance(po.getBalance() - po.getRepayMorny());
+        voRepaySupplement.setWaterPrice(waterPrice);
+        voRepaySupplement.setTime(operateTime);
+        voRepaySupplement.setOrderNo(orderNo);
+
+        map.put("success", true);
+        map.put("msg", "鎿嶄綔鎴愬姛");
+        map.put("content", voRepaySupplement);
+        return map;
+    }
+
+    /**
+     * 杩旇繕
+     * @param po
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Map supplement(DtoRepaySupplement po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+        String orderNo = generateOrderNo();
+        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.put("msg", map_canSupplement.get("msg").toString());
+            return map;
+        }
+        CardSimple card = (CardSimple) map_canSupplement.get("content");
+        Long cardId = card.getCardId();
+        Long clientId = card.getClientId();
+
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(po.getBalance());
+        seCardOperate.setRefundAmount(po.getSupplementMoney());
+        seCardOperate.setOperateType(OperateTypeENUM.WRITE_BACK.getCode());
+        seCardOperate.setRemarks(po.getRemarks());
+        seCardOperate.setOperator(po.getOperator());
+        seCardOperate.setOperateDt(operateTime);
+        seCardOperate.setOrderNo(orderNo);
+        seCardOperate.setOperateValid((byte) 1);
+        seCardOperateMapper.insert(seCardOperate);
+        if (seCardOperate.getId() == 0) {
+            map.put("msg", "杩旇繕澶辫触-杩旇繕璁板綍鍐欏叆寮傚父");
+            return map;
+        }
+        VoRepaySupplement voRepaySupplement = new VoRepaySupplement();
+        voRepaySupplement.setBalance(po.getBalance() + po.getSupplementMoney());
+        voRepaySupplement.setWaterPrice(waterPrice);
+        voRepaySupplement.setTime(operateTime);
+        voRepaySupplement.setOrderNo(orderNo);
+
+        map.put("success", true);
+        map.put("msg", "鎿嶄綔鎴愬姛");
+        map.put("content", voRepaySupplement);
         return map;
     }
 
@@ -742,7 +1011,30 @@
                 map.put("msg", "琛ュ崱鍥炶皟澶辫触");
                 return map;
             }
-
+        } else if (operateType == 5) {
+            /**
+             * 琛ユ墸鎿嶄綔鎵ц閫氱煡
+             * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
+             * 2. 淇敼姘村崱琛ㄦ搷浣滀俊鎭強浣欓
+             */
+            Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
+            Integer rec_card = updateCardInfo_repay(cardId, orderNumber);
+            if (rec_ope == 0 || rec_card == 0) {
+                map.put("msg", "琛ユ墸鍥炶皟澶辫触");
+                return map;
+            }
+        } else if (operateType == 6) {
+            /**
+             * 杩旇繕鎿嶄綔鎵ц閫氱煡
+             * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
+             * 2. 淇敼姘村崱琛ㄦ搷浣滀俊鎭強浣欓
+             */
+            Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
+            Integer rec_card = updateCardInfo_supplement(cardId, orderNumber);
+            if (rec_ope == 0 || rec_card == 0) {
+                map.put("msg", "杩旇繕鍥炶皟澶辫触");
+                return map;
+            }
         }
 
         map.put("success", true);
@@ -819,4 +1111,142 @@
         clientCard.setLastoper(LastOperateENUM.CANCEL.getCode());
         return seClientCardMapper.updateByPrimaryKeySelective(clientCard);
     }
+
+    /**
+     * 淇敼琛ユ墸姘村崱琛ㄨ褰曞強浣欓
+     * @param cardId
+     * @param orderNumber
+     * @return
+     */
+    public Integer updateCardInfo_repay(Long cardId, String orderNumber) {
+        VoRepaySupplementSimple po = seCardOperateMapper.getCardOperateByOrderNumber(orderNumber);
+        Float money = Optional.ofNullable(po.getMoney()).orElse(0f);
+        Float refundAmount = Optional.ofNullable(po.getRefundAmount()).orElse(0f);
+        Date operateTime = po.getOperateTime();
+
+        SeClientCard clientCard = new SeClientCard();
+        clientCard.setId(cardId);
+        clientCard.setRefunddt(operateTime);
+        clientCard.setMoney(money - refundAmount);
+        clientCard.setState(CardStateENUM.NORMAL.getCode());
+        clientCard.setLastoper(LastOperateENUM.REFUND.getCode());
+        return seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+    }
+
+    /**
+     * 淇敼杩旇繕姘村崱琛ㄨ褰曞強浣欓
+     * @param cardId
+     * @param orderNumber
+     * @return
+     */
+    public Integer updateCardInfo_supplement(Long cardId, String orderNumber) {
+        VoRepaySupplementSimple po = seCardOperateMapper.getCardOperateByOrderNumber(orderNumber);
+        Float money = Optional.ofNullable(po.getMoney()).orElse(0f);
+        Float refundAmount = Optional.ofNullable(po.getRefundAmount()).orElse(0f);
+        Date operateTime = po.getOperateTime();
+
+        SeClientCard clientCard = new SeClientCard();
+        clientCard.setId(cardId);
+        clientCard.setRefunddt(operateTime);
+        clientCard.setMoney(money + refundAmount);
+        clientCard.setState(CardStateENUM.NORMAL.getCode());
+        clientCard.setLastoper(LastOperateENUM.WRITE_BACK.getCode());
+        return seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+    }
+
+    /**
+     * 鍒ゆ柇鎸囧畾姘村崱鏄惁涓烘寕澶辩姸鎬佷笖鏃犺ˉ鍗¤褰�
+     * @param cardNum
+     * @return
+     */
+    public Boolean isLostAndUnreplaced(Long cardNum) {
+        Integer lostCount = seClientCardMapper.getLostCount(cardNum);
+        Integer replacedCount = seClientCardMapper.getReplacedCount(cardNum);
+        if (lostCount > 0 && replacedCount == 0) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 璇诲彇姘村崱淇℃伅
+     * @param cardAddr
+     * @return
+     */
+    public VoTermCard readCard(String cardAddr) {
+        VoTermCard voTermCard = seClientCardMapper.getTermCardInfo(cardAddr);
+        if(voTermCard != null) {
+            return voTermCard;
+        }
+
+        VoTermCard voTermManagerCard = seManagerCardMapper.getTermManagerCardInfo(cardAddr);
+        if(voTermManagerCard != null) {
+            return voTermManagerCard;
+        }
+
+        return null;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃
+     * @param vo 鏌ヨ鏉′欢
+     * @return 姘村崱鍒楄〃
+     */
+    public QueryResultVo<List<VoCards>> getCards(QoCards vo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo);
+        Long itemTotal = seClientCardMapper.getCardsCount(params);
+
+        QueryResultVo<List<VoCards>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = vo.pageSize;
+        rsVo.pageCurr = vo.pageCurr;
+
+        if (itemTotal > 0) {
+            rsVo.calculateAndSet(itemTotal, params);
+            List<VoCards> list = seClientCardMapper.getCards(params);
+            rsVo.obj = list;
+        } else {
+            rsVo.obj = new ArrayList<>();
+            rsVo.itemTotal = 0L;
+        }
+
+        return rsVo;
+    }
+
+    /**
+     * 鑾峰彇宸叉寕澶辩殑姘村崱鍒楄〃
+     * @param vo 鏌ヨ鏉′欢
+     * @return 宸叉寕澶辩殑姘村崱鍒楄〃
+     */
+    public QueryResultVo<List<VoCards>> getLostCards(QoLostCards vo) {
+        Map<String, Object> params = new HashMap<>();
+        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<>();
+        rsVo.pageSize = vo.pageSize;
+        rsVo.pageCurr = vo.pageCurr;
+
+        if (itemTotal > 0) {
+            rsVo.calculateAndSet(itemTotal, params);
+            List<VoCards> list = seClientCardMapper.getLostCards(params);
+            rsVo.obj = list;
+        } else {
+            rsVo.obj = new ArrayList<>();
+            rsVo.itemTotal = 0L;
+        }
+
+        return rsVo;
+    }
+
+    /**
+     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇鍗′俊鎭�
+     * @param clientNum 鍐滄埛缂栧彿
+     * @return 鍗′俊鎭�
+     */
+    public VoCardByClientNum getCardByClientNum(String clientNum) {
+        return seClientCardMapper.getCardByClientNum(clientNum);
+    }
 }

--
Gitblit v1.8.0