From b65723ac8b1ee5f6e1ae9a1744c9080b26302eff Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期六, 14 九月 2024 09:00:58 +0800
Subject: [PATCH] 2024-09-14 朱宝民 水卡使用情况(充值、消费、余额)

---
 pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/qo/CardUsageQO.java  |   46 +++++++++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoCardUsage.java                            |   45 +++++++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardCtrl.java      |   26 ++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardSv.java        |   44 ++++++++++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml                                   |   58 ++++++++++++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java                    |   16 ++++
 pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/VirtualCardCtrl.java |    1 
 7 files changed, 235 insertions(+), 1 deletions(-)

diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java
index f444fe3..1fbee9f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java
@@ -6,6 +6,7 @@
 import com.dy.pipIrrGlobal.voSe.VoCardInfo1;
 import com.dy.pipIrrGlobal.voSe.VoCards;
 import com.dy.pipIrrGlobal.voSe.VoCards2;
+import com.dy.pipIrrGlobal.voSt.VoCardUsage;
 import com.dy.pipIrrGlobal.voWe.VoCards3;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -202,4 +203,19 @@
      * @return
      */
     Long getCountByCardAddrAndState(String cardAddr);
+
+
+    /**
+     * 鑾峰彇鎸囧畾鏃堕棿娈垫按鍗′娇鐢ㄦ儏鍐佃褰曟暟閲�
+     * @param params
+     * @return
+     */
+    List<VoCardUsage> getCardUsagesCount(Map<?, ?> params);
+
+    /**
+     * 鑾峰彇鎸囧畾鏃堕棿娈垫按鍗′娇鐢ㄦ儏鍐碉細鍏呭�煎悎璁°�佹秷璐瑰悎璁°�佷綑棰�
+     * @param params
+     * @return
+     */
+    List<VoCardUsage> getCardUsages(Map<?, ?> params);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoCardUsage.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoCardUsage.java
new file mode 100644
index 0000000..d884cf7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoCardUsage.java
@@ -0,0 +1,45 @@
+package com.dy.pipIrrGlobal.voSt;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-09-13 16:14
+ * @LastEditTime 2024-09-13 16:14
+ * @Description 姘村崱浣跨敤缁熻瑙嗗浘
+ */
+
+@Data
+@JsonPropertyOrder({ "clientName", "cardNum", "totalRecharge", "totalConsumption", "balance"})
+public class VoCardUsage {
+    private static final long serialVersionUID = 202409131615001L;
+
+    /**
+     * 鍐滄埛濮撳悕
+     */
+    private String clientName;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    private Long cardNum;
+
+    /**
+     * 鍏呭�奸噾棰濆悎璁�
+     */
+    private Float totalRecharge;
+
+    /**
+     * 娑堣垂閲戦鍚堣
+     */
+    private Float totalConsumption;
+
+    /**
+     * 浣欓
+     */
+    private Float balance;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
index 5f2f303..1828bc0 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -650,4 +650,62 @@
         WHERE cardAddr = #{cardAddr}
           AND state IN (1, 3)
     </select>
+
+    <!--鑾峰彇鎸囧畾鏃堕棿娈垫按鍗′娇鐢ㄦ儏鍐佃褰曟暟閲�-->
+    <select id="getCardUsagesCount" resultType="com.dy.pipIrrGlobal.voSt.VoCardUsage">
+        SELECT
+            cli.name AS clientName,
+            card.cardNum,
+            (SELECT ROUND(SUM(rch.amount),2) FROM se_recharge_history rch WHERE rch.cardId = card.id AND rch.operateDt BETWEEN #{timeStart} AND #{timeStop}) AS totalRecharge,
+            (SELECT ROUND(SUM(his.cl_this_money),2) FROM rm_open_close_valve_history his WHERE his.cl_ic_card_no = card.cardNum AND his.cl_dt BETWEEN #{timeStart} AND #{timeStop}) AS totalConsumption,
+            ROUND(card.money,2) AS balance
+        FROM se_client_card card
+            INNER JOIN se_client cli ON cli.id = card.clientId
+            INNER JOIN se_recharge_history rch ON rch.cardId = card.id
+        <where>
+            <if test="clientName != null and clientName != ''">
+                AND cli.name like CONCAT('%', #{clientName}, '%')
+            </if>
+
+            <if test="cardNum != null and cardNum != ''">
+                AND card.cardNum like CONCAT('%', #{cardNum}, '%')
+            </if>
+
+            <if test="clientNum != null and clientNum != ''">
+                AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
+            </if>
+        </where>
+    </select>
+
+    <!--鑾峰彇鎸囧畾鏃堕棿娈垫按鍗′娇鐢ㄦ儏鍐碉細鍏呭�煎悎璁°�佹秷璐瑰悎璁°�佷綑棰�-->
+    <select id="getCardUsages" resultType="com.dy.pipIrrGlobal.voSt.VoCardUsage">
+        SELECT
+            cli.name AS clientName,
+            card.cardNum,
+            (SELECT ROUND(SUM(rch.amount),2) FROM se_recharge_history rch WHERE rch.cardId = card.id AND rch.operateDt BETWEEN #{timeStart} AND #{timeStop}) AS totalRecharge,
+            (SELECT ROUND(SUM(his.cl_this_money),2) FROM rm_open_close_valve_history his WHERE his.cl_ic_card_no = card.cardNum AND his.cl_dt BETWEEN #{timeStart} AND #{timeStop}) AS totalConsumption,
+            ROUND(card.money,2) AS balance
+        FROM se_client_card card
+            INNER JOIN se_client cli ON cli.id = card.clientId
+            INNER JOIN se_recharge_history rch ON rch.cardId = card.id
+        <where>
+            <if test="clientName != null and clientName != ''">
+                AND cli.name like CONCAT('%', #{clientName}, '%')
+            </if>
+
+            <if test="cardNum != null and cardNum != ''">
+                AND card.cardNum like CONCAT('%', #{cardNum}, '%')
+            </if>
+
+            <if test="clientNum != null and clientNum != ''">
+                AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
+            </if>
+        </where>
+        ORDER BY cli.name, card.cardNum
+        <trim prefix="limit ">
+            <if test="start != null and count != null">
+                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+            </if>
+        </trim>
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardCtrl.java
index df89ee5..74b3ff9 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardCtrl.java
@@ -4,15 +4,20 @@
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.voSt.VoCardUsage;
 import com.dy.pipIrrGlobal.voSt.VoICCard;
 import com.dy.pipIrrStatistics.card.IcCardqo.CommonQO;
+import com.dy.pipIrrStatistics.card.qo.CardUsageQO;
+import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author ZhuBaoMin
@@ -102,4 +107,25 @@
             return BaseResponseUtils.buildException(e.getMessage());
         }
     }
+
+    /**
+     * 鑾峰彇鎸囧畾鏃堕棿娈垫按鍗′娇鐢ㄦ儏鍐碉細鍏呭�煎悎璁°�佹秷璐瑰悎璁°�佷綑棰�
+     * @param qo
+     //* @param bindingResult
+     * @return
+     */
+    @GetMapping(path = "/card_usage")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoCardUsage>>> getCardUsages(@Valid CardUsageQO qo, BindingResult bindingResult) {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        try {
+            return BaseResponseUtils.buildSuccess(icCardSv.getCardUsages(qo));
+        } catch (Exception e) {
+            log.error("鑾峰彇寮�鍗¤褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardSv.java
index c712949..9a6f78c 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardSv.java
@@ -3,9 +3,10 @@
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper;
 import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
+import com.dy.pipIrrGlobal.voSt.VoCardUsage;
 import com.dy.pipIrrGlobal.voSt.VoICCard;
-import com.dy.pipIrrGlobal.voSt.VoIntakeAccumulateAmount;
 import com.dy.pipIrrStatistics.card.IcCardqo.CommonQO;
+import com.dy.pipIrrStatistics.card.qo.CardUsageQO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -150,4 +151,45 @@
         Double totalMoney = seClientCardMapper.getTotalMoneyIcCards();
         return totalMoney ;
     }
+
+    /**
+     * 鑾峰彇鎸囧畾鏃堕棿娈垫按鍗′娇鐢ㄦ儏鍐碉細鍏呭�煎悎璁°�佹秷璐瑰悎璁°�佷綑棰�
+     * @param qo
+     * @return
+     */
+    public QueryResultVo<List<VoCardUsage>> getCardUsages(CardUsageQO qo) {
+
+        String timeStart = qo.getTimeStart();
+        String timeStop = qo.getTimeStop();
+
+        if (timeStart != null && timeStart != ""){
+            timeStart = timeStart + " 00:00:00";
+        }else {
+            timeStart = LocalDate.now() + " 00:00:00";
+        }
+        if (timeStop != null && timeStop != ""){
+            timeStop = timeStop + " 23:59:59";
+        }else {
+            timeStop = LocalDateTime.now().toString();
+        }
+        qo.setTimeStart(timeStart);
+        qo.setTimeStop(timeStop);
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
+
+        //Long itemTotal = seCardOperateMapper.getOpenCountIcCardsCount(params);
+        Integer itemTotal = 0;
+        List<VoCardUsage> all = seClientCardMapper.getCardUsagesCount(params);
+        if(all != null && all.size() > 0) {
+            itemTotal = all.size();
+        }
+
+        QueryResultVo<List<VoCardUsage>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = qo.pageSize ;
+        rsVo.pageCurr = qo.pageCurr ;
+
+        rsVo.calculateAndSet(Long.parseLong(itemTotal.toString()), params);
+        rsVo.obj = seClientCardMapper.getCardUsages(params);
+        return rsVo ;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/VirtualCardCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/VirtualCardCtrl.java
index f544193..68ea885 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/VirtualCardCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/VirtualCardCtrl.java
@@ -131,4 +131,5 @@
             return BaseResponseUtils.buildException(e.getMessage()) ;
         }
     }
+
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/qo/CardUsageQO.java b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/qo/CardUsageQO.java
new file mode 100644
index 0000000..2325a67
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/qo/CardUsageQO.java
@@ -0,0 +1,46 @@
+package com.dy.pipIrrStatistics.card.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-09-13 16:27
+ * @LastEditTime 2024-09-13 16:27
+ * @Description 姘村崱浣跨敤鎯呭喌鏌ヨ瀵硅薄
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class CardUsageQO extends QueryConditionVo {
+
+    /**
+     * 鏌ヨ寮�濮嬫椂闂�
+     */
+    //@NotBlank(message = "鏌ヨ寮�濮嬫椂闂翠笉鑳戒负绌�")
+    private String timeStart;
+
+    /**
+     * 鏌ヨ缁撴潫鏃堕棿
+     */
+    //@NotBlank(message = "鏌ヨ缁撴潫鏃堕棿涓嶈兘涓虹┖")
+    private String timeStop;
+
+    /**
+     * 鍐滄埛濮撳悕
+     */
+    private String clientName;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    private Long cardNum;
+
+    /**
+     * 鍐滄埛缂栧彿
+     */
+    private String clientNum;
+
+
+}

--
Gitblit v1.8.0