From 04585acb4f7af05e9a944c2914a8550963fbcf59 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期五, 27 六月 2025 09:16:41 +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 |  216 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 208 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 f41c589..645050d 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,8 @@
 package com.dy.pipIrrTerminal.card;
 
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
@@ -17,6 +20,7 @@
 import com.dy.pipIrrTerminal.card.enums.ManagementCardStateENUM;
 import com.dy.pipIrrTerminal.card.enums.OperateTypeENUM;
 import com.dy.pipIrrTerminal.card.enums.RechargeTypeENUM;
+import com.dy.pipIrrTerminal.card.qo.QoTransaction;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +29,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import com.dy.common.util.IDLongGenerator;
 
+import java.text.DecimalFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -527,7 +532,7 @@
             }
         }
 
-        Float balance = Optional.ofNullable(seClientCardMapper.getMoneyByCardNum(cardNum)).orElse(0f);
+        Float balance = Optional.ofNullable(seClientCardMapper.getMoneyByCardNum(cardNum, null)).orElse(0f);
         Double waterPrice = prWaterPriceMapper.getPrice();
 
         VoTermActiveCard voTermActiveCard = new VoTermActiveCard();
@@ -936,7 +941,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);
@@ -975,13 +980,20 @@
         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.渚濇嵁璁㈠崟鍙峰皢鏃犳晥鐘舵�佺殑鎿嶄綔璁板綍鏀逛负鏈夋晥
@@ -1003,7 +1015,7 @@
                 turnRechargeHistoryValidByOrderNumber(orderNumber);
                 updateCard(cardId, orderNumber + "p");
             }
-        } else if (operateType == 2) {
+        } else if (operateType.equals(OperateTypeENUM.RECHARGE.getCode().intValue())) {
             /**
              * 鍏呭�兼搷浣滄墽琛岄�氱煡
              * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
@@ -1013,7 +1025,7 @@
             turnOperateValidByOrderNumber(orderNumber + "p");
             turnRechargeHistoryValidByOrderNumber(orderNumber);
             updateCard(cardId, orderNumber + "p");
-        } else if (operateType == 3) {
+        } else if (operateType.equals(OperateTypeENUM.CANCEL.getCode().intValue())) {
             /**
              * 閿�鍗℃搷浣滄墽琛岄�氱煡
              * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
@@ -1027,7 +1039,7 @@
                 return map;
             }
 
-        } else if (operateType == 4) {
+        } else if (operateType.equals(OperateTypeENUM.REISSUE.getCode().intValue())) {
             /**
              * 琛ュ崱鎿嶄綔鎵ц閫氱煡
              * 1. 鏂版按鍗¤褰曟敼涓烘湁鏁�
@@ -1042,7 +1054,7 @@
                 map.put("msg", "琛ュ崱鍥炶皟澶辫触");
                 return map;
             }
-        } else if (operateType == 5) {
+        } else if (operateType.equals(OperateTypeENUM.REFUND.getCode().intValue())) {
             /**
              * 琛ユ墸鎿嶄綔鎵ц閫氱煡
              * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
@@ -1054,7 +1066,7 @@
                 map.put("msg", "琛ユ墸鍥炶皟澶辫触");
                 return map;
             }
-        } else if (operateType == 6) {
+        } else if (operateType.equals(OperateTypeENUM.SUPPLEMENT.getCode().intValue())) {
             /**
              * 杩旇繕鎿嶄綔鎵ц閫氱煡
              * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
@@ -1070,6 +1082,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;
     }
 
@@ -1365,4 +1419,150 @@
         Long totalCount = seClientCardMapper.checkCardAddrExists(cardAddr);
         return totalCount != null && totalCount > 0;
     }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍
+     *
+     * @param vo
+     * @return
+     */
+    public Map getTransactions(QoTransaction vo) {
+        DecimalFormat df = new DecimalFormat("0.00");
+        // 琛ラ綈鏌ヨ鏃堕棿
+        String operateTimeStart = vo.operateTimeStart;
+        String operateTimeStop = vo.operateTimeStop;
+        if (operateTimeStart != null) {
+            operateTimeStart = operateTimeStart + " 00:00:00";
+            vo.setOperateTimeStart(operateTimeStart);
+        }
+        if (operateTimeStop != null) {
+            operateTimeStop = operateTimeStop + " 23:59:59";
+            vo.setOperateTimeStop(operateTimeStop);
+        }
+
+        // 鐢熸垚鏌ヨ鍙傛暟
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo);
+
+        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
+        Long itemTotal = Optional.ofNullable(seCardOperateMapper.getTransactionRecordCount(params)).orElse(0L);
+
+        QueryResultVo<List<VoTradeDetails>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = vo.pageSize;
+        rsVo.pageCurr = vo.pageCurr;
+        rsVo.calculateAndSet(itemTotal, params);
+
+        rsVo.obj = seCardOperateMapper.getTransactions(params);
+        List<VoTradeDetails> list = rsVo.obj;
+        if (list.size() == 0) {
+            return new HashMap();
+        }
+//鍏冭皨涓�鏈熼檰甯镐附闇�姹傛妸璧犻�侀噾棰濅笌鍏呭�奸噾棰濆垎寮�鏄剧ず
+        for (int i = list.size()-1; i >= 0 ; i--) {
+            Optional.ofNullable(list.get(i).getGift()).orElse(0d);
+            if (!list.get(i).getGift().equals(0d)){
+                Double gift1 = list.get(i).getGift();//璧犻�侀噾棰�
+                String districtTitle = list.get(i).getDistrictTitle();//鍦板潃
+                String clientNum = list.get(i).getClientNum();//鍐滄埛缂栧彿
+                String clientName = list.get(i).getClientName();//鍐滄埛濮撳悕
+                String phone = list.get(i).getPhone();//鎵嬫満鍙�
+                Date tradeTime = list.get(i).getTradeTime();//浜ゆ槗鏃堕棿
+                String orderNumber = list.get(i).getOrderNumber();//璁㈠崟缂栧彿
+                String cardNum = list.get(i).getCardNum();//鍗$紪鍙�
+                String idCard = list.get(i).getIdCard();//韬唤璇�
+                String cashierName = list.get(i).getCashierName();//鎿嶄綔浜�
+                Double money = list.get(i).getMoney();//浣欓
+                Double cardCost1 = list.get(i).getCardCost();//璐崱閲戦
+                Double tradeAmount = list.get(i).getTradeAmount();//浜ゆ槗閲戦
+                Double waterCost1 = list.get(i).getWaterCost();//璐按閲戦
+                Double refundAmount1 = list.get(i).getRefundAmount();//杩斿洖閲戦
+                String paymentName = list.get(i).getPaymentName();//鏀粯鏂瑰紡
+                String operateType = list.get(i).getOperateType();//涓氬姟绫诲瀷
+                String cardState = list.get(i).getCardState();//鍗$姸鎬�
+                Long villageId = list.get(i).getVillageId();//鏉慽d
+                Long cashierId = list.get(i).getCashierId();//鏀堕摱鍛榠d
+
+                list.get(i).setGift(0d);
+                list.get(i).setMoney(money-gift1);
+
+                VoTradeDetails voTradeDetail = new VoTradeDetails();
+                voTradeDetail.setDistrictTitle(districtTitle);//2
+                voTradeDetail.setClientNum(clientNum);//2
+                voTradeDetail.setClientName(clientName);//2
+                voTradeDetail.setPhone(phone);//2
+                voTradeDetail.setOperateType("璧犻��");//2
+                voTradeDetail.setTradeTime(tradeTime);//2
+                voTradeDetail.setWaterCost(0d);//2
+                voTradeDetail.setCardCost(0d);//2
+                voTradeDetail.setGift(gift1);//2
+                voTradeDetail.setTradeAmount(0d);//2
+                voTradeDetail.setRefundAmount(refundAmount1);//2
+                voTradeDetail.setMoney(money);//寰�2
+                voTradeDetail.setPaymentName("璧犻��");//2
+                voTradeDetail.setOrderNumber(orderNumber);//2
+                voTradeDetail.setCardNum(cardNum);//2
+                voTradeDetail.setIdCard(idCard);//2
+                voTradeDetail.setCashierName(cashierName);//2
+                voTradeDetail.setCashierId(cashierId);//2
+                voTradeDetail.setCardState(cardState);//2
+                voTradeDetail.setVillageId(villageId);//2
+
+                list.add(voTradeDetail);
+                itemTotal = itemTotal + 1;
+            }
+        }
+        list.sort(Comparator.comparing(VoTradeDetails::getTradeTime));
+        rsVo.obj = list;
+        rsVo.calculateAndSet(itemTotal, params);
+
+        // 閬嶅巻浜ゆ槗鏄庣粏璁板綍锛屾眹鎬昏喘姘撮噾棰濄�佽喘鍗¢噾棰�
+        Double totalWaterCost = 0.0;
+        Double totalCardCost = 0.0;
+        Double totalGift = 0.0;
+        Double totalRefund = 0.0;
+
+        JSONArray array = JSONArray.parseArray(JSON.toJSONString(list));
+        for (int i = 0; i < array.size(); i++) {
+            JSONObject job = array.getJSONObject(i);
+            Double waterCost = Optional.ofNullable(job.getDouble("waterCost")).orElse(0.0);
+            Double cardCost = Optional.ofNullable(job.getDouble("cardCost")).orElse(0.0);
+            Double gift = Optional.ofNullable(job.getDouble("gift")).orElse(0.0);
+            Double refundAmount = Optional.ofNullable(job.getDouble("refundAmount")).orElse(0.0);
+
+            totalWaterCost = totalWaterCost + waterCost;
+            totalCardCost = totalCardCost + cardCost;
+            totalGift = totalGift + gift;
+            totalRefund = totalRefund + refundAmount;
+        }
+
+        Map map_record = new HashMap();
+        map_record.put("list", rsVo);
+
+        Map map_result = new HashMap();
+        map_result.put("waterCost", df.format(totalWaterCost));
+        map_result.put("cardCost", df.format(totalCardCost));
+        map_result.put("gift", df.format(totalGift));
+        map_result.put("refund", df.format(totalRefund));
+
+        map_result.put("records", map_record);
+
+        return map_result;
+    }
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鎴栨按鍗″湴鍧�鑾峰彇鎿嶄綔璁板綍鍙婁綑棰�
+     * @param cardNum
+     * @return
+     */
+    public Map getOperateRecordsAndMoney(Long cardNum, String cardAddr) {
+
+        List<Map<String, Object>> list = Optional.ofNullable(seClientCardMapper.getOperateRecordsByCardNum(cardNum, cardAddr)).orElse(new ArrayList<>());
+        Float mondy = Optional.ofNullable(seClientCardMapper.getMoneyByCardNum(cardNum, cardAddr)).orElse(0f);
+        Float amount = Optional.ofNullable(seClientCardMapper.sumRechargeByCardNum(cardNum, cardAddr)).orElse(0f);
+
+        Map map = new HashMap();
+        map.put("mondy", mondy);
+        map.put("amount", amount);
+        map.put("list", list);
+        return map;
+    }
 }

--
Gitblit v1.8.0