From db8bd443faa40789e3b82a75ccebeb744d55a5ae Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期四, 12 十二月 2024 11:45:59 +0800
Subject: [PATCH] 漏损日统计实现

---
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/MonitorSv.java     |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossQo.java   |   49 ++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmLossDayMapper.java                |   26 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoDayLoss.java                       |   79 +++--
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmLossDayMapper.xml                               |  386 ++++++++++++++++++++++++++++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossCtrl.java |   63 +++++
 pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossSv.java   |   59 ++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/DateTime.java                              |   11 
 8 files changed, 639 insertions(+), 36 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/DateTime.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/DateTime.java
index 9a33cc5..76f4ac2 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/DateTime.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/DateTime.java
@@ -501,6 +501,17 @@
 	//////////////////////////////////////////////////////////////////////////
 
 	/**
+	 * 瀛楃涓插瀷鏃ユ湡(2024-12)杞垚骞存湀鏃ユ暟缁�
+	 * @param yyyy_MM 骞存湀鏃�
+	 * @return 骞存湀鏃ユ暟缁�
+	 */
+	public static int[] yyyy_MM_ymdGroup(String yyyy_MM){
+		int y = Integer.parseInt(yyyy_MM.substring(0 , 4)) ;
+		int m = Integer.parseInt(yyyy_MM.substring(5 , 7)) ;
+		return new int[]{y,m} ;
+	}
+
+	/**
 	 * 瀛楃涓插瀷鏃ユ湡(2009-09-10)杞垚骞存湀鏃ユ暟缁�
 	 * @param yyyy_MM_DD 骞存湀鏃�
 	 * @return 骞存湀鏃ユ暟缁�
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmLossDayMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmLossDayMapper.java
index 7647fa9..73c29dc 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmLossDayMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmLossDayMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoRm.RmLossDay;
 import com.dy.pipIrrGlobal.voRm.VoLossDay;
+import com.dy.pipIrrGlobal.voSt.VoDayLoss;
 import com.dy.pipIrrGlobal.voSt.VoIntakeLossStatistics;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -97,4 +98,29 @@
      * @return
      */
     List<VoIntakeLossStatistics> statisticsByIntake(@Param("startId")Long statisticsStartId, @Param("endId")Long statisticsEndId) ;
+
+    ////////////////////////////////////////////////
+    // 缁熻鏌ヨ
+    ///////////////////////////////////////////////
+
+    /**
+     * 涓烘煡璇㈢粺璁″彇姘村彛鏃ユ紡鎹熼噺锛岀粺璁″彇姘村彛鏁伴噺
+     * @param intakeN
+     * @return
+     */
+    Long selectIntakeCount4LossDay(@Param("intakeNum")String intakeN) ;
+
+    /**
+     * 涓烘煡璇㈢粺璁″彇姘村彛鏃ユ紡鎹熼噺锛屾煡璇竴椤靛彇姘村彛ID
+     * @param params
+     * @return
+     */
+    List<VoDayLoss> selectIntakes4LossDay(Map<?, ?> params) ;
+
+    /**
+     * 鏌ヨ缁熻鍙栨按鍙f棩婕忔崯閲忥紝缁熻鍙栨按鍙f暟閲�
+     * @param params
+     * @return
+     */
+    List<VoDayLoss> selectLossAmountOfDay(Map<?, ?> params);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoDayLoss.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoDayLoss.java
index bd2baa3..fc0985f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoDayLoss.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoDayLoss.java
@@ -14,81 +14,90 @@
  */
 
 @Data
-@JsonPropertyOrder({ "intakeId", "intakeNum", "lossAmount1" , "lossAmount2" , "lossAmount3" , "lossAmount4" , "lossAmount5" , "lossAmount6" , "lossAmount7" , "lossAmount8" , "lossAmount9" , "lossAmount10" , "lossAmount11" , "lossAmount12" , "lossAmount13" , "lossAmount14" , "lossAmount15" , "lossAmount16" , "lossAmount17" , "lossAmount18" , "lossAmount19" , "lossAmount20" , "lossAmount21" , "lossAmount22" , "lossAmount23" , "lossAmount24" , "lossAmount25" , "lossAmount26" , "lossAmount27" , "lossAmount28" , "lossAmount29" , "lossAmount30" , "lossAmount31" })
+@JsonPropertyOrder({ "intakeId", "intakeNum", "intakeLng", "intakeLat", "lossAmount1" , "lossAmount2" , "lossAmount3" , "lossAmount4" , "lossAmount5" , "lossAmount6" , "lossAmount7" , "lossAmount8" , "lossAmount9" , "lossAmount10" , "lossAmount11" , "lossAmount12" , "lossAmount13" , "lossAmount14" , "lossAmount15" , "lossAmount16" , "lossAmount17" , "lossAmount18" , "lossAmount19" , "lossAmount20" , "lossAmount21" , "lossAmount22" , "lossAmount23" , "lossAmount24" , "lossAmount25" , "lossAmount26" , "lossAmount27" , "lossAmount28" , "lossAmount29" , "lossAmount30" , "lossAmount31" })
 public class VoDayLoss {
-    private static final long serialVersionUID = 202408081523001L;
+    public static final long serialVersionUID = 202408081523001L;
 
     /**
      * 鍙栨按鍙D
      */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
-    private Long intakeId;
+    public Long intakeId;
 
     /**
      * 鍙栨按鍙g紪鍙�
      */
-    private String intakeNum;
+    public String intakeNum;
+
+    /**
+     * 缁忓害
+     */
+    public Double intakeLng;
+    /**
+     * 绾害
+     */
+    public Double intakeLat;
 
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount1;
+    public Double lossAmount1;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount2;
+    public Double lossAmount2;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount3;
+    public Double lossAmount3;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount4;
+    public Double lossAmount4;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount5;
+    public Double lossAmount5;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount6;
+    public Double lossAmount6;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount7;
+    public Double lossAmount7;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount8;
+    public Double lossAmount8;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount9;
+    public Double lossAmount9;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount10;
+    public Double lossAmount10;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount11;
+    public Double lossAmount11;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount12;
+    public Double lossAmount12;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount13;
+    public Double lossAmount13;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount14;
+    public Double lossAmount14;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount15;
+    public Double lossAmount15;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount16;
+    public Double lossAmount16;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount17;
+    public Double lossAmount17;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount18;
+    public Double lossAmount18;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount19;
+    public Double lossAmount19;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount20;
+    public Double lossAmount20;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount21;
+    public Double lossAmount21;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount22;
+    public Double lossAmount22;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount23;
+    public Double lossAmount23;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount24;
+    public Double lossAmount24;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount25;
+    public Double lossAmount25;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount26;
+    public Double lossAmount26;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount27;
+    public Double lossAmount27;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount28;
+    public Double lossAmount28;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount29;
+    public Double lossAmount29;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount30;
+    public Double lossAmount30;
     @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
-    private Double lossAmount31;
+    public Double lossAmount31;
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmLossDayMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmLossDayMapper.xml
index c295ea9..7734065 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmLossDayMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmLossDayMapper.xml
@@ -216,4 +216,390 @@
     where id <![CDATA[>=]]> #{startId, jdbcType=BIGINT} and id <![CDATA[<]]> #{endId, jdbcType=BIGINT}
     group by intake_id
   </select>
+
+  <!-- 涓烘煡璇㈢粺璁″彇姘村彛鏃ユ紡鎹熼噺锛岀粺璁″彇姘村彛鏁伴噺 -->
+  <select id="selectIntakeCount4LossDay" resultType="java.lang.Long">
+    SELECT COUNT(*)
+    FROM pr_intake tb
+    <where>
+      AND tb.deleted != 1
+      <if test="intakeNum != null and intakeNum != ''">
+        AND tb.name = #{intakeNum}
+      </if>
+    </where>
+  </select>
+
+  <!-- 涓烘煡璇㈢粺璁″彇姘村彛鏃ユ紡鎹熼噺锛屾煡璇竴椤靛彇姘村彛ID -->
+  <select id="selectIntakes4LossDay" resultType="com.dy.pipIrrGlobal.voSt.VoDayLoss">
+    SELECT id    as intakeId,
+           name  as intakeNum,
+           lat   as intakeLat,
+           lng   as intakeLng
+    FROM pr_intake
+    <where>
+      AND deleted != 1
+      <if test="intakeNum != null and intakeNum != ''">
+        AND name = #{intakeNum}
+      </if>
+    </where>
+    order by 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>
+
+
+  <!--缁熻鎸囧畾鏈堜唤鍚勫ぉ婕忔崯閲�  鏆傛椂鏈敤 鍒樻鼎鐜� 2024-12-12-->
+  <select id="temp" resultType="com.dy.pipIrrGlobal.voSt.VoDayLoss">
+    SELECT inta.intakeId     AS intakeId,
+           inta.intakeNum    AS intakeNum,
+           inta.intakeLng    AS intakeLng,
+           inta.intakeLat    AS intakeLat,
+           rld.id            AS id,
+           rld.dt            AS dt,
+           rld.loss_amount   AS lossAmount1
+      FROM JSON_TABLE(
+        #{intakesJson},
+        '$[*]' COLUMNS (
+            intakeId BIGINT PATH '$.intakeId',
+            intakeNum VARCHAR(100) PATH '$.intakeNum',
+            intakeLng DOUBLE PATH '$.intakeLng',
+            intakeLat DOUBLE PATH '$.intakeLat'
+        )
+      ) inta
+      LEFT JOIN
+      (
+        select id, intake_id, dt, loss_amount
+        from rm_loss_day
+        <where>
+          <if test="startDt != null ">
+            AND dt <![CDATA[>=]]> #{startDt, jdbcType=DATE, jdbcType=DATE}
+          </if>
+          <if test="endDt != null ">
+            AND dt <![CDATA[<]]> #{endDt, jdbcType=DATE, jdbcType=DATE}
+          </if>
+        </where>
+        order by intake_id DESC, id ASC
+      ) as rld ON rld.intake_id = inta.intakeId
+  </select>
+
+
+  <!--缁熻鎸囧畾鏈堜唤鍚勫ぉ婕忔崯閲�-->
+  <select id="selectLossAmountOfDay" resultType="com.dy.pipIrrGlobal.voSt.VoDayLoss">
+    WITH intakeLossAmountDay AS (
+      SELECT intaId.intakeId   AS intakeId,
+             rld.dt            AS dt,
+             rld.loss_amount   AS lossAmount
+      FROM JSON_TABLE(
+        #{intakesJson},
+        '$[*]' COLUMNS (
+          intakeId BIGINT PATH '$.intakeId'
+        )
+      ) intaId
+      INNER JOIN rm_loss_day rld ON rld.intake_id = intaId.intakeId
+      <where>
+        <if test="startDt != null ">
+          AND rld.dt <![CDATA[>=]]> #{startDt, jdbcType=DATE, jdbcType=DATE}
+        </if>
+        <if test="endDt != null ">
+          AND rld.dt <![CDATA[<=]]> #{endDt, jdbcType=DATE, jdbcType=DATE}
+        </if>
+      </where>
+    )
+
+    SELECT inta.intakeId     AS intakeId,
+           inta.intakeNum    AS intakeNum,
+           inta.intakeLng    AS intakeLng,
+           inta.intakeLat    AS intakeLat,
+           tb01.lossAmount   AS lossAmount1,
+           tb02.lossAmount   AS lossAmount2,
+           tb03.lossAmount   AS lossAmount3,
+           tb04.lossAmount   AS lossAmount4,
+           tb05.lossAmount   AS lossAmount5,
+           tb06.lossAmount   AS lossAmount6,
+           tb07.lossAmount   AS lossAmount7,
+           tb08.lossAmount   AS lossAmount8,
+           tb09.lossAmount   AS lossAmount9,
+           tb10.lossAmount   AS lossAmount10,
+           tb11.lossAmount   AS lossAmount11,
+           tb12.lossAmount   AS lossAmount12,
+           tb13.lossAmount   AS lossAmount13,
+           tb14.lossAmount   AS lossAmount14,
+           tb15.lossAmount   AS lossAmount15,
+           tb16.lossAmount   AS lossAmount16,
+           tb17.lossAmount   AS lossAmount17,
+           tb18.lossAmount   AS lossAmount18,
+           tb19.lossAmount   AS lossAmount19,
+           tb20.lossAmount   AS lossAmount20,
+           tb21.lossAmount   AS lossAmount21,
+           tb22.lossAmount   AS lossAmount22,
+           tb23.lossAmount   AS lossAmount23,
+           tb24.lossAmount   AS lossAmount24,
+           tb25.lossAmount   AS lossAmount25,
+           tb26.lossAmount   AS lossAmount26,
+           tb27.lossAmount   AS lossAmount27,
+           tb28.lossAmount   AS lossAmount28,
+           tb29.lossAmount   AS lossAmount29,
+           tb30.lossAmount   AS lossAmount30,
+           tb31.lossAmount   AS lossAmount31
+    FROM JSON_TABLE(
+      #{intakesJson},
+      '$[*]' COLUMNS (
+        intakeId BIGINT PATH '$.intakeId',
+        intakeNum VARCHAR(100) PATH '$.intakeNum',
+        intakeLng DOUBLE PATH '$.intakeLng',
+        intakeLat DOUBLE PATH '$.intakeLat'
+      )
+    ) inta
+    LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+              AND MONTH(tb.dt) = #{month}
+              AND DAY(tb.dt) = 1
+    ) as tb01 on tb01.intakeId = inta.intakeId
+    LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 2
+    ) as tb02 on tb02.intakeId = inta.intakeId
+    LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 3
+    ) as tb03 on tb03.intakeId = inta.intakeId
+    LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 4
+    ) as tb04 on tb04.intakeId = inta.intakeId
+    LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 5
+    ) as tb05 on tb05.intakeId = inta.intakeId
+    LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 6
+    ) as tb06 on tb06.intakeId = inta.intakeId
+    LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 7
+    ) as tb07 on tb07.intakeId = inta.intakeId
+    LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 8
+    ) as tb08 on tb08.intakeId = inta.intakeId
+    LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 9
+    ) as tb09 on tb09.intakeId = inta.intakeId
+    LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 10
+    ) as tb10 on tb10.intakeId = inta.intakeId
+    LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 11
+    ) as tb11 on tb11.intakeId = inta.intakeId
+    LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 12
+    ) as tb12 on tb12.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 13
+    ) as tb13 on tb13.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 14
+    ) as tb14 on tb14.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 15
+    ) as tb15 on tb15.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 16
+    ) as tb16 on tb16.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 17
+    ) as tb17 on tb17.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 18
+    ) as tb18 on tb18.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 19
+    ) as tb19 on tb19.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 20
+    ) as tb20 on tb20.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 21
+    ) as tb21 on tb21.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 22
+    ) as tb22 on tb22.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 23
+    ) as tb23 on tb23.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 24
+    ) as tb24 on tb24.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 25
+    ) as tb25 on tb25.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 26
+    ) as tb26 on tb26.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 27
+    ) as tb27 on tb27.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 28
+    ) as tb28 on tb28.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 29
+    ) as tb29 on tb29.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 30
+    ) as tb30 on tb30.intakeId = inta.intakeId
+   LEFT JOIN (
+        SELECT tb.intakeId AS intakeId,
+               tb.lossAmount AS lossAmount
+        FROM intakeLossAmountDay AS tb
+        WHERE YEAR(tb.dt) = #{year}
+        AND MONTH(tb.dt) = #{month}
+        AND DAY(tb.dt) = 31
+    ) as tb31 on tb31.intakeId = inta.intakeId
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/MonitorSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/MonitorSv.java
index 442bc71..ae9cb03 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/MonitorSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/MonitorSv.java
@@ -61,7 +61,7 @@
     }
 
     /**
-     * 鏌ヨRTU鍦ㄩ�氫俊涓棿浠朵腑鐨勬敮琛岀姸鎬�
+     * 鏌ヨRTU鍦ㄩ�氫俊涓棿浠朵腑鐨勫湪绾跨姸鎬�
      * @param rtuAddr
      * @return
      */
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossCtrl.java
new file mode 100644
index 0000000..f3e7f67
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossCtrl.java
@@ -0,0 +1,63 @@
+package com.dy.pipIrrStatistics.loss;
+
+import com.dy.common.aop.SsoAop;
+import com.dy.common.util.DateTime;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.voSt.VoDayLoss;
+import com.dy.pipIrrStatistics.intake.IntakeSv;
+import com.dy.pipIrrStatistics.intake.qo.IntakeAmountQO;
+import com.dy.pipIrrStatistics.result.StatisticlResultCode;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/12/12 8:33
+ * @Description 鏈夊叧婕忔崯鐨勭粺璁�
+ */
+@Slf4j
+@RestController
+@RequestMapping(path="loss")
+@RequiredArgsConstructor
+public class LossCtrl {
+
+    private LossSv sv;
+
+    @Autowired
+    public void setSv(LossSv sv){
+        this.sv = sv ;
+    }
+
+    /**
+     * 鏌ヨ鎸囧畾鏈堜唤鍚勬棩婕忔崯閲�
+     * @param qo
+     * @return
+     */
+    @GetMapping(path = "/lossAmountOfDay")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoDayLoss>>> lossAmountOfDay(LossQo qo) throws Exception {
+        String yearMonth = qo.getYearMonth();
+        if(yearMonth == null || yearMonth.trim().equals("")) {
+            return BaseResponseUtils.buildErrorMsg("鏌ヨ鏉′欢骞存湀涓嶈兘涓虹┖");
+        }
+        qo.startDt = DateTime.dateFrom_yyyy_MM_dd(yearMonth + "-01");
+        qo.endDt = DateTime.dateFrom_yyyy_MM_dd(yearMonth + "-31");
+
+        int[] ymd = DateTime.yyyy_MM_ymdGroup(yearMonth) ;
+        qo.year = ymd[0] ;
+        qo.month = ymd[1] ;
+
+        return BaseResponseUtils.buildSuccess(this.sv.lossAmountOfDay(qo));
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossQo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossQo.java
new file mode 100644
index 0000000..619ab8b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossQo.java
@@ -0,0 +1,49 @@
+package com.dy.pipIrrStatistics.loss;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/12/12 8:37
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class LossQo  extends QueryConditionVo {
+
+    /**
+     * 缁熻骞存湀
+     */
+    public String yearMonth;
+
+    /**
+     * 鏌ヨ寮�濮嬫棩鏈燂紙骞存湀鏃ワ級
+     */
+    public Date startDt ;
+
+    /**
+     * 鏌ヨ鎴鏃ユ湡锛堝勾鏈堟棩锛�
+     */
+    public Date endDt ;
+
+
+    /**
+     * 骞�
+     */
+    public Integer year;
+
+    /**
+     * 鏈�
+     */
+    public Integer month;
+
+    /**
+     * 鍙栨按鍙g紪鍙�
+     */
+    public String intakeNum;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossSv.java
new file mode 100644
index 0000000..e3ea07e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossSv.java
@@ -0,0 +1,59 @@
+package com.dy.pipIrrStatistics.loss;
+
+import com.alibaba.fastjson2.JSON;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoRm.RmLossDayMapper;
+import com.dy.pipIrrGlobal.voSt.VoDayLoss;
+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.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/12/12 8:33
+ * @Description
+ */
+
+@Slf4j
+@Service
+public class LossSv {
+
+    @Autowired
+    private RmLossDayMapper rmLossDayMapper ;
+
+    /**
+     * 缁熻鎸囧畾鏈堜唤鍚勫ぉ婕忔崯閲�
+     * @param qo
+     * @return
+     */
+    public QueryResultVo<List<VoDayLoss>> lossAmountOfDay(LossQo qo) throws ParseException {
+        QueryResultVo<List<VoDayLoss>> rsVo = new QueryResultVo<>() ;
+        // 鐢熸垚鏌ヨ鍙傛暟
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
+        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
+        Long itemTotal = rmLossDayMapper.selectIntakeCount4LossDay(qo.intakeNum) ;
+
+        if(itemTotal != null && itemTotal > 0){
+            rsVo.pageSize = qo.pageSize ;
+            rsVo.pageCurr = qo.pageCurr ;
+            rsVo.calculateAndSet(itemTotal, params);
+
+            List<VoDayLoss> list = rmLossDayMapper.selectIntakes4LossDay(params);
+            if(list == null || list.size() == 0){
+                rsVo.obj = list ;
+            }else{
+                String json = JSON.toJSONString(list) ;
+                params.put("intakesJson", json);
+                rsVo.obj = rmLossDayMapper.selectLossAmountOfDay(params);
+            }
+        }
+        return rsVo ;
+    }
+
+}

--
Gitblit v1.8.0