liurunyu
2024-12-12 6dcef8bdb3a6d1681fadf4001c22f63f046af84b
取水口取水月,年统计查询重新实现
7个文件已修改
3个文件已添加
1114 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmIntakeAmountDayMapper.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StIntakeAmountMonthMapper.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoDayIntakeAmount.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmIntakeAmountDayMapper.xml 447 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/StIntakeAmountMonthMapper.xml 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intaker/IntakeCtrl.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intaker/IntakeQo.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intaker/IntakeSv.java 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossCtrl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossSv.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmIntakeAmountDayMapper.java
@@ -4,6 +4,7 @@
import com.dy.pipIrrGlobal.pojoRm.RmIntakeAmountDay;
import com.dy.pipIrrGlobal.voRm.VoIntakeAmountDay;
import com.dy.pipIrrGlobal.voSt.VoDayIntakeAmount;
import com.dy.pipIrrGlobal.voSt.VoDayLoss;
import com.dy.pipIrrGlobal.voSt.VoIntakeAmountStatistics;
import com.dy.pipIrrGlobal.voSt.VoMonthAmount;
import org.apache.ibatis.annotations.Mapper;
@@ -119,4 +120,35 @@
     * @return
     */
    List<VoMonthAmount> getMonthIntakeAmount(Map<?, ?> params);
    ////////////////////////////////////////////////
    // 统计查询
    ///////////////////////////////////////////////
    /**
     * 为查询统计取水口日漏损量,统计取水口数量
     * @param intakeN
     * @return
     */
    Long selectIntakeCount4AmountDay(@Param("intakeNum")String intakeN) ;
    /**
     * 为查询统计取水口日漏损量,查询一页取水口ID
     * @param params
     * @return
     */
    List<VoDayIntakeAmount> selectIntakes4AmountDay(Map<?, ?> params) ;
    /**
     * 查询统计取水口日漏损量
     * @param params
     * @return
     */
    //下面1到31号分了6个查询,原因是入一个查询中,非常慢,不知道什么原因,也许是子查询太多的原因
    List<VoDayIntakeAmount> selectIntakeAmountOfDay01_05(Map<?, ?> params);
    List<VoDayIntakeAmount> selectIntakeAmountOfDay06_10(Map<?, ?> params);
    List<VoDayIntakeAmount> selectIntakeAmountOfDay11_15(Map<?, ?> params);
    List<VoDayIntakeAmount> selectIntakeAmountOfDay16_20(Map<?, ?> params);
    List<VoDayIntakeAmount> selectIntakeAmountOfDay21_25(Map<?, ?> params);
    List<VoDayIntakeAmount> selectIntakeAmountOfDay26_31(Map<?, ?> params);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StIntakeAmountMonthMapper.java
@@ -5,10 +5,12 @@
import com.dy.pipIrrGlobal.pojoSt.StLossMonth;
import com.dy.pipIrrGlobal.voSt.VoIntakeAmountStatistics;
import com.dy.pipIrrGlobal.voSt.VoIntakeLossStatistics;
import com.dy.pipIrrGlobal.voSt.VoMonthAmount;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * @Author: liurunyu
@@ -74,11 +76,39 @@
     * @param year 统计年度
     * @return
     */
    List<VoIntakeAmountStatistics> statisticsByIntake(Integer year, Integer month, Long startId, Long endId) ;
    List<VoIntakeAmountStatistics> statisticsByIntake(@Param("year")Integer year, @Param("month")Integer month, @Param("startId")Long startId, @Param("endId")Long endId) ;
    /**
     * 以取水口维度统计取水量
     * @param year 统计年度
     * @return
     */
    List<VoIntakeAmountStatistics> statisticsByIntake(Integer year) ;
    ////////////////////////////////////////////////
    // 统计查询
    ///////////////////////////////////////////////
    /**
     * 为查询统计取水口日漏损量,统计取水口数量
     * @param intakeN
     * @return
     */
    Long selectIntakeCount4AmountMonth(@Param("intakeNum")String intakeN) ;
    /**
     * 为查询统计取水口日漏损量,查询一页取水口ID
     * @param params
     * @return
     */
    List<VoMonthAmount> selectIntakes4AmountMonth(Map<?, ?> params) ;
    /**
     * 查询统计取水口月漏损量
     * @param params
     * @return
     */
    //下面1到12月分了2个查询,原因是在一个查询中,非常慢,不知道什么原因,也许是子查询太多的原因
    List<VoMonthAmount> selectIntakeAmountOfMonth01_06(Map<?, ?> params);
    List<VoMonthAmount> selectIntakeAmountOfMonth07_12(Map<?, ?> params);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoDayIntakeAmount.java
@@ -16,79 +16,88 @@
@Data
@JsonPropertyOrder({ "intakeId", "intakeNum", "amount1" , "amount2" , "amount3" , "amount4" , "amount5" , "amount6" , "amount7" , "amount8" , "amount9" , "amount10" , "amount11" , "amount12" , "amount13" , "amount14" , "amount15" , "amount16" , "amount17" , "amount18" , "amount19" , "amount20" , "amount21" , "amount22" , "amount23" , "amount24" , "amount25" , "amount26" , "amount27" , "amount28" , "amount29" , "amount30" , "amount31" })
public class VoDayIntakeAmount {
    private static final long serialVersionUID = 202408080933001L;
    public static final long serialVersionUID = 202408080933001L;
    /**
     * 取水口ID
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    private Long intakeId;
    public Long intakeId;
    /**
     * 取水口编号
     */
    private String intakeNum;
    public String intakeNum;
    /**
     * 经度
     */
    public Double intakeLng;
    /**
     * 纬度
     */
    public Double intakeLat;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount1;
    public Double amount1;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount2;
    public Double amount2;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount3;
    public Double amount3;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount4;
    public Double amount4;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount5;
    public Double amount5;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount6;
    public Double amount6;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount7;
    public Double amount7;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount8;
    public Double amount8;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount9;
    public Double amount9;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount10;
    public Double amount10;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount11;
    public Double amount11;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount12;
    public Double amount12;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount13;
    public Double amount13;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount14;
    public Double amount14;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount15;
    public Double amount15;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount16;
    public Double amount16;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount17;
    public Double amount17;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount18;
    public Double amount18;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount19;
    public Double amount19;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount20;
    public Double amount20;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount21;
    public Double amount21;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount22;
    public Double amount22;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount23;
    public Double amount23;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount24;
    public Double amount24;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount25;
    public Double amount25;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount26;
    public Double amount26;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount27;
    public Double amount27;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount28;
    public Double amount28;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount29;
    public Double amount29;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount30;
    public Double amount30;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
    private Double amount31;
    public Double amount31;
}
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmIntakeAmountDayMapper.xml
@@ -549,4 +549,451 @@
            </if>
        </trim>
    </select>
    <!-- 为查询统计取水口日漏损量,统计取水口数量 -->
    <select id="selectIntakeCount4AmountDay" 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="selectIntakes4AmountDay" resultType="com.dy.pipIrrGlobal.voSt.VoDayIntakeAmount">
        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>
    <sql id="selectIntakeAmountOfDay_with">
        SELECT intaId.intakeId   AS intakeId,
               riad.dt           AS dt,
               riad.amount       AS amount
        FROM JSON_TABLE(
            #{intakesJson},
            '$[*]' COLUMNS (
                intakeId BIGINT PATH '$.intakeId'
            )
        ) intaId
        INNER JOIN rm_intake_amount_day riad ON riad.intake_id = intaId.intakeId
        <where>
            <if test="startDt != null ">
                AND riad.dt <![CDATA[>=]]> #{startDt, javaType=DATE, jdbcType=DATE}
            </if>
            <if test="endDt != null ">
                AND riad.dt <![CDATA[<=]]> #{endDt, javaType=DATE, jdbcType=DATE}
            </if>
        </where>
    </sql>
  <!--统计指定月份各天取水量(1号到5号)-->
  <select id="selectIntakeAmountOfDay01_05" resultType="com.dy.pipIrrGlobal.voSt.VoDayIntakeAmount">
    WITH intakeAmountDay AS (<include refid="selectIntakeAmountOfDay_with"/>)
    SELECT inta.intakeId     AS intakeId,
           inta.intakeNum    AS intakeNum,
           inta.intakeLng    AS intakeLng,
           inta.intakeLat    AS intakeLat,
           tb01.amount       AS amount1,
           tb02.amount       AS amount2,
           tb03.amount       AS amount3,
           tb04.amount       AS amount4,
           tb05.amount       AS amount5
    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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay AS tb
        WHERE YEAR(tb.dt) = #{year}
        AND MONTH(tb.dt) = #{month}
        AND DAY(tb.dt) = 5
    ) as tb05 on tb05.intakeId = inta.intakeId
  </select>
  <!--统计指定月份各天取水量(6号到10号)-->
  <select id="selectIntakeAmountOfDay06_10" resultType="com.dy.pipIrrGlobal.voSt.VoDayIntakeAmount">
    WITH intakeAmountDay AS (<include refid="selectIntakeAmountOfDay_with"/>)
    SELECT inta.intakeId     AS intakeId,
           inta.intakeNum    AS intakeNum,
           inta.intakeLng    AS intakeLng,
           inta.intakeLat    AS intakeLat,
           tb06.amount       AS amount6,
           tb07.amount       AS amount7,
           tb08.amount       AS amount8,
           tb09.amount       AS amount9,
           tb10.amount       AS amount10
    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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay AS tb
        WHERE YEAR(tb.dt) = #{year}
        AND MONTH(tb.dt) = #{month}
        AND DAY(tb.dt) = 10
    ) as tb10 on tb10.intakeId = inta.intakeId
  </select>
  <!--统计指定月份各天取水量(11号到15号)-->
  <select id="selectIntakeAmountOfDay11_15" resultType="com.dy.pipIrrGlobal.voSt.VoDayIntakeAmount">
    WITH intakeAmountDay AS (<include refid="selectIntakeAmountOfDay_with"/>)
    SELECT inta.intakeId     AS intakeId,
           inta.intakeNum    AS intakeNum,
           inta.intakeLng    AS intakeLng,
           inta.intakeLat    AS intakeLat,
           tb11.amount       AS amount11,
           tb12.amount       AS amount12,
           tb13.amount       AS amount13,
           tb14.amount       AS amount14,
           tb15.amount       AS amount15
    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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay AS tb
        WHERE YEAR(tb.dt) = #{year}
        AND MONTH(tb.dt) = #{month}
        AND DAY(tb.dt) = 15
    ) as tb15 on tb15.intakeId = inta.intakeId
  </select>
  <!--统计指定月份各天取水量(20号到16号)-->
  <select id="selectIntakeAmountOfDay16_20" resultType="com.dy.pipIrrGlobal.voSt.VoDayIntakeAmount">
    WITH intakeAmountDay AS (<include refid="selectIntakeAmountOfDay_with"/>)
    SELECT inta.intakeId     AS intakeId,
           inta.intakeNum    AS intakeNum,
           inta.intakeLng    AS intakeLng,
           inta.intakeLat    AS intakeLat,
           tb16.amount       AS amount16,
           tb17.amount       AS amount17,
           tb18.amount       AS amount18,
           tb19.amount       AS amount19,
           tb20.amount       AS amount20
    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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay AS tb
        WHERE YEAR(tb.dt) = #{year}
        AND MONTH(tb.dt) = #{month}
        AND DAY(tb.dt) = 20
    ) as tb20 on tb20.intakeId = inta.intakeId
  </select>
  <!--统计指定月份各天取水量(21号到25号)-->
  <select id="selectIntakeAmountOfDay21_25" resultType="com.dy.pipIrrGlobal.voSt.VoDayIntakeAmount">
    WITH intakeAmountDay AS (<include refid="selectIntakeAmountOfDay_with"/>)
    SELECT inta.intakeId     AS intakeId,
           inta.intakeNum    AS intakeNum,
           inta.intakeLng    AS intakeLng,
           inta.intakeLat    AS intakeLat,
           tb21.amount       AS amount21,
           tb22.amount       AS amount22,
           tb23.amount       AS amount23,
           tb24.amount       AS amount24,
           tb25.amount       AS amount25
    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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay AS tb
        WHERE YEAR(tb.dt) = #{year}
        AND MONTH(tb.dt) = #{month}
        AND DAY(tb.dt) = 25
    ) as tb25 on tb25.intakeId = inta.intakeId
  </select>
  <!--统计指定月份各天取水量(26号到31号)-->
  <select id="selectIntakeAmountOfDay26_31" resultType="com.dy.pipIrrGlobal.voSt.VoDayIntakeAmount">
    WITH intakeAmountDay AS (<include refid="selectIntakeAmountOfDay_with"/>)
    SELECT inta.intakeId     AS intakeId,
           inta.intakeNum    AS intakeNum,
           inta.intakeLng    AS intakeLng,
           inta.intakeLat    AS intakeLat,
           tb26.amount       AS amount26,
           tb27.amount       AS amount27,
           tb28.amount       AS amount28,
           tb29.amount       AS amount29,
           tb30.amount       AS amount30,
           tb31.amount       AS amount31
    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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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.amount   AS amount
        FROM intakeAmountDay 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>
pipIrr-platform/pipIrr-global/src/main/resources/mapper/StIntakeAmountMonthMapper.xml
@@ -123,4 +123,191 @@
    group by intake_id
  </select>
  <!-- 为查询统计取水口日用水量,统计取水口数量 -->
  <select id="selectIntakeCount4AmountMonth" 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="selectIntakes4AmountMonth" resultType="com.dy.pipIrrGlobal.voSt.VoMonthAmount">
    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>
  <sql id="selectIntakeAmountOfMonth_with">
      SELECT intaId.intakeId   AS intakeId,
             siam.year          AS `year`,
             siam.month         AS `month`,
             siam.amount        AS amount
      FROM JSON_TABLE(
        #{intakesJson},
          '$[*]' COLUMNS (
          intakeId BIGINT PATH '$.intakeId'
        )
      ) intaId
      INNER JOIN st_intake_amount_month siam ON siam.intake_id = intaId.intakeId
      <where>
        <if test="year != null ">
          AND siam.year = #{year, javaType=Integer, jdbcType=INTEGER}
        </if>
      </where>
  </sql>
  <!--统计指定月份各月用水量(1号到6月)-->
  <select id="selectIntakeAmountOfMonth01_06" resultType="com.dy.pipIrrGlobal.voSt.VoMonthAmount">
    WITH intakeAmountMonth AS (<include refid="selectIntakeAmountOfMonth_with" />)
    SELECT inta.intakeId     AS intakeId,
           inta.intakeNum    AS intakeNum,
           inta.intakeLng    AS intakeLng,
           inta.intakeLat    AS intakeLat,
           tb01.amount   AS month1,
           tb02.amount   AS month2,
           tb03.amount   AS month3,
           tb04.amount   AS month4,
           tb05.amount   AS month5,
           tb06.amount   AS month6
    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.amount AS amount
      FROM intakeAmountMonth AS tb
      WHERE tb.year = #{year}
            AND tb.month = 1
    ) as tb01 on tb01.intakeId = inta.intakeId
    LEFT JOIN (
      SELECT tb.intakeId AS intakeId,
             tb.amount AS amount
      FROM intakeAmountMonth AS tb
      WHERE tb.year = #{year}
            AND tb.month = 2
    ) as tb02 on tb02.intakeId = inta.intakeId
    LEFT JOIN (
      SELECT tb.intakeId AS intakeId,
             tb.amount AS amount
      FROM intakeAmountMonth AS tb
      WHERE tb.year = #{year}
            AND tb.month = 3
    ) as tb03 on tb03.intakeId = inta.intakeId
    LEFT JOIN (
      SELECT tb.intakeId AS intakeId,
             tb.amount AS amount
      FROM intakeAmountMonth AS tb
      WHERE tb.year = #{year}
            AND tb.month = 4
    ) as tb04 on tb04.intakeId = inta.intakeId
    LEFT JOIN (
      SELECT tb.intakeId AS intakeId,
             tb.amount AS amount
      FROM intakeAmountMonth AS tb
      WHERE tb.year = #{year}
            AND tb.month = 5
    ) as tb05 on tb05.intakeId = inta.intakeId
    LEFT JOIN (
      SELECT tb.intakeId AS intakeId,
             tb.amount AS amount
      FROM intakeAmountMonth AS tb
      WHERE tb.year = #{year}
            AND tb.month = 6
    ) as tb06 on tb06.intakeId = inta.intakeId
  </select>
  <!--统计指定月份各月用水量(7号到12月)-->
  <select id="selectIntakeAmountOfMonth07_12" resultType="com.dy.pipIrrGlobal.voSt.VoMonthAmount">
    WITH intakeAmountMonth AS (<include refid="selectIntakeAmountOfMonth_with" />)
    SELECT inta.intakeId     AS intakeId,
           inta.intakeNum    AS intakeNum,
           inta.intakeLng    AS intakeLng,
           inta.intakeLat    AS intakeLat,
           tb07.amount   AS month7,
           tb08.amount   AS month8,
           tb09.amount   AS month9,
           tb010.amount  AS month10,
           tb011.amount  AS month11,
           tb012.amount  AS month12
    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.amount AS amount
      FROM intakeAmountMonth AS tb
      WHERE tb.year = #{year}
            AND tb.month = 7
    ) as tb07 on tb07.intakeId = inta.intakeId
    LEFT JOIN (
      SELECT tb.intakeId AS intakeId,
             tb.amount AS amount
      FROM intakeAmountMonth AS tb
      WHERE tb.year = #{year}
            AND tb.month = 8
    ) as tb08 on tb08.intakeId = inta.intakeId
    LEFT JOIN (
      SELECT tb.intakeId AS intakeId,
             tb.amount AS amount
      FROM intakeAmountMonth AS tb
      WHERE tb.year = #{year}
            AND tb.month = 9
    ) as tb09 on tb09.intakeId = inta.intakeId
    LEFT JOIN (
      SELECT tb.intakeId AS intakeId,
             tb.amount AS amount
      FROM intakeAmountMonth AS tb
      WHERE tb.year = #{year}
            AND tb.month = 10
    ) as tb010 on tb010.intakeId = inta.intakeId
    LEFT JOIN (
      SELECT tb.intakeId AS intakeId,
             tb.amount AS amount
      FROM intakeAmountMonth AS tb
      WHERE tb.year = #{year}
            AND tb.month = 11
    ) as tb011 on tb011.intakeId = inta.intakeId
    LEFT JOIN (
      SELECT tb.intakeId AS intakeId,
             tb.amount AS amount
      FROM intakeAmountMonth AS tb
      WHERE tb.year = #{year}
            AND tb.month = 12
    ) as tb012 on tb012.intakeId = inta.intakeId
  </select>
</mapper>
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intaker/IntakeCtrl.java
New file
@@ -0,0 +1,72 @@
package com.dy.pipIrrStatistics.intaker;
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.VoDayIntakeAmount;
import com.dy.pipIrrGlobal.voSt.VoMonthAmount;
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.util.List;
/**
 * @Author: liurunyu
 * @Date: 2024/12/12 16:24
 * @Description 有关取水口用水统计
 */
@Slf4j
@RestController
@RequestMapping(path="intake")
@RequiredArgsConstructor
public class IntakeCtrl {
    private IntakeSv sv;
    @Autowired
    public void setSv(IntakeSv sv){
        this.sv = sv ;
    }
    /**
     * 查询指定月份各日用水量
     * @param qo
     * @return
     */
    @GetMapping(path = "/amountOfDay")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoDayIntakeAmount>>> amountOfDay(IntakeQo 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.amountOfDay(qo));
    }
    /**
     * 查询指定月份各日用水量
     * @param qo
     * @return
     */
    @GetMapping(path = "/amountOfMonth")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoMonthAmount>>> amountOfMonth(IntakeQo qo) throws Exception {
        if(qo.getYear() == null) {
            return BaseResponseUtils.buildErrorMsg("查询条件年度不能为空");
        }
        return BaseResponseUtils.buildSuccess(this.sv.amountOfMonth(qo));
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intaker/IntakeQo.java
New file
@@ -0,0 +1,48 @@
package com.dy.pipIrrStatistics.intaker;
import com.dy.common.webUtil.QueryConditionVo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
 * @Author: liurunyu
 * @Date: 2024/12/12 16:34
 * @Description
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class IntakeQo  extends QueryConditionVo {
    /**
     * 统计年月
     */
    public String yearMonth;
    /**
     * 查询开始日期(年月日)
     */
    public Date startDt ;
    /**
     * 查询截止日期(年月日)
     */
    public Date endDt ;
    /**
     * 年
     */
    public Integer year;
    /**
     * 月
     */
    public Integer month;
    /**
     * 取水口编号
     */
    public String intakeNum;
}
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intaker/IntakeSv.java
New file
@@ -0,0 +1,188 @@
package com.dy.pipIrrStatistics.intaker;
import com.alibaba.fastjson2.JSON;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.daoRm.RmIntakeAmountDayMapper;
import com.dy.pipIrrGlobal.daoSt.StIntakeAmountMonthMapper;
import com.dy.pipIrrGlobal.voSt.VoDayIntakeAmount;
import com.dy.pipIrrGlobal.voSt.VoMonthAmount;
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;
/**
 * @Author: liurunyu
 * @Date: 2024/12/12 16:24
 * @Description
 */
@Slf4j
@Service
public class IntakeSv {
    @Autowired
    private RmIntakeAmountDayMapper dayDao ;
    @Autowired
    private StIntakeAmountMonthMapper monthDao ;
    /**
     * 统计指定月份各天用水量
     * @param qo
     * @return
     */
    public QueryResultVo<List<VoDayIntakeAmount>> amountOfDay(IntakeQo qo) throws ParseException {
        QueryResultVo<List<VoDayIntakeAmount>> rsVo = new QueryResultVo<>() ;
        // 生成查询参数
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
        // 获取符合条件的记录数
        Long itemTotal = dayDao.selectIntakeCount4AmountDay(qo.intakeNum) ;
        if(itemTotal != null && itemTotal > 0){
            rsVo.pageSize = qo.pageSize ;
            rsVo.pageCurr = qo.pageCurr ;
            rsVo.calculateAndSet(itemTotal, params);
            List<VoDayIntakeAmount> list = dayDao.selectIntakes4AmountDay(params);
            if(list == null || list.size() == 0){
                rsVo.obj = list ;
            }else{
                String json = JSON.toJSONString(list) ;
                params.put("intakesJson", json);
                List<VoDayIntakeAmount> list01_05 = dayDao.selectIntakeAmountOfDay01_05(params);
                if(list01_05 != null && list01_05.size() > 0){
                    //下面1到31号分了6个查询,原因是在一个查询中,非常慢,不知道什么原因,也许是子查询太多的原因
                    List<VoDayIntakeAmount> list06_10 = dayDao.selectIntakeAmountOfDay06_10(params);
                    List<VoDayIntakeAmount> list11_15 = dayDao.selectIntakeAmountOfDay11_15(params);
                    List<VoDayIntakeAmount> list16_20 = dayDao.selectIntakeAmountOfDay16_20(params);
                    List<VoDayIntakeAmount> list21_25 = dayDao.selectIntakeAmountOfDay21_25(params);
                    List<VoDayIntakeAmount> list26_31 = dayDao.selectIntakeAmountOfDay26_31(params);
                    this.merge(list01_05, list06_10, list11_15, list16_20, list21_25, list26_31);
                }
                rsVo.obj = list01_05 ;
            }
        }
        return rsVo ;
    }
    private void merge(List<VoDayIntakeAmount> list01_05,
                       List<VoDayIntakeAmount> list06_10,
                       List<VoDayIntakeAmount> list11_15,
                       List<VoDayIntakeAmount> list16_20,
                       List<VoDayIntakeAmount> list21_25,
                       List<VoDayIntakeAmount> list26_31){
        for(VoDayIntakeAmount vo01_05 : list01_05){
            for(VoDayIntakeAmount vo06_10 : list06_10){
                if(vo01_05.intakeId.longValue() == vo06_10.intakeId.longValue()){
                    vo01_05.amount6 = vo06_10.amount6 ;
                    vo01_05.amount7 = vo06_10.amount7 ;
                    vo01_05.amount8 = vo06_10.amount8 ;
                    vo01_05.amount9 = vo06_10.amount9 ;
                    vo01_05.amount10 = vo06_10.amount10 ;
                    break ;
                }
            }
            for(VoDayIntakeAmount vo11_15 : list11_15){
                if(vo01_05.intakeId.longValue() == vo11_15.intakeId.longValue()){
                    vo01_05.amount11 = vo11_15.amount11 ;
                    vo01_05.amount12 = vo11_15.amount12 ;
                    vo01_05.amount13 = vo11_15.amount13 ;
                    vo01_05.amount14 = vo11_15.amount14 ;
                    vo01_05.amount15 = vo11_15.amount15 ;
                    break ;
                }
            }
            for(VoDayIntakeAmount vo16_20 : list16_20){
                if(vo01_05.intakeId.longValue() == vo16_20.intakeId.longValue()){
                    vo01_05.amount16 = vo16_20.amount16 ;
                    vo01_05.amount17 = vo16_20.amount17 ;
                    vo01_05.amount18 = vo16_20.amount18 ;
                    vo01_05.amount19 = vo16_20.amount19 ;
                    vo01_05.amount20 = vo16_20.amount20 ;
                    break ;
                }
            }
            for(VoDayIntakeAmount vo21_25 : list21_25){
                if(vo01_05.intakeId.longValue() == vo21_25.intakeId.longValue()){
                    vo01_05.amount21 = vo21_25.amount21 ;
                    vo01_05.amount22 = vo21_25.amount22 ;
                    vo01_05.amount23 = vo21_25.amount23 ;
                    vo01_05.amount24 = vo21_25.amount24 ;
                    vo01_05.amount25 = vo21_25.amount25 ;
                    break ;
                }
            }
            for(VoDayIntakeAmount vo26_31 : list26_31){
                if(vo01_05.intakeId.longValue() == vo26_31.intakeId.longValue()){
                    vo01_05.amount26 = vo26_31.amount26 ;
                    vo01_05.amount27 = vo26_31.amount27 ;
                    vo01_05.amount28 = vo26_31.amount28 ;
                    vo01_05.amount29 = vo26_31.amount29 ;
                    vo01_05.amount30 = vo26_31.amount30 ;
                    vo01_05.amount31 = vo26_31.amount31 ;
                    break ;
                }
            }
        }
    }
    /**
     * 统计指定月份各月用水量
     * @param qo
     * @return
     */
    public QueryResultVo<List<VoMonthAmount>> amountOfMonth(IntakeQo qo) throws ParseException {
        QueryResultVo<List<VoMonthAmount>> rsVo = new QueryResultVo<>() ;
        // 生成查询参数
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
        // 获取符合条件的记录数
        Long itemTotal = monthDao.selectIntakeCount4AmountMonth(qo.intakeNum) ;
        if(itemTotal != null && itemTotal > 0){
            rsVo.pageSize = qo.pageSize ;
            rsVo.pageCurr = qo.pageCurr ;
            rsVo.calculateAndSet(itemTotal, params);
            List<VoMonthAmount> list = monthDao.selectIntakes4AmountMonth(params);
            if(list == null || list.size() == 0){
                rsVo.obj = list ;
            }else{
                String json = JSON.toJSONString(list) ;
                params.put("intakesJson", json);
                List<VoMonthAmount> list01_06 = monthDao.selectIntakeAmountOfMonth01_06(params);
                if(list01_06 != null && list01_06.size() > 0){
                    //下面1到12月分了2个查询,原因是在一个查询中,非常慢,不知道什么原因,也许是子查询太多的原因
                    List<VoMonthAmount> list07_12 = monthDao.selectIntakeAmountOfMonth07_12(params);
                    this.merge(list01_06, list07_12);
                }
                rsVo.obj = list01_06 ;
            }
        }
        return rsVo ;
    }
    private void merge(List<VoMonthAmount> list01_06,
                       List<VoMonthAmount> list07_12){
        for(VoMonthAmount vo01_06 : list01_06){
            for(VoMonthAmount vo07_12 : list07_12){
                if(vo01_06.intakeId.longValue() == vo07_12.intakeId.longValue()){
                    vo01_06.month7 = vo07_12.month7 ;
                    vo01_06.month8 = vo07_12.month8 ;
                    vo01_06.month9 = vo07_12.month9 ;
                    vo01_06.month10 = vo07_12.month10 ;
                    vo01_06.month11 = vo07_12.month11 ;
                    vo01_06.month12 = vo07_12.month12 ;
                    break ;
                }
            }
        }
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossCtrl.java
@@ -6,6 +6,7 @@
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.voSt.VoDayLoss;
import com.dy.pipIrrGlobal.voSt.VoMonthAmount;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -62,7 +63,7 @@
     */
    @GetMapping(path = "/lossAmountOfMonth")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoDayLoss>>> lossAmountOfMonth(LossQo qo) throws Exception {
    public BaseResponse<QueryResultVo<List<VoMonthAmount>>> lossAmountOfMonth(LossQo qo) throws Exception {
        if(qo.getYear() == null) {
            return BaseResponseUtils.buildErrorMsg("查询条件年度不能为空");
        }
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/loss/LossSv.java
@@ -26,10 +26,10 @@
public class LossSv {
    @Autowired
    private RmLossDayMapper rmLossDayMapper ;
    private RmLossDayMapper dayDao;
    @Autowired
    private StLossMonthMapper stLossMonthMapper ;
    private StLossMonthMapper monthDao;
    /**
     * 统计指定月份各天漏损量
@@ -41,28 +41,28 @@
        // 生成查询参数
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
        // 获取符合条件的记录数
        Long itemTotal = rmLossDayMapper.selectIntakeCount4LossDay(qo.intakeNum) ;
        Long itemTotal = dayDao.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);
            List<VoDayLoss> list = dayDao.selectIntakes4LossDay(params);
            if(list == null || list.size() == 0){
                rsVo.obj = list ;
            }else{
                String json = JSON.toJSONString(list) ;
                params.put("intakesJson", json);
                List<VoDayLoss> list01_05 = rmLossDayMapper.selectLossAmountOfDay01_05(params);
                List<VoDayLoss> list01_05 = dayDao.selectLossAmountOfDay01_05(params);
                if(list01_05 != null && list01_05.size() > 0){
                    //下面1到31号分了6个查询,原因是在一个查询中,非常慢,不知道什么原因,也许是子查询太多的原因
                    List<VoDayLoss> list06_10 = rmLossDayMapper.selectLossAmountOfDay06_10(params);
                    List<VoDayLoss> list11_15 = rmLossDayMapper.selectLossAmountOfDay11_15(params);
                    List<VoDayLoss> list16_20 = rmLossDayMapper.selectLossAmountOfDay16_20(params);
                    List<VoDayLoss> list21_25 = rmLossDayMapper.selectLossAmountOfDay21_25(params);
                    List<VoDayLoss> list26_31 = rmLossDayMapper.selectLossAmountOfDay26_31(params);
                    List<VoDayLoss> list06_10 = dayDao.selectLossAmountOfDay06_10(params);
                    List<VoDayLoss> list11_15 = dayDao.selectLossAmountOfDay11_15(params);
                    List<VoDayLoss> list16_20 = dayDao.selectLossAmountOfDay16_20(params);
                    List<VoDayLoss> list21_25 = dayDao.selectLossAmountOfDay21_25(params);
                    List<VoDayLoss> list26_31 = dayDao.selectLossAmountOfDay26_31(params);
                    this.merge(list01_05, list06_10, list11_15, list16_20, list21_25, list26_31);
                }
                rsVo.obj = list01_05 ;
@@ -143,24 +143,24 @@
        // 生成查询参数
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
        // 获取符合条件的记录数
        Long itemTotal = stLossMonthMapper.selectIntakeCount4LossMonth(qo.intakeNum) ;
        Long itemTotal = monthDao.selectIntakeCount4LossMonth(qo.intakeNum) ;
        if(itemTotal != null && itemTotal > 0){
            rsVo.pageSize = qo.pageSize ;
            rsVo.pageCurr = qo.pageCurr ;
            rsVo.calculateAndSet(itemTotal, params);
            List<VoMonthAmount> list = stLossMonthMapper.selectIntakes4LossMonth(params);
            List<VoMonthAmount> list = monthDao.selectIntakes4LossMonth(params);
            if(list == null || list.size() == 0){
                rsVo.obj = list ;
            }else{
                String json = JSON.toJSONString(list) ;
                params.put("intakesJson", json);
                List<VoMonthAmount> list01_06 = stLossMonthMapper.selectLossAmountOfMonth01_06(params);
                List<VoMonthAmount> list01_06 = monthDao.selectLossAmountOfMonth01_06(params);
                if(list01_06 != null && list01_06.size() > 0){
                    //下面1到12月分了2个查询,原因是在一个查询中,非常慢,不知道什么原因,也许是子查询太多的原因
                    List<VoMonthAmount> list07_12 = stLossMonthMapper.selectLossAmountOfMonth07_12(params);
                    List<VoMonthAmount> list07_12 = monthDao.selectLossAmountOfMonth07_12(params);
                    this.merge(list01_06, list07_12);
                }
                rsVo.obj = list01_06 ;