From 24f91c6e8b6a5e5be813e0b740dec3d381abe254 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期一, 06 一月 2025 10:56:50 +0800
Subject: [PATCH] 农户用水月统计、年统计查询实现

---
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountMonthMapper.xml                             |   58 +++
 pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientCtrl.java |   48 +++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYearRecords.java             |  201 +++++++++++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountMonth.java                   |  243 ++++++++++++++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYearRecord.java              |   49 +++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYear.java                    |   20 +
 pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientSv.java   |  175 +++++++++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountYearMapper.java               |   21 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountYearMapper.xml                              |   42 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountMonthMapper.java              |   18 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountDayMapper.xml                               |   16 
 11 files changed, 882 insertions(+), 9 deletions(-)

diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountMonthMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountMonthMapper.java
index c9f99bc..58fdb3f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountMonthMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountMonthMapper.java
@@ -2,10 +2,12 @@
 
 import com.dy.pipIrrGlobal.pojoSt.StClientAmountMonth;
 import com.dy.pipIrrGlobal.voSt.VoClientAmountStatistics;
+import com.dy.pipIrrGlobal.voSt.VoStClientAmountMonth;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -63,6 +65,22 @@
     int updateByPrimaryKey(StClientAmountMonth record);
 
 
+
+    //////////////////////////////////////
+    //鏌ヨ缁熻缁撴灉
+    /**
+     * 鏌ヨ鎬绘暟閲�
+     * @param params
+     * @return
+     */
+    Long selectCountMonthStatistics(Map<?, ?> params) ;
+    /**
+     * 鏌ヨ鍒嗛〉鏁版嵁
+     * @param params
+     * @return
+     */
+    List<VoStClientAmountMonth> selectMonthStatistics(Map<?, ?> params) ;
+
     //////////////////////////////////////
     //缁熻鐩稿叧
     /**
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountYearMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountYearMapper.java
index 7bac86b..1af5eda 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountYearMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountYearMapper.java
@@ -1,10 +1,12 @@
 package com.dy.pipIrrGlobal.daoSt;
 
 import com.dy.pipIrrGlobal.pojoSt.StClientAmountYear;
+import com.dy.pipIrrGlobal.voSt.VoStClientAmountYearRecord;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -61,6 +63,25 @@
      */
     int updateByPrimaryKey(StClientAmountYear record);
 
+
+
+    //////////////////////////////////////
+    //鏌ヨ缁熻缁撴灉
+    /**
+     * 鏌ヨ鎬绘暟閲�
+     * @param params
+     * @return
+     */
+    Long selectCountYearStatistics(Map<?, ?> params) ;
+    /**
+     * 鏌ヨ鍒嗛〉鏁版嵁
+     * @param params
+     * @return
+     */
+    List<VoStClientAmountYearRecord> selectYearStatistics(Map<?, ?> params) ;
+
+    //////////////////////////////////////
+    //缁熻鐩稿叧
     /**
      * 鏌ヨ鏌愬勾 鏌愰噺鍊�
      *
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountMonth.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountMonth.java
new file mode 100644
index 0000000..d78374b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountMonth.java
@@ -0,0 +1,243 @@
+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: liurunyu
+ * @Date: 2025/1/4 10:15
+ * @Description
+ */
+@Data
+@JsonPropertyOrder({ "id", "clientId", "clientNum", "clientName", "clientAddress" , "year"
+        ,"amount1" , "money1" , "times1" 
+        ,"amount2" , "money2" , "times2"
+        ,"amount3" , "money3" , "times3"
+        ,"amount4" , "money4" , "times4"
+        ,"amount5" , "money5" , "times5"
+        ,"amount6" , "money6" , "times6"
+        ,"amount7" , "money7" , "times7"
+        ,"amount8" , "money8" , "times8"
+        ,"amount9" , "money9" , "times9"
+        ,"amount10" , "money10" , "times10"
+        ,"amount11" , "money11" , "times11"
+        ,"amount12" , "money12" , "times12"
+})
+public class VoStClientAmountMonth {
+
+    public static final long serialVersionUID = 202501041014001L;
+    /**
+     * 涓婚敭
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long id;
+
+    /**
+     * 澶栭敭锛屾寚鍚戝啘鎴�
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long clientId;
+
+    /**
+     * 鍐滄埛缂栨湀
+     */
+    public String clientNum ;
+
+    /**
+     * 鍐滄埛鍚嶇О
+     */
+    public String clientName ;
+
+    /**
+     * 鍐滄埛鍦板潃
+     */
+    public String clientAddress ;
+
+    /**
+     * 骞村害
+     */
+    public Integer year;
+
+    /**
+     * 1鏈堢敤姘撮噺缁熻
+     */
+    public Double amount1;
+
+    /**
+     * 1鏈堣姳璐归噾棰�
+     */
+    public Double money1;
+
+    /**
+     * 1鏈堢敤姘存鏁�
+     */
+    public Integer times1;
+
+    /**
+     * 2鏈堢敤姘撮噺缁熻
+     */
+    public Double amount2;
+
+    /**
+     * 2鏈堣姳璐归噾棰�
+     */
+    public Double money2;
+
+    /**
+     * 2鏈堢敤姘存鏁�
+     */
+    public Integer times2;
+
+    /**
+     * 3鏈堢敤姘撮噺缁熻
+     */
+    public Double amount3;
+
+    /**
+     * 3鏈堣姳璐归噾棰�
+     */
+    public Double money3;
+
+    /**
+     * 3鏈堢敤姘存鏁�
+     */
+    public Integer times3;
+
+    /**
+     * 4鏈堢敤姘撮噺缁熻
+     */
+    public Double amount4;
+
+    /**
+     * 4鏈堣姳璐归噾棰�
+     */
+    public Double money4;
+
+    /**
+     * 4鏈堢敤姘存鏁�
+     */
+    public Integer times4;
+
+    /**
+     * 5鏈堢敤姘撮噺缁熻
+     */
+    public Double amount5;
+
+    /**
+     * 5鏈堣姳璐归噾棰�
+     */
+    public Double money5;
+
+    /**
+     * 5鏈堢敤姘存鏁�
+     */
+    public Integer times5;
+
+    /**
+     * 6鏈堢敤姘撮噺缁熻
+     */
+    public Double amount6;
+
+    /**
+     * 6鏈堣姳璐归噾棰�
+     */
+    public Double money6;
+
+    /**
+     * 6鏈堢敤姘存鏁�
+     */
+    public Integer times6;
+
+    /**
+     * 7鏈堢敤姘撮噺缁熻
+     */
+    public Double amount7;
+
+    /**
+     * 7鏈堣姳璐归噾棰�
+     */
+    public Double money7;
+
+    /**
+     * 7鏈堢敤姘存鏁�
+     */
+    public Integer times7;
+
+    /**
+     * 8鏈堢敤姘撮噺缁熻
+     */
+    public Double amount8;
+
+    /**
+     * 8鏈堣姳璐归噾棰�
+     */
+    public Double money8;
+
+    /**
+     * 8鏈堢敤姘存鏁�
+     */
+    public Integer times8;
+
+    /**
+     * 9鏈堢敤姘撮噺缁熻
+     */
+    public Double amount9;
+
+    /**
+     * 9鏈堣姳璐归噾棰�
+     */
+    public Double money9;
+
+    /**
+     * 9鏈堢敤姘存鏁�
+     */
+    public Integer times9;
+
+    /**
+     * 10鏈堢敤姘撮噺缁熻
+     */
+    public Double amount10;
+
+    /**
+     * 10鏈堣姳璐归噾棰�
+     */
+    public Double money10;
+
+    /**
+     * 10鏈堢敤姘存鏁�
+     */
+    public Integer times10;
+
+    /**
+     * 11鏈堢敤姘撮噺缁熻
+     */
+    public Double amount11;
+
+    /**
+     * 11鏈堣姳璐归噾棰�
+     */
+    public Double money11;
+
+    /**
+     * 11鏈堢敤姘存鏁�
+     */
+    public Integer times11;
+
+    /**
+     * 12鏈堢敤姘撮噺缁熻
+     */
+    public Double amount12;
+
+    /**
+     * 12鏈堣姳璐归噾棰�
+     */
+    public Double money12;
+
+    /**
+     * 12鏈堢敤姘存鏁�
+     */
+    public Integer times12;
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYear.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYear.java
new file mode 100644
index 0000000..100bef1
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYear.java
@@ -0,0 +1,20 @@
+package com.dy.pipIrrGlobal.voSt;
+
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/1/4 11:13
+ * @Description
+ */
+@Data
+@JsonPropertyOrder({ "yearGrp", "records" })
+public class VoStClientAmountYear {
+
+    public List<String> yearGrp;
+
+    public List<VoStClientAmountYearRecords> records;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYearRecord.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYearRecord.java
new file mode 100644
index 0000000..3822500
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYearRecord.java
@@ -0,0 +1,49 @@
+package com.dy.pipIrrGlobal.voSt;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import lombok.Data;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/1/6 9:38
+ * @Description
+ */
+@Data
+public class VoStClientAmountYearRecord {
+    /**
+     * 澶栭敭锛屾寚鍚戝啘鎴�
+     */
+    public Long clientId;
+
+    /**
+     * 鍐滄埛缂栧勾
+     */
+    public String clientNum ;
+
+    /**
+     * 鍐滄埛鍚嶇О
+     */
+    public String clientName ;
+
+    /**
+     * 鍐滄埛鍦板潃
+     */
+    public String clientAddress ;
+
+    /**
+     * 1骞寸敤姘撮噺缁熻
+     */
+    public Double amount;
+
+    /**
+     * 1骞磋姳璐归噾棰�
+     */
+    public Double money;
+
+    /**
+     * 1骞寸敤姘存鏁�
+     */
+    public Integer times;
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYearRecords.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYearRecords.java
new file mode 100644
index 0000000..53a48da
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYearRecords.java
@@ -0,0 +1,201 @@
+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: liurunyu
+ * @Date: 2025/1/4 10:15
+ * @Description
+ */
+@Data
+@JsonPropertyOrder({ "id", "clientId", "clientNum", "clientName", "clientAddress"
+        ,"amount1" , "money1" , "times1" 
+        ,"amount2" , "money2" , "times2"
+        ,"amount3" , "money3" , "times3"
+        ,"amount4" , "money4" , "times4"
+        ,"amount5" , "money5" , "times5"
+        ,"amount6" , "money6" , "times6"
+        ,"amount7" , "money7" , "times7"
+        ,"amount8" , "money8" , "times8"
+        ,"amount9" , "money9" , "times9"
+        ,"amount10" , "money10" , "times10"
+})
+public class VoStClientAmountYearRecords {
+
+    public static final long serialVersionUID = 202501041106001L;
+
+    /**
+     * 澶栭敭锛屾寚鍚戝啘鎴�
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long clientId;
+
+    /**
+     * 鍐滄埛缂栧勾
+     */
+    public String clientNum ;
+
+    /**
+     * 鍐滄埛鍚嶇О
+     */
+    public String clientName ;
+
+    /**
+     * 鍐滄埛鍦板潃
+     */
+    public String clientAddress ;
+
+    /**
+     * 1骞寸敤姘撮噺缁熻
+     */
+    public Double amount1;
+
+    /**
+     * 1骞磋姳璐归噾棰�
+     */
+    public Double money1;
+
+    /**
+     * 1骞寸敤姘存鏁�
+     */
+    public Integer times1;
+
+    /**
+     * 2骞寸敤姘撮噺缁熻
+     */
+    public Double amount2;
+
+    /**
+     * 2骞磋姳璐归噾棰�
+     */
+    public Double money2;
+
+    /**
+     * 2骞寸敤姘存鏁�
+     */
+    public Integer times2;
+
+    /**
+     * 3骞寸敤姘撮噺缁熻
+     */
+    public Double amount3;
+
+    /**
+     * 3骞磋姳璐归噾棰�
+     */
+    public Double money3;
+
+    /**
+     * 3骞寸敤姘存鏁�
+     */
+    public Integer times3;
+
+    /**
+     * 4骞寸敤姘撮噺缁熻
+     */
+    public Double amount4;
+
+    /**
+     * 4骞磋姳璐归噾棰�
+     */
+    public Double money4;
+
+    /**
+     * 4骞寸敤姘存鏁�
+     */
+    public Integer times4;
+
+    /**
+     * 5骞寸敤姘撮噺缁熻
+     */
+    public Double amount5;
+
+    /**
+     * 5骞磋姳璐归噾棰�
+     */
+    public Double money5;
+
+    /**
+     * 5骞寸敤姘存鏁�
+     */
+    public Integer times5;
+
+    /**
+     * 6骞寸敤姘撮噺缁熻
+     */
+    public Double amount6;
+
+    /**
+     * 6骞磋姳璐归噾棰�
+     */
+    public Double money6;
+
+    /**
+     * 6骞寸敤姘存鏁�
+     */
+    public Integer times6;
+
+    /**
+     * 7骞寸敤姘撮噺缁熻
+     */
+    public Double amount7;
+
+    /**
+     * 7骞磋姳璐归噾棰�
+     */
+    public Double money7;
+
+    /**
+     * 7骞寸敤姘存鏁�
+     */
+    public Integer times7;
+
+    /**
+     * 8骞寸敤姘撮噺缁熻
+     */
+    public Double amount8;
+
+    /**
+     * 8骞磋姳璐归噾棰�
+     */
+    public Double money8;
+
+    /**
+     * 8骞寸敤姘存鏁�
+     */
+    public Integer times8;
+
+    /**
+     * 9骞寸敤姘撮噺缁熻
+     */
+    public Double amount9;
+
+    /**
+     * 9骞磋姳璐归噾棰�
+     */
+    public Double money9;
+
+    /**
+     * 9骞寸敤姘存鏁�
+     */
+    public Integer times9;
+
+    /**
+     * 10骞寸敤姘撮噺缁熻
+     */
+    public Double amount10;
+
+    /**
+     * 10骞磋姳璐归噾棰�
+     */
+    public Double money10;
+
+    /**
+     * 10骞寸敤姘存鏁�
+     */
+    public Integer times10;
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountDayMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountDayMapper.xml
index 4bd6635..a6fa3e8 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountDayMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountDayMapper.xml
@@ -117,7 +117,6 @@
     times30, amount31, money31, times31
   </sql>
   <sql id="Base_Column_List_with_alias">
-    <!--@mbg.generated-->
     ${alias}.id, ${alias}.client_id, ${alias}.`year`, ${alias}.`month`, ${alias}.amount1, ${alias}.money1, ${alias}.times1, ${alias}.amount2, ${alias}.money2, ${alias}.times2,
     ${alias}.amount3, ${alias}.money3, ${alias}.times3, ${alias}.amount4, ${alias}.money4, ${alias}.times4, ${alias}.amount5, ${alias}.money5, ${alias}.times5, ${alias}.amount6,
     ${alias}.money6, ${alias}.times6, ${alias}.amount7, ${alias}.money7, ${alias}.times7, ${alias}.amount8, ${alias}.money8, ${alias}.times8, ${alias}.amount9, ${alias}.money9,
@@ -1207,24 +1206,27 @@
     select
     count(*)
     from se_client mtb
-    <where>
+    where mtb.deleted != 0
+    <trim prefix="and" suffixOverrides="and">
       <if test="name != null and name != ''">
         mtb.name like concat('%', #{name}, '%')
       </if>
-    </where>
+    </trim>
   </select>
 
   <select id="selectDayStatistics" resultType="com.dy.pipIrrGlobal.voSt.VoStClientAmountDay">
     select
+    mtb.id as clientId,
     mtb.clientNum as clientNum,
-    mtb.phone as clientPhone,
+    mtb.name as clientName,
     mtb.address as clientAddress,
     <include refid="Base_Column_List_with_alias" >
       <property name="alias" value="stTb"/>
     </include>
     from se_client mtb
     LEFT JOIN st_client_amount_day stTb on stTb.client_id = mtb.id
-    <where>
+    where mtb.deleted != 0
+    <trim prefix="and" suffixOverrides="and">
       <if test = "year != null">
         stTb.year = #{year, jdbcType=INTEGER}
       </if>
@@ -1234,8 +1236,8 @@
       <if test="name != null and name != ''">
         AND mtb.name like concat('%', #{name}, '%')
       </if>
-    </where>
-    order by mtb.id ASC
+    </trim>
+    order by mtb.id DESC
     <trim prefix="limit " >
       <if test="start != null and count != null">
         #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountMonthMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountMonthMapper.xml
index 559fde2..d43e655 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountMonthMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountMonthMapper.xml
@@ -51,6 +51,18 @@
     times6, amount7, money7, times7, amount8, money8, times8, amount9, money9, times9, 
     amount10, money10, times10, amount11, money11, times11, amount12, money12, times12
   </sql>
+  <sql id="Base_Column_List_with_alias">
+    <!--@mbg.generated-->
+    ${alias}.id, ${alias}.client_id, ${alias}.`year`,
+    ${alias}.amount1, ${alias}.money1, ${alias}.times1, ${alias}.amount2, ${alias}.money2, ${alias}.times2,
+    ${alias}.amount3, ${alias}.money3, ${alias}.times3, ${alias}.amount4, ${alias}.money4, ${alias}.times4,
+    ${alias}.amount5, ${alias}.money5, ${alias}.times5, ${alias}.amount6, ${alias}.money6, ${alias}.times6,
+    ${alias}.amount7, ${alias}.money7, ${alias}.times7, ${alias}.amount8, ${alias}.money8, ${alias}.times8,
+    ${alias}.amount9, ${alias}.money9, ${alias}.times9, ${alias}.amount10, ${alias}.money10, ${alias}.times10,
+    ${alias}.amount11, ${alias}.money11, ${alias}.times11, ${alias}.amount12, ${alias}.money12, ${alias}.times12
+  </sql>
+
+
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
     select 
@@ -501,6 +513,52 @@
     where id = #{id,jdbcType=BIGINT}
   </update>
 
+  <!-- ////////////////////////////////// -->
+  <!-- 鏌ヨ缁熻缁撴灉                         -->
+  <!-- ////////////////////////////////// -->
+  <select id="selectCountMonthStatistics" resultType="java.lang.Long">
+    select
+    count(*)
+    from se_client mtb
+    where mtb.deleted != 0
+    <trim prefix="and" suffixOverrides="and">
+      <if test="name != null and name != ''">
+        mtb.name like concat('%', #{name}, '%')
+      </if>
+    </trim>
+  </select>
+
+  <select id="selectMonthStatistics" resultType="com.dy.pipIrrGlobal.voSt.VoStClientAmountMonth">
+    select
+    mtb.clientNum as clientNum,
+    mtb.phone as clientPhone,
+    mtb.address as clientAddress,
+    <include refid="Base_Column_List_with_alias" >
+      <property name="alias" value="stTb"/>
+    </include>
+    from se_client mtb
+    LEFT JOIN st_client_amount_month stTb on stTb.client_id = mtb.id
+    where mtb.deleted != 0
+    <trim prefix="and" suffixOverrides="and">
+      <if test = "year != null">
+        stTb.year = #{year, jdbcType=INTEGER}
+      </if>
+      <if test="name != null and name != ''">
+        AND mtb.name like concat('%', #{name}, '%')
+      </if>
+    </trim>
+    order by mtb.id DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+
+
+  <!-- ////////////////////////////////// -->
+  <!-- 缁熻鐩稿叧                         -->
+  <!-- ////////////////////////////////// -->
   <select id="selectByYear" resultMap="BaseResultMap">
     select
     <include refid="Base_Column_List" />
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountYearMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountYearMapper.xml
index 2027ccd..ad80752 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountYearMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountYearMapper.xml
@@ -111,6 +111,48 @@
     where id = #{id,jdbcType=BIGINT}
   </update>
 
+  <!-- ////////////////////////////////// -->
+  <!-- 鏌ヨ缁熻缁撴灉                         -->
+  <!-- ////////////////////////////////// -->
+  <select id="selectCountYearStatistics" resultType="java.lang.Long">
+    select
+    count(*)
+    from se_client mtb
+    where mtb.deleted != 0
+    <trim prefix="and" suffixOverrides="and">
+      <if test="name != null and name != ''">
+        mtb.name like concat('%', #{name}, '%')
+      </if>
+    </trim>
+  </select>
+
+  <select id="selectYearStatistics" resultType="com.dy.pipIrrGlobal.voSt.VoStClientAmountYearRecord">
+    select
+    ctb.id as clientId,
+    ctb.clientNum as clientNum,
+    ctb.name as clientName,
+    ctb.address as clientAddress,
+    cayTb.amount as amount,
+    cayTb.money as money,
+    cayTb.times as times
+    from se_client ctb
+    LEFT JOIN st_client_amount_year cayTb on cayTb.client_id = ctb.id
+    where ctb.deleted != 0
+    <trim prefix="and" suffixOverrides="and">
+      <if test="year != null">
+        cayTb.`year` = #{year,jdbcType=INTEGER}
+      </if>
+      <if test="name != null and name != ''">
+        and ctb.name like concat('%', #{name}, '%')
+      </if>
+    </trim>
+    order by ctb.id DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
 
   <!-- ////////////////////////////////// -->
   <!-- 缁熻鐩稿叧                         -->
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientCtrl.java
index e1fab95..e33506e 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientCtrl.java
@@ -6,6 +6,8 @@
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.voSt.VoStClientAmountDay;
+import com.dy.pipIrrGlobal.voSt.VoStClientAmountMonth;
+import com.dy.pipIrrGlobal.voSt.VoStClientAmountYear;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,6 +15,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -25,6 +28,8 @@
 @RequestMapping(path="stClient")
 @RequiredArgsConstructor
 public class StClientCtrl {
+
+    private static final int startYear4YearStatistics = 2024 ;
 
     private StClientSv sv ;
 
@@ -50,4 +55,47 @@
         qo.month = ymd[1] ;
         return BaseResponseUtils.buildSuccess(this.sv.selectStClientAmountDay(qo));
     }
+
+
+    /**
+     * 鏌ヨ鎸囧畾骞村啘鎴峰悇鏈堢敤姘撮噺
+     * @param qo
+     * @return
+     */
+    @GetMapping(path = "/amountOfMonth")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoStClientAmountMonth>>> amountOfMonth(StClientQo qo) throws Exception {
+        if(qo.year == null) {
+            return BaseResponseUtils.buildErrorMsg("鏌ヨ鏉′欢骞村害涓嶈兘涓虹┖");
+        }
+        return BaseResponseUtils.buildSuccess(this.sv.selectStClientAmountMonth(qo));
+    }
+
+
+
+    /**
+     * 鏌ヨ鎸囧畾骞村啘鎴峰悇骞寸敤姘撮噺
+     * @param qo
+     * @return
+     */
+    @GetMapping(path = "/amountOfYear")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoStClientAmountYear>>> amountOfYear(StClientQo qo) throws Exception {
+        List<Integer> yearGrp = new ArrayList<Integer>();
+        int nowYear = Integer.parseInt(DateTime.yyyy()) ;
+        if(qo.year == null) {
+            for(int i = startYear4YearStatistics; i <= nowYear; i++) {
+                yearGrp.add(i) ;
+            }
+        }else{
+            if(qo.year > nowYear){
+                qo.year = nowYear;
+            }
+            if(qo.year < startYear4YearStatistics){
+                qo.year = startYear4YearStatistics;
+            }
+            yearGrp.add(qo.year) ;
+        }
+        return BaseResponseUtils.buildSuccess(this.sv.selectStClientAmountYear(qo, yearGrp));
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientSv.java
index 7cd7cfe..d1c9168 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientSv.java
@@ -4,13 +4,14 @@
 import com.dy.pipIrrGlobal.daoSt.StClientAmountDayMapper ;
 import com.dy.pipIrrGlobal.daoSt.StClientAmountMonthMapper ;
 import com.dy.pipIrrGlobal.daoSt.StClientAmountYearMapper ;
-import com.dy.pipIrrGlobal.voSt.VoStClientAmountDay;
+import com.dy.pipIrrGlobal.voSt.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.text.ParseException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -41,7 +42,12 @@
     }
 
 
-    public QueryResultVo<List<VoStClientAmountDay>> selectStClientAmountDay(StClientQo qo) throws ParseException {
+    /**
+     * 鏌ヨ鍐滄埛鐢ㄦ按鏃ョ粺璁�
+     * @param qo
+     * @return
+     */
+    public QueryResultVo<List<VoStClientAmountDay>> selectStClientAmountDay(StClientQo qo) {
         QueryResultVo<List<VoStClientAmountDay>> rsVo = new QueryResultVo<>() ;
         // 鐢熸垚鏌ヨ鍙傛暟
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
@@ -57,4 +63,169 @@
         }
         return rsVo ;
     }
+
+
+    /**
+     * 鏌ヨ鍐滄埛鐢ㄦ按鏈堢粺璁�
+     * @param qo
+     * @return
+     */
+    public QueryResultVo<List<VoStClientAmountMonth>> selectStClientAmountMonth(StClientQo qo)  {
+        QueryResultVo<List<VoStClientAmountMonth>> rsVo = new QueryResultVo<>() ;
+        // 鐢熸垚鏌ヨ鍙傛暟
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
+        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
+        Long itemTotal = stClientAmountMonthDao.selectCountMonthStatistics(params) ;
+
+        if(itemTotal != null && itemTotal > 0) {
+            rsVo.pageSize = qo.pageSize;
+            rsVo.pageCurr = qo.pageCurr;
+            rsVo.calculateAndSet(itemTotal, params);
+
+            rsVo.obj = stClientAmountMonthDao.selectMonthStatistics(params);
+        }
+        return rsVo ;
+    }
+
+
+    /**
+     * 鏌ヨ鍐滄埛鐢ㄦ按骞寸粺璁�
+     * @param qo
+     * @return
+     */
+    public QueryResultVo<List<VoStClientAmountYearRecords>> selectStClientAmountYear(StClientQo qo, List<Integer> yearGrp) throws ParseException {
+        QueryResultVo<List<VoStClientAmountYearRecords>> rsVo = new QueryResultVo<>() ;
+        // 鐢熸垚鏌ヨ鍙傛暟
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
+        params.put("yearGrp", yearGrp);
+        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
+        Long itemTotal = stClientAmountYearDao.selectCountYearStatistics(params) ;
+
+        if(itemTotal != null && itemTotal > 0) {
+            rsVo.pageSize = qo.pageSize;
+            rsVo.pageCurr = qo.pageCurr;
+            rsVo.calculateAndSet(itemTotal, params);
+
+            List<VoStClientAmountYearRecords> group = new ArrayList<>();
+            int count = 1 ;
+            for(int year: yearGrp){
+                params.put("year", year);
+                List<VoStClientAmountYearRecord> list = stClientAmountYearDao.selectYearStatistics(params);
+                if(group.isEmpty()){
+                    this.completion(group, list);
+                }
+                this.merge(count, group, list) ;
+                count += 1 ;
+            }
+            rsVo.obj = group ;
+        }
+        return rsVo ;
+    }
+
+    /**
+     * 琛ュ叏锛� 闆嗗悎涓病鏈夊氨鐢熸垚涓�涓�
+     * @param group
+     * @param list
+     */
+    private void completion(List<VoStClientAmountYearRecords> group, List<VoStClientAmountYearRecord> list){
+        boolean found ;
+        for (VoStClientAmountYearRecord voInList : list) {
+            found = false ;
+            for(VoStClientAmountYearRecords voInGrp : group) {
+                if(voInList.clientId.longValue() == voInGrp.clientId.longValue()) {
+                    found = true ;
+                }
+            }
+            if(!found) {
+                VoStClientAmountYearRecords vo4s = new VoStClientAmountYearRecords();
+                vo4s.clientId = voInList.clientId;
+                vo4s.clientNum = voInList.clientNum;
+                vo4s.clientName = voInList.clientName;
+                vo4s.clientAddress = voInList.clientAddress;
+                group.add(vo4s) ;
+            }
+        }
+    }
+
+    /**
+     * 鍚堝苟锛� 闆嗗悎涓湁灏卞悎骞�
+     * @param count
+     * @param group
+     * @param list
+     */
+    private void merge(int count, List<VoStClientAmountYearRecords> group, List<VoStClientAmountYearRecord> list){
+        for (VoStClientAmountYearRecord voInList : list) {
+            VoStClientAmountYearRecords voInGrp_ = null ;
+            for(VoStClientAmountYearRecords voInGrp : group) {
+                if(voInList.clientId.longValue() == voInGrp.clientId.longValue()) {
+                    voInGrp_ = voInGrp ;
+                    break ;
+                }
+            }
+            if(voInGrp_ != null){
+                this.merge(count, voInGrp_, voInList);
+            }
+        }
+    }
+
+    /**
+     * 鍚堝苟鍊�
+     * @param count
+     * @param vo4s
+     * @param vo
+     */
+    private void merge(int count, VoStClientAmountYearRecords vo4s, VoStClientAmountYearRecord vo){
+        switch (count){
+            case 1:
+                vo4s.amount1 = vo.amount;
+                vo4s.money1 = vo.money;
+                vo4s.times1 = vo.times;
+                break;
+            case 2:
+                vo4s.amount2 = vo.amount;
+                vo4s.money2 = vo.money;
+                vo4s.times2 = vo.times;
+                break;
+            case 3:
+                vo4s.amount3 = vo.amount;
+                vo4s.money3 = vo.money;
+                vo4s.times3 = vo.times;
+                break;
+            case 4:
+                vo4s.amount4 = vo.amount;
+                vo4s.money4 = vo.money;
+                vo4s.times4 = vo.times;
+                break;
+            case 5:
+                vo4s.amount5 = vo.amount;
+                vo4s.money5 = vo.money;
+                vo4s.times5 = vo.times;
+                break;
+            case 6:
+                vo4s.amount6 = vo.amount;
+                vo4s.money6 = vo.money;
+                vo4s.times6 = vo.times;
+                break;
+            case 7:
+                vo4s.amount7 = vo.amount;
+                vo4s.money7 = vo.money;
+                vo4s.times7 = vo.times;
+                break;
+            case 8:
+                vo4s.amount8 = vo.amount;
+                vo4s.money8 = vo.money;
+                vo4s.times8 = vo.times;
+                break;
+            case 9:
+                vo4s.amount9 = vo.amount;
+                vo4s.money9 = vo.money;
+                vo4s.times9 = vo.times;
+                break;
+            case 10:
+                vo4s.amount10 = vo.amount;
+                vo4s.money10 = vo.money;
+                vo4s.times10 = vo.times;
+                break;
+        }
+    }
 }

--
Gitblit v1.8.0