From 9d0512aa6a192ee105ff9251e68a4360c7355319 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期二, 10 六月 2025 18:34:53 +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 |  363 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 351 insertions(+), 12 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 ded6fa1..5c63db2 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
@@ -8,12 +8,10 @@
 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.VoTermRecharge;
-import com.dy.pipIrrTerminal.card.dto.ActiveCard;
-import com.dy.pipIrrTerminal.card.dto.CardSimple;
-import com.dy.pipIrrTerminal.card.dto.DtoRecharge;
-import com.dy.pipIrrTerminal.card.dto.DtoReissue;
+import com.dy.pipIrrGlobal.voSe.VoTermCommon;
+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;
@@ -99,6 +97,41 @@
     }
 
     /**
+     * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互鎸傚け
+     * @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:鍙互琛ュ崱
@@ -135,6 +168,40 @@
         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
+     */
+    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);
@@ -198,6 +265,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);
@@ -211,6 +279,7 @@
         seClientCard.setClientid(po.getClientId());
         seClientCard.setMoney(po.getAmount());
         seClientCard.setState(CardStateENUM.INVALID.getCode());
+        seClientCard.setOrderNo(orderNo);
         if (po.getOriginalCardId() != null) {
             // 琛ュ崱
             seClientCard.setOriginalCardId(po.getOriginalCardId());
@@ -266,7 +335,8 @@
      * @param cardNum
      * @return
      */
-    public Map plusRecharge(ActiveCard po, Long cardNum) {
+    @Transactional(rollbackFor = Exception.class)
+    public Map plusRecharge(ActiveCard po, Long cardNum, String orderNo) {
         Map map = new HashMap<>();
         map.put("success", false);
         map.put("content", null);
@@ -283,7 +353,7 @@
         dtoRecharge.setMoney(0f);
         dtoRecharge.setGift(0f);
         dtoRecharge.setPrice(0f);
-        Map map_plusRecharge = addRecharge(dtoRecharge);
+        Map map_plusRecharge = addRecharge(dtoRecharge, orderNo);
         if (!map_plusRecharge.get("success").equals(true)) {
             map.put("msg", "寮�鍗″け璐�-鍏呭�煎紓甯�");
             return map;
@@ -325,7 +395,7 @@
         }
 
         if (amount != null && amount > 0 && originalCardId == null) {
-            Map map_plusRecharge = plusRecharge(po, cardNum);
+            Map map_plusRecharge = plusRecharge(po, cardNum, orderNo);
             if(map_plusRecharge.get("success").equals(false)) {
                 map.put("msg", map_plusRecharge.get("msg").toString());
                 return map;
@@ -355,7 +425,7 @@
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
-    public Map addRecharge(DtoRecharge po) {
+    public Map addRecharge(DtoRecharge po, String orderNo) {
         Map map = new HashMap<>();
         map.put("success", false);
         map.put("content", null);
@@ -376,7 +446,9 @@
         }
         Long cardId = Long.parseLong(map_cardAndClient.get("cardId").toString());
         Long clientId = Long.parseLong(map_cardAndClient.get("clientId").toString());
-        String orderNo = generateOrderNo();
+        if(orderNo == null || orderNo.length() <= 0) {
+            orderNo = generateOrderNo();
+        }
 
         /**
          * 娣诲姞姘村崱鍏呭�兼搷浣滆褰�
@@ -393,7 +465,7 @@
         seCardOperate.setRemarks(po.getRemarks());
         seCardOperate.setOperator(po.getOperator());
         seCardOperate.setOperateDt(new Date());
-        seCardOperate.setOrderNo(orderNo);
+        seCardOperate.setOrderNo(orderNo + "p");
         seCardOperate.setOperateValid((byte) 1);
         seCardOperateMapper.insert(seCardOperate);
         Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L);
@@ -419,6 +491,7 @@
         seRechargeHistory.setOperator(po.getOperator());
         seRechargeHistory.setOperatedt(new Date());
         seRechargeHistory.setOperateValid((byte) 1);
+        seRechargeHistory.setOrderNo(orderNo);
         seRechargeHistoryMapper.insert(seRechargeHistory);
         Long rec_seRechargeHistory = Optional.ofNullable(seRechargeHistory.getId()).orElse(0L);
         if (rec_seRechargeHistory == 0) {
@@ -426,7 +499,7 @@
             return map;
         }
 
-        VoTermRecharge voTermRecharge = new VoTermRecharge();
+        VoTermCommon voTermRecharge = new VoTermCommon();
         voTermRecharge.setProjectNo(projectNo);
         voTermRecharge.setCardNum(po.getCardNum());
         voTermRecharge.setOrderNo(orderNo);
@@ -480,4 +553,270 @@
         map.put("content", voTermActiveCard);
         return map;
     }
+
+    /**
+     * 鎸傚け
+     * @param po
+     * @return
+     */
+    @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;
+    }
+
+    /**
+     * 閿�鍗�
+     * @param po
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Map cancel(DtoCancel po) {
+        Map map = new HashMap<>();
+        map.put("success", false);
+        map.put("content", null);
+        String orderNo = generateOrderNo();
+
+        Map map_canCancel  = canCancel(po);
+        if(map_canCancel.get("success").equals(false)) {
+            map.put("msg", map_canCancel.get("msg").toString());
+            return map;
+        }
+        CardSimple card = (CardSimple) map_canCancel.get("content");
+        Long cardId = card.getCardId();
+        Long clientId = card.getClientId();
+
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setTradeAmount(-po.getRefund());
+        seCardOperate.setPaymentId(po.getRefundType());
+        seCardOperate.setOperateType(OperateTypeENUM.CANCEL.getCode());
+        seCardOperate.setRemarks(po.getRemarks());
+        seCardOperate.setOperator(po.getOperator());
+        seCardOperate.setOperateDt(new Date());
+        seCardOperate.setOrderNo(orderNo);
+        seCardOperate.setOperateValid((byte) 1);
+        seCardOperateMapper.insert(seCardOperate);
+        if (seCardOperate.getId() == 0) {
+            map.put("msg", "閿�鍗″け璐�-閿�鍗¤褰曞啓鍏ュ紓甯�");
+            return map;
+        }
+
+        VoTermCommon voTermCandel = new VoTermCommon();
+        voTermCandel.setProjectNo(projectNo);
+        voTermCandel.setCardNum(po.getCardNum());
+        voTermCandel.setOrderNo(orderNo);
+
+        map.put("success", true);
+        map.put("msg", "鎿嶄綔鎴愬姛");
+        map.put("content", voTermCandel);
+        return map;
+    }
+
+    /**
+     * 鎿嶄綔鍥炶皟
+     * @param po
+     * @return
+     */
+    @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.濡傛灉寮�鍗″悓姝ュ厖鍊�
+             *      淇敼鍏呭�兼搷浣滆褰曚负鏈夋晥
+             *      淇敼鍏呭�煎巻鍙茶褰曚负鏈夋晥
+             *      淇敼姘村崱琛ㄧ殑鎿嶄綔淇℃伅
+             */
+            Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
+            Integer rec_card = turnCardValidByOrderNumber(orderNumber);
+            if (rec_ope == 0 || rec_card == 0) {
+                map.put("msg", "涓嶅瓨鍦ㄦ湭鐢熸晥鐨勬按鍗�");
+                return map;
+            }
+
+            if(isMergeRecharge(cardId)) {
+                turnOperateValidByOrderNumber(orderNumber + "p");
+                turnRechargeHistoryValidByOrderNumber(orderNumber);
+                updateCard(cardId, orderNumber+"p");
+            }
+        } else if (operateType == 2) {
+            /**
+             * 鍏呭�兼搷浣滄墽琛岄�氱煡
+             * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
+             * 2. 鍏呭�煎巻鍙茶褰曟敼涓烘湁鏁�
+             * 3. 淇敼姘村崱琛ㄧ殑鎿嶄綔淇℃伅
+             */
+            turnOperateValidByOrderNumber(orderNumber + "p");
+            turnRechargeHistoryValidByOrderNumber(orderNumber);
+            updateCard(cardId, orderNumber+"p");
+        }else if (operateType == 3) {
+            /**
+             * 閿�鍗℃搷浣滄墽琛岄�氱煡
+             * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
+             * 2. 淇敼姘村崱琛ㄦ搷浣滀俊鎭強浣欓
+             */
+
+            Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
+            Integer rec_card = updateCardInfo(cardId, orderNumber);
+            if (rec_ope == 0 || rec_card == 0) {
+                map.put("msg", "閿�鍗″洖璋冨け璐�");
+                return map;
+            }
+
+        } else if (operateType == 4) {
+            /**
+             * 琛ュ崱鎿嶄綔鎵ц閫氱煡
+             * 1. 鏂版按鍗¤褰曟敼涓烘湁鏁�
+             * 2. 寮�鍗℃搷浣滆褰曟敼涓烘湁鏁�
+             * 3. 濡傛灉瀛樺湪閫�杩橀噾棰�
+             *     娓呯┖鍘熷崱浣欓
+             */
+            Integer rec_card = turnCardValidByOrderNumber(orderNumber);
+            Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
+            emptyCardBalance(orderNumber);
+            if (rec_card == 0 || rec_ope == 0) {
+                map.put("msg", "琛ュ崱鍥炶皟澶辫触");
+                return map;
+            }
+
+        }
+
+        map.put("success", true);
+        map.put("msg", "鎿嶄綔鎴愬姛");
+        return map;
+    }
+
+    // 鏍规嵁璁㈠崟鍙峰皢鎿嶄綔璁板綍鏀逛负鏈夋晥
+    public Integer turnOperateValidByOrderNumber(String orderNumber) {
+        return seCardOperateMapper.turnOperateValidByOrderNumber(orderNumber);
+    }
+
+    // 鏍规嵁璁㈠崟鍙峰皢姘村崱鏀逛负鏈夋晥
+    public Integer turnCardValidByOrderNumber(String orderNumber) {
+        return seClientCardMapper.turnCardValidByOrderNumber(orderNumber);
+    }
+
+    // 鏍规嵁璁㈠崟鍙峰皢鍏呭�煎巻鍙叉敼涓烘湁鏁�
+    public Integer turnRechargeHistoryValidByOrderNumber(String orderNumber) {
+        return seRechargeHistoryMapper.turnRechargeHistoryValidByOrderNumber(orderNumber);
+    }
+
+    // 鏍规嵁cardId鍒ゆ柇鏄惁鏄悎骞跺厖鍊�
+    public Boolean isMergeRecharge(Long cardId) {
+        Integer plusRechargeCount = seCardOperateMapper.getPlusRechargeCount(cardId);
+        if (plusRechargeCount == 0) {
+            return false;
+        }
+        return true;
+    }
+
+    // 淇敼姘村崱淇℃伅
+    public Boolean updateCard(Long cardId, String orderNumber) {
+        VoAfterRecharge voAfterRecharge = seCardOperateMapper.getBalanceAfterRecharge(orderNumber);
+
+        SeClientCard clientCard = new SeClientCard();
+        clientCard.setId(cardId);
+        clientCard.setMoney(voAfterRecharge.getBalanceAfterRecharge());
+        clientCard.setRechargedt(voAfterRecharge.getOperateTime());
+        clientCard.setLastoper(LastOperateENUM.RECHARGE.getCode());
+        Integer rec_updateClientCard = seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+        if (rec_updateClientCard == null || rec_updateClientCard == 0) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 濡傛灉琛ュ崱鏃堕��杩樹簡閲戦锛屾竻绌烘寕澶卞崱浣欓
+     * @param orderNumber
+     */
+    public Integer emptyCardBalance(String orderNumber) {
+        Integer rec_empty = 0;
+        Float noTradeAmount = seCardOperateMapper.getNoTradeAmount(orderNumber);
+        if(noTradeAmount != null && noTradeAmount > 0) {
+            rec_empty = seClientCardMapper.emptyCardBalance(orderNumber);
+        }
+        return rec_empty;
+    }
+
+    /**
+     * 淇敼娉ㄩ攢姘村崱琛ㄧ殑璁板綍鍙婁綑棰濓紙0锛�
+     * @param orderNumber
+     * @return
+     */
+    public Integer updateCardInfo(Long cardId, String orderNumber) {
+        Date operateTime = seCardOperateMapper.getOperateTime(orderNumber);
+
+        SeClientCard clientCard = new SeClientCard();
+        clientCard.setId(cardId);
+        clientCard.setCanceldt(operateTime);
+        clientCard.setMoney(0f);
+        clientCard.setState(CardStateENUM.CANCELLED.getCode());
+        clientCard.setLastoper(LastOperateENUM.CANCEL.getCode());
+        return seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+    }
 }

--
Gitblit v1.8.0