优化”开阀操作次数“、”关阀操作次数“、”时间段内开阀次数超过指定值“、”时间段内开阀次数低于指定值“、”时间段有开阀无关阀“、”时间段无开阀有关阀“功能实现及sql。
8个文件已修改
661 ■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOpenCloseValveLastMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoCountOfCloseType.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoCountOfOpenType.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseValveHistoryMapper.xml 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseValveLastMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intake/IntakeSv.java 275 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intake/IntkeCtrl.java 225 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intake/qo/IntakeCountValueQO.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOpenCloseValveLastMapper.java
@@ -3,6 +3,8 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoRm.RmOpenCloseValveLast;
import com.dy.pipIrrGlobal.voRm.VoOpenCloseValve;
import com.dy.pipIrrGlobal.voSt.VoCountOfCloseType;
import com.dy.pipIrrGlobal.voSt.VoCountOfOpenType;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -91,14 +93,14 @@
     * @param params
     * @return
     */
    Integer getCountByOpenType(Map<?, ?> params);
    List<VoCountOfOpenType> getCountByOpenType(Map<?, ?> params);
    /**
     * 根据关阀类型获取操作次数
     * @param params
     * @return
     */
    Integer getCountByCloseType(Map<?, ?> params);
    List<VoCountOfCloseType> getCountByCloseType(Map<?, ?> params);
    /**
     * 为指定(阀控器地址、水卡编号、无关阀记录)开关阀最新记录添加关阀时间,使之不在未关阀记录中显示
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoCountOfCloseType.java
@@ -13,12 +13,17 @@
public class VoCountOfCloseType {
    /**
     * 开阀方类型
     */
    public Integer closeType;
    /**
     * 关阀类型名称
     */
    private String closeTypeName;
    public String closeTypeName;
    /**
     * 关阀类型次数
     */
    private Integer closeTypeCount;
    public Integer closeTypeCount;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoCountOfOpenType.java
@@ -13,12 +13,17 @@
public class VoCountOfOpenType {
    /**
     * 开阀方类型
     */
    public Integer openType;
    /**
     * 开阀方类型名称
     */
    private String openTypeName;
    public String openTypeName;
    /**
     * 开阀类型次数
     */
    private Integer openTypeCount;
    public Integer openTypeCount;
}
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseValveHistoryMapper.xml
@@ -591,10 +591,11 @@
                     inta.name AS intakeNum,
                     blo.name  AS blockName
              FROM pr_intake inta
                       LEFT JOIN (SELECT *
                                  FROM rm_open_close_valve_history
                                  WHERE op_dt BETWEEN #{timeStart} AND #{timeStop}) his ON his.intake_id = inta.id
                       INNER JOIN ba_block blo ON blo.id = inta.blockId
              LEFT JOIN (SELECT intake_id
                          FROM rm_open_close_valve_history
                          WHERE id <![CDATA[>=]]> #{idStart} AND id <![CDATA[<=]]> #{idEnd}
              ) his ON his.intake_id = inta.id
              INNER JOIN ba_block blo ON blo.id = inta.blockId
              WHERE inta.deleted = 0
              GROUP BY intakeId, intakeNum, blockName
              HAVING recordCount &gt; #{value}) a
@@ -606,20 +607,22 @@
               inta.name AS intakeNum,
               blo.name  AS blockName
        FROM pr_intake inta
                 LEFT JOIN (SELECT *
                            FROM rm_open_close_valve_history
                            WHERE op_dt BETWEEN #{timeStart} AND #{timeStop}) his ON his.intake_id = inta.id
                 INNER JOIN ba_block blo ON blo.id = inta.blockId
        LEFT JOIN(SELECT intake_id
                   FROM rm_open_close_valve_history
                   WHERE id <![CDATA[>=]]> #{idStart} AND id <![CDATA[<=]]> #{idEnd}
        ) his ON his.intake_id = inta.id
        INNER JOIN ba_block blo ON blo.id = inta.blockId
        WHERE inta.deleted = 0
        GROUP BY intakeId, intakeNum, blockName
        HAVING recordCount &gt; #{value}
        <!--        ORDER BY inta.id-->
        ORDER BY intakeId 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="getOpenValveLtIntakesCount" resultType="java.lang.Long">
        select count(*)
@@ -628,10 +631,11 @@
                     inta.name AS intakeNum,
                     blo.name  AS blockName
              FROM pr_intake inta
                       LEFT JOIN (SELECT *
                                  FROM rm_open_close_valve_history
                                  WHERE op_dt BETWEEN #{timeStart} AND #{timeStop}) his ON his.intake_id = inta.id
                       INNER JOIN ba_block blo ON blo.id = inta.blockId
              LEFT JOIN (SELECT intake_id
                          FROM rm_open_close_valve_history
                          WHERE id <![CDATA[>=]]> #{idStart} AND id <![CDATA[<=]]> #{idEnd}
              ) his ON his.intake_id = inta.id
              INNER JOIN ba_block blo ON blo.id = inta.blockId
              WHERE inta.deleted = 0
              GROUP BY intakeId, intakeNum, blockName
              HAVING recordCount &lt; #{value}) a
@@ -643,14 +647,15 @@
               inta.name AS intakeNum,
               blo.name  AS blockName
        FROM pr_intake inta
                 LEFT JOIN (SELECT *
                            FROM rm_open_close_valve_history
                            WHERE op_dt BETWEEN #{timeStart} AND #{timeStop}) his ON his.intake_id = inta.id
                 INNER JOIN ba_block blo ON blo.id = inta.blockId
        LEFT JOIN(SELECT intake_id
                   FROM rm_open_close_valve_history
                   WHERE id <![CDATA[>=]]> #{idStart} AND id <![CDATA[<=]]> #{idEnd}
        ) his ON his.intake_id = inta.id
        INNER JOIN ba_block blo ON blo.id = inta.blockId
        WHERE inta.deleted = 0
        GROUP BY intakeId, intakeNum, blockName
        HAVING recordCount &lt; #{value}
        <!--        ORDER BY inta.id-->
        ORDER BY intakeId DESC
        <trim prefix="limit ">
            <if test="start != null and count != null">
                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
@@ -1080,31 +1085,32 @@
    <!--指定时间段 有开阀 无关阀的取水口数量-->
    <select id="getHaveOpenNoCloseIntakesCount" resultType="java.lang.Long">
        select count(*) from
            (
        SELECT
        inta.id AS intakeId,
        inta.NAME AS intakeNum,
        blo.NAME AS blockName
        FROM
        pr_intake inta
        INNER JOIN ba_block blo ON blo.id = inta.blockId
        inner JOIN rm_open_close_valve_history rocvh ON rocvh.intake_id = inta.id
        WHERE rocvh.op_dt BETWEEN #{timeStart} AND  #{timeStop} AND rocvh.cl_dt IS NULL AND inta.deleted = 0
        GROUP BY inta.id) c
        (
            SELECT
            inta.id AS intakeId
            FROM
            pr_intake inta
            INNER JOIN ba_block blo ON blo.id = inta.blockId
            inner JOIN rm_open_close_valve_history rocvh ON rocvh.intake_id = inta.id
            WHERE inta.deleted = 0 AND rocvh.id >= #{idStart} AND  rocvh.id >= #{idEnd} AND rocvh.cl_dt IS NULL
            GROUP BY inta.id
        ) c
    </select>
    <!--指定时间段 有开阀 无关阀的取水口-->
    <select id="getHaveOpenNoCloseIntakes" resultType="com.dy.pipIrrGlobal.voSt.VoIntake">
        SELECT
            inta.id AS intakeId,
            inta.NAME AS intakeNum,
            inta.lng AS lng,
            inta.lat AS lat,
            blo.NAME AS blockName
        FROM
            pr_intake inta
                INNER JOIN ba_block blo ON blo.id = inta.blockId
                inner JOIN rm_open_close_valve_history rocvh ON rocvh.intake_id = inta.id
        WHERE rocvh.op_dt BETWEEN #{timeStart} AND  #{timeStop} AND rocvh.cl_dt IS NULL AND inta.deleted = 0
            INNER JOIN ba_block blo ON blo.id = inta.blockId
            inner JOIN rm_open_close_valve_history rocvh ON rocvh.intake_id = inta.id
        WHERE inta.deleted = 0 AND rocvh.id >= #{idStart} AND  rocvh.id >= #{idEnd} AND rocvh.cl_dt IS NULL
        GROUP BY inta.id
        ORDER BY inta.id
        ORDER BY inta.id DESC
        <trim prefix="limit ">
            <if test="start != null and count != null">
                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
@@ -1115,30 +1121,31 @@
    <select id="getNoOpenHaveCloseIntakesCount" resultType="java.lang.Long">
        select count(*) from
        (
        SELECT
        inta.id AS intakeId,
        inta.NAME AS intakeNum,
        blo.NAME AS blockName
        FROM
        pr_intake inta
        INNER JOIN ba_block blo ON blo.id = inta.blockId
        inner JOIN rm_open_close_valve_history rocvh ON rocvh.intake_id = inta.id
        WHERE rocvh.cl_dt BETWEEN #{timeStart} AND  #{timeStop} AND rocvh.op_dt IS NULL AND inta.deleted = 0
        GROUP BY inta.id) c
            SELECT
            inta.id AS intakeId
            FROM
            pr_intake inta
            INNER JOIN ba_block blo ON blo.id = inta.blockId
            inner JOIN rm_open_close_valve_history rocvh ON rocvh.intake_id = inta.id
            WHERE inta.deleted = 0 AND rocvh.id >= #{idStart} AND  rocvh.id >= #{idEnd} AND rocvh.op_dt IS NULL
            GROUP BY inta.id
        ) c
    </select>
    <!--指定时间段 无开阀 有关阀的取水口-->
    <select id="getNoOpenHaveCloseIntakes" resultType="com.dy.pipIrrGlobal.voSt.VoIntake">
        SELECT
        inta.id AS intakeId,
        inta.NAME AS intakeNum,
        inta.lng AS lng,
        inta.lat AS lat,
        blo.NAME AS blockName
        FROM
        pr_intake inta
        INNER JOIN ba_block blo ON blo.id = inta.blockId
        inner JOIN rm_open_close_valve_history rocvh ON rocvh.intake_id = inta.id
        WHERE rocvh.cl_dt BETWEEN #{timeStart} AND  #{timeStop} AND rocvh.op_dt IS NULL AND inta.deleted = 0
        WHERE inta.deleted = 0 AND rocvh.id >= #{idStart} AND  rocvh.id >= #{idEnd} AND rocvh.op_dt IS NULL
        GROUP BY inta.id
        ORDER BY inta.id
        ORDER BY inta.id DESC
        <trim prefix="limit ">
            <if test="start != null and count != null">
                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseValveLastMapper.xml
@@ -552,31 +552,43 @@
    </select>
    <!--根据开阀方式获取操作次数-->
    <select id="getCountByOpenType" resultType="java.lang.Integer">
        SELECT COUNT(*) AS recordCount
    <select id="getCountByOpenType" resultType="com.dy.pipIrrGlobal.voSt.VoCountOfOpenType">
        SELECT
        COUNT(*) AS openTypeCount,
        op_type AS openType
        FROM rm_open_close_valve_history
        <where>
            <if test="idStart != nul">
                id <![CDATA[>=]]> #{idStart}
            </if>
            <if test="idEnd != nul">
                AND id <![CDATA[<=]]> #{idEnd}
            </if>
            <if test="openType != null">
                AND op_type = #{openType}
            </if>
            <if test="timeStart != null and timeStop != null">
                AND op_dt BETWEEN #{timeStart} AND #{timeStop}
            </if>
        </where>
        group by op_type
    </select>
    <!--根据关阀方式获取操作次数-->
    <select id="getCountByCloseType" resultType="java.lang.Integer">
        SELECT COUNT(*) AS recordCount
    <select id="getCountByCloseType" resultType="com.dy.pipIrrGlobal.voSt.VoCountOfCloseType">
        SELECT
        COUNT(*) AS closeTypeCount,
        cl_type AS closeType
        FROM rm_open_close_valve_history
        <where>
            <if test="idStart != nul">
                id <![CDATA[>=]]> #{idStart}
            </if>
            <if test="idEnd != nul">
                AND id <![CDATA[<=]]> #{idEnd}
            </if>
            <if test="closeType != null">
                AND cl_type = #{closeType}
            </if>
            <if test="timeStart != null and timeStop != null">
                AND cl_dt BETWEEN #{timeStart} AND #{timeStop}
            </if>
        </where>
        group by cl_type
    </select>
    <!--为指定(阀控器地址、水卡编号、无关阀记录)开关阀最新记录添加关阀时间,使之不在未关阀记录中显示-->
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intake/IntakeSv.java
@@ -15,10 +15,7 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.*;
/**
 * @author ZhuBaoMin
@@ -231,23 +228,6 @@
     * @return
     */
    public QueryResultVo<List<VoIntakeOpenCount>> getOpenValveGtIntakes(IntakeCountValueQO qo) {
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart != null && timeStart != "") {
            timeStart = timeStart + " 00:00:00";
        } else {
            timeStart = LocalDate.now() + " 00:00:00";
        }
        qo.setTimeStart(timeStart);
        if(timeStop != null && timeStop != "") {
            timeStop = timeStop + " 23:59:59";
        }else {
            timeStop = LocalDate.now() + " 23:59:59";
        }
        qo.setTimeStop(timeStop);
        // 生成查询参数
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
@@ -270,25 +250,8 @@
     * @return
     */
    public QueryResultVo<List<VoIntakeOpenCount>> getOpenValveLtIntakes(IntakeCountValueQO qo) {
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart != null && timeStart != "") {
            timeStart = timeStart + " 00:00:00";
        } else {
            timeStart = LocalDate.now() + " 00:00:00";
        }
        qo.setTimeStart(timeStart);
        if(timeStop != null && timeStop != "") {
            timeStop = timeStop + " 23:59:59";
        }else {
            timeStop = LocalDate.now() + " 23:59:59";
        }
        qo.setTimeStop(timeStop);
        // 生成查询参数
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
        // 获取符合条件的记录数
        Long itemTotal = Optional.ofNullable(rmOpenCloseValveHistoryMapper.getOpenValveLtIntakesCount(params)).orElse(0L);
@@ -305,137 +268,97 @@
    /**
     * 根据开阀类型获取操作次数
     * @param qo
     * @param idStart
     * @param idEnd
     * @param openType
     * @return
     */
    public VoCountOfOpenType getCountByOpenType(OpenTypeQO qo) {
        /**
         * 补齐起止时间,如果开始时间为空,则默认为当前日期,如果结束时间为空,则查询时间为空
         */
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStop != null) {
            timeStop = timeStop + " 23:59:59";
            if(timeStart != null) {
                timeStart = timeStart + " 00:00:00";
            }else {
                timeStart = LocalDate.now() + " 00:00:00";
            }
        }else {
            timeStart = null;
        }
        qo.setTimeStart(timeStart);
        qo.setTimeStop(timeStop);
        Integer openType = qo.getOpenType();
        String openTypeName = "";
        if (openType == null){
            openTypeName = "不知道您要查那种开阀类型";
        }else {
            switch (openType) {
                case 1:
                    openTypeName = "刷卡开阀";
                    break;
                case 3:
                    openTypeName = "中心站开阀";
                    break;
                case 8:
                    openTypeName = "用户远程开阀";
                    break;
                case 11:
                    openTypeName = "巡检卡开阀";
                    break;
                case 13:
                    openTypeName = "巡检卡开阀";
                    break;
                default:
                    openTypeName = "不知道您要查那种开阀类型";
            }
        }
    public List<VoCountOfOpenType> getCountByOpenType(Long idStart, Long idEnd, Integer openType) {
        // 生成查询参数
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
        Map<String, Object> params = new HashMap<>() ;
        params.put("idStart", idStart);
        params.put("idEnd", idEnd);
        params.put("openType", openType);
        Integer openTypeCount = Optional.ofNullable(rmOpenCloseValveLastMapper.getCountByOpenType(params)).orElse(0);
        VoCountOfOpenType vo = new VoCountOfOpenType();
        vo.setOpenTypeName(openTypeName);
        vo.setOpenTypeCount(openTypeCount);
        return vo;
        List<VoCountOfOpenType> list = rmOpenCloseValveLastMapper.getCountByOpenType(params) ;
        if(list != null){
            for (VoCountOfOpenType vo : list) {
                if (vo.openType == null){
                    switch (vo.openType) {
                        case 1:
                            vo.openTypeName = "刷卡开阀";
                            break;
                        case 3:
                            vo.openTypeName = "中心站开阀";
                            break;
                        case 8:
                            vo.openTypeName = "用户远程开阀";
                            break;
                        case 11:
                            vo.openTypeName = "巡检卡开阀";
                            break;
                        default:
                            vo.openTypeName = "未知类型开阀";
                    }
                }
            }
        }
        return list ;
    }
    /**
     * 根据关阀类型获取操作次数
     * @param qo
     * @param idStart
     * @param idEnd
     * @param closeType
     * @return
     */
    public VoCountOfCloseType getCountByCloseType(CloseTypeQo qo) {
        /**
         * 补齐起止时间,如果开始时间为空,则默认为当前日期
         */
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStop != null) {
            timeStop = timeStop + " 23:59:59";
            if(timeStart != null) {
                timeStart = timeStart + " 00:00:00";
            }else {
                timeStart = LocalDate.now() + " 00:00:00";
            }
        }else {
            timeStart = null;
        }
        qo.setTimeStart(timeStart);
        qo.setTimeStop(timeStop);
    public List<VoCountOfCloseType> getCountByCloseType(Long idStart, Long idEnd, Integer closeType) {
        Map<String, Object> params = new HashMap<>() ;
        params.put("idStart", idStart);
        params.put("idEnd", idEnd);
        params.put("closeType", closeType);
        Integer closeType = qo.getCloseType();
        String closeTypeName = "";
        if (closeType == null){
            closeTypeName = "不知道您要查那种关阀类型";
        }else {
            switch (closeType) {
                case 2:
                    closeTypeName = "刷卡关阀";
                    break;
                case 4:
                    closeTypeName = "中心站关阀";
                    break;
                case 5:
                    closeTypeName = "欠费关阀";
                    break;
                case 6:
                    closeTypeName = "流量计故障关阀";
                    break;
                case 7:
                    closeTypeName = "紧急关阀";
                    break;
                case 9:
                    closeTypeName = "用户远程关阀";
                    break;
                case 10:
                    closeTypeName = "巡检卡关阀";
                    break;
                case 12:
                    closeTypeName = "黑名单命令关阀";
                    break;
                case 13:
                    closeTypeName = "远程定时关阀";
                    break;
                case 14:
                    closeTypeName = "远程定量关阀";
                    break;
                default:
                    closeTypeName = "不知道您要查那种关阀类型";
        List<VoCountOfCloseType> list = rmOpenCloseValveLastMapper.getCountByCloseType(params) ;
        if(list != null) {
            for (VoCountOfCloseType vo : list) {
                switch (vo.closeType) {
                    case 2:
                        vo.closeTypeName = "刷卡关阀";
                        break;
                    case 4:
                        vo.closeTypeName = "中心站关阀";
                        break;
                    case 5:
                        vo.closeTypeName = "欠费关阀";
                        break;
                    case 6:
                        vo.closeTypeName = "流量计故障关阀";
                        break;
                    case 7:
                        vo.closeTypeName = "紧急关阀";
                        break;
                    case 9:
                        vo.closeTypeName = "用户远程关阀";
                        break;
                    case 10:
                        vo.closeTypeName = "巡检卡关阀";
                        break;
                    case 12:
                        vo.closeTypeName = "黑名单命令关阀";
                        break;
                    case 13:
                        vo.closeTypeName = "远程定时关阀";
                        break;
                    case 14:
                        vo.closeTypeName = "远程定量关阀";
                        break;
                    default:
                        vo.closeTypeName = "未知关阀类型";
                }
            }
        }
        // 生成查询参数
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
        Integer closeTypeCount = Optional.ofNullable(rmOpenCloseValveLastMapper.getCountByCloseType(params)).orElse(0);
        VoCountOfCloseType vo = new VoCountOfCloseType();
        vo.setCloseTypeName(closeTypeName);
        vo.setCloseTypeCount(closeTypeCount);
        return vo;
        return list ;
    }
    /**
@@ -615,24 +538,7 @@
     * @param qo
     * @return
     */
    public QueryResultVo<List<VoIntake>> getHaveOpenNoCloseIntakes(CommonQO qo) {
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart != null && timeStart != "") {
            timeStart = timeStart + " 00:00:00";
        } else {
            timeStart = LocalDate.now() + " 00:00:00";
        }
        qo.setTimeStart(timeStart);
        if(timeStop != null && timeStop != "") {
            timeStop = timeStop + " 23:59:59";
        }else {
            timeStop = LocalDate.now() + " 23:59:59";
        }
        qo.setTimeStop(timeStop);
    public QueryResultVo<List<VoIntake>> getHaveOpenNoCloseIntakes(IntakeCountValueQO qo) {
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
        Long itemTotal = rmOpenCloseValveHistoryMapper.getHaveOpenNoCloseIntakesCount(params);
@@ -650,24 +556,7 @@
     * @param qo
     * @return
     */
    public QueryResultVo<List<VoIntake>> getNoOpenHaveCloseIntakes(CommonQO qo) {
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart != null && timeStart != "") {
            timeStart = timeStart + " 00:00:00";
        } else {
            timeStart = LocalDate.now() + " 00:00:00";
        }
        qo.setTimeStart(timeStart);
        if(timeStop != null && timeStop != "") {
            timeStop = timeStop + " 23:59:59";
        }else {
            timeStop = LocalDate.now() + " 23:59:59";
        }
        qo.setTimeStop(timeStop);
    public QueryResultVo<List<VoIntake>> getNoOpenHaveCloseIntakes(IntakeCountValueQO qo) {
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
        Long itemTotal = rmOpenCloseValveHistoryMapper.getNoOpenHaveCloseIntakesCount(params);
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intake/IntkeCtrl.java
@@ -1,6 +1,8 @@
package com.dy.pipIrrStatistics.intake;
import com.dy.common.aop.SsoAop;
import com.dy.common.util.DateTime;
import com.dy.common.util.IDLongGenerator;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.common.webUtil.QueryResultVo;
@@ -17,6 +19,7 @@
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -50,7 +53,7 @@
        try {
            return BaseResponseUtils.buildSuccess(intakeSv.getNotOnlineIntakes(qo));
        } catch (Exception e) {
            log.error("获取开卡记录异常", e);
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
@@ -69,7 +72,7 @@
        try {
            return BaseResponseUtils.buildSuccess(intakeSv.getLargeFlowIntakes(qo));
        } catch (Exception e) {
            log.error("获取开卡记录异常", e);
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
@@ -88,7 +91,7 @@
        try {
            return BaseResponseUtils.buildSuccess(intakeSv.getSmallFlowIntakes(qo));
        } catch (Exception e) {
            log.error("获取开卡记录异常", e);
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
@@ -107,7 +110,7 @@
        try {
            return BaseResponseUtils.buildSuccess(intakeSv.getUnderVoltIntakes(qo));
        } catch (Exception e) {
            log.error("获取开卡记录异常", e);
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
@@ -126,48 +129,165 @@
        try {
            return BaseResponseUtils.buildSuccess(intakeSv.getSpecifiedSignalIntakes(qo));
        } catch (Exception e) {
            log.error("获取开卡记录异常", e);
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
    /**
    /** ok 11
     * 根据开阀类型获取操作次数
     * @param qo
     * @return
     */
    @GetMapping(path = "/getCountByOpenType")
    @SsoAop()
    public BaseResponse<QueryResultVo<VoCountOfOpenType>> getCountByOpenType(@Valid OpenTypeQO qo, BindingResult bindingResult) {
    public BaseResponse<QueryResultVo<VoCountOfOpenType>> getCountByOpenType(@Valid OpenTypeQO qo, BindingResult bindingResult) throws Exception{
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart == null || timeStart.trim().equals("")){
            return BaseResponseUtils.buildErrorMsg("请设置查询开始时间");
        }
        if(timeStop == null || timeStop.trim().equals("")){
            return BaseResponseUtils.buildErrorMsg("请设置查询截止时间");
        }
        long dur = DateTime.daysBetweenyyyy_MM_dd(timeStop, timeStart) ;
        if(dur < 0){
            return BaseResponseUtils.buildErrorMsg("截止时间不能早于开始时间");
        }
        if(dur > 366){
            return BaseResponseUtils.buildErrorMsg("时间跨度不能超过一年");
        }
        int[] ymdStart = DateTime.yyyy_MM_dd_2_ymdGroup(timeStart) ;
        int[] ymdEnd = DateTime.yyyy_MM_dd_2_ymdGroup(timeStop) ;
        long startId = IDLongGenerator.generateOneDayStartId(ymdStart[0], ymdStart[1], ymdStart[2]) ;
        long endId = IDLongGenerator.generateOneDayStartId(ymdEnd[0], ymdEnd[1], ymdEnd[2]) ;
        try {
            return BaseResponseUtils.buildSuccess(intakeSv.getCountByOpenType(qo));
            return BaseResponseUtils.buildSuccess(intakeSv.getCountByOpenType(startId, endId, qo.getOpenType()));
        } catch (Exception e) {
            log.error("获取开卡记录异常", e);
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
    /**
    /** ok 12
     * 根据关阀类型获取操作次数
     * @param qo
     * @return
     */
    @GetMapping(path = "/getCountByCloseType")
    @SsoAop()
    public BaseResponse<QueryResultVo<VoCountOfCloseType>> getCountByCloseType(@Valid CloseTypeQo qo, BindingResult bindingResult) {
    public BaseResponse<QueryResultVo<VoCountOfCloseType>> getCountByCloseType(@Valid CloseTypeQo qo, BindingResult bindingResult) throws Exception{
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart == null || timeStart.trim().equals("")){
            return BaseResponseUtils.buildErrorMsg("请设置查询开始时间");
        }
        if(timeStop == null || timeStop.trim().equals("")){
            return BaseResponseUtils.buildErrorMsg("请设置查询截止时间");
        }
        long dur = DateTime.daysBetweenyyyy_MM_dd(timeStop, timeStart) ;
        if(dur < 0){
            return BaseResponseUtils.buildErrorMsg("截止时间不能早于开始时间");
        }
        if(dur > 366){
            return BaseResponseUtils.buildErrorMsg("时间跨度不能超过一年");
        }
        int[] ymdStart = DateTime.yyyy_MM_dd_2_ymdGroup(timeStart) ;
        int[] ymdEnd = DateTime.yyyy_MM_dd_2_ymdGroup(timeStop) ;
        long startId = IDLongGenerator.generateOneDayStartId(ymdStart[0], ymdStart[1], ymdStart[2]) ;
        long endId = IDLongGenerator.generateOneDayStartId(ymdEnd[0], ymdEnd[1], ymdEnd[2]) ;
        try {
            return BaseResponseUtils.buildSuccess(intakeSv.getCountByCloseType(qo));
            return BaseResponseUtils.buildSuccess(intakeSv.getCountByCloseType(startId, endId, qo.getCloseType()));
        } catch (Exception e) {
            log.error("获取开卡记录异常", e);
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
    /** ok 13
     * 获取指定时间段内开阀次数超过指定值的取水口
     * @param
     * @return
     */
    @GetMapping(path = "/getOpenValveGtIntakes")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoIntakeOpenCount>>> getOpenValveGtIntakes(@Valid IntakeCountValueQO qo, BindingResult bindingResult) throws Exception {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart == null || timeStart.trim().equals("")){
            return BaseResponseUtils.buildErrorMsg("请设置查询开始时间");
        }
        if(timeStop == null || timeStop.trim().equals("")){
            return BaseResponseUtils.buildErrorMsg("请设置查询截止时间");
        }
        long dur = DateTime.daysBetweenyyyy_MM_dd(timeStop, timeStart) ;
        if(dur < 0){
            return BaseResponseUtils.buildErrorMsg("截止时间不能早于开始时间");
        }
        if(dur > 366){
            return BaseResponseUtils.buildErrorMsg("时间跨度不能超过一年");
        }
        int[] ymdStart = DateTime.yyyy_MM_dd_2_ymdGroup(timeStart) ;
        int[] ymdEnd = DateTime.yyyy_MM_dd_2_ymdGroup(timeStop) ;
        qo.idStart = IDLongGenerator.generateOneDayStartId(ymdStart[0], ymdStart[1], ymdStart[2]) ;
        qo.idEnd = IDLongGenerator.generateOneDayStartId(ymdEnd[0], ymdEnd[1], ymdEnd[2]) ;
        try {
            QueryResultVo<List<VoIntakeOpenCount>> res = intakeSv.getOpenValveGtIntakes(qo);
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
    /** ok 14
     * 获取指定时间段内开阀次数低于指定值的取水口
     * @param
     * @return
     */
    @GetMapping(path = "/getOpenValveLtIntakes")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoIntakeOpenCount>>> getOpenValveLtIntakes(@Valid IntakeCountValueQO qo, BindingResult bindingResult) throws Exception {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart == null || timeStart.trim().equals("")){
            return BaseResponseUtils.buildErrorMsg("请设置查询开始时间");
        }
        if(timeStop == null || timeStop.trim().equals("")){
            return BaseResponseUtils.buildErrorMsg("请设置查询截止时间");
        }
        long dur = DateTime.daysBetweenyyyy_MM_dd(timeStop, timeStart) ;
        if(dur < 0){
            return BaseResponseUtils.buildErrorMsg("截止时间不能早于开始时间");
        }
        if(dur > 366){
            return BaseResponseUtils.buildErrorMsg("时间跨度不能超过一年");
        }
        int[] ymdStart = DateTime.yyyy_MM_dd_2_ymdGroup(timeStart) ;
        int[] ymdEnd = DateTime.yyyy_MM_dd_2_ymdGroup(timeStop) ;
        qo.idStart = IDLongGenerator.generateOneDayStartId(ymdStart[0], ymdStart[1], ymdStart[2]) ;
        qo.idEnd = IDLongGenerator.generateOneDayStartId(ymdEnd[0], ymdEnd[1], ymdEnd[2]) ;
        try {
            QueryResultVo<List<VoIntakeOpenCount>> res = intakeSv.getOpenValveLtIntakes(qo);
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
    /**
     * 获取从未开过阀的取水口
@@ -179,41 +299,6 @@
    public BaseResponse<QueryResultVo<List<VoIntake>>> getNeverOpenValveIntakes(CommonQO qo) {
        try {
            QueryResultVo<List<VoIntake>> res = intakeSv.getNeverOpenValveIntakes(qo);
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
    /**
     * 获取指定时间段内开阀次数超过指定值的取水口
     * @param
     * @return
     */
    @GetMapping(path = "/getOpenValveGtIntakes")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoIntakeOpenCount>>> getOpenValveGtIntakes(IntakeCountValueQO qo) {
        try {
            QueryResultVo<List<VoIntakeOpenCount>> res = intakeSv.getOpenValveGtIntakes(qo);
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
    /**
     * 获取指定时间段内开阀次数低于指定值的取水口
     * @param
     * @return
     */
    @GetMapping(path = "/getOpenValveLtIntakes")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoIntakeOpenCount>>> getOpenValveLtIntakes(IntakeCountValueQO qo) {
        try {
            QueryResultVo<List<VoIntakeOpenCount>> res = intakeSv.getOpenValveLtIntakes(qo);
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取记录异常", e);
@@ -306,14 +391,33 @@
        }
    }
    /**
    /** ok 15
     * 指定时间段 有开阀 无关阀的取水口
     * @param
     * @return
     */
    @GetMapping(path = "/getHaveOpenNoCloseIntakes")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoIntake>>> getHaveOpenNoCloseIntakes(CommonQO qo) {
    public BaseResponse<QueryResultVo<List<VoIntake>>> getHaveOpenNoCloseIntakes(IntakeCountValueQO qo) throws Exception {
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart == null || timeStart.trim().equals("")){
            return BaseResponseUtils.buildErrorMsg("请设置查询开始时间");
        }
        if(timeStop == null || timeStop.trim().equals("")){
            return BaseResponseUtils.buildErrorMsg("请设置查询截止时间");
        }
        long dur = DateTime.daysBetweenyyyy_MM_dd(timeStop, timeStart) ;
        if(dur < 0){
            return BaseResponseUtils.buildErrorMsg("截止时间不能早于开始时间");
        }
        if(dur > 366){
            return BaseResponseUtils.buildErrorMsg("时间跨度不能超过一年");
        }
        int[] ymdStart = DateTime.yyyy_MM_dd_2_ymdGroup(timeStart) ;
        int[] ymdEnd = DateTime.yyyy_MM_dd_2_ymdGroup(timeStop) ;
        qo.idStart = IDLongGenerator.generateOneDayStartId(ymdStart[0], ymdStart[1], ymdStart[2]) ;
        qo.idEnd = IDLongGenerator.generateOneDayStartId(ymdEnd[0], ymdEnd[1], ymdEnd[2]) ;
        try {
            QueryResultVo<List<VoIntake>> res = intakeSv.getHaveOpenNoCloseIntakes(qo);
            return BaseResponseUtils.buildSuccess(res);
@@ -330,7 +434,26 @@
     */
    @GetMapping(path = "/getNoOpenHaveCloseIntakes")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoIntake>>> getNoOpenHaveCloseIntakes(CommonQO qo) {
    public BaseResponse<QueryResultVo<List<VoIntake>>> getNoOpenHaveCloseIntakes(IntakeCountValueQO qo) throws Exception {
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart == null || timeStart.trim().equals("")){
            return BaseResponseUtils.buildErrorMsg("请设置查询开始时间");
        }
        if(timeStop == null || timeStop.trim().equals("")){
            return BaseResponseUtils.buildErrorMsg("请设置查询截止时间");
        }
        long dur = DateTime.daysBetweenyyyy_MM_dd(timeStop, timeStart) ;
        if(dur < 0){
            return BaseResponseUtils.buildErrorMsg("截止时间不能早于开始时间");
        }
        if(dur > 366){
            return BaseResponseUtils.buildErrorMsg("时间跨度不能超过一年");
        }
        int[] ymdStart = DateTime.yyyy_MM_dd_2_ymdGroup(timeStart) ;
        int[] ymdEnd = DateTime.yyyy_MM_dd_2_ymdGroup(timeStop) ;
        qo.idStart = IDLongGenerator.generateOneDayStartId(ymdStart[0], ymdStart[1], ymdStart[2]) ;
        qo.idEnd = IDLongGenerator.generateOneDayStartId(ymdEnd[0], ymdEnd[1], ymdEnd[2]) ;
        try {
            QueryResultVo<List<VoIntake>> res = intakeSv.getNoOpenHaveCloseIntakes(qo);
            return BaseResponseUtils.buildSuccess(res);
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intake/qo/IntakeCountValueQO.java
@@ -19,5 +19,11 @@
     * 值
     */
    @NotBlank(message = "值不能为空")
    private Integer value;
    public Integer value;
    ///////////////////////
    //非前端提交的参数
    public Long idStart ;
    public Long idEnd ;
}