From 374be0e83db1c63562761adbb005dbb4f324a81a Mon Sep 17 00:00:00 2001
From: wuzeyu <1223318623@qq.com>
Date: 星期五, 29 十一月 2024 16:51:19 +0800
Subject: [PATCH] 优化代码 查询交易明细 充值和赠送分开

---
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java |  655 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 581 insertions(+), 74 deletions(-)

diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java
index 081c671..b144bb3 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java
@@ -6,25 +6,30 @@
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
-import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper;
-import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
-import com.dy.pipIrrGlobal.daoSe.SeClientMapper;
-import com.dy.pipIrrGlobal.daoSe.SeGeneralMapper;
+import com.dy.pipIrrGlobal.daoBa.BaSettingsMapper;
+import com.dy.pipIrrGlobal.daoRm.RmOpenCloseValveHistoryMapper;
+import com.dy.pipIrrGlobal.daoSe.*;
 import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
+import com.dy.pipIrrGlobal.pojoSe.SeManagerCard;
+import com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory;
+import com.dy.pipIrrGlobal.voRm.VoExpend;
 import com.dy.pipIrrGlobal.voSe.*;
 import com.dy.pipIrrSell.cardOperate.dto.DtoRecharge;
 import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM;
 import com.dy.pipIrrSell.cardOperate.qo.*;
+import com.dy.pipIrrSell.clientCard.CardStateENUM;
 import com.dy.pipIrrSell.clientCard.ClientCardSv;
 import com.dy.pipIrrSell.clientCard.LastOperateENUM;
 import com.dy.pipIrrSell.result.SellResultCode;
 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;
 
 import java.text.DecimalFormat;
+import java.time.Duration;
 import java.util.*;
 
 /**
@@ -52,9 +57,27 @@
     @Autowired
     private SeGeneralMapper seGeneralMapper;
 
+    @Autowired
+    private BaSettingsMapper baSettingsMapper;
+
+    @Autowired
+    private SeManagerCardMapper seManagerCardMapper;
+
+    @Autowired
+    private SePaymentMethodMapper sePaymentMethodMapper;
+
+    @Autowired
+    private SeRechargeHistoryMapper seRechargeHistoryMapper;
+
+    @Autowired
+    private RmOpenCloseValveHistoryMapper rmOpenCloseValveHistoryMapper;
+
+    @Value("${project.projectNo}")
+    private Integer projectNo;
 
     /**
      * 娣诲姞寮�鍗¤褰�
+     *
      * @param po 姘村崱鎿嶄綔瀵硅薄
      * @return 寮�鍗¤褰曚富閿�
      */
@@ -65,32 +88,62 @@
 
     /**
      * 鏍规嵁鍐滄埛缂栧彿鑾峰彇5绾ц鏀垮尯鍒掍唬鐮侊紝寮�鍗′娇鐢�
+     *
      * @param clientNum 鍐滄埛缂栧彿
      * @return 5绾ц鏀垮尯鍒掍唬鐮�
      */
-    public Long getAreaCodeByNum(String clientNum) {
-        return seClientMapper.getAreaCodeByNum(clientNum);
+    public String getAreaCodeByNum(String clientNum) {
+        Long areaCode = seClientMapper.getAreaCodeByNum(clientNum);
+        if (areaCode == null) {
+            return "";
+        }
+        return String.valueOf(areaCode);
     }
 
     /**
      * 鏍规嵁鍐滄埛缂栧彿鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode锛岃ˉ鍗¤繃绋嬩腑寮�鏂板崱浣跨敤
+     *
      * @param clientId
      * @return
      */
     public Long getAreaCodeById(Long clientId) {
         return seClientMapper.getAreaCodeById(clientId);
     }
+
     /**
      * 鏍规嵁琛屾斂鍖哄垝涓叉ā鍧楁煡璇㈡按鍗$紪鍙凤紝寮�鍗′娇鐢�
+     *
      * @param areaCode
      * @return
      */
-    String getCardNumOfMax(String areaCode) {
+    public String getCardNumOfMax(String areaCode) {
         return seClientCardMapper.getCardNumOfMax(areaCode);
     }
 
     /**
+     * 鏍规嵁琛屾斂鍖哄垝涓叉ā绯婃煡璇㈢鐞嗗崱缂栧彿锛屽垱寤虹鐞嗗崱浣跨敤
+     *
+     * @param areaCode
+     * @return
+     */
+    public String getManagerCardNumOfMax(String areaCode) {
+        return seManagerCardMapper.getManagerCardNumOfMax(areaCode);
+    }
+
+    /**
+     * 鍒涘缓绠$悊鍗�
+     *
+     * @param po
+     * @return
+     */
+    public Long addManagerCard(SeManagerCard po) {
+        seManagerCardMapper.insert(po);
+        return po.getId();
+    }
+
+    /**
      * 鏍规嵁鍐滄埛缂栧彿鑾峰彇鍐滄埛ID锛屽紑鍗′娇鐢�
+     *
      * @param clientNum
      * @return
      */
@@ -100,6 +153,7 @@
 
     /**
      * 娣诲姞姘村崱鎿嶄綔瀵硅薄锛屽悇鎿嶄綔閮戒娇鐢�
+     *
      * @param po 姘村崱鎿嶄綔瀵硅薄
      * @return 鎿嶄綔璁板綍涓婚敭
      */
@@ -110,11 +164,12 @@
 
     /**
      * 娣诲姞鍏呭�艰褰�
-     * 淇敼鍐滄埛淇℃伅銆佹坊鍔犲厖鍊艰褰�
+     * 淇敼鍐滄埛淇℃伅銆佹坊鍔犳按鍗℃搷浣滆褰曘�佹坊鍔犲厖鍊艰褰�
+     *
      * @param po
      * @return
      */
-    public BaseResponse<Boolean> addRecharge(DtoRecharge po){
+    public BaseResponse<Boolean> addRecharge(DtoRecharge po) {
         /**
          * cardId           姘村崱缂栧彿锛堜緷鎹按鍗$紪鍙疯幏鍙栵級
          * clientId         鍐滄埛缂栧彿锛堜緷鎹按鍗$紪鍙疯幏鍙栵級
@@ -131,7 +186,7 @@
          */
         Long cardId = 0L;
         Long clientId = 0L;
-        String cardNum = po.getCardNum();
+        Long cardNum = po.getCardNum();
         Float money = po.getMoney();
         Float amount = po.getAmount();
         Float gift = po.getGift();
@@ -142,40 +197,44 @@
         Long operator = po.getOperator();
         Date rechargeTime = new Date();
 
+        // 鑾峰彇姘村崱鐘舵��
+        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse("");
 
-        // 楠岃瘉姘村崱鐘舵�佹槸鍚︽敮鎸佸綋鍓嶆搷浣�
-        String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse("");
-        if(stateName.length() == 0 || !stateName.equals("姝e父")) {
-            return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        // 鍗曠嫭鍏呭�兼椂鍗$墖蹇呴』涓烘甯�
+        if (remarks.trim().equals("鍏呭��") && !stateName.equals("姝e父")) {
+            return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
+        }
+
+        // 寮�鍗″悓姝ュ厖鍊兼椂鍏佽鍗$墖涓烘棤鏁堢姸鎬侊紝寰楀埌閫氱煡鍚庤嚜鍔ㄥ彉鏇翠负鏈夋晥
+        if (!remarks.trim().equals("鍏呭��") && !stateName.equals("姝e父") && !stateName.equals("鏃犳晥鍗$墖")) {
+            return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage());
         }
 
         /**
          * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
          */
         Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
-        if(map == null || map.size() <= 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
+        if (map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage());
         }
         cardId = Long.parseLong(map.get("cardId").toString());
         clientId = Long.parseLong(map.get("clientId").toString());
 
         /**
-         * 淇敼鍐滄埛鍗′俊鎭細
-         *      琛ュ崱鏃堕棿
-         *      鏈�鍚庢搷浣滅被鍨�-2
+         * 鍏呭�兼椂涓嶄慨鏀瑰啘鎴峰崱淇℃伅锛屾敹鍒版垚鍔熼�氱煡鍚庡啀淇敼锛氫綑棰濄�佸厖鍊兼椂闂淬�佹渶鍚庢搷浣滅被鍨�
+         SeClientCard seClientCard = new SeClientCard();
+         seClientCard.setId(cardId);
+         seClientCard.setMoney(afterRecharge);
+         seClientCard.setRechargedt(rechargeTime);
+         seClientCard.setLastoper(LastOperateENUM.RECHARGE.getCode ());
+         Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
+         if(rec_updateClientCard == 0) {
+         return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+         }
          */
-        SeClientCard seClientCard = new SeClientCard();
-        seClientCard.setId(cardId);
-        seClientCard.setMoney(afterRecharge);
-        seClientCard.setRechargedt(rechargeTime);
-        seClientCard.setLastoper(LastOperateENUM.RECHARGE.getCode ());
-        Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
-        if(rec_updateClientCard == 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
-        }
 
         /**
-         * 娣诲姞鍏呭�艰褰�
+         * 娣诲姞姘村崱鍏呭�兼搷浣滆褰�
          */
         SeCardOperate seCardOperate = new SeCardOperate();
         seCardOperate.setCardId(cardId);
@@ -189,98 +248,257 @@
         seCardOperate.setRemarks(remarks);
         seCardOperate.setOperator(operator);
         seCardOperate.setOperateDt(rechargeTime);
-
+        seCardOperate.setOperateValid((byte) 1);
         seCardOperateMapper.insert(seCardOperate);
         Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L);
-        if(rec == 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage());
+        if (rec == 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_RECHARGE_ERROR.getMessage());
         }
 
-        return BaseResponseUtils.buildSuccess(true) ;
-    }
+        /**
+         * 娣诲姞鍏呭�煎巻鍙茶褰�
+         */
+        SeRechargeHistory seRechargeHistory = new SeRechargeHistory();
+        seRechargeHistory.setCardid(cardId);
+        seRechargeHistory.setClientid(clientId);
+        seRechargeHistory.setMoney(money);
+        seRechargeHistory.setAmount(amount);
+        seRechargeHistory.setGift(gift);
+        seRechargeHistory.setAfterrecharge(afterRecharge);
+        seRechargeHistory.setPaymentid(paymentId);
+        seRechargeHistory.setPrice(price);
+        seRechargeHistory.setRemarks(remarks);
+        seRechargeHistory.setOperator(operator);
+        seRechargeHistory.setOperatedt(rechargeTime);
+        seRechargeHistory.setOperateValid((byte) 1);
+        seRechargeHistoryMapper.insert(seRechargeHistory);
+        Long rec_seRechargeHistory = Optional.ofNullable(seRechargeHistory.getId()).orElse(0L);
+        if (rec_seRechargeHistory == 0) {
+            return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_RECHARGE_HISTORY_ERROR.getMessage());
+        }
 
+        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);
+    }
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鍏呭�艰褰�
+     *
      * @param queryVo
      * @return
      */
     public QueryResultVo<List<VoRecharge>> getRecharges(QoRecharge queryVo) {
         //瀹屽杽鏌ヨ鍏呭�艰褰曠殑璧锋鏃堕棿
-        String rechargeTimeStart = queryVo.rechargeTimeStart;
-        String rechargeTimeStop = queryVo.rechargeTimeStop;
-        if(rechargeTimeStart != null) {
-            rechargeTimeStart = rechargeTimeStart + " 00:00:00";
-            queryVo.setRechargeTimeStart(rechargeTimeStart);
-        }
-        if(rechargeTimeStop != null) {
-            rechargeTimeStop = rechargeTimeStop + " 23:59:59";
-            queryVo.setRechargeTimeStop(rechargeTimeStop);
-        }
+        //String rechargeTimeStart = queryVo.rechargeTimeStart;
+        //String rechargeTimeStop = queryVo.rechargeTimeStop;
+        //if(rechargeTimeStart != null) {
+        //    rechargeTimeStart = rechargeTimeStart + " 00:00:00";
+        //    queryVo.setRechargeTimeStart(rechargeTimeStart);
+        //}
+        //if(rechargeTimeStop != null) {
+        //    rechargeTimeStop = rechargeTimeStop + " 23:59:59";
+        //    queryVo.setRechargeTimeStop(rechargeTimeStop);
+        //}
 
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
 
         Long itemTotal = seCardOperateMapper.getRecordCount(params);
 
-        QueryResultVo<List<VoRecharge>> rsVo = new QueryResultVo<>() ;
-        rsVo.pageSize = queryVo.pageSize ;
-        rsVo.pageCurr = queryVo.pageCurr ;
+        QueryResultVo<List<VoRecharge>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = queryVo.pageSize;
+        rsVo.pageCurr = queryVo.pageCurr;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seCardOperateMapper.getRecharges(params);
-        return rsVo ;
+        return rsVo;
     }
 
+    /**
+     * 鑾峰彇鍏呭�艰褰曪紝绠$悊骞冲彴鍏呭�煎垪琛ㄤ娇鐢紝APP鏈娇鐢�
+     *
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoRechargeNew>> getRechargesNew(QoRecharge queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        Long itemTotal = seCardOperateMapper.getRechargesCountNew(params);
+
+        QueryResultVo<List<VoRechargeNew>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = queryVo.pageSize;
+        rsVo.pageCurr = queryVo.pageCurr;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = seCardOperateMapper.getRechargesNew(params);
+        return rsVo;
+    }
+
+    /**
+     * 鑾峰彇杩旇繕璁板綍锛岀鐞嗗钩鍙板厖鍊煎垪琛ㄤ娇鐢�
+     *
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoRefund>> getRefunds(QoRecharge queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        Long itemTotal = seCardOperateMapper.getRefundsCount(params);
+
+        QueryResultVo<List<VoRefund>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = queryVo.pageSize;
+        rsVo.pageCurr = queryVo.pageCurr;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = seCardOperateMapper.getRefunds(params);
+        return rsVo;
+    }
+
+    /**
+     * 鑾峰彇姘村崱娑堣垂璁板綍锛岀鐞嗗钩鍙颁娇鐢�
+     *
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoExpend>> getExpends(QoRecharge queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        Long itemTotal = rmOpenCloseValveHistoryMapper.getExpendsCount(params);
+
+        QueryResultVo<List<VoExpend>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = queryVo.pageSize;
+        rsVo.pageCurr = queryVo.pageCurr;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = rmOpenCloseValveHistoryMapper.getExpends(params);
+        return rsVo;
+    }
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍
+     *
      * @param vo
      * @return
      */
-    public Map getTransactions(QoTransaction vo){
+    public Map getTransactions(QoTransaction vo) {
         DecimalFormat df = new DecimalFormat("0.00");
         // 琛ラ綈鏌ヨ鏃堕棿
         String operateTimeStart = vo.operateTimeStart;
         String operateTimeStop = vo.operateTimeStop;
-        if(operateTimeStart != null) {
+        if (operateTimeStart != null) {
             operateTimeStart = operateTimeStart + " 00:00:00";
             vo.setOperateTimeStart(operateTimeStart);
         }
-        if(operateTimeStop != null) {
+        if (operateTimeStop != null) {
             operateTimeStop = operateTimeStop + " 23:59:59";
             vo.setOperateTimeStop(operateTimeStop);
         }
 
         // 鐢熸垚鏌ヨ鍙傛暟
-        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo) ;
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo);
 
         // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
         Long itemTotal = Optional.ofNullable(seCardOperateMapper.getTransactionRecordCount(params)).orElse(0L);
 
-        List<VoTradeDetails> list = seCardOperateMapper.getTransactions(params);
-        if(list.size() == 0) {
+        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;
-        JSONArray array= JSONArray.parseArray(JSON.toJSONString(list));
-        for(int i = 0; i < array.size(); i++) {
+        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("itemTotal", itemTotal);
-        map_record.put("list", list);
+        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;
@@ -288,18 +506,19 @@
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇寮�鍗¤褰�
+     *
      * @param queryVo
      * @return
      */
-    public QueryResultVo<List<VoActiveCardNew>> getActiveCards(QoActiveCard queryVo) {
+    public QueryResultVo<List<VoActiveCard>> getActiveCards(QoActiveCard queryVo) {
         //瀹屽杽鏌ヨ鍏呭�艰褰曠殑璧锋鏃堕棿
         String activeTimeStart = queryVo.activeTimeStart;
         String activeTimeStop = queryVo.activeTimeStop;
-        if(activeTimeStart != null) {
+        if (activeTimeStart != null) {
             activeTimeStart = activeTimeStart + " 00:00:00";
             queryVo.setActiveTimeStart(activeTimeStart);
         }
-        if(activeTimeStop != null) {
+        if (activeTimeStop != null) {
             activeTimeStop = activeTimeStop + " 23:59:59";
             queryVo.setActiveTimeStop(activeTimeStop);
         }
@@ -308,18 +527,19 @@
 
         Long itemTotal = seCardOperateMapper.getActiveCardRecordCount(params);
 
-        QueryResultVo<List<VoActiveCardNew>> rsVo = new QueryResultVo<>() ;
+        QueryResultVo<List<VoActiveCard>> rsVo = new QueryResultVo<>();
 
-        rsVo.pageSize = queryVo.pageSize ;
-        rsVo.pageCurr = queryVo.pageCurr ;
+        rsVo.pageSize = queryVo.pageSize;
+        rsVo.pageCurr = queryVo.pageCurr;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seCardOperateMapper.getActiveCards(params);
-        return rsVo ;
+        return rsVo;
     }
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇琛ュ崱璁板綍
+     *
      * @param queryVo
      * @return
      */
@@ -327,11 +547,11 @@
         //瀹屽杽鏌ヨ鍏呭�艰褰曠殑璧锋鏃堕棿
         String reissueCardTimeStart = queryVo.reissueCardTimeStart;
         String reissueCardTimeStop = queryVo.reissueCardTimeStop;
-        if(reissueCardTimeStart != null) {
+        if (reissueCardTimeStart != null) {
             reissueCardTimeStart = reissueCardTimeStart + " 00:00:00";
             queryVo.setReissueCardTimeStart(reissueCardTimeStart);
         }
-        if(reissueCardTimeStop != null) {
+        if (reissueCardTimeStop != null) {
             reissueCardTimeStop = reissueCardTimeStop + " 23:59:59";
             queryVo.setReissueCardTimeStop(reissueCardTimeStop);
         }
@@ -340,22 +560,63 @@
 
         Long itemTotal = seCardOperateMapper.getReissueCardRecordCount(params);
 
-        QueryResultVo<List<VoReissueCard>> rsVo = new QueryResultVo<>() ;
+        QueryResultVo<List<VoReissueCard>> rsVo = new QueryResultVo<>();
 
-        rsVo.pageSize = queryVo.pageSize ;
-        rsVo.pageCurr = queryVo.pageCurr ;
+        rsVo.pageSize = queryVo.pageSize;
+        rsVo.pageCurr = queryVo.pageCurr;
 
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seCardOperateMapper.getReissueCards(params);
-        return rsVo ;
+        return rsVo;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇閫氱敤鎿嶄綔璁板綍
+     *
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoOperate>> getCommonOperations(QoCommonOperate queryVo) {
+        //瀹屽杽鏌ヨ鍏呭�艰褰曠殑璧锋鏃堕棿
+        String timeStart = queryVo.getTimeStart();
+        String timeStop = queryVo.getTimeStop();
+        if (timeStart != null) {
+            timeStart = timeStart + " 00:00:00";
+            queryVo.setTimeStart(timeStart);
+        }
+        if (timeStop != null) {
+            timeStop = timeStop + " 23:59:59";
+            queryVo.setTimeStop(timeStop);
+        }
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        Long itemTotal = Optional.ofNullable(seCardOperateMapper.getCommonOperationRecordCount(params)).orElse(0L);
+
+        QueryResultVo<List<VoOperate>> rsVo = new QueryResultVo<>();
+
+        rsVo.pageSize = queryVo.pageSize;
+        rsVo.pageCurr = queryVo.pageCurr;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = seCardOperateMapper.getCommonOperations(params);
+        return rsVo;
     }
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃
+     *
      * @param queryVo
      * @return
      */
     public Map getReceipts(QoReceipt queryVo) {
+        if (queryVo.getTimeStart() != null && queryVo.getTimeStart() != "") {
+            queryVo.setTimeStart(queryVo.getTimeStart() + " 00:00:00");
+        }
+        if (queryVo.getTimeStop() != null && queryVo.getTimeStop() != "") {
+            queryVo.setTimeStop(queryVo.getTimeStop() + " 23:59:59");
+        }
+
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
 
         DecimalFormat df = new DecimalFormat("#.00");
@@ -363,9 +624,9 @@
 
         Long itemTotal = seCardOperateMapper.getReceiptsRecordCount(params);
 
-        QueryResultVo<List<VoReceipt>> rsVo = new QueryResultVo<>() ;
-        rsVo.pageSize = queryVo.pageSize ;
-        rsVo.pageCurr = queryVo.pageCurr ;
+        QueryResultVo<List<VoReceipt>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = queryVo.pageSize;
+        rsVo.pageCurr = queryVo.pageCurr;
 
         rsVo.calculateAndSet(itemTotal, params);
         //rsVo.obj = seCardOperateMapper.getReceipts(params);
@@ -385,4 +646,250 @@
 
         return map_result;
     }
+
+    /**
+     * 鍒ゆ柇鎸囧畾姘村崱鏄惁涓烘寕澶辩姸鎬佷笖鏃犺ˉ鍗¤褰�
+     *
+     * @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 po
+     * @return
+     */
+    public Integer updateClientCard(SeClientCard po) {
+        return seClientCardMapper.updateByPrimaryKeySelective(po);
+    }
+
+    /**
+     * 鑾峰彇椤圭洰缂栧彿
+     *
+     * @return
+     */
+    public String getProjectNo() {
+        return baSettingsMapper.getItemValue("projectNo");
+    }
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鑾峰彇鍏舵寕澶辨椂閫�娆鹃噾棰濓紙琛ュ崱鏃跺垽鏂娇鐢級
+     *
+     * @param cardNum
+     * @return
+     */
+    public Double getTradeAmountByCardNo(Long cardNum) {
+        return seCardOperateMapper.getTradeAmountByCardNo(cardNum);
+    }
+
+    /**
+     * 鏍规嵁姘村崱鍦板潃鍒ゆ柇璇ュ崱鏄惁鍙互寮�鍗�
+     *
+     * @param cardAddr
+     * @return
+     */
+    public Boolean canActiveCard(String cardAddr) {
+
+        // 鎸囧畾姘村崱鍦板潃鐨勬按鍗℃暟閲忥紝鏃犳晥鍗$墖鎺掗櫎鍦ㄥ
+        Long cardCount = Optional.ofNullable(seClientCardMapper.getCountByCardAddr(cardAddr)).orElse(0L);
+        if (cardCount == 0) {
+            return true;
+        }
+
+        // 鎸囧畾姘村崱鍦板潃涓旀甯哥姸鎬佹垨鎸傚け鐘舵�佺殑姘村崱鏁伴噺
+        cardCount = Optional.ofNullable(seClientCardMapper.getCountByCardAddrAndState(cardAddr)).orElse(0L);
+        if (cardCount == 0) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * 渚濇嵁姘村崱鍦板潃鑾峰彇姘村崱缂栧彿
+     *
+     * @param cardAddr
+     * @return
+     */
+    public Long getCardIdByAddr(String cardAddr) {
+        return seClientCardMapper.getCardIdByAddr(cardAddr);
+    }
+
+    /**
+     * 渚濇嵁姘村崱鍦板潃灏嗘渶鍚庝竴鏉℃棤鏁堢姸鎬佺殑鎸囧畾鎿嶄綔璁板綍鏀逛负鏈夋晥
+     *
+     * @param cardAddr
+     * @param operateType
+     * @return
+     */
+    public Integer turnCardValidByAddr(String cardAddr, Integer operateType) {
+        return seClientCardMapper.turnCardValidByAddr(cardAddr, operateType);
+    }
+
+    /**
+     * 鏍规嵁姘村崱ID銆佹搷浣滅被鍨嬭幏鍙栬幏鍙栨渶鍚庝竴鏉¤褰曪紝鍒ゆ柇寮�鍗℃槸鍚﹀悓姝ュ厖鍊间娇鐢�
+     *
+     * @param cardId
+     * @return
+     */
+    public Integer turnOperateValidByCardId(Long cardId, Integer operateType) {
+        return seCardOperateMapper.turnOperateValidByCardId(cardId, operateType);
+    }
+
+    /**
+     * 渚濇嵁姘村崱ID灏嗘渶鍚庝竴鏉℃棤鏁堢姸鎬佺殑鍏呭�煎巻鍙茶褰曟敼涓烘湁鏁�
+     *
+     * @param cardId
+     * @return
+     */
+    public Integer turnRechargeHistoryValidByCardId(Long cardId) {
+        return seRechargeHistoryMapper.turnRechargeHistoryValidByCardId(cardId);
+    }
+
+    /**
+     * 鏍规嵁姘村崱ID鍒ゆ柇鏄惁涓哄紑鍗℃椂鍚屾鍏呭��
+     * 璇ユ按鍗D涓嶅瓨鍦ㄥ紑鍗¤褰曟垨鍏呭�艰褰曞垯杩斿洖false
+     * 濡傛灉寮�鍗℃搷浣滀笌鍏呭�兼搷浣滄椂闂撮棿闅旇秴杩�30绉掑垯杩斿洖false
+     * 濡傛灉鍏呭�奸噾棰濆ぇ浜�0涓斿厖鍊煎墠浣欓涓�0鍒欒繑鍥瀟rue
+     *
+     * @param cardId
+     * @return
+     */
+    public Boolean isMergeRecharge(Long cardId) {
+        SeCardOperate activeCard = seCardOperateMapper.getCardOperate(1, cardId);
+        SeCardOperate recharge = seCardOperateMapper.getCardOperate(2, cardId);
+        if (activeCard == null || recharge == null) {
+            return false;
+        }
+
+        Duration duration = Duration.between(activeCard.getOperateDt().toInstant(), recharge.getOperateDt().toInstant());
+        if (duration.toSeconds() > 30) {
+            return false;
+        }
+
+        Float money = Optional.ofNullable(recharge.getMoney()).orElse(0f);
+        Float tradeAmount = Optional.ofNullable(recharge.getTradeAmount()).orElse(0f);
+
+        if (tradeAmount > 0 && money == 0) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 鏍规嵁姘村崱ID浠庢搷浣滆褰曡〃涓彇鍑猴細浣欓銆佷氦鏄撻噾棰濄�佽禒閫侀噾棰濓紝姹傚拰寰楀埌姘村崱浣欓
+     * 灏嗕綑棰濇洿鏂板埌姘村崱琛ㄤ腑
+     *
+     * @param cardId
+     * @return
+     */
+    public Boolean updateCard(Long cardId) {
+        SeCardOperate recharge = seCardOperateMapper.getCardOperate(2, cardId);
+        if (recharge == null) {
+            return false;
+        }
+        Float money = Optional.ofNullable(recharge.getMoney()).orElse(0f);
+        Float amount = Optional.ofNullable(recharge.getTradeAmount()).orElse(0f);
+        Float gift = Optional.ofNullable(recharge.getGift()).orElse(0f);
+
+        SeClientCard clientCard = new SeClientCard();
+        clientCard.setId(cardId);
+        clientCard.setMoney(money + amount + gift);
+        clientCard.setRechargedt(recharge.getOperateDt());
+        clientCard.setLastoper(LastOperateENUM.RECHARGE.getCode());
+        Integer rec_updateClientCard = seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+        if (rec_updateClientCard == null || rec_updateClientCard == 0) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 濡傛灉琛ュ崱鏃惰浆绉讳簡閫�杩橀噾棰濓紝娓呯┖鎸傚け鍗′綑棰�
+     * @param operateType
+     * @param cardId
+     */
+    public void emptyCardBalance(Integer operateType, Long cardId) {
+        SeCardOperate cardOperate = seCardOperateMapper.getCardOperate(operateType, cardId);
+        if(cardOperate != null) {
+            Float noTradeAmount = cardOperate.getNoTradeAmount();
+            if(noTradeAmount != null && noTradeAmount > 0) {
+                Long originalCardId = seClientCardMapper.getOriginalCardIdByCardId(cardId);
+                if(originalCardId != null) {
+                    SeClientCard clientCard = new SeClientCard();
+                    clientCard.setId(cardId);
+                    clientCard.setMoney(0f);
+                    seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+                }
+            }
+        }
+
+    }
+
+    /**
+     * 淇敼娉ㄩ攢姘村崱琛ㄧ殑璁板綍鍙婁綑棰濓紙0锛�
+     * @param cardId
+     * @return
+     */
+    public Integer updateCancels(Integer operateType, Long cardId) {
+        SeCardOperate cardOperate = seCardOperateMapper.getCardOperate(operateType, cardId);
+        Date cancelTime = Optional.ofNullable(cardOperate.getOperateDt()).orElse(new Date());
+
+        SeClientCard clientCard = new SeClientCard();
+        clientCard.setId(cardId);
+        clientCard.setCanceldt(cancelTime);
+        clientCard.setMoney(0f);
+        clientCard.setState(CardStateENUM.CANCELLED.getCode());
+        clientCard.setLastoper(LastOperateENUM.CANCEL.getCode());
+        return seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+    }
+
+    /**
+     * 淇敼琛ユ墸姘村崱琛ㄧ殑鎿嶄綔淇℃伅鍙婁綑棰�
+     * @param operateType
+     * @param cardId
+     * @return
+     */
+    public Integer updateRefund(Integer operateType, Long cardId) {
+        SeCardOperate cardOperate = seCardOperateMapper.getCardOperate(operateType, cardId);
+        Date refundTime = Optional.ofNullable(cardOperate.getOperateDt()).orElse(new Date());
+        Float money = cardOperate.getMoney();
+        Float refund = cardOperate.getRefundAmount();
+
+        SeClientCard clientCard = new SeClientCard();
+        clientCard.setId(cardId);
+        clientCard.setRefunddt(refundTime);
+        clientCard.setMoney(money + refund);
+        clientCard.setLastoper(LastOperateENUM.REFUND.getCode());
+        return seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+    }
+
+    /**
+     * 淇敼鍙嶅啓姘村崱琛ㄧ殑鎿嶄綔淇℃伅鍙婁綑棰�
+     * @param operateType
+     * @param cardId
+     * @return
+     */
+    public Integer updateWriteBack(Integer operateType, Long cardId) {
+        SeCardOperate cardOperate = seCardOperateMapper.getCardOperate(operateType, cardId);
+        Date writeBackTime = Optional.ofNullable(cardOperate.getOperateDt()).orElse(new Date());
+        Float money = cardOperate.getMoney();
+
+        SeClientCard clientCard = new SeClientCard();
+        clientCard.setId(cardId);
+        clientCard.setRefunddt(writeBackTime);
+        clientCard.setMoney(money);
+        clientCard.setLastoper(LastOperateENUM.WRITE_BACK.getCode());
+        return seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+    }
 }

--
Gitblit v1.8.0