From efa933befa09b05560538bb8cab46d11b36f8e1e Mon Sep 17 00:00:00 2001
From: wuzeyu <1223318623@qq.com>
Date: 星期一, 06 一月 2025 13:48:48 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/PipIrrOperationApplication.java |    7 
 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/VoStClientAmountYear.java                       |   20 
 pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientSv.java      |  180 ++++++++
 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/resources/application-global(166web文件花生壳).yml                                 |  413 ++++++++++++++++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYearRecord.java                 |   49 ++
 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 
 13 files changed, 1,306 insertions(+), 10 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..9372175
--- /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<Integer> 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/application-global\050166web\346\226\207\344\273\266\350\212\261\347\224\237\345\243\263\051.yml" "b/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050166web\346\226\207\344\273\266\350\212\261\347\224\237\345\243\263\051.yml"
new file mode 100644
index 0000000..b0e9a6f
--- /dev/null
+++ "b/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050166web\346\226\207\344\273\266\350\212\261\347\224\237\345\243\263\051.yml"
@@ -0,0 +1,413 @@
+spring:
+    servlet:
+        multipart:
+            # 鍓嶇涓婁紶鏂囦欢锛岄檺鍒跺崟涓枃浠剁殑澶у皬鍜岄檺鍒舵墍鏈夋枃浠剁殑澶у皬
+            max-file-size: 500MB
+            max-request-size: 5000MB
+logging:
+    charset:
+        console: UTF-8
+    config:
+        classpath: log4j2.yml
+#绂佺敤鐧芥爣閿欒椤甸潰
+server:
+    error:
+        whitelabel:
+            enabled: false
+    #servlet閰嶇疆
+    servlet:
+        encoding:
+            #鍙栨秷榛樿鐨勫瓧绗﹂泦缂栫爜
+            enabled: true
+            #璁剧疆寮哄埗浣跨敤鎸囧畾瀛楃缂栫爜闆�
+            force: true
+            #浣跨敤鐨勫瓧绗︾紪鐮�
+            charset: utf-8
+# actuator閰嶇疆锛屽厛include浜嗗叏閮紝鐒跺悗鍐峞xclude鎸囧畾鐨別ndpoint
+management:
+    endpoints:
+        web:
+            exposure:
+                include: '*'
+                #exclude: beans
+        .shutdown:
+            enabled: true #鏄惁寮�鍚�/actuator/shutdown
+
+# SpringDoc-OpenApi 閰嶇疆
+springdoc:
+    swagger-ui:
+        #搴旂敤actuator鏃讹紝璁块棶: http://[IP]:[port]/actuator/swagger-ui/index.html 渚嬪http://127.0.0.1:9080/actuator/swagger-ui/index.html
+        #鏈敤actuator鏃讹紝璁块棶: http://[IP]:[port]/[context]/swagger-ui/index.html 渚嬪http://127.0.0.1:8080/[瀛愮郴缁熶笂涓嬫枃锛坆ase锛塢/swagger-ui/index.html
+        path: /swagger-ui
+        operationsSorter: method # HTTP 鏂规硶鎺掑簭
+        tagsSorter: alpha # API 鎺掑簭
+    api-docs:
+        path: /v3/apiDocs
+        groups:
+            enabled: true
+    show-actuator: true #鍦╝ctuator閰嶇疆鐨勭鍙e強涓婁笅鏂囦腑璁块棶 SpringDoc-OpenApi
+    use-management-port: true #搴旂敤actuator閰嶇疆鐨勭鍙o紝浣嗕笂闈㈢殑swagger-ui:path鍙細閲囩敤榛樿鍊約wagger-ui
+    packages-to-scan: com.dy
+    #paths-to-match: /sys/**, /demo/**, /**
+    paths-to-match:  /**
+    web:
+        title: 澶х鑺傛按绠$亴鐩戞帶绯荤粺API
+        description: 澶х鑺傛按绠$亴鐩戞帶绯荤粺鏈嶅姟绔� Restfull API
+        version: v1.0.0
+        license-name: 澶х鑺傛按鐮旂┒闄�
+
+#MybatisPlus 閰嶇疆鏃ュ織鏄剧ず鎵цSQL
+mybatis-plus:
+    #鍖归厤sql璇彞鐨勬槧灏勬枃浠剁殑浣嶇疆锛宑lasspath浠h〃鍦╮esources涓�
+    mapper-locations: classpath:mapper/*.xml
+    #浠ヤ笅涓や釜閰嶇疆鍙互鐪佺暐锛屽湪mapper鏄犲皠鏂囦欢涓厤缃�淍Mapper鈥濅篃鏄彲浠ョ殑銆�
+    #浣跨敤type-aliases-package涓寚瀹歟ntity鎵弿鍖呰矾寰勶紝璁﹎ybatis鑷姩鎵弿鑷畾涔夌殑entity
+    #type-aliases-package: com.dy.pipIrrGlobal.daoBa
+    configuration:
+        #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #鏃惰�岃緭鍑烘棩蹇楋紝鏃惰�屼笉杈撳嚭鏃ュ織
+        #log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl 涓嶅啀搴旂敤锛屾敼涓篜rintSqlInterceptor鎷︽埅鍣ㄨ緭鍑簊ql鏃ュ織锛屼笅闈rint-sql椤归厤缃�
+        print-sql: false # 杈撳嚭sql鏃ュ織寮�鍏筹紝鎺у埗PrintSqlInterceptor鎷︽埅鍣ㄦ槸鍚﹀姞杞�
+        #寮�鍚┘宄皍Name鑷姩鏄犲皠鍒皍_name
+        #2023-10-24缁忓疄楠岋紝涓嬮潰閰嶇疆true鎴杅alse锛岄兘鑳戒粠u_name鏄犲皠鍒皍Name
+        #map-underscore-to-camel-case: true
+        lazyLoadingEnabled: true # 寮�鍚欢鏃跺姞杞藉紑鍏�
+        aggressiveLazyLoading: false # 灏嗙Н鏋佸姞杞芥敼涓烘秷鏋佸姞杞斤紙鍗虫寜闇�鍔犺浇锛夛紝榛樿鍊兼槸false
+        lazy-load-trigger-methods: ""  # 闃绘尅涓嶇浉骞茬殑鎿嶄綔瑙﹀彂锛屽疄鐜版噿鍔犺浇
+        cache-enabled: true  #鎵撳紑鍏ㄥ眬缂撳瓨寮�鍏筹紙浜岀骇鐜锛夛紝榛樿鍊兼槸true
+        default-enum-type-handler: com.dy.common.mybatis.envm.EnumCodeTypeHandler
+
+pipIrr:
+    global:
+        dev: false  #鏄惁寮�鍙戦樁娈碉紝true鎴杅alse
+        dsName: ym  #寮�鍙戦樁娈碉紝璁剧疆涓存椂鐨勬暟鎹簱鍚嶇О
+    nginx:
+        webPort: 19913
+    mw:
+        webPort: 8070 #閫氫俊涓棿浠朵腑搴旂敤锛屼笉鑳藉湪web妯″潡绯荤粺涓簲鐢�
+        actutorPort: 9070 #閫氫俊涓棿浠朵腑搴旂敤锛屼笉鑳藉湪web妯″潡绯荤粺涓簲鐢�
+        idSuffix: 0
+    sso:
+        cacheMaximumSize: 10000 #鐧诲綍鐢ㄦ埛缂撳瓨鍙紦瀛樼敤鎴风殑鏈�澶у��
+        cacheDuration: 720  #缂撳瓨鐧诲綍鐢ㄦ埛鍙戝憜鏈�澶ф椂闀匡紙鍒嗛挓锛�
+        checkUrl: http://127.0.0.1:8079/sso/sso/ssoCheck
+        webPort: 8079
+        actutorPort: 9079
+        idSuffix: 1
+    base:
+        webPort: 8080
+        actutorPort: 9080
+        idSuffix: 2
+    remote:
+        webPort: 8081
+        actutorPort: 9081
+        idSuffix: 3
+    statistics:
+        webPort: 8082
+        actutorPort: 9082
+        idSuffix: 4
+    gis:
+        webPort: 8083
+        actutorPort: 9083
+        idSuffix: 5
+    demo:
+        webPort: 8000
+        actutorPort: 9000
+        idSuffix: 99
+    sell:
+        webPort: 8084
+        actutorPort: 9084
+        idSuffix: 6
+    project:
+        webPort: 8085
+        actutorPort: 9085
+        idSuffix: 7
+    irrigate:
+        webPort: 8086
+        actutorPort: 9086
+        idSuffix: 8
+    wechat:
+        webPort: 8087
+        actutorPort: 9087
+        idSuffix: 9
+    app:
+        webPort: 8088
+        actutorPort: 9088
+        idSuffix: 10
+    operation:
+        webPort: 8089
+        actutorPort: 9089
+        idSuffix: 11
+    # 2023-10-24鏂板锛岀敤浜庢墽琛屼复鏃朵换鍔★紝渚嬪鍒犻櫎鏁版嵁搴撲腑涓婁簺鍑洪敊鐨勬暟鎹�
+    temp:
+        webPort: 8099
+        actutorPort: 9099
+        idSuffix: 98
+
+    # 鍒嗗竷寮弚eb鏂囦欢绯荤粺
+    file:
+        idSuffix: 99
+    file1:
+        webPort: 8180
+        actutorPort: 9180
+    file2:
+        webPort: 8180
+        actutorPort: 9180
+    file3:
+        webPort: 8180
+        actutorPort: 9180
+    file4:
+        webPort: 8180
+        actutorPort: 9180
+    file5:
+        webPort: 8180
+        actutorPort: 9180
+    file6:
+        webPort: 8180
+        actutorPort: 9180
+    file7:
+        webPort: 8180
+        actutorPort: 9180
+    file8:
+        webPort: 8180
+        actutorPort: 9180
+    file9:
+        webPort: 8180
+        actutorPort: 9180
+    file10:
+        webPort: 8180
+        actutorPort: 9180
+    file11:
+        webPort: 8180
+        actutorPort: 9180
+    file12:
+        webPort: 8180
+        actutorPort: 9180
+
+
+#web鍒嗗竷寮忔枃浠剁郴缁�
+dy:
+    photoZipWidth: 400 #缂╃暐鍥惧昂瀵�
+    webFile:
+        fmUrl: http://127.0.0.1:${pipIrr.file1.webPort}/file # fm鐨剋eb涓婁笅鏂� URL
+        supportedFileTypes: docx,xlsx,doc,xls,pdf #鏀寔鐨勬枃妗o紙闈炲獟浣撴枃浠讹紝濡傜収鐗囥�佸綍闊炽�佸綍鍍忥級鏂囦欢绫诲瀷
+        sv1:
+            id: dyFile1
+            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
+            relativePath: webFile1
+            hashStart: 0
+            hashEnd: 5461
+            restUrl: http://127.0.0.1:${pipIrr.file1.webPort}/file #file鏄笂涓嬫枃,ip涓哄眬鍩熺綉ip鎴栨湰鍦癐P
+            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/ #nginx鏈嶅姟璺緞,瀹夎閮ㄧ讲鏃禝P鏀规垚澶栫綉IP鎴栧煙鍚�
+            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file1.webPort}/file/download/down?id=  #瀹夎閮ㄧ讲鏃禝P鏀规垚澶栫綉IP鎴栧煙鍚�
+        sv2:
+            id: dyFile2
+            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
+            relativePath: webFile2
+            hashStart: 5462
+            hashEnd: 10923
+            restUrl: http://127.0.0.1:${pipIrr.file2.webPort}/file
+            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
+            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file2.webPort}/file/download/down?id=
+        sv3:
+            id: dyFile3
+            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
+            relativePath: webFile3
+            hashStart: 10924
+            hashEnd: 16385
+            restUrl: http://127.0.0.1:${pipIrr.file3.webPort}/file
+            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
+            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file3.webPort}/file/download/down?id=
+        sv4:
+            id: dyFile4
+            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
+            relativePath: webFile4
+            hashStart: 16386
+            hashEnd: 21847
+            restUrl: http://127.0.0.1:${pipIrr.file4.webPort}/file
+            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
+            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file4.webPort}/file/download/down?id=
+        sv5:
+            id: dyFile5
+            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
+            relativePath: webFile5
+            hashStart: 21848
+            hashEnd: 27309
+            restUrl: http://127.0.0.1:${pipIrr.file5.webPort}/file
+            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
+            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file5.webPort}/file/download/down?id=
+        sv6:
+            id: dyFile6
+            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
+            relativePath: webFile6
+            hashStart: 27310
+            hashEnd: 32767
+            restUrl: http://127.0.0.1:${pipIrr.file6.webPort}/file
+            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
+            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file6.webPort}/file/download/down?id=
+        sv7:
+            id: dyFile7
+            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
+            relativePath: webFile7
+            hashStart: 32768
+            hashEnd: 38229
+            restUrl: http://127.0.0.1:${pipIrr.file7.webPort}/file
+            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
+            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file7.webPort}/file/download/down?id=
+        sv8:
+            id: dyFile8
+            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
+            relativePath: webFile8
+            hashStart: 38230
+            hashEnd: 43691
+            restUrl: http://127.0.0.1:${pipIrr.file8.webPort}/file
+            webUrl: http://no253541tf71.vicp.fun${pipIrr.nginx.webPort}/webfiles/
+            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file8.webPort}/file/download/down?id=
+        sv9:
+            id: dyFile9
+            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
+            relativePath: webFile9
+            hashStart: 43692
+            hashEnd: 49153
+            restUrl: http://127.0.0.1:${pipIrr.file9.webPort}/file
+            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
+            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file9.webPort}/file/download/down?id=
+        sv10:
+            id: dyFile10
+            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
+            relativePath: webFile10
+            hashStart: 49154
+            hashEnd: 54615
+            restUrl: http://127.0.0.1:${pipIrr.file10.webPort}/file
+            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
+            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file10.webPort}/file/download/down?id=
+        sv11:
+            id: dyFile11
+            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
+            relativePath: webFile11
+            hashStart: 54616
+            hashEnd: 60077
+            restUrl: http://127.0.0.1:${pipIrr.file11.webPort}/file
+            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
+            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file11.webPort}/file/download/down?id=
+        sv12:
+            id: dyFile12
+            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
+            relativePath: webFile12
+            hashStart: 60078
+            hashEnd: 65535
+            restUrl: http://127.0.0.1:${pipIrr.file12.webPort}/file
+            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
+            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file12.webPort}/file/download/down?id=
+
+#椤圭洰缂栧彿
+#projectCode:
+#    ym: 100
+#    sp: 101
+
+#椤圭洰閰嶇疆
+project:
+    #椤圭洰缂栫爜
+    projectNo: 10
+    #鎺у埗鍣ㄧ被鍨�
+    controllerType: 57
+    #榛樿琛屾斂鍖哄垝缂栫爜锛堝ぉ娲�-澶╂触甯�-姝︽竻鍖�-浜花宸ヤ笟鍥�-澶х鑺傛按锛�
+    divisionCode: 120114403100
+
+
+#閫氳涓棿浠剁浉鍏抽厤缃�
+#protocol: DYJS_2023,DYJS_2024
+mw:
+    #鍛戒护鍙戦�侀�氫俊涓棿浠跺湴鍧�
+    ym:
+        url: "http://127.0.0.1:8070"
+        comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send"
+    mj:
+        url: "http://127.0.0.1:8071"
+        comSendUrl: "http://127.0.0.1:8071/rtuMw/com/send"
+    mq:
+        url: "http://127.0.0.1:8100"
+        comSendUrl: "http://127.0.0.1:8100/rtuMw/com/send"
+    sp:
+        url: "http://127.0.0.1:8073"
+        comSendUrl: "http://127.0.0.1:8073/rtuMw/com/send"
+    test:
+        url: "http://127.0.0.1:8072"
+        comSendUrl: "http://127.0.0.1:8072/rtuMw/com/send"
+    #鐩戞祴鎺у埗妯″潡鍥炶皟鍦板潃
+    rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
+    #rtu杩滅▼鍗囩骇妯″潡鍥炶皟鍦板潃
+    ugCallbackUrl_rm: "http://127.0.0.1:8081/remote/rtuUpgradeStateReceiver/receive"
+    #寰俊灏忕▼搴忓洖璋冨湴鍧�
+    rtuCallbackUrl_wx: "http://127.0.0.1:8087/wx/comRes/receive"
+
+#涓嶈繘琛寀serToken杩囨护鐨刄RL锛孈ConfigurationProperties瑕佹眰tokennofilter涓墍鏈夊瓧姣嶉兘灏忓啓
+tokennofilter:
+    urls:
+        - /sso/sso
+        - /remote/comRes/receive
+        - /remote/rtuUpgradeStateReceiver/receive
+        - /wx/comRes/receive
+        - /app/captcha/get
+        - /file/file #web鍒嗗竷寮忔枃浠剁郴缁�
+        - /file/fm #web鍒嗗竷寮忔枃浠剁郴缁�
+
+#鑷姩缁熻閰嶇疆锛岃嚜鍔ㄧ粺璁″畾鏃朵换鍔′細姣忓ぉ瀹氭椂杩涜
+auto-statistics:
+    startHour: 0 #寮�濮嬪皬鏃讹紝蹇呴』鏄�0鐐规垨涔嬪悗锛屽彇鍊艰寖鍥存槸0~5锛屽惁StatisticsListener涓嚜鍔ㄨ缃垚0
+    startMinute: 5 #寮�濮嬪垎閽� 5
+
+#閽夐拤娑堟伅鎺ㄩ��
+dingtalk:
+    ym:
+        enable: true #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
+    mj:
+        enable: true #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
+    mq:
+        enable: true #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
+    sp:
+        enable: true #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
+    test:
+        enable: true #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
+
+#闃�鎺у櫒鍙傛暟
+rtu:
+    batteryVolt: 17
+    signalIntensity:
+        weak: 10
+        ordinary: 20
+#        strong: 20
+
+#铏氭嫙鍗¢厤缃弬鏁�
+vc:
+    #铏氭嫙鍗℃渶浣庝綑棰濇姤璀﹀��
+    alarmValue: 10
\ No newline at end of file
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..456ce0b 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 != 1
+    <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 != 1
+    <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..1b0a222 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 != 1
+    <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 != 1
+    <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..3a2f404 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 != 1
+    <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 != 1
+    <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-operation/src/main/java/com/dy/pipIrrOperation/PipIrrOperationApplication.java b/pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/PipIrrOperationApplication.java
index 276dfb9..cf692fa 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/PipIrrOperationApplication.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/PipIrrOperationApplication.java
@@ -18,7 +18,12 @@
                 })
         }
 )
-@MapperScan(basePackages={"com.dy.pipIrrGlobal.daoRm", "com.dy.pipIrrGlobal.daoPr", "com.dy.pipIrrGlobal.daoSe", "com.dy.pipIrrGlobal.daoBa","com.dy.pipIrrGlobal.daoOp"})
+@MapperScan(basePackages={"com.dy.pipIrrGlobal.daoRm",
+        "com.dy.pipIrrGlobal.daoPr",
+        "com.dy.pipIrrGlobal.daoSe",
+        "com.dy.pipIrrGlobal.daoBa",
+        "com.dy.pipIrrGlobal.daoOp",
+        "com.dy.pipIrrGlobal.daoFi"})
 public class PipIrrOperationApplication {
 
     public static void main(String[] args) {
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..19f7bb3 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,174 @@
         }
         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<VoStClientAmountYear> selectStClientAmountYear(StClientQo qo, List<Integer> yearGrp) throws ParseException {
+        QueryResultVo<VoStClientAmountYear> rsQrVo = new QueryResultVo<>() ;
+
+        VoStClientAmountYear rsVo = new VoStClientAmountYear();
+        rsVo.yearGrp = yearGrp ;
+        rsQrVo.obj = rsVo ;
+
+        // 鐢熸垚鏌ヨ鍙傛暟
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
+        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
+        Long itemTotal = stClientAmountYearDao.selectCountYearStatistics(params) ;
+
+        if(itemTotal != null && itemTotal > 0) {
+            rsQrVo.pageSize = qo.pageSize;
+            rsQrVo.pageCurr = qo.pageCurr;
+            rsQrVo.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.records = group ;
+        }
+
+        return rsQrVo ;
+    }
+
+    /**
+     * 琛ュ叏锛� 闆嗗悎涓病鏈夊氨鐢熸垚涓�涓�
+     * @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