From 123062d3a26cab5c3233bab88f077829184a3798 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期四, 05 六月 2025 20:27:42 +0800
Subject: [PATCH] 挂失

---
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java |  356 +++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 286 insertions(+), 70 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 8a8e2bc..a5e5bbe 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,17 +1,17 @@
 package com.dy.pipIrrTerminal.card;
 
-import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
 import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper;
 import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
 import com.dy.pipIrrGlobal.daoSe.SeClientMapper;
+import com.dy.pipIrrGlobal.daoSe.SeRechargeHistoryMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory;
+import com.dy.pipIrrGlobal.voSe.VoTermActiveCard;
 import com.dy.pipIrrGlobal.voSe.VoTermRecharge;
-import com.dy.pipIrrTerminal.card.dto.ActiveCard;
-import com.dy.pipIrrTerminal.card.dto.DtoRecharge;
+import com.dy.pipIrrTerminal.card.dto.*;
 import com.dy.pipIrrTerminal.card.enums.CardStateENUM;
 import com.dy.pipIrrTerminal.card.enums.LastOperateENUM;
 import com.dy.pipIrrTerminal.card.enums.OperateTypeENUM;
@@ -20,6 +20,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -47,6 +48,9 @@
     @Autowired
     private PrWaterPriceMapper prWaterPriceMapper;
 
+    @Autowired
+    private SeRechargeHistoryMapper seRechargeHistoryMapper;
+
     @Value("${project.projectNo}")
     private Integer projectNo;
 
@@ -69,6 +73,105 @@
         }
 
         return false;
+    }
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互鍏呭��
+     * @param po
+     * @return true:鍙互鍏呭��
+     */
+    public Map canRecharge(DtoRecharge po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+
+        String stateName = Optional.ofNullable(seClientCardMapper.getCardStateByCardNum(po.getCardNum())).orElse("");
+        // 鍗曠嫭鍏呭�兼椂鍗$墖蹇呴』涓烘甯�
+        if((po.getRechargeType() == RechargeTypeENUM.RECHARGE.getCode()) && !stateName.equals("姝e父")) {
+            map.put("msg", stateName + ", " + "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔");
+            return map;
+        }
+
+        map.put("success", true);
+        return map;
+    }
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互鎸傚け
+     * @param po
+     * @return true:鍙互鎶ュけ
+     */
+    public Map canReportLoss(DtoLoss 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()));
+        //card.setProtocol(map_card.get("protocol").toString());
+
+        map.put("success", true);
+        map.put("content", card);
+        return map;
+    }
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互琛ュ崱
+     * @param po
+     * @return true:鍙互琛ュ崱
+     */
+    public Map canReissue(DtoReissue po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+
+        Long cardNum = po.getCardNum();
+        Integer lostCount = seClientCardMapper.getLostCount(cardNum);
+        Integer replacedCount = seClientCardMapper.getReplacedCount(cardNum);
+        if(lostCount == 0 || replacedCount > 0) {
+            map.put("msg", "姘村崱鏈寕澶辨垨宸茶ˉ鍗★紝涓嶈兘琛ュ崱");
+            return map;
+        }
+
+        Float reissueAmount = po.getReissueAmount();
+        if (reissueAmount != null && reissueAmount > 0) {
+            Double tradeAmount = seCardOperateMapper.getTradeAmountByCardNo(cardNum);
+            if (tradeAmount != null && tradeAmount > 0) {
+                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()));
+        card.setProtocol(map_card.get("protocol").toString());
+
+        map.put("success", true);
+        map.put("content", card);
+        return map;
     }
 
     /**
@@ -128,7 +231,7 @@
         return dtf.format(dateTime) + sb.toString();
     }
 
-
+    @Transactional(rollbackFor = Exception.class)
     public Map addCardAndOperate(ActiveCard po, Long cardNum, String orderNo) {
         Map map = new HashMap<>();
         map.put("success", false);
@@ -191,11 +294,21 @@
         return map;
     }
 
+    /**
+     * 寮�鍗¢檮鍔犲厖鍊�
+     * @param po
+     * @param cardNum
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
     public Map plusRecharge(ActiveCard po, Long cardNum) {
         Map map = new HashMap<>();
         map.put("success", false);
         map.put("content", null);
 
+        /**
+         * 娣诲姞姘村崱鎿嶄綔璁板綍
+         */
         DtoRecharge dtoRecharge = new DtoRecharge();
         dtoRecharge.setCardNum(cardNum);
         dtoRecharge.setAmount(po.getAmount());
@@ -205,17 +318,21 @@
         dtoRecharge.setMoney(0f);
         dtoRecharge.setGift(0f);
         dtoRecharge.setPrice(0f);
-        //BaseResponse<Boolean> job = cardOperateSv.addRecharge(dtoRecharge);
-        BaseResponse<Boolean> job = null;
-        if (!job.getCode().equals("0001")) {
+        Map map_plusRecharge = addRecharge(dtoRecharge);
+        if (!map_plusRecharge.get("success").equals(true)) {
             map.put("msg", "寮�鍗″け璐�-鍏呭�煎紓甯�");
             return map;
         }
-
         map.put("success", true);
         return map;
     }
 
+    /**
+     * 婵�娲绘垨琛ュ崱
+     * @param po
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
     public Map activeOrReissueTermCard(ActiveCard po) {
         Map map = new HashMap<>();
         map.put("success", false);
@@ -253,68 +370,30 @@
         Float balance = Optional.ofNullable(seClientCardMapper.getMoneyByCardNum(cardNum)).orElse(0f);
         Double waterPrice = prWaterPriceMapper.getPrice();
 
-        VoTermRecharge voTermRecharge = new VoTermRecharge();
-        voTermRecharge.setProjectNo(projectNo);
-        voTermRecharge.setCardNum(cardNum);
-        voTermRecharge.setBalance(balance);
-        voTermRecharge.setWaterPrice(waterPrice);
-        voTermRecharge.setTime(new Date());
-        voTermRecharge.setOrderNo(orderNo);
+        VoTermActiveCard voTermActiveCard = new VoTermActiveCard();
+        voTermActiveCard.setProjectNo(projectNo);
+        voTermActiveCard.setCardNum(cardNum);
+        voTermActiveCard.setBalance(balance);
+        voTermActiveCard.setWaterPrice(waterPrice);
+        voTermActiveCard.setTime(new Date());
+        voTermActiveCard.setOrderNo(orderNo);
 
         map.put("success", true);
         map.put("msg", "鎿嶄綔鎴愬姛");
-        map.put("content", voTermRecharge);
+        map.put("content", voTermActiveCard);
         return map;
     }
 
-    public Map canRecharge(DtoRecharge po) {
-        Map map = new HashMap<>();
-        map.put("success", false);
-        map.put("content", null);
-
-        String stateName = Optional.ofNullable(seClientCardMapper.getCardStateByCardNum(po.getCardNum())).orElse("");
-        // 鍗曠嫭鍏呭�兼椂鍗$墖蹇呴』涓烘甯�
-        if((po.getRechargeType() == RechargeTypeENUM.RECHARGE.getCode()) && !stateName.equals("姝e父")) {
-            map.put("msg", stateName + ", " + "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔");
-            return map;
-        }
-
-        map.put("success", true);
-        return map;
-    }
-
+    /**
+     * 鍏呭��
+     * @param po
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
     public Map addRecharge(DtoRecharge po) {
         Map map = new HashMap<>();
         map.put("success", false);
         map.put("content", null);
-
-        /**
-         * cardId           姘村崱缂栧彿锛堜緷鎹按鍗$紪鍙疯幏鍙栵級
-         * clientId         鍐滄埛缂栧彿锛堜緷鎹按鍗$紪鍙疯幏鍙栵級
-         * cardNum          姘村崱缂栧彿
-         * money            鍗$墖浣欓
-         * amount           鍏呭�奸噾棰�
-         * gift             璧犻�侀噾棰�
-         * afterRecharge    鍏呭�煎悗浣欓
-         * paymentId        鏀粯鏂瑰紡缂栧彿
-         * price            姘翠环
-         * remarks          澶囨敞
-         * operator         鎿嶄綔浜虹紪鍙�
-         * rechargeTime     鍏呭�兼椂闂�
-         */
-
-        //Long cardId = 0L;
-        //Long clientId = 0L;
-        //Long cardNum = po.getCardNum();
-        //Float money = po.getMoney();
-        //Float amount = po.getAmount();
-        //Float gift = po.getGift();
-        //Float afterRecharge = money + amount + gift;
-        //Long paymentId = po.getPaymentId();
-        //Float price = po.getPrice();
-        //String remarks = po.getRemarks();
-        //Long operator = po.getOperator();
-        //Date rechargeTime = new Date();
 
         Map map_canRecharge = canRecharge(po);
         if(map_canRecharge.get("success").equals(false)) {
@@ -332,6 +411,7 @@
         }
         Long cardId = Long.parseLong(map_cardAndClient.get("cardId").toString());
         Long clientId = Long.parseLong(map_cardAndClient.get("clientId").toString());
+        String orderNo = generateOrderNo();
 
         /**
          * 娣诲姞姘村崱鍏呭�兼搷浣滆褰�
@@ -348,11 +428,13 @@
         seCardOperate.setRemarks(po.getRemarks());
         seCardOperate.setOperator(po.getOperator());
         seCardOperate.setOperateDt(new Date());
+        seCardOperate.setOrderNo(orderNo);
         seCardOperate.setOperateValid((byte) 1);
         seCardOperateMapper.insert(seCardOperate);
         Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L);
         if (rec == 0) {
-            //return BaseResponseUtils.buildErrorMsg("鍏呭�煎け璐�-鍏呭�艰褰曞啓鍏ュ紓甯�");
+            map.put("msg", "鍏呭�煎け璐�-鍏呭�艰褰曞啓鍏ュ紓甯�");
+            return map;
         }
 
         /**
@@ -372,19 +454,153 @@
         seRechargeHistory.setOperator(po.getOperator());
         seRechargeHistory.setOperatedt(new Date());
         seRechargeHistory.setOperateValid((byte) 1);
-        //seRechargeHistoryMapper.insert(seRechargeHistory);
+        seRechargeHistoryMapper.insert(seRechargeHistory);
         Long rec_seRechargeHistory = Optional.ofNullable(seRechargeHistory.getId()).orElse(0L);
-        //if (rec_seRechargeHistory == 0) {
-        //    return BaseResponseUtils.buildErrorMsg("鍏呭�煎け璐�-鍏呭�煎巻鍙茶褰曞啓鍏ュ紓甯�");
-        //}
+        if (rec_seRechargeHistory == 0) {
+            map.put("msg", "鍏呭�煎け璐�-鍏呭�煎巻鍙茶褰曞啓鍏ュ紓甯�");
+            return map;
+        }
 
-        //Map map_response = new HashMap();
-        //map_response.put("projectNo", String.format("%02x", projectNo));
-        //map_response.put("orderNumber", rec);
-        //map_response.put("cardNum", cardNum);
-        //return BaseResponseUtils.buildSuccess(map_response);
+        VoTermRecharge voTermRecharge = new VoTermRecharge();
+        voTermRecharge.setProjectNo(projectNo);
+        voTermRecharge.setCardNum(po.getCardNum());
+        voTermRecharge.setOrderNo(orderNo);
 
+        map.put("success", true);
+        map.put("msg", "鎿嶄綔鎴愬姛");
+        map.put("content", voTermRecharge);
         return map;
     }
 
+    /**
+     * 琛ュ崱
+     * @param po
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Map reissue(DtoReissue po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+
+        Map map_canReissue = canReissue(po);
+        if(map_canReissue.get("success").equals(false)) {
+            map.put("msg", map_canReissue.get("msg").toString());
+            return map;
+        }
+        CardSimple card = (CardSimple) map_canReissue.get("content");
+        Long cardId = card.getCardId();
+        Long clientId = card.getClientId();
+        String protocol = card.getProtocol();
+
+        /**
+         * 娣诲姞寮�鍗¤褰曪紝閫�杩橀噾棰濆啿鍒版柊鍗′腑
+         */
+        ActiveCard activeCard = new ActiveCard();
+        activeCard.setProtocol(protocol);
+        activeCard.setCardAddr(po.getCardAddr());
+        activeCard.setClientId(clientId);
+        activeCard.setOriginalCardId(cardId);
+        activeCard.setCardCost(po.getCardCost());
+        activeCard.setAmount(po.getReissueAmount());
+        activeCard.setPaymentId(po.getPaymentId());
+        activeCard.setRemarks(po.getRemarks());
+        activeCard.setOperator(po.getOperator());
+
+        Map map_newCard = activeOrReissueTermCard(activeCard);
+        VoTermActiveCard voTermActiveCard = (VoTermActiveCard) map_newCard.get("content");
+
+        map.put("success", true);
+        map.put("msg", "鎿嶄綔鎴愬姛");
+        map.put("content", voTermActiveCard);
+        return map;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public Map reportLoss(DtoLoss po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+
+        Map map_canReportLoss = canReportLoss(po);
+        if(map_canReportLoss.get("success").equals(false)) {
+            map.put("msg", map_canReportLoss.get("msg").toString());
+            return map;
+        }
+        CardSimple card = (CardSimple) map_canReportLoss.get("content");
+        Long cardId = card.getCardId();
+        Long clientId = card.getClientId();
+
+        Float money = Optional.ofNullable(po.getMoney()).orElse(0f);
+        Float refund = Optional.ofNullable(po.getRefund()).orElse(0f);
+
+        SeClientCard seClientCard = new SeClientCard();
+        seClientCard.setId(cardId);
+        seClientCard.setMoney(money);
+        seClientCard.setLossdtdt(new Date());
+        seClientCard.setState(CardStateENUM.LOSS.getCode());
+        seClientCard.setLastoper(LastOperateENUM.LOSS.getCode());
+        Integer rec_updateClientCard = Optional.ofNullable(seClientCardMapper.updateByPrimaryKeySelective(seClientCard)).orElse(0);
+        if (rec_updateClientCard == 0) {
+            map.put("msg", "鎸傚け澶辫触-鍐滄埛鍗′慨鏀瑰紓甯�");
+            return map;
+        }
+
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(money);
+        seCardOperate.setTradeAmount(-refund);
+        seCardOperate.setPaymentId(1L);
+        seCardOperate.setOperateType(OperateTypeENUM.LOSS.getCode());
+        seCardOperate.setRemarks(po.getRemarks());
+        seCardOperate.setOperator(po.getOperator());
+        seCardOperate.setOperateDt(new Date());
+        seCardOperate.setOperateValid((byte) 2);
+        seCardOperateMapper.insert(seCardOperate);
+        if (seCardOperate.getId() == 0) {
+            map.put("msg", "鎸傚け澶辫触-鎸傚け璁板綍鍐欏叆寮傚父");
+            return map;
+        }
+
+        map.put("success", true);
+        map.put("msg", "鎿嶄綔鎴愬姛");
+        return map;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public Map callBack(DtoCallBack po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+
+        String cardAddr = po.getCardAddr();
+        Integer operateType = po.getOperateType();
+        String orderNumber = po.getOrderNumber();
+
+        Long cardId = seClientCardMapper.getCardIdByAddr(cardAddr);
+        if (cardId == null || cardId.equals(0)) {
+            map.put("msg", "鎮ㄦ寚瀹氱殑姘村崱涓嶅瓨鍦�");
+            return map;
+        }
+
+        if(operateType == 1) {
+            /**
+             * 寮�鍗℃搷浣滄墽琛岄�氱煡
+             *  1.渚濇嵁姘村崱鍦板潃銆佽鍗曞彿灏嗘棤鏁堢姸鎬佺殑鎿嶄綔璁板綍鏀逛负鏈夋晥
+             *  2.渚濇嵁姘村崱ID灏嗘棤鏁堢姸鎬佺殑姘村崱璁板綍鏀逛负鏈夋晥
+             *  3.濡傛灉寮�鍗″悓姝ュ厖鍊�
+             *      淇敼鍏呭�兼搷浣滆褰曚负鏈夋晥
+             *      淇敼鍏呭�煎巻鍙茶褰曚负鏈夋晥
+             *      淇敼姘村崱琛ㄧ殑鎿嶄綔淇℃伅
+             */
+
+        }
+
+
+
+        map.put("success", true);
+        map.put("msg", "鎿嶄綔鎴愬姛");
+        return map;
+    }
 }

--
Gitblit v1.8.0