88 changed files with 790 additions and 3858 deletions
			
			
		@ -1,31 +0,0 @@
					 | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 
				
			||||
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | 
				
			||||
    <modelVersion>4.0.0</modelVersion> | 
				
			||||
    <parent> | 
				
			||||
        <groupId>com.hnac.hzims</groupId> | 
				
			||||
        <artifactId>hzims-service-api</artifactId> | 
				
			||||
        <version>4.0.0-SNAPSHOT</version> | 
				
			||||
    </parent> | 
				
			||||
 | 
				
			||||
    <artifactId>hzims-ecological-api</artifactId> | 
				
			||||
 | 
				
			||||
    <properties> | 
				
			||||
        <maven.compiler.source>8</maven.compiler.source> | 
				
			||||
        <maven.compiler.target>8</maven.compiler.target> | 
				
			||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | 
				
			||||
    </properties> | 
				
			||||
 | 
				
			||||
    <dependencies> | 
				
			||||
 | 
				
			||||
        <dependency> | 
				
			||||
            <groupId>com.alibaba</groupId> | 
				
			||||
            <artifactId>easyexcel</artifactId> | 
				
			||||
            <version>3.0.5</version> | 
				
			||||
        </dependency> | 
				
			||||
 | 
				
			||||
    </dependencies> | 
				
			||||
 | 
				
			||||
 | 
				
			||||
</project> | 
				
			||||
@ -1,10 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.entity; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-08 15:06 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
public class Demo { | 
				
			||||
} | 
				
			||||
@ -1,29 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.feign; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.suichang.vo.StationQueryReq; | 
				
			||||
import com.hnac.hzims.suichang.vo.StationVo; | 
				
			||||
import org.springframework.cloud.openfeign.FeignClient; | 
				
			||||
import org.springframework.web.bind.annotation.GetMapping; | 
				
			||||
 | 
				
			||||
import java.time.LocalDateTime; | 
				
			||||
import java.util.List; | 
				
			||||
import java.util.Map; | 
				
			||||
 | 
				
			||||
@FeignClient( | 
				
			||||
        value = "suichang" | 
				
			||||
) | 
				
			||||
public interface ISuichangClient { | 
				
			||||
    String API_PREFIX = "/suichangClient"; | 
				
			||||
 | 
				
			||||
    String GET_STATION_BY_REQ = API_PREFIX + "/getStationListByReq"; | 
				
			||||
 | 
				
			||||
    String GET_DATA = API_PREFIX + "/getData"; | 
				
			||||
 | 
				
			||||
    @GetMapping(GET_STATION_BY_REQ) | 
				
			||||
    List<StationVo> getStationListByReq(StationQueryReq req); | 
				
			||||
 | 
				
			||||
    @GetMapping(GET_DATA) | 
				
			||||
    List<Map<String, Object>> getData(String stcd, Integer accessRules, Integer saveTimeType, Integer timeInterval, | 
				
			||||
                                      LocalDateTime startTime, LocalDateTime endTime); | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,138 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.util; | 
				
			||||
 | 
				
			||||
import java.text.ParseException; | 
				
			||||
import java.text.SimpleDateFormat; | 
				
			||||
import java.time.LocalDate; | 
				
			||||
import java.time.LocalDateTime; | 
				
			||||
import java.time.LocalTime; | 
				
			||||
import java.time.Month; | 
				
			||||
import java.time.format.DateTimeFormatter; | 
				
			||||
import java.time.temporal.ChronoUnit; | 
				
			||||
import java.util.Calendar; | 
				
			||||
import java.util.Date; | 
				
			||||
import java.util.HashMap; | 
				
			||||
import java.util.Map; | 
				
			||||
 | 
				
			||||
public class DateUtil { | 
				
			||||
    public static Map<String, Date> getStartEnd(String yearMonth) { | 
				
			||||
        Map<String, Date> data = new HashMap<>(); | 
				
			||||
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | 
				
			||||
        try { | 
				
			||||
            Date begin = sdf.parse(yearMonth + "-01 00:00:00"); | 
				
			||||
            // 最大天数
 | 
				
			||||
            Date endSt = sdf.parse(yearMonth + "-" + getMaxDayByYearMonth(begin) + " 23:59:59"); | 
				
			||||
            data.put("start", begin); | 
				
			||||
            data.put("end", endSt); | 
				
			||||
        } catch (ParseException e) { | 
				
			||||
            e.printStackTrace(); | 
				
			||||
        } | 
				
			||||
        return data; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public static int getMaxDayByYearMonth(Date start) { | 
				
			||||
        Calendar calendar = Calendar.getInstance(); | 
				
			||||
        calendar.setTime(start); | 
				
			||||
        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public static LocalDateTime getStartOfLastQuarter(LocalDateTime dateTime) { | 
				
			||||
        int currentMonth = dateTime.getMonthValue(); | 
				
			||||
        int currentYear = dateTime.getYear(); | 
				
			||||
 | 
				
			||||
        // 计算上个季度的开始月份
 | 
				
			||||
        int startMonthOfLastQuarter = (currentMonth - 1) / 3 * 3 + 1; | 
				
			||||
        if (startMonthOfLastQuarter > currentMonth) { | 
				
			||||
            // 如果当前月份在上个季度之后,则回到上一年的相应季度
 | 
				
			||||
            startMonthOfLastQuarter -= 3; | 
				
			||||
            currentYear--; | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        // 获取上个季度的开始时间(该季度的第一个月的第一天午夜)
 | 
				
			||||
        return LocalDateTime.of(currentYear, startMonthOfLastQuarter, 1, 0, 0); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public static LocalDateTime getEndOfLastQuarter(LocalDateTime dateTime) { | 
				
			||||
        LocalDateTime startOfLastQuarter = getStartOfLastQuarter(dateTime); | 
				
			||||
 | 
				
			||||
        // 获取上个季度的结束时间(该季度的最后一个月的最后一天午夜)
 | 
				
			||||
        int endMonthOfLastQuarter = startOfLastQuarter.getMonthValue() + 2; | 
				
			||||
        int endYearOfLastQuarter = startOfLastQuarter.getYear(); | 
				
			||||
        if (endMonthOfLastQuarter > 12) { | 
				
			||||
            // 如果结束月份超过12,则回到下一年的相应月份
 | 
				
			||||
            endMonthOfLastQuarter -= 12; | 
				
			||||
            endYearOfLastQuarter++; | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        return LocalDateTime.of(endYearOfLastQuarter, endMonthOfLastQuarter, 1, 0, 0); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public static LocalDateTime getStartOfHalfYear(LocalDateTime dateTime) { | 
				
			||||
        int month = dateTime.getMonthValue(); | 
				
			||||
        int year = dateTime.getYear(); | 
				
			||||
        if (month <= 6) { | 
				
			||||
            // 如果是上半年,则获取去年下半年的开始时间(7月1日)
 | 
				
			||||
            year--; | 
				
			||||
            return LocalDateTime.of(year, Month.JULY, 1, 0, 0); | 
				
			||||
        } else { | 
				
			||||
            return LocalDateTime.of(year, Month.JANUARY, 1, 0, 0); | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    public static LocalDateTime getEndOfHalfYear(LocalDateTime dateTime) { | 
				
			||||
        int month = dateTime.getMonthValue(); | 
				
			||||
        int year = dateTime.getYear(); | 
				
			||||
        if (month <= 6) { | 
				
			||||
            // 如果是上半年,则获取去年下半年的结束时间(1月1日)
 | 
				
			||||
            return LocalDateTime.of(year, Month.JANUARY, 1, 0, 0, 0); | 
				
			||||
        } else { | 
				
			||||
            return LocalDateTime.of(year, Month.JULY, 1, 0, 0, 0); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public static long getHoursPassedToday() { | 
				
			||||
        // 获取当前时间
 | 
				
			||||
        LocalTime currentTime = LocalTime.now(); | 
				
			||||
        // 获取今天的开始时间(午夜0点)
 | 
				
			||||
        LocalTime midnight = LocalTime.MIDNIGHT; | 
				
			||||
        // 计算时间差,单位为小时
 | 
				
			||||
        return ChronoUnit.HOURS.between(midnight, currentTime); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public static LocalDateTime getEndTime(String time) { | 
				
			||||
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); | 
				
			||||
        java.time.LocalDate timeDate = java.time.LocalDate.parse(time, formatter); | 
				
			||||
        LocalDateTime resultTime = LocalDateTime.of(timeDate, LocalTime.MIDNIGHT); | 
				
			||||
        // 比较两个时间的大小
 | 
				
			||||
        LocalDateTime now = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0); | 
				
			||||
        if (now.compareTo(resultTime) > 0) { | 
				
			||||
            resultTime = LocalDateTime.of(timeDate, LocalTime.MAX); | 
				
			||||
        } else { | 
				
			||||
            resultTime = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0); | 
				
			||||
        } | 
				
			||||
        return resultTime; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public static LocalDateTime getEndTimeByDay(String time) { | 
				
			||||
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); | 
				
			||||
        java.time.LocalDate timeDate = java.time.LocalDate.parse(time, formatter); | 
				
			||||
        return LocalDateTime.of(timeDate, LocalTime.MIDNIGHT).plusDays(1); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public static LocalDateTime getStartTime(String time) { | 
				
			||||
        // 创建一个 DateTimeFormatter 对象来解析日期字符串
 | 
				
			||||
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); | 
				
			||||
        java.time.LocalDate startDate = java.time.LocalDate.parse(time, formatter); | 
				
			||||
        // 结合 LocalDate 和 LocalTime 创建 LocalDateTime 对象
 | 
				
			||||
        LocalDateTime startTime = LocalDateTime.of(startDate, LocalTime.MIDNIGHT); | 
				
			||||
        return startTime; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public static String getStringTime(LocalDateTime time) { | 
				
			||||
        // 创建一个 DateTimeFormatter 对象,用于定义你想要的格式
 | 
				
			||||
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | 
				
			||||
        // 使用 formatter 将 LocalDateTime 转换为 String
 | 
				
			||||
        return time.format(formatter); | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
@ -1,39 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.util; | 
				
			||||
 | 
				
			||||
import org.springframework.util.CollectionUtils; | 
				
			||||
 | 
				
			||||
import java.util.Collections; | 
				
			||||
import java.util.List; | 
				
			||||
import java.util.stream.Collectors; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author tanghaihao | 
				
			||||
 * @date 2023年07月12日 17:15 | 
				
			||||
 */ | 
				
			||||
public class MemoryPagination { | 
				
			||||
    /** | 
				
			||||
     * 内存分页 | 
				
			||||
     * | 
				
			||||
     * @param records  待分页的数据 | 
				
			||||
     * @param pageNum  当前页码 | 
				
			||||
     * @param pageSize 每页显示的条数 | 
				
			||||
     * @return 分页之后的数据 | 
				
			||||
     */ | 
				
			||||
    public static <T> List<T> pagination(List<T> records, int pageNum, int pageSize) { | 
				
			||||
        if (CollectionUtils.isEmpty(records)) { | 
				
			||||
            return Collections.emptyList(); | 
				
			||||
        } | 
				
			||||
        int totalCount = records.size() ; | 
				
			||||
        int remainder = totalCount % pageSize; | 
				
			||||
        int pageCount = (remainder > 0) ? totalCount / pageSize + 1 : totalCount / pageSize; | 
				
			||||
        if (remainder == 0) { | 
				
			||||
            return records.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList()); | 
				
			||||
        } else { | 
				
			||||
            if (pageNum == pageCount) { | 
				
			||||
                return records.stream().skip((pageNum - 1) * pageSize).limit(totalCount).collect(Collectors.toList()); | 
				
			||||
            } else { | 
				
			||||
                return records.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList()); | 
				
			||||
            } | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
@ -1,43 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author WL | 
				
			||||
 * @Version v1.0 | 
				
			||||
 * @Serial 1.0 | 
				
			||||
 * @Date 2023/8/31 9:37 | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class AvgMonitorCountVo { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站名称 | 
				
			||||
     */ | 
				
			||||
    private String name; | 
				
			||||
    /** | 
				
			||||
     * 核定下限流量 | 
				
			||||
     */ | 
				
			||||
    private BigDecimal flowValue; | 
				
			||||
    /** | 
				
			||||
     * 考核天数 | 
				
			||||
     */ | 
				
			||||
    private Long count; | 
				
			||||
    /** | 
				
			||||
     * 合格天数 | 
				
			||||
     */ | 
				
			||||
    private Integer passCount; | 
				
			||||
    /** | 
				
			||||
     * 合格率 | 
				
			||||
     */ | 
				
			||||
    private String passPre; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    private List<RealMonitorSingleInfoVo> infos; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,29 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author WL | 
				
			||||
 * @Version v1.0 | 
				
			||||
 * @Serial 1.0 | 
				
			||||
 * @Date 2023/8/31 9:37 | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class AvgMonitorReq extends Query { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站名称 | 
				
			||||
     */ | 
				
			||||
    private String name; | 
				
			||||
    /** | 
				
			||||
     * 开始时间 | 
				
			||||
     */ | 
				
			||||
    private String startTime; | 
				
			||||
    /** | 
				
			||||
     * 结束时间 | 
				
			||||
     */ | 
				
			||||
    private String endTime; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,54 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author WL | 
				
			||||
 * @Version v1.0 | 
				
			||||
 * @Serial 1.0 | 
				
			||||
 * @Date 2023/8/31 9:37 | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class AvgMonitorVo { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站名称 | 
				
			||||
     */ | 
				
			||||
    private String name; | 
				
			||||
    /** | 
				
			||||
     * 核定下限流量 | 
				
			||||
     */ | 
				
			||||
    private BigDecimal flowValue; | 
				
			||||
    /** | 
				
			||||
     * 日均流量 | 
				
			||||
     */ | 
				
			||||
    private String avgFlow; | 
				
			||||
    /** | 
				
			||||
     * 实时流量 | 
				
			||||
     */ | 
				
			||||
    private String realFlow; | 
				
			||||
    /** | 
				
			||||
     * 现在的时间 | 
				
			||||
     */ | 
				
			||||
    private String dateNow; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 经度(东经) | 
				
			||||
     */ | 
				
			||||
    private BigDecimal lgtd; | 
				
			||||
    /** | 
				
			||||
     * 纬度(北纬) | 
				
			||||
     */ | 
				
			||||
    private BigDecimal lttd; | 
				
			||||
    /** | 
				
			||||
     * 类型 1无节制电站 2流量计电站 | 
				
			||||
     */ | 
				
			||||
    private String stationType; | 
				
			||||
    /** | 
				
			||||
     * 上报率 | 
				
			||||
     */ | 
				
			||||
    private String passPre; | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,80 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
import java.math.RoundingMode; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author WL | 
				
			||||
 * @Version v1.0 | 
				
			||||
 * @Serial 1.0 | 
				
			||||
 * @Date 2023/8/31 9:37 | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class EcologicalFlowVo { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站数 | 
				
			||||
     */ | 
				
			||||
    private Integer allStationListSize; | 
				
			||||
    /** | 
				
			||||
     * 无节制电站 | 
				
			||||
     */ | 
				
			||||
    private Integer noLimitStationListSize; | 
				
			||||
    /** | 
				
			||||
     * 流量计电站 | 
				
			||||
     */ | 
				
			||||
    private Integer flowStationListSize; | 
				
			||||
    /** | 
				
			||||
     * 昨日达标率 | 
				
			||||
     */ | 
				
			||||
    private String yesterdayFinishPer; | 
				
			||||
    /** | 
				
			||||
     * 昨日达标数量 | 
				
			||||
     */ | 
				
			||||
    private Integer yesterdayFinishCount; | 
				
			||||
    /** | 
				
			||||
     * 上月达标数量 | 
				
			||||
     */ | 
				
			||||
    private Integer monthFinishCount; | 
				
			||||
    /** | 
				
			||||
     * 上月达标率 | 
				
			||||
     */ | 
				
			||||
    private String monthFinishPer; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 周达标率 | 
				
			||||
     */ | 
				
			||||
    private String weekFinishPer; | 
				
			||||
    /** | 
				
			||||
     * 季达标率 | 
				
			||||
     */ | 
				
			||||
    private String quarterFinishPer; | 
				
			||||
    /** | 
				
			||||
     * 半年达标率 | 
				
			||||
     */ | 
				
			||||
    private String halfYearFinishPer; | 
				
			||||
    /** | 
				
			||||
     * 年达标率 | 
				
			||||
     */ | 
				
			||||
    private String yearFinishPer; | 
				
			||||
    /** | 
				
			||||
     * 今天上报率 | 
				
			||||
     */ | 
				
			||||
    private String reportTodayPre; | 
				
			||||
    /** | 
				
			||||
     * 今天预警数 | 
				
			||||
     */ | 
				
			||||
    private Integer warnTodayCount; | 
				
			||||
    /** | 
				
			||||
     * 昨天上报率 | 
				
			||||
     */ | 
				
			||||
    private String reportYesTerdayPre; | 
				
			||||
    /** | 
				
			||||
     * 昨天预警数 | 
				
			||||
     */ | 
				
			||||
    private Integer warnYesTerdayCount; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,37 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author WL | 
				
			||||
 * @Version v1.0 | 
				
			||||
 * @Serial 1.0 | 
				
			||||
 * @Date 2023/8/31 9:37 | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class ExamStationFlowDataReq extends Query { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站名称 | 
				
			||||
     */ | 
				
			||||
    private String name; | 
				
			||||
    /** | 
				
			||||
     * 开始时间 | 
				
			||||
     */ | 
				
			||||
    private String startTime; | 
				
			||||
    /** | 
				
			||||
     * 结束时间 | 
				
			||||
     */ | 
				
			||||
    private String endTime; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 1 无节制电站 2 流量计电站 | 
				
			||||
     */ | 
				
			||||
    private String stationType; | 
				
			||||
    /** | 
				
			||||
     * 是否达标 | 
				
			||||
     */ | 
				
			||||
    private String isPass; | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,60 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-15 18:33 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class ExamStationFlowReportDayVo { | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站名称 | 
				
			||||
     */ | 
				
			||||
    private String name; | 
				
			||||
    /** | 
				
			||||
     * 所属区域 | 
				
			||||
     */ | 
				
			||||
    private String areaName; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 状态 | 
				
			||||
     */ | 
				
			||||
    private String status; | 
				
			||||
    /** | 
				
			||||
     * 日泄放比 | 
				
			||||
     */ | 
				
			||||
    private String dayOutFlowPre; | 
				
			||||
    /** | 
				
			||||
     * 核定流量 | 
				
			||||
     */ | 
				
			||||
    private BigDecimal flowValue; | 
				
			||||
    /** | 
				
			||||
     * 前日日均流量 | 
				
			||||
     */ | 
				
			||||
    private BigDecimal yesTerDayAvgFlowValue; | 
				
			||||
    /** | 
				
			||||
     * 瞬时流量 | 
				
			||||
     */ | 
				
			||||
    private BigDecimal realFlowValue; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 今日平均流量 | 
				
			||||
     */ | 
				
			||||
    private BigDecimal toDayAvgFlowValue; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 实际下泄流量 | 
				
			||||
     */ | 
				
			||||
    private BigDecimal realOutFlow; | 
				
			||||
    /** | 
				
			||||
     * 核定下泄流量 | 
				
			||||
     */ | 
				
			||||
    private BigDecimal outFlow; | 
				
			||||
} | 
				
			||||
@ -1,33 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-15 18:41 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class ExamStationFlowReportDetailVo { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 核定流量 | 
				
			||||
     */ | 
				
			||||
    private BigDecimal ecologicalFlowValue; | 
				
			||||
    /** | 
				
			||||
     * 日均流量 | 
				
			||||
     */ | 
				
			||||
    private BigDecimal flowValue; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 时间 | 
				
			||||
     */ | 
				
			||||
    private String tm; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 是否合格 | 
				
			||||
     */ | 
				
			||||
    private String isPass; | 
				
			||||
} | 
				
			||||
@ -1,49 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-15 18:33 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class ExamStationFlowReportVo { | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站名称 | 
				
			||||
     */ | 
				
			||||
    private String name; | 
				
			||||
    /** | 
				
			||||
     * 所属区域 | 
				
			||||
     */ | 
				
			||||
    private String areaName; | 
				
			||||
    /** | 
				
			||||
     * 核定下限流量 | 
				
			||||
     */ | 
				
			||||
    private BigDecimal flowValue; | 
				
			||||
    /** | 
				
			||||
     * 考核天数 | 
				
			||||
     */ | 
				
			||||
    private Long count; | 
				
			||||
    /** | 
				
			||||
     * 合格天数 | 
				
			||||
     */ | 
				
			||||
    private Integer passCount; | 
				
			||||
    /** | 
				
			||||
     * 合格率 | 
				
			||||
     */ | 
				
			||||
    private String passPre; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 是否合格 | 
				
			||||
     */ | 
				
			||||
    private String isPass; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    private List<ExamStationFlowReportDetailVo> infos; | 
				
			||||
} | 
				
			||||
@ -1,26 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-20 17:23 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class FlowWarnQueryDTO { | 
				
			||||
    /** | 
				
			||||
     * 开始时间 | 
				
			||||
     */ | 
				
			||||
    private String startTime; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 结束时间 | 
				
			||||
     */ | 
				
			||||
    private String endTime; | 
				
			||||
    /** | 
				
			||||
     * 站点id | 
				
			||||
     */ | 
				
			||||
    private String objectCode; | 
				
			||||
} | 
				
			||||
@ -1,45 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-19 10:00 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class FlowWarnVo { | 
				
			||||
    /** | 
				
			||||
     * 站点名称 | 
				
			||||
     */ | 
				
			||||
    String name; | 
				
			||||
    /** | 
				
			||||
     * 消息内容 | 
				
			||||
     */ | 
				
			||||
    String content; | 
				
			||||
    /** | 
				
			||||
     * 发送时间 | 
				
			||||
     */ | 
				
			||||
    String sendTime; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 发送人id | 
				
			||||
     */ | 
				
			||||
    String receiveUserId; | 
				
			||||
    /** | 
				
			||||
     * 发送人姓名 | 
				
			||||
     */ | 
				
			||||
    String receiveUserName; | 
				
			||||
    /** | 
				
			||||
     * 业务对象来源(数据平台、水库等) | 
				
			||||
     */ | 
				
			||||
    String objectSource; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 业务对象编码 | 
				
			||||
     */ | 
				
			||||
    String objectCode; | 
				
			||||
 | 
				
			||||
    String alarmLevel; | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,33 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-21 19:04 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
@Data | 
				
			||||
public class ImageReq { | 
				
			||||
    /** | 
				
			||||
     * 开始时间 | 
				
			||||
     */ | 
				
			||||
    private String startTime; | 
				
			||||
    /** | 
				
			||||
     * 结束时间 | 
				
			||||
     */ | 
				
			||||
    private String endTime; | 
				
			||||
    /** | 
				
			||||
     * 站点名称 | 
				
			||||
     */ | 
				
			||||
    private String name; | 
				
			||||
    /** | 
				
			||||
     * 设备编码 | 
				
			||||
     */ | 
				
			||||
    private String deviceCode; | 
				
			||||
    /** | 
				
			||||
     * 正常 异常 | 
				
			||||
     */ | 
				
			||||
    private String status; | 
				
			||||
} | 
				
			||||
@ -1,28 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-21 19:04 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
@Data | 
				
			||||
public class ImageVo { | 
				
			||||
 | 
				
			||||
    private Long id; | 
				
			||||
 | 
				
			||||
    private String stcd; | 
				
			||||
 | 
				
			||||
    private String time; | 
				
			||||
 | 
				
			||||
    private String data; | 
				
			||||
 | 
				
			||||
    private String manualpath; | 
				
			||||
 | 
				
			||||
    private String name; | 
				
			||||
 | 
				
			||||
    private String status; | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,22 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-21 19:33 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class MissingImagesRes { | 
				
			||||
 | 
				
			||||
    String deviceCode; | 
				
			||||
 | 
				
			||||
    String name; | 
				
			||||
 | 
				
			||||
    String area; | 
				
			||||
 | 
				
			||||
    String month; | 
				
			||||
 | 
				
			||||
    String monthMissingPre; | 
				
			||||
} | 
				
			||||
@ -1,46 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import com.alibaba.excel.annotation.ExcelProperty; | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author WL | 
				
			||||
 * @Version v1.0 | 
				
			||||
 * @Serial 1.0 | 
				
			||||
 * @Date 2023/8/31 9:37 | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class RealMonitorExportDTO { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站名称 | 
				
			||||
     */ | 
				
			||||
    @ExcelProperty(value = "电站名称", index = 0) | 
				
			||||
    private String name; | 
				
			||||
    /** | 
				
			||||
     * 核定下限流量 | 
				
			||||
     */ | 
				
			||||
    @ExcelProperty(value = "核定流量(m³/s)", index = 1) | 
				
			||||
    private BigDecimal flowValue; | 
				
			||||
    /** | 
				
			||||
     * 监测流量 | 
				
			||||
     */ | 
				
			||||
    @ExcelProperty(value = "监测流量(m³/s)", index = 2) | 
				
			||||
    private String realFlow; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 上报个数 | 
				
			||||
     */ | 
				
			||||
    @ExcelProperty(value = "上报数(个)", index = 3) | 
				
			||||
    private Integer reportCount; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 时间 | 
				
			||||
     */ | 
				
			||||
    @ExcelProperty(value = "时间", index = 4) | 
				
			||||
    private String dateNow; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,27 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author WL | 
				
			||||
 * @Version v1.0 | 
				
			||||
 * @Serial 1.0 | 
				
			||||
 * @Date 2023/8/31 9:37 | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class RealMonitorRes { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站名称 | 
				
			||||
     */ | 
				
			||||
    private List<RealMonitorVo> realMonitorVos; | 
				
			||||
    /** | 
				
			||||
     * 应上报条数 | 
				
			||||
     */ | 
				
			||||
    private Long reportCount; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,27 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-14 09:56 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class RealMonitorSingleInfoReq extends Query { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 设备编号 | 
				
			||||
     */ | 
				
			||||
    private String deviceCode; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 开始时间 | 
				
			||||
     */ | 
				
			||||
    private String startTime; | 
				
			||||
    /** | 
				
			||||
     * 结束时间 | 
				
			||||
     */ | 
				
			||||
    private String endTime; | 
				
			||||
} | 
				
			||||
@ -1,25 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import com.alibaba.excel.annotation.ExcelProperty; | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-14 09:56 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class RealMonitorSingleInfoVo { | 
				
			||||
    /** | 
				
			||||
     * 实时值 | 
				
			||||
     */ | 
				
			||||
    @ExcelProperty(value = "流量值", index = 0) | 
				
			||||
    private String value; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 时间 | 
				
			||||
     */ | 
				
			||||
    @ExcelProperty(value = "监测时间", index = 1) | 
				
			||||
    private String tm; | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,47 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import com.alibaba.excel.annotation.ExcelProperty; | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author WL | 
				
			||||
 * @Version v1.0 | 
				
			||||
 * @Serial 1.0 | 
				
			||||
 * @Date 2023/8/31 9:37 | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class RealMonitorVo { | 
				
			||||
    /** | 
				
			||||
     * 设备编号 | 
				
			||||
     */ | 
				
			||||
    private String deviceCode; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站名称 | 
				
			||||
     */ | 
				
			||||
    private String name; | 
				
			||||
    /** | 
				
			||||
     * 核定下限流量 | 
				
			||||
     */ | 
				
			||||
    private BigDecimal flowValue; | 
				
			||||
    /** | 
				
			||||
     * 监测流量 | 
				
			||||
     */ | 
				
			||||
    private String realFlow; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 上报个数 | 
				
			||||
     */ | 
				
			||||
    private Integer reportCount; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 时间 | 
				
			||||
     */ | 
				
			||||
    private String dateNow; | 
				
			||||
 | 
				
			||||
    private String areaName; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,21 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author WL | 
				
			||||
 * @Version v1.0 | 
				
			||||
 * @Serial 1.0 | 
				
			||||
 * @Date 2023/8/31 9:37 | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class StationQueryReq { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站名称 | 
				
			||||
     */ | 
				
			||||
    private String name; | 
				
			||||
 | 
				
			||||
    private String stationType; | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,25 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-25 17:21 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
@Data | 
				
			||||
public class StationTreeRes { | 
				
			||||
    StationVo stationVo; | 
				
			||||
    /** | 
				
			||||
     * 数量 | 
				
			||||
     */ | 
				
			||||
    int count; | 
				
			||||
    /** | 
				
			||||
     * 视频点位list | 
				
			||||
     */ | 
				
			||||
    List<StationTypeVo> child; | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,70 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.annotation.SqlCondition; | 
				
			||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize; | 
				
			||||
import com.fasterxml.jackson.databind.ser.std.NullSerializer; | 
				
			||||
import io.swagger.annotations.ApiModelProperty; | 
				
			||||
import lombok.Data; | 
				
			||||
import org.springblade.core.mp.support.QueryField; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-25 17:11 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
@Data | 
				
			||||
public class StationTypeVo { | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("主键ID") | 
				
			||||
    private Long id; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("视频源配置名称") | 
				
			||||
    private String name; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("站点ID") | 
				
			||||
    private String stationId; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("机构ID") | 
				
			||||
    private Long deptId; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("是否平台接入") | 
				
			||||
    private Integer isHikvideo; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("类型") | 
				
			||||
    private String type; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("视频类型;暂只包括清污机类型") | 
				
			||||
    private String videoType; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("数据源地址") | 
				
			||||
    private String liveSourceAddress; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("视频源编码") | 
				
			||||
    private String pointCode; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("代理API网关nginx服务器ip端口") | 
				
			||||
    private String videoHost; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("秘钥appkey") | 
				
			||||
    private String appKey; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("秘钥appSecret") | 
				
			||||
    private String appSecret; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("排序") | 
				
			||||
    private Integer sort; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("站點排序") | 
				
			||||
    private Integer stationSort; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("萤石云地址") | 
				
			||||
    private String ysyUrl; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("视频归属类型 1代表防汛安全,2代表运行安全,3生态流量监视") | 
				
			||||
    private Integer videoOwerType; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("拼音") | 
				
			||||
    private String pingyin; | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,45 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author WL | 
				
			||||
 * @Version v1.0 | 
				
			||||
 * @Serial 1.0 | 
				
			||||
 * @Date 2023/8/31 9:37 | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class StationVo { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 名称 | 
				
			||||
     */ | 
				
			||||
    private String name; | 
				
			||||
    /** | 
				
			||||
     * 设备编号 | 
				
			||||
     */ | 
				
			||||
    private String deviceCode; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 核定流量 | 
				
			||||
     */ | 
				
			||||
    private BigDecimal flowValue; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站类型  1 无节制电站 2流量计电站 | 
				
			||||
     */ | 
				
			||||
    private String stationType; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 经度(东经) | 
				
			||||
     */ | 
				
			||||
    private BigDecimal lgtd; | 
				
			||||
    /** | 
				
			||||
     * 纬度(北纬) | 
				
			||||
     */ | 
				
			||||
    private BigDecimal lttd; | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,40 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author WL | 
				
			||||
 * @Version v1.0 | 
				
			||||
 * @Serial 1.0 | 
				
			||||
 * @Date 2023/8/31 9:37 | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class StatisticsFlowDataDetailVo { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站名称 | 
				
			||||
     */ | 
				
			||||
    private String name; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 核定流量 | 
				
			||||
     */ | 
				
			||||
    private String flowValue; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 考核天数 | 
				
			||||
     */ | 
				
			||||
    private Integer examDays; | 
				
			||||
    /** | 
				
			||||
     * 合格天数 | 
				
			||||
     */ | 
				
			||||
    private Integer examPassDays = 0; | 
				
			||||
    /** | 
				
			||||
     * 合格率 | 
				
			||||
     */ | 
				
			||||
    private String examPassDayPre = "0.00%"; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,29 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author WL | 
				
			||||
 * @Version v1.0 | 
				
			||||
 * @Serial 1.0 | 
				
			||||
 * @Date 2023/8/31 9:37 | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class StatisticsFlowDataReq extends Query { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 电站名称 | 
				
			||||
     */ | 
				
			||||
    private String name; | 
				
			||||
    /** | 
				
			||||
     * 开始时间 | 
				
			||||
     */ | 
				
			||||
    private String startTime; | 
				
			||||
    /** | 
				
			||||
     * 结束时间 | 
				
			||||
     */ | 
				
			||||
    private String endTime; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,37 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.vo; | 
				
			||||
 | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author WL | 
				
			||||
 * @Version v1.0 | 
				
			||||
 * @Serial 1.0 | 
				
			||||
 * @Date 2023/8/31 9:37 | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class StatisticsFlowDataVo { | 
				
			||||
    /** | 
				
			||||
     * 区域名称 | 
				
			||||
     */ | 
				
			||||
    private String areaName; | 
				
			||||
    /** | 
				
			||||
     * 考核电站个数 | 
				
			||||
     */ | 
				
			||||
    private Integer examCount; | 
				
			||||
    /** | 
				
			||||
     * 达标电站个数 | 
				
			||||
     */ | 
				
			||||
    private Integer passCount; | 
				
			||||
    /** | 
				
			||||
     * 达标率 | 
				
			||||
     */ | 
				
			||||
    private String passPre; | 
				
			||||
    /** | 
				
			||||
     * 报表数据 | 
				
			||||
     */ | 
				
			||||
    private List<StatisticsFlowDataDetailVo> detail; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,20 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.entity; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.annotation.TableName; | 
				
			||||
import io.swagger.annotations.ApiModel; | 
				
			||||
import lombok.Data; | 
				
			||||
import lombok.EqualsAndHashCode; | 
				
			||||
import org.springblade.core.tenant.mp.TenantEntity; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author xiashandong | 
				
			||||
 * @created 2020/9/8 15:09 | 
				
			||||
 **/ | 
				
			||||
@Data | 
				
			||||
@TableName("hzims_institutional_information") | 
				
			||||
@EqualsAndHashCode(callSuper = true) | 
				
			||||
@ApiModel(value = "制度资料实体类") | 
				
			||||
public class InstitutionalEntity extends TenantEntity { | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,56 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.entity; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.annotation.TableName; | 
				
			||||
import io.swagger.annotations.ApiModel; | 
				
			||||
import io.swagger.annotations.ApiModelProperty; | 
				
			||||
import lombok.Data; | 
				
			||||
import lombok.EqualsAndHashCode; | 
				
			||||
import org.springblade.core.tenant.mp.TenantEntity; | 
				
			||||
 | 
				
			||||
import java.util.Date; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
@EqualsAndHashCode(callSuper = true) | 
				
			||||
@TableName("hzims_rectification_supervision") | 
				
			||||
@ApiModel(value = "整改督办") | 
				
			||||
public class RectificationEntity extends TenantEntity { | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "站点编码") | 
				
			||||
    private String stationId; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "站点名称") | 
				
			||||
    private String stationName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "责任人ID") | 
				
			||||
    private Long personLiable; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "责任人名称") | 
				
			||||
    private String personLiableName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "整改类型: 0-整改闭环 1-会议督办") | 
				
			||||
    private Integer rectificationType; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "限时日期") | 
				
			||||
    private Date limitTime; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "提醒日期") | 
				
			||||
    private Date remindTime; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "完成日期") | 
				
			||||
    private Date completeTime; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "问题事项") | 
				
			||||
    private String problemMatters; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "措施") | 
				
			||||
    private String measures; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "问题附件路径") | 
				
			||||
    private String problemAttachmentPath; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "问题附件名称") | 
				
			||||
    private String problemAttachmentName; | 
				
			||||
} | 
				
			||||
@ -0,0 +1,20 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.entity; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.annotation.TableName; | 
				
			||||
import io.swagger.annotations.ApiModel; | 
				
			||||
import lombok.Data; | 
				
			||||
import lombok.EqualsAndHashCode; | 
				
			||||
import org.springblade.core.tenant.mp.TenantEntity; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author xiashandong | 
				
			||||
 * @created 2020/9/8 15:09 | 
				
			||||
 **/ | 
				
			||||
@Data | 
				
			||||
@TableName("hzims_safety_training") | 
				
			||||
@EqualsAndHashCode(callSuper = true) | 
				
			||||
@ApiModel(value = "安全培训实体类") | 
				
			||||
public class TrainEntity extends TenantEntity { | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,62 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.entity; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.annotation.TableName; | 
				
			||||
import com.fasterxml.jackson.annotation.JsonFormat; | 
				
			||||
import io.swagger.annotations.ApiModel; | 
				
			||||
import io.swagger.annotations.ApiModelProperty; | 
				
			||||
import lombok.Data; | 
				
			||||
import lombok.EqualsAndHashCode; | 
				
			||||
import org.springblade.core.tenant.mp.TenantEntity; | 
				
			||||
import org.springblade.core.tool.utils.DateUtil; | 
				
			||||
import org.springframework.format.annotation.DateTimeFormat; | 
				
			||||
 | 
				
			||||
import java.util.Date; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
@EqualsAndHashCode(callSuper = true) | 
				
			||||
@TableName("hzims_violation_assessment") | 
				
			||||
@ApiModel(value = "违章考核实体类") | 
				
			||||
public class ViolationEntity extends TenantEntity { | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "站点编码") | 
				
			||||
    private String stationId; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "站点名称") | 
				
			||||
    private String stationName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "发现人ID") | 
				
			||||
    private Long discoverer; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "发现人名称") | 
				
			||||
    private String discovererName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "被考核人ID") | 
				
			||||
    private Long assessorCover; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "被考核人名称") | 
				
			||||
    private String assessorName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "发现时间") | 
				
			||||
    @DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME) | 
				
			||||
    @JsonFormat(pattern = DateUtil.PATTERN_DATETIME) | 
				
			||||
    private Date discoverTime; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "问题事项") | 
				
			||||
    private String problemMatters; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "违规级别 : 0-严重 1-一般") | 
				
			||||
    private Integer violationLevel; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "处理结果") | 
				
			||||
    private String processingResults; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "通知单附件地址") | 
				
			||||
    private String noticeAttachmentPath; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "通知单附件名称") | 
				
			||||
    private String noticeAttachmentName; | 
				
			||||
} | 
				
			||||
@ -0,0 +1,27 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.vo; | 
				
			||||
 | 
				
			||||
import io.swagger.annotations.ApiModelProperty; | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class RectificationParamVo { | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "站点Id") | 
				
			||||
    private String stationId; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "月份") | 
				
			||||
    private String month; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "整改类型: 0-整改闭环 1-会议督办") | 
				
			||||
    private Integer rectificationType; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "整改状态: 0-未整改 1-已整改") | 
				
			||||
    private Integer status; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "责任人") | 
				
			||||
    private String personLiableName; | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,23 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.vo; | 
				
			||||
 | 
				
			||||
import io.swagger.annotations.ApiModelProperty; | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class RectificationSummaryVo { | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "站点Id") | 
				
			||||
    private String stationId; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "整改类型") | 
				
			||||
    private Integer rectificationType; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "应完成数量") | 
				
			||||
    private Integer completeSum; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "完成数量") | 
				
			||||
    private Integer completeCount; | 
				
			||||
} | 
				
			||||
@ -0,0 +1,29 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.vo; | 
				
			||||
 | 
				
			||||
import io.swagger.annotations.ApiModelProperty; | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class ViolationParamVo { | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "站点Id") | 
				
			||||
    private String stationId; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "月份") | 
				
			||||
    private String month; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "发现开始时间") | 
				
			||||
    private String startTime; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "发现结束时间") | 
				
			||||
    private String endTime; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "违章等级") | 
				
			||||
    private Integer violationLevel; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "发现人") | 
				
			||||
    private String discovererName; | 
				
			||||
} | 
				
			||||
@ -0,0 +1,20 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.vo; | 
				
			||||
 | 
				
			||||
import io.swagger.annotations.ApiModelProperty; | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
@Data | 
				
			||||
public class ViolationSummaryVo { | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "站点Id") | 
				
			||||
    private String stationId; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "站点名称") | 
				
			||||
    private String stationName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty(value = "违规次数") | 
				
			||||
    private Integer count; | 
				
			||||
} | 
				
			||||
@ -1,75 +0,0 @@
					 | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 
				
			||||
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | 
				
			||||
    <modelVersion>4.0.0</modelVersion> | 
				
			||||
    <parent> | 
				
			||||
        <groupId>com.hnac.hzims</groupId> | 
				
			||||
        <artifactId>hzims-service</artifactId> | 
				
			||||
        <version>4.0.0-SNAPSHOT</version> | 
				
			||||
    </parent> | 
				
			||||
 | 
				
			||||
    <artifactId>hzims-ecological</artifactId> | 
				
			||||
 | 
				
			||||
    <properties> | 
				
			||||
        <maven.compiler.source>8</maven.compiler.source> | 
				
			||||
        <maven.compiler.target>8</maven.compiler.target> | 
				
			||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | 
				
			||||
    </properties> | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    <dependencies> | 
				
			||||
        <dependency> | 
				
			||||
            <groupId>com.baomidou</groupId> | 
				
			||||
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId> | 
				
			||||
        </dependency> | 
				
			||||
        <dependency> | 
				
			||||
            <groupId>com.hnac.hzinfo.data</groupId> | 
				
			||||
            <artifactId>hzinfo-data-sdk</artifactId> | 
				
			||||
        </dependency> | 
				
			||||
        <dependency> | 
				
			||||
            <groupId>com.hnac.hzims</groupId> | 
				
			||||
            <artifactId>hzims-ecological-api</artifactId> | 
				
			||||
            <version>${hzims.project.version}</version> | 
				
			||||
        </dependency> | 
				
			||||
        <dependency> | 
				
			||||
            <groupId>com.hnac.hzims</groupId> | 
				
			||||
            <artifactId>hzims-operational-api</artifactId> | 
				
			||||
            <version>${hzims.project.version}</version> | 
				
			||||
        </dependency> | 
				
			||||
        <dependency> | 
				
			||||
            <groupId>com.hnac.hzims</groupId> | 
				
			||||
            <artifactId>message-alarm-api</artifactId> | 
				
			||||
            <version>${hzims.project.version}</version> | 
				
			||||
        </dependency> | 
				
			||||
 | 
				
			||||
    </dependencies> | 
				
			||||
    <build> | 
				
			||||
        <finalName>${project.name}-${project.version}</finalName> | 
				
			||||
        <plugins> | 
				
			||||
            <plugin> | 
				
			||||
                <groupId>com.spotify</groupId> | 
				
			||||
                <artifactId>dockerfile-maven-plugin</artifactId> | 
				
			||||
                <configuration> | 
				
			||||
                    <username>${docker.username}</username> | 
				
			||||
                    <password>${docker.password}</password> | 
				
			||||
                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository> | 
				
			||||
                    <tag>${project.version}</tag> | 
				
			||||
                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth> | 
				
			||||
                    <buildArgs> | 
				
			||||
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> | 
				
			||||
                    </buildArgs> | 
				
			||||
                    <skip>false</skip> | 
				
			||||
                </configuration> | 
				
			||||
            </plugin> | 
				
			||||
            <plugin> | 
				
			||||
                <groupId>org.springframework.boot</groupId> | 
				
			||||
                <artifactId>spring-boot-maven-plugin</artifactId> | 
				
			||||
                <configuration> | 
				
			||||
                    <!--设置为true,以便把本地的system的jar也包括进来--> | 
				
			||||
                    <includeSystemScope>true</includeSystemScope> | 
				
			||||
                </configuration> | 
				
			||||
            </plugin> | 
				
			||||
        </plugins> | 
				
			||||
    </build> | 
				
			||||
</project> | 
				
			||||
@ -1,21 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang; | 
				
			||||
 | 
				
			||||
import org.mybatis.spring.annotation.MapperScan; | 
				
			||||
import org.springblade.core.cloud.feign.EnableBladeFeign; | 
				
			||||
import org.springblade.core.launch.BladeApplication; | 
				
			||||
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; | 
				
			||||
import org.springframework.cloud.client.SpringCloudApplication; | 
				
			||||
import org.springframework.context.annotation.ComponentScan; | 
				
			||||
 | 
				
			||||
@EnableBladeFeign(basePackages = {"org.springblade", "com.hnac"}) | 
				
			||||
@SpringCloudApplication | 
				
			||||
@MapperScan("com.hnac.hzims.**.mapper.**") | 
				
			||||
@ComponentScan(basePackages = {"com.hnac.hzims.*"}) | 
				
			||||
public class SuiChangApplication extends SpringBootServletInitializer { | 
				
			||||
    public final static String APP_NAME = "hzims-ecological"; | 
				
			||||
 | 
				
			||||
    public static void main(String[] args) { | 
				
			||||
        BladeApplication.run(APP_NAME, SuiChangApplication.class, args); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,111 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.controller; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.suichang.service.EcologicalFlowService; | 
				
			||||
import com.hnac.hzims.suichang.service.RealMonitorService; | 
				
			||||
import com.hnac.hzims.suichang.util.MemoryPagination; | 
				
			||||
import com.hnac.hzims.suichang.vo.*; | 
				
			||||
import io.swagger.annotations.Api; | 
				
			||||
import io.swagger.annotations.ApiOperation; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
import org.springblade.core.tool.api.R; | 
				
			||||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
import org.springframework.web.bind.annotation.RequestBody; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMethod; | 
				
			||||
import org.springframework.web.bind.annotation.RestController; | 
				
			||||
 | 
				
			||||
import javax.servlet.http.HttpServletResponse; | 
				
			||||
import java.util.HashMap; | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 遂昌生态流量 | 
				
			||||
 * | 
				
			||||
 * @author liangfan | 
				
			||||
 */ | 
				
			||||
@RestController | 
				
			||||
@RequestMapping("/ecologicalFlow") | 
				
			||||
@Api(value = "遂昌生态流量", tags = "遂昌生态流量接口") | 
				
			||||
public class EcologicalFlowController { | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private EcologicalFlowService ecologicalFlowService; | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private RealMonitorService realMonitorService; | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/getEcologicalFlowIndexInfo", method = {RequestMethod.POST}) | 
				
			||||
    @ApiOperation(notes = "遂昌生态流量", value = "遂昌生态流量") | 
				
			||||
    public R getEcologicalFlowIndexInfo() { | 
				
			||||
        EcologicalFlowVo vo = ecologicalFlowService.getEcologicalFlowIndexInfo(); | 
				
			||||
        return R.data(vo); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/getAvgMonitorInfo", method = {RequestMethod.POST}) | 
				
			||||
    @ApiOperation(notes = "实时监测日均流量", value = "实时监测日均流量") | 
				
			||||
    public R getAvgMonitorInfo() { | 
				
			||||
        return R.data(realMonitorService.getAvgMonitorInfo()); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/getAvgMonitorCountInfo", method = {RequestMethod.POST}) | 
				
			||||
    @ApiOperation(notes = "生态流量监管-日均流量", value = "生态流量监管-日均流量") | 
				
			||||
    public R getAvgMonitorCountInfo(@RequestBody AvgMonitorReq req) { | 
				
			||||
        List<AvgMonitorCountVo> resultList = realMonitorService.getAvgMonitorCountInfo(req); | 
				
			||||
        // 内存分页
 | 
				
			||||
        HashMap<String, Object> map = new HashMap<>(); | 
				
			||||
        resultList = MemoryPagination.pagination(resultList, req.getCurrent(), req.getSize()); | 
				
			||||
        map.put("records", resultList); | 
				
			||||
        map.put("total", resultList.size()); | 
				
			||||
        return R.data(map); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/getRealMonitorInfo", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "实时流量页面", value = "实时流量页面") | 
				
			||||
    public R getRealMonitorInfo(String name, Query query) { | 
				
			||||
        RealMonitorRes res = realMonitorService.getRealMonitorInfo(name); | 
				
			||||
        List<RealMonitorVo> resultList = res.getRealMonitorVos(); | 
				
			||||
        HashMap<String, Object> map = new HashMap<>(); | 
				
			||||
        resultList = MemoryPagination.pagination(resultList, query.getCurrent(), query.getSize()); | 
				
			||||
        map.put("records", resultList); | 
				
			||||
        map.put("total", resultList.size()); | 
				
			||||
        map.put("reportCount", res.getReportCount()); | 
				
			||||
        return R.data(map); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/getRealMonitorSingleInfo", method = {RequestMethod.POST}) | 
				
			||||
    @ApiOperation(notes = "单个电站实时流量明细", value = "单个电站实时流量明细") | 
				
			||||
    public R getRealMonitorSingleInfo(@RequestBody RealMonitorSingleInfoReq req) { | 
				
			||||
        List<RealMonitorSingleInfoVo> resultList = realMonitorService.getRealMonitorSingleInfo(req); | 
				
			||||
        HashMap<String, Object> map = new HashMap<>(); | 
				
			||||
        resultList = MemoryPagination.pagination(resultList, req.getCurrent(), req.getSize()); | 
				
			||||
        map.put("records", resultList); | 
				
			||||
        map.put("total", resultList.size()); | 
				
			||||
        return R.data(map); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/exportRealMonitorInfo", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "导出实时流量页面数据", value = "导出实时流量页面数据") | 
				
			||||
    public void exportRealMonitorInfo(HttpServletResponse response, String name) { | 
				
			||||
        realMonitorService.exportRealMonitorInfo(response, name); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/exportRealMonitorSingleInfo", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "导出单个电站实时流量明细", value = "导出单个电站实时流量明细") | 
				
			||||
    public void exportRealMonitorSingleInfo(HttpServletResponse response, RealMonitorSingleInfoReq req) { | 
				
			||||
        realMonitorService.exportRealMonitorSingleInfo(response, req); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/exportAvgMonitorCountInfo", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "导出生态流量监管-日均流量", value = "导出生态流量监管-日均流量") | 
				
			||||
    public void exportAvgMonitorCountInfo(HttpServletResponse response, AvgMonitorReq req) { | 
				
			||||
        realMonitorService.exportAvgMonitorCountInfo(response, req); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/getRealData", method = {RequestMethod.GET}) | 
				
			||||
    public R test(String deviceCode) { | 
				
			||||
        return R.data(realMonitorService.getRealData(deviceCode)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,72 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.controller; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.common.logs.utils.StringUtils; | 
				
			||||
import com.hnac.hzims.suichang.service.ExamStationDataService; | 
				
			||||
import com.hnac.hzims.suichang.util.MemoryPagination; | 
				
			||||
import com.hnac.hzims.suichang.vo.ExamStationFlowDataReq; | 
				
			||||
import com.hnac.hzims.suichang.vo.ExamStationFlowReportDayVo; | 
				
			||||
import com.hnac.hzims.suichang.vo.ExamStationFlowReportVo; | 
				
			||||
import io.swagger.annotations.Api; | 
				
			||||
import io.swagger.annotations.ApiOperation; | 
				
			||||
import org.springblade.core.tool.api.R; | 
				
			||||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMethod; | 
				
			||||
import org.springframework.web.bind.annotation.RestController; | 
				
			||||
 | 
				
			||||
import javax.servlet.http.HttpServletResponse; | 
				
			||||
import java.util.HashMap; | 
				
			||||
import java.util.List; | 
				
			||||
import java.util.stream.Collectors; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-15 15:08 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
@RestController | 
				
			||||
@RequestMapping("/exam") | 
				
			||||
@Api(value = "遂昌生态流量-考核管理", tags = "遂昌生态流量-考核管理") | 
				
			||||
public class ExamController { | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private ExamStationDataService examStationDataService; | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/examStationFlowReportByTime", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "电站月考核", value = "电站月考核") | 
				
			||||
    public R examStatisticsFlowReportByTime(ExamStationFlowDataReq req) { | 
				
			||||
        List<ExamStationFlowReportVo> resultList = | 
				
			||||
                examStationDataService.examStationFlowReportByTime(req); | 
				
			||||
        HashMap<String, Object> map = new HashMap<>(); | 
				
			||||
        resultList = MemoryPagination.pagination(resultList, req.getCurrent(), req.getSize()); | 
				
			||||
        map.put("records", resultList); | 
				
			||||
        map.put("total", resultList.size()); | 
				
			||||
        return R.data(map); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/exportExamStationFlowReportByTime", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "电站月考核", value = "电站月考核") | 
				
			||||
    public void exportExamStationFlowReportByTime(HttpServletResponse response, ExamStationFlowDataReq req) { | 
				
			||||
            examStationDataService.exportExamStationFlowReportByTime(response, req); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/examStationFlowReportOfDay", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "电站日考核", value = "电站日考核") | 
				
			||||
    public R examStationFlowReportOfDay(ExamStationFlowDataReq req) { | 
				
			||||
        List<ExamStationFlowReportDayVo> resultList = examStationDataService.examStationFlowReportOfDay(req); | 
				
			||||
        String isPass = req.getIsPass(); | 
				
			||||
        // 条件过滤
 | 
				
			||||
        if (StringUtils.isNotBlank(req.getIsPass())) { | 
				
			||||
            resultList = | 
				
			||||
                    resultList.stream().filter(o -> o.getStatus().equals(isPass)).collect(Collectors.toList()); | 
				
			||||
        } | 
				
			||||
        HashMap<String, Object> map = new HashMap<>(); | 
				
			||||
        resultList = MemoryPagination.pagination(resultList, req.getCurrent(), req.getSize()); | 
				
			||||
        map.put("records", resultList); | 
				
			||||
        map.put("total", resultList.size()); | 
				
			||||
        return R.data(map); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,41 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.controller; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.suichang.service.FlowWarnService; | 
				
			||||
import com.hnac.hzims.suichang.vo.FlowWarnQueryDTO; | 
				
			||||
import io.swagger.annotations.Api; | 
				
			||||
import io.swagger.annotations.ApiOperation; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
import org.springblade.core.tool.api.R; | 
				
			||||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMethod; | 
				
			||||
import org.springframework.web.bind.annotation.RequestParam; | 
				
			||||
import org.springframework.web.bind.annotation.RestController; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 遂昌生态流量 | 
				
			||||
 * | 
				
			||||
 * @author liangfan | 
				
			||||
 */ | 
				
			||||
@RestController | 
				
			||||
@RequestMapping("/flowWarn") | 
				
			||||
@Api(value = "遂昌生态流量预警信息", tags = "遂昌生态流量预警信息") | 
				
			||||
public class FlowWarnController { | 
				
			||||
    @Autowired | 
				
			||||
    private FlowWarnService flowWarnService; | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/getFlowWarnList", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "大屏遂昌生态流量预警信息", value = "大屏遂昌生态流量预警信息") | 
				
			||||
    public R getFlowWarnList(FlowWarnQueryDTO dto, Query query) { | 
				
			||||
        return R.data(flowWarnService.getFlowWarnList(dto, query)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/warningPush", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "大屏遂昌生态流量预警信息", value = "大屏遂昌生态流量预警信息") | 
				
			||||
    public R warningPush(FlowWarnQueryDTO dto) { | 
				
			||||
        return R.data(flowWarnService.warningPush(dto)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,69 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.controller; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.hnac.hzims.suichang.service.ImageAndVideoService; | 
				
			||||
import com.hnac.hzims.suichang.vo.ImageReq; | 
				
			||||
import com.hnac.hzims.suichang.vo.MissingImagesRes; | 
				
			||||
import io.swagger.annotations.Api; | 
				
			||||
import io.swagger.annotations.ApiOperation; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
import org.springblade.core.tool.api.R; | 
				
			||||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
import org.springframework.web.bind.annotation.RequestBody; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMethod; | 
				
			||||
import org.springframework.web.bind.annotation.RestController; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-15 15:08 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
@RestController | 
				
			||||
@RequestMapping("/imageAndVideo") | 
				
			||||
@Api(value = "图片和视频", tags = "图片和视频") | 
				
			||||
public class ImageAndVideoController { | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private ImageAndVideoService imageAndVideoService; | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/getMissingImagesInfo", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "照片缺失率", value = "照片缺失率") | 
				
			||||
    public R<IPage<MissingImagesRes>> getMissingImagesInfo(ImageReq req, Query query) { | 
				
			||||
        return R.data(imageAndVideoService.getMissingImagesInfo(req, query)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/missingPush", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "照片缺失日期及数据", value = "照片缺失日期及数据") | 
				
			||||
    public R missingPush(ImageReq req) { | 
				
			||||
        return R.data(imageAndVideoService.missingPush(req)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/getImageInfoStatus", method = {RequestMethod.POST}) | 
				
			||||
    @ApiOperation(notes = "照片缺失率详情", value = "照片缺失率详情") | 
				
			||||
    public R getImageInfoStatus(@RequestBody ImageReq req) { | 
				
			||||
        return R.data(imageAndVideoService.getImageInfoStatus(req)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/getImageInfoByDeviceCode", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "根据DeviceCode及时间查询照片", value = "根据DeviceCode及时间查询照片") | 
				
			||||
    public R getImageInfoByDeviceCode(ImageReq req, Query query) { | 
				
			||||
        return R.data(imageAndVideoService.getImageInfoByDeviceCode(req, query)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/selectNewestImage", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "泄放照片", value = "泄放照片") | 
				
			||||
    public R selectNewestImage(ImageReq req, Query query) { | 
				
			||||
        return R.data(imageAndVideoService.selectNewestImage(req, query)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/getStationVideoType", method = {RequestMethod.GET, RequestMethod.POST}) | 
				
			||||
    @ApiOperation(value = "获取视频byType", notes = "获取视频byType") | 
				
			||||
    public R getStationTree(String videoType) { | 
				
			||||
        return R.data(imageAndVideoService.getStationVideoType(videoType)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,56 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.controller; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.suichang.service.StatisticsDataService; | 
				
			||||
import com.hnac.hzims.suichang.util.MemoryPagination; | 
				
			||||
import com.hnac.hzims.suichang.vo.StatisticsFlowDataDetailVo; | 
				
			||||
import com.hnac.hzims.suichang.vo.StatisticsFlowDataReq; | 
				
			||||
import com.hnac.hzims.suichang.vo.StatisticsFlowDataVo; | 
				
			||||
import io.swagger.annotations.Api; | 
				
			||||
import io.swagger.annotations.ApiOperation; | 
				
			||||
import org.springblade.core.tool.api.R; | 
				
			||||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMethod; | 
				
			||||
import org.springframework.web.bind.annotation.RestController; | 
				
			||||
 | 
				
			||||
import javax.servlet.http.HttpServletResponse; | 
				
			||||
import java.util.HashMap; | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-14 16:18 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
@RestController | 
				
			||||
@RequestMapping("/statisticsData") | 
				
			||||
@Api(value = "遂昌生态流量-统计报表", tags = "遂昌生态流量-统计报表") | 
				
			||||
public class StatisticsFlowDataController { | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private StatisticsDataService statisticsDataService; | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/statisticsFlowReportByTime", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "", value = "") | 
				
			||||
    public R statisticsFlowReportByTime(StatisticsFlowDataReq req) { | 
				
			||||
        StatisticsFlowDataVo res = statisticsDataService.statisticsFlowReportByTime(req); | 
				
			||||
        List<StatisticsFlowDataDetailVo> resultList = res.getDetail(); | 
				
			||||
        HashMap<String, Object> map = new HashMap<>(); | 
				
			||||
        // 内存分页
 | 
				
			||||
        resultList = MemoryPagination.pagination(resultList, req.getCurrent(), req.getSize()); | 
				
			||||
        map.put("areaName", res.getAreaName()); | 
				
			||||
        map.put("examCount", res.getExamCount()); | 
				
			||||
        map.put("passCount", res.getPassCount()); | 
				
			||||
        map.put("passPre", res.getPassPre()); | 
				
			||||
        map.put("records", resultList); | 
				
			||||
        map.put("total", resultList.size()); | 
				
			||||
        return R.data(map); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @RequestMapping(value = "/exportStatisticsFlowReportByTime", method = {RequestMethod.GET}) | 
				
			||||
    @ApiOperation(notes = "", value = "") | 
				
			||||
    public void exportStatisticsFlowReportByTime(HttpServletResponse response, StatisticsFlowDataReq req) { | 
				
			||||
        statisticsDataService.exportStatisticsFlowReportByTime(response, req); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,43 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.feign; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.suichang.mapper.EcologicalFlowMapper; | 
				
			||||
import com.hnac.hzims.suichang.service.EcologicalFlowService; | 
				
			||||
import com.hnac.hzims.suichang.vo.StationQueryReq; | 
				
			||||
import com.hnac.hzims.suichang.vo.StationVo; | 
				
			||||
import lombok.RequiredArgsConstructor; | 
				
			||||
import lombok.extern.slf4j.Slf4j; | 
				
			||||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
import org.springframework.web.bind.annotation.PostMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RestController; | 
				
			||||
 | 
				
			||||
import java.time.LocalDateTime; | 
				
			||||
import java.util.List; | 
				
			||||
import java.util.Map; | 
				
			||||
 | 
				
			||||
@RestController | 
				
			||||
@RequestMapping("/suichangClient") | 
				
			||||
@Slf4j | 
				
			||||
@RequiredArgsConstructor | 
				
			||||
public class SuichangClient implements ISuichangClient { | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private EcologicalFlowMapper ecologicalFlowMapper; | 
				
			||||
    @Autowired | 
				
			||||
    private EcologicalFlowService ecologicalFlowService; | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    @PostMapping(GET_STATION_BY_REQ) | 
				
			||||
    public List<StationVo> getStationListByReq(StationQueryReq req) { | 
				
			||||
        return ecologicalFlowMapper.getStationListByReq(req); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    @PostMapping(GET_DATA) | 
				
			||||
    public List<Map<String, Object>> getData(String stcd, Integer accessRules, Integer saveTimeType, Integer timeInterval, | 
				
			||||
                                             LocalDateTime startTime, LocalDateTime endTime) { | 
				
			||||
        return ecologicalFlowService.getData(stcd, accessRules, saveTimeType, timeInterval, | 
				
			||||
                startTime, endTime); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,33 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.mapper; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.hnac.hzims.message_alarm.entity.MessageAlarmInfo; | 
				
			||||
import com.hnac.hzims.message_alarm.entity.MessageReceiveInfo; | 
				
			||||
import com.hnac.hzims.suichang.vo.*; | 
				
			||||
import org.apache.ibatis.annotations.Mapper; | 
				
			||||
import org.apache.ibatis.annotations.Param; | 
				
			||||
import org.springblade.system.user.entity.User; | 
				
			||||
 | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 遂昌生态流量 | 
				
			||||
 * | 
				
			||||
 * @author liangfan | 
				
			||||
 */ | 
				
			||||
@Mapper | 
				
			||||
public interface EcologicalFlowMapper { | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    List<StationVo> getStationListByName(String name); | 
				
			||||
 | 
				
			||||
    IPage<StationVo> getStationListByNamePage(StationQueryReq req, IPage page); | 
				
			||||
 | 
				
			||||
    List<StationVo> getStationListByReq(@Param("req") StationQueryReq req); | 
				
			||||
 | 
				
			||||
    IPage<FlowWarnVo> getFlowWarnList(FlowWarnQueryDTO dto, IPage page); | 
				
			||||
 | 
				
			||||
    List<FlowWarnVo> getFlowWarnCount(FlowWarnQueryDTO dto); | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,104 +0,0 @@
					 | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 
				
			||||
<mapper namespace="com.hnac.hzims.suichang.mapper.EcologicalFlowMapper"> | 
				
			||||
    <sql id="Base_Station_Select" > | 
				
			||||
        SELECT | 
				
			||||
            a.name as name, | 
				
			||||
            a.code as deviceCode, | 
				
			||||
            a.discharge as flowValue, | 
				
			||||
            a.type as stationType, | 
				
			||||
            a.LGTD as lgtd, | 
				
			||||
            a.LTTD as lttd | 
				
			||||
        FROM | 
				
			||||
            hzims_station a | 
				
			||||
        WHERE | 
				
			||||
            a.IS_DELETED = '0' | 
				
			||||
    </sql> | 
				
			||||
 | 
				
			||||
    <select id="getStationListByName" resultType="com.hnac.hzims.suichang.vo.StationVo"> | 
				
			||||
        <include refid="Base_Station_Select"/> | 
				
			||||
        <if test="name != null and name != ''"> | 
				
			||||
            AND a.name like concat('%',#{name},'%') | 
				
			||||
        </if> | 
				
			||||
 | 
				
			||||
    </select> | 
				
			||||
 | 
				
			||||
    <select id="getStationListByNamePage" resultType="com.hnac.hzims.suichang.vo.StationVo"> | 
				
			||||
        <include refid="Base_Station_Select"/> | 
				
			||||
        <if test="req.name != null and req.name != ''"> | 
				
			||||
            AND a.name like concat('%',#{req.name},'%') | 
				
			||||
        </if> | 
				
			||||
 | 
				
			||||
    </select> | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    <select id="getStationListByReq" resultType="com.hnac.hzims.suichang.vo.StationVo"> | 
				
			||||
        <include refid="Base_Station_Select"/> | 
				
			||||
        <if test="req.name != null and req.name != ''"> | 
				
			||||
            AND a.name like concat('%',#{req.name},'%') | 
				
			||||
        </if> | 
				
			||||
 | 
				
			||||
        <if test="req.stationType != null and req.stationType != ''"> | 
				
			||||
            AND a.type = #{req.stationType} | 
				
			||||
        </if> | 
				
			||||
    </select> | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    <select id="getFlowWarnList" resultType="com.hnac.hzims.suichang.vo.FlowWarnVo"> | 
				
			||||
        SELECT | 
				
			||||
            c.`NAME`, | 
				
			||||
            a.content, | 
				
			||||
            a.send_time as sendTime, | 
				
			||||
            b.receive_user_id as receiveUserId, | 
				
			||||
            b.receive_user_name as receiveUserName, | 
				
			||||
            a.object_source as  objectSource, | 
				
			||||
            a.object_code as objectCode, | 
				
			||||
            a.alarm_level as alarmLevel | 
				
			||||
        FROM | 
				
			||||
            message_alarm.`message_alarm_info` a | 
				
			||||
                JOIN message_alarm.`message_receive_info` b ON a.id = b.message_id | 
				
			||||
                LEFT JOIN hzims_operation.hzims_station c ON c.`CODE` = a.object_code | 
				
			||||
        WHERE | 
				
			||||
            b.message_type = 'flowWarn' | 
				
			||||
        <if test="dto.startTime != null and dto.startTime != ''"> | 
				
			||||
            AND a.send_time >= #{dto.startTime} | 
				
			||||
        </if> | 
				
			||||
        <if test="dto.endTime != null and dto.endTime != ''"> | 
				
			||||
            AND a.send_time <= #{dto.endTime} | 
				
			||||
        </if> | 
				
			||||
        <if test="dto.objectCode != null and dto.objectCode != ''"> | 
				
			||||
            AND a.object_code = #{dto.objectCode} | 
				
			||||
        </if> | 
				
			||||
    </select> | 
				
			||||
 | 
				
			||||
    <select id="getFlowWarnCount" resultType="com.hnac.hzims.suichang.vo.FlowWarnVo"> | 
				
			||||
        SELECT | 
				
			||||
        c.`NAME`, | 
				
			||||
        a.content, | 
				
			||||
        a.send_time as sendTime, | 
				
			||||
        b.receive_user_id as receiveUserId, | 
				
			||||
        b.receive_user_name as receiveUserName, | 
				
			||||
        a.object_source as  objectSource, | 
				
			||||
        a.object_code as objectCode, | 
				
			||||
        a.alarm_level as alarmLevel | 
				
			||||
        FROM | 
				
			||||
        message_alarm.`message_alarm_info` a | 
				
			||||
        JOIN message_alarm.`message_receive_info` b ON a.id = b.message_id | 
				
			||||
        LEFT JOIN hzims_operation.hzims_station c ON c.`CODE` = a.object_code | 
				
			||||
 | 
				
			||||
        WHERE | 
				
			||||
        b.message_type = 'flowWarn' | 
				
			||||
        <if test="startTime != null and startTime != ''"> | 
				
			||||
            AND a.send_time >= #{startTime} | 
				
			||||
        </if> | 
				
			||||
        <if test="endTime != null and endTime != ''"> | 
				
			||||
            AND a.send_time <= #{endTime} | 
				
			||||
        </if> | 
				
			||||
        <if test="objectCode != null and objectCode != ''"> | 
				
			||||
            AND a.object_code = #{objectCode} | 
				
			||||
        </if> | 
				
			||||
        GROUP BY | 
				
			||||
        a.id | 
				
			||||
    </select> | 
				
			||||
 | 
				
			||||
</mapper> | 
				
			||||
@ -1,39 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.mapper; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.hnac.hzims.suichang.vo.*; | 
				
			||||
import org.apache.ibatis.annotations.Mapper; | 
				
			||||
import org.apache.ibatis.annotations.Param; | 
				
			||||
 | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 遂昌生态流量 | 
				
			||||
 * | 
				
			||||
 * @author liangfan | 
				
			||||
 */ | 
				
			||||
@Mapper | 
				
			||||
public interface ImageAndVideoMapper { | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    IPage<ImageVo> getImageInfo(ImageReq req, IPage page); | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 根据设备stcds查询各个设备最新图片信息 | 
				
			||||
     * @param req | 
				
			||||
     * @param page | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    IPage<ImageVo>  selectNewestImage(ImageReq req, IPage page); | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 查询视频点位 | 
				
			||||
     * @param videoType | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    List<StationTypeVo> selectStationTypeByOwerType(String videoType); | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,61 +0,0 @@
					 | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 
				
			||||
<mapper namespace="com.hnac.hzims.suichang.mapper.ImageAndVideoMapper"> | 
				
			||||
 | 
				
			||||
    <select id="getImageInfo" resultType="com.hnac.hzims.suichang.vo.ImageVo"> | 
				
			||||
        SELECT | 
				
			||||
        b.`name`, | 
				
			||||
        a.* | 
				
			||||
        FROM | 
				
			||||
        base_info.`image_info` a | 
				
			||||
        LEFT JOIN hzinfo_data.hzinfo_data_device b ON a.STCD = b.CODE | 
				
			||||
        WHERE | 
				
			||||
        1 = 1 | 
				
			||||
        AND b.is_deleted = '0' | 
				
			||||
        AND a.`DATA` IS NOT NULL | 
				
			||||
        <if test="req.startTime != null and req.startTime != ''"> | 
				
			||||
            AND a.time >= #{req.startTime} | 
				
			||||
        </if> | 
				
			||||
        <if test="req.endTime != null and req.endTime != ''"> | 
				
			||||
            AND a.time <= #{req.endTime} | 
				
			||||
        </if> | 
				
			||||
        <if test="req.deviceCode != null and req.deviceCode != ''"> | 
				
			||||
            AND a.stcd = #{req.deviceCode} | 
				
			||||
        </if> | 
				
			||||
        ORDER BY a.time asc | 
				
			||||
 | 
				
			||||
    </select> | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    <select id="selectNewestImage" resultType="com.hnac.hzims.suichang.vo.ImageVo"> | 
				
			||||
        SELECT | 
				
			||||
        c.`name`, | 
				
			||||
        a.* | 
				
			||||
        FROM | 
				
			||||
        base_info.image_info AS a | 
				
			||||
        JOIN hzinfo_data.hzinfo_data_device c ON a.STCD = c.`CODE` | 
				
			||||
        JOIN ( SELECT stcd, max( b.time ) AS time FROM base_info.image_info AS b WHERE DATA IS NOT NULL GROUP BY b.stcd ) AS b ON a.stcd = b.stcd | 
				
			||||
        WHERE | 
				
			||||
        1 = 1 | 
				
			||||
        AND a.time = b.time | 
				
			||||
        AND c.is_deleted = '0' | 
				
			||||
        <if test="req.deviceCode != null and req.deviceCode != ''"> | 
				
			||||
            AND a.stcd = #{req.deviceCode} | 
				
			||||
        </if> | 
				
			||||
    </select> | 
				
			||||
 | 
				
			||||
    <select id="selectStationTypeByOwerType" resultType="com.hnac.hzims.suichang.vo.StationTypeVo"> | 
				
			||||
        SELECT | 
				
			||||
            * | 
				
			||||
        FROM | 
				
			||||
            hzims_operation.hzims_station_video_type | 
				
			||||
        WHERE | 
				
			||||
            is_deleted = 0 | 
				
			||||
        <if test="type != null and type != ''"> | 
				
			||||
            AND video_type = #{videoType} | 
				
			||||
        </if> | 
				
			||||
        ORDER BY | 
				
			||||
            sort | 
				
			||||
    </select> | 
				
			||||
 | 
				
			||||
</mapper> | 
				
			||||
@ -1,36 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.service; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.suichang.vo.EcologicalFlowVo; | 
				
			||||
 | 
				
			||||
import java.time.LocalDateTime; | 
				
			||||
import java.util.List; | 
				
			||||
import java.util.Map; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-08 15:06 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
public interface EcologicalFlowService { | 
				
			||||
    /** | 
				
			||||
     * 首页生态流量 | 
				
			||||
     * | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    EcologicalFlowVo getEcologicalFlowIndexInfo(); | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 查询历史数据 | 
				
			||||
     * @param stcd | 
				
			||||
     * @param accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值") | 
				
			||||
     * @param saveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年) | 
				
			||||
     * @param timeInterval | 
				
			||||
     * @param startTime | 
				
			||||
     * @param endTime | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    List<Map<String, Object>> getData(String stcd, Integer accessRules, Integer saveTimeType, Integer timeInterval, | 
				
			||||
                                      LocalDateTime startTime, LocalDateTime endTime); | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,37 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.service; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.hnac.hzims.suichang.vo.*; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
 | 
				
			||||
import javax.servlet.http.HttpServletResponse; | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-08 15:06 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
public interface ExamStationDataService { | 
				
			||||
    /** | 
				
			||||
     * 电站月考核 | 
				
			||||
     * @param req | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    List<ExamStationFlowReportVo> examStationFlowReportByTime(ExamStationFlowDataReq req); | 
				
			||||
    /** | 
				
			||||
     * 电站月考核 导出 | 
				
			||||
     * @param req | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    void exportExamStationFlowReportByTime(HttpServletResponse response, ExamStationFlowDataReq req); | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 流量计电站日考核 | 
				
			||||
     * @param req | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    List<ExamStationFlowReportDayVo> examStationFlowReportOfDay(ExamStationFlowDataReq req); | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,26 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.service; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
				
			||||
import com.hnac.hzims.suichang.vo.FlowWarnQueryDTO; | 
				
			||||
import com.hnac.hzims.suichang.vo.FlowWarnVo; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
 | 
				
			||||
import java.util.List; | 
				
			||||
import java.util.Map; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author liangfan | 
				
			||||
 */ | 
				
			||||
public interface FlowWarnService { | 
				
			||||
 | 
				
			||||
    IPage<FlowWarnVo> getFlowWarnList(FlowWarnQueryDTO dto, Query query); | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 分页查询预警信息及告警信息 | 
				
			||||
     * @param dto | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    Map<String, Map<String, Integer>> warningPush(FlowWarnQueryDTO dto); | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,53 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.service; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
				
			||||
import com.hnac.hzims.suichang.vo.*; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
 | 
				
			||||
import java.util.List; | 
				
			||||
import java.util.Map; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-08 15:06 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
public interface ImageAndVideoService { | 
				
			||||
    /** | 
				
			||||
     * 照片缺失率信息 | 
				
			||||
     * @param req | 
				
			||||
     * @param query | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    IPage<MissingImagesRes> getMissingImagesInfo(ImageReq req, Query query); | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 照片条数 日期 | 
				
			||||
     * @param req | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    Map<String, Map<String, Integer>> missingPush(ImageReq req); | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 泄放照片详情 | 
				
			||||
     * @param req | 
				
			||||
     * @param query | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    IPage<ImageVo> getImageInfoByDeviceCode(ImageReq req, Query query); | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 照片缺失率详情 | 
				
			||||
     * @param req | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    List<ImageVo> getImageInfoStatus(ImageReq req); | 
				
			||||
 | 
				
			||||
    IPage<ImageVo> selectNewestImage(ImageReq req, Query query); | 
				
			||||
 | 
				
			||||
    List<StationTreeRes> getStationVideoType(String videoType); | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,56 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.service; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.suichang.vo.*; | 
				
			||||
import com.hnac.hzinfo.datasearch.analyse.domain.FieldsData; | 
				
			||||
 | 
				
			||||
import javax.servlet.http.HttpServletResponse; | 
				
			||||
import java.io.IOException; | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-13 16:37 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
public interface RealMonitorService { | 
				
			||||
    /** | 
				
			||||
     * 查询日均流量数据 | 
				
			||||
     */ | 
				
			||||
    List<AvgMonitorVo> getAvgMonitorInfo(); | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 查询一段时间的日均流量数据 | 
				
			||||
     * @param req | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    List<AvgMonitorCountVo> getAvgMonitorCountInfo(AvgMonitorReq req); | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 实时流量列表页面 | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    RealMonitorRes getRealMonitorInfo(String name); | 
				
			||||
 | 
				
			||||
    void exportRealMonitorInfo(HttpServletResponse response, String name); | 
				
			||||
 | 
				
			||||
    void exportRealMonitorSingleInfo(HttpServletResponse response, RealMonitorSingleInfoReq req); | 
				
			||||
 | 
				
			||||
    void exportAvgMonitorCountInfo(HttpServletResponse response, AvgMonitorReq req); | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 实时流量列表页面单个电站 | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    List<RealMonitorSingleInfoVo> getRealMonitorSingleInfo(RealMonitorSingleInfoReq req); | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 查询实时流量数据 | 
				
			||||
     * @param stcd | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    String getRealData(String stcd, String signage); | 
				
			||||
 | 
				
			||||
    String getRealData(String stcd); | 
				
			||||
} | 
				
			||||
@ -1,20 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.service; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.suichang.vo.StatisticsFlowDataReq; | 
				
			||||
import com.hnac.hzims.suichang.vo.StatisticsFlowDataVo; | 
				
			||||
 | 
				
			||||
import javax.servlet.http.HttpServletResponse; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-08 15:06 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
public interface StatisticsDataService { | 
				
			||||
 | 
				
			||||
    StatisticsFlowDataVo statisticsFlowReportByTime(StatisticsFlowDataReq req); | 
				
			||||
 | 
				
			||||
    void exportStatisticsFlowReportByTime(HttpServletResponse response, StatisticsFlowDataReq req); | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,491 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.service.impl; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.entity.ReportData; | 
				
			||||
import com.hnac.hzims.suichang.mapper.EcologicalFlowMapper; | 
				
			||||
import com.hnac.hzims.suichang.service.EcologicalFlowService; | 
				
			||||
import com.hnac.hzims.suichang.util.DateUtil; | 
				
			||||
import com.hnac.hzims.suichang.vo.EcologicalFlowVo; | 
				
			||||
import com.hnac.hzims.suichang.vo.FlowWarnQueryDTO; | 
				
			||||
import com.hnac.hzims.suichang.vo.FlowWarnVo; | 
				
			||||
import com.hnac.hzims.suichang.vo.StationVo; | 
				
			||||
import com.hnac.hzims.util.CommonUtil; | 
				
			||||
import com.hnac.hzinfo.datasearch.analyse.po.AnalyseCodeByAnalyseDataPO; | 
				
			||||
import com.hnac.hzinfo.datasearch.analyse.po.AnalyzeDataConditionPO; | 
				
			||||
import com.hnac.hzinfo.datasearch.analyse.vo.AnalyseDataTaosVO; | 
				
			||||
import com.hnac.hzinfo.datasearch.analyse.vo.AnalyzeDataConditionVO; | 
				
			||||
import com.hnac.hzinfo.datasearch.analyse.vo.AnalyzeInstanceFieldVO; | 
				
			||||
import com.hnac.hzinfo.sdk.analyse.AnalyseDataSearchClient; | 
				
			||||
import com.hnac.hzinfo.sdk.core.response.Result; | 
				
			||||
import lombok.extern.slf4j.Slf4j; | 
				
			||||
import org.apache.commons.lang3.StringUtils; | 
				
			||||
import org.springblade.core.mp.support.Condition; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
import org.springframework.beans.factory.annotation.Value; | 
				
			||||
import org.springframework.stereotype.Service; | 
				
			||||
import org.springframework.util.CollectionUtils; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
import java.math.RoundingMode; | 
				
			||||
import java.time.*; | 
				
			||||
import java.time.temporal.ChronoUnit; | 
				
			||||
import java.time.temporal.TemporalAdjusters; | 
				
			||||
import java.util.ArrayList; | 
				
			||||
import java.util.HashMap; | 
				
			||||
import java.util.List; | 
				
			||||
import java.util.Map; | 
				
			||||
import java.util.concurrent.CompletableFuture; | 
				
			||||
import java.util.stream.Collectors; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-08 15:06 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
@Slf4j | 
				
			||||
@Service | 
				
			||||
public class EcologicalFlowServiceImpl implements EcologicalFlowService { | 
				
			||||
    @Autowired | 
				
			||||
    AnalyseDataSearchClient analyseDataSearchClient; | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private EcologicalFlowMapper ecologicalFlowMapper; | 
				
			||||
 | 
				
			||||
    @Value("${suichang.signage}") | 
				
			||||
    String signage; | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public EcologicalFlowVo getEcologicalFlowIndexInfo() { | 
				
			||||
        LocalDateTime startTime = LocalDateTime.now(); | 
				
			||||
        EcologicalFlowVo ecologicalFlowVo = new EcologicalFlowVo(); | 
				
			||||
        // 监测电站数 无节制电站 流量计电站 1.无节制电站 2.流量计电站
 | 
				
			||||
        List<StationVo> stationInfoList = ecologicalFlowMapper.getStationListByName(null); | 
				
			||||
        List<StationVo> noLimitStationListSize = stationInfoList.stream().filter(o -> "1".equals(o.getStationType())).collect(Collectors.toList()); | 
				
			||||
        List<StationVo> flowStationListSize = stationInfoList.stream().filter(o -> "2".equals(o.getStationType())).collect(Collectors.toList()); | 
				
			||||
        if (CollectionUtils.isEmpty(stationInfoList)) { | 
				
			||||
            return ecologicalFlowVo; | 
				
			||||
        } | 
				
			||||
        ecologicalFlowVo.setAllStationListSize(stationInfoList.size()); | 
				
			||||
        ecologicalFlowVo.setNoLimitStationListSize(noLimitStationListSize.size()); | 
				
			||||
        ecologicalFlowVo.setFlowStationListSize(flowStationListSize.size()); | 
				
			||||
 | 
				
			||||
        int yesterdayFinishCount = 0, weekCount = 0, monthFinishCount = 0, quarterCount = 0, halfYearCount = 0, yearCount = 0, | 
				
			||||
                reportTodayCount = 0, reportYesTerdayCount = 0, warnTodayCount = 0, warnYesTerdayCount = 0; | 
				
			||||
        // 得到所有设备实例code及核定下限流量
 | 
				
			||||
        log.info("站点信息list:{}", stationInfoList); | 
				
			||||
        // 多线程优化
 | 
				
			||||
        List<CompletableFuture<Integer>> yesterdayFinishCountList = new ArrayList<>(); | 
				
			||||
        List<CompletableFuture<Integer>> weekCountList = new ArrayList<>(); | 
				
			||||
        List<CompletableFuture<Integer>> monthFinishCountList = new ArrayList<>(); | 
				
			||||
        List<CompletableFuture<Integer>> quarterCountList = new ArrayList<>(); | 
				
			||||
        List<CompletableFuture<Integer>> halfYearCountList = new ArrayList<>(); | 
				
			||||
        List<CompletableFuture<Integer>> yearCountList = new ArrayList<>(); | 
				
			||||
        List<CompletableFuture<Map<String, Integer>>> reportAndWarnTodayMapList = new ArrayList<>(); | 
				
			||||
        List<CompletableFuture<Map<String, Integer>>> reportAndWarnYesTerdayMapList = new ArrayList<>(); | 
				
			||||
        // 多线程 调用平台方法
 | 
				
			||||
        buildCompletableFutureList(stationInfoList, yesterdayFinishCountList, weekCountList, monthFinishCountList, | 
				
			||||
                quarterCountList, halfYearCountList, yearCountList, reportAndWarnTodayMapList, reportAndWarnYesTerdayMapList); | 
				
			||||
        try { | 
				
			||||
            for (int i = 0; i < stationInfoList.size(); i++) { | 
				
			||||
                // 1.昨日达标情况 达标率就是有没有达到核定下限流量
 | 
				
			||||
                yesterdayFinishCount = yesterdayFinishCountList.get(i).get() + yesterdayFinishCount; | 
				
			||||
                // 2.上月达标情况
 | 
				
			||||
                weekCount = weekCountList.get(i).get() + weekCount; | 
				
			||||
                // 3.上周达标情况
 | 
				
			||||
                monthFinishCount = monthFinishCountList.get(i).get() + monthFinishCount; | 
				
			||||
                // 4.季度达标情况
 | 
				
			||||
                quarterCount = quarterCountList.get(i).get() + quarterCount; | 
				
			||||
                // 5.半年达标情况
 | 
				
			||||
                halfYearCount = halfYearCountList.get(i).get() + halfYearCount; | 
				
			||||
                // 6.年达标情况
 | 
				
			||||
                yearCount = yearCountList.get(i).get() + yearCount; | 
				
			||||
                // 7.今日 预警数 上报率
 | 
				
			||||
                Map<String, Integer> reportAndWarnTodayMap = reportAndWarnTodayMapList.get(i).get(); | 
				
			||||
                reportTodayCount = reportTodayCount + reportAndWarnTodayMap.get("count"); | 
				
			||||
                warnTodayCount = warnTodayCount + reportAndWarnTodayMap.get("warnCount"); | 
				
			||||
                // 8.昨日 预警数 上报率
 | 
				
			||||
                Map<String, Integer> reportAndWarnYesTerdayMap = reportAndWarnYesTerdayMapList.get(i).get(); | 
				
			||||
                reportYesTerdayCount = reportYesTerdayCount + reportAndWarnYesTerdayMap.get("count"); | 
				
			||||
                warnYesTerdayCount = warnYesTerdayCount + reportAndWarnYesTerdayMap.get("warnCount"); | 
				
			||||
            } | 
				
			||||
        } catch (Exception e) { | 
				
			||||
            e.printStackTrace(); | 
				
			||||
        } | 
				
			||||
        log.info("yesterdayFinishCount = {}, weekCount = {}, monthFinishCount = {}, quarterCount = {}, halfYearCount = {}, yearCount = {}", | 
				
			||||
                yesterdayFinishCount, weekCount, monthFinishCount, quarterCount, halfYearCount, yearCount); | 
				
			||||
        // build返回信息
 | 
				
			||||
        buildRestultInfo(ecologicalFlowVo, stationInfoList.size(), | 
				
			||||
                yesterdayFinishCount, monthFinishCount, weekCount, quarterCount, halfYearCount, | 
				
			||||
                yearCount, reportTodayCount, warnTodayCount, reportYesTerdayCount, warnYesTerdayCount); | 
				
			||||
        LocalDateTime endTime = LocalDateTime.now(); | 
				
			||||
        log.info("耗时:{}", ChronoUnit.SECONDS.between(startTime, endTime)); | 
				
			||||
        return ecologicalFlowVo; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public List<Map<String, Object>> getData(String stcd, Integer accessRules, Integer saveTimeType, Integer timeInterval, | 
				
			||||
                                             LocalDateTime startTime, LocalDateTime endTime) { | 
				
			||||
        List<Map<String, Object>> list = new ArrayList<>(); | 
				
			||||
        List<AnalyzeInstanceFieldVO> vos = getSignages(stcd); | 
				
			||||
        if (vos == null || vos.isEmpty()) { | 
				
			||||
            return null; | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        Map<String, List<ReportData>> map = new HashMap<>(); | 
				
			||||
        int count = 0; | 
				
			||||
        for (AnalyzeInstanceFieldVO vo : vos) { | 
				
			||||
            // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
            // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
            List<ReportData> reportDataList = | 
				
			||||
                    getDataByDeviceCode(stcd, accessRules, saveTimeType, timeInterval, startTime, endTime, vo.getSignage()); | 
				
			||||
            map.put(vo.getSignage(), reportDataList); | 
				
			||||
            count = reportDataList.size(); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
        for (int i = 0; i < count; i++) { | 
				
			||||
            Map<String, Object> res = new HashMap<>(); | 
				
			||||
            for (AnalyzeInstanceFieldVO vo : vos) { | 
				
			||||
                List<ReportData> reportDataList = map.get(vo.getSignage()); | 
				
			||||
                ReportData reportData = reportDataList.get(i); | 
				
			||||
                res.put("tm", reportData.getKeyStr()); | 
				
			||||
                res.put(vo.getSignage(), reportData.getVal()); | 
				
			||||
            } | 
				
			||||
            list.add(res); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        return list; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    List<ReportData> getDataByDeviceCode(String deviceCode, Integer accessRules, Integer saveTimeType, Integer timeInterval, | 
				
			||||
                                         LocalDateTime start, LocalDateTime end, String col) { | 
				
			||||
        List<ReportData> reportData = new ArrayList<>(); | 
				
			||||
        AnalyseCodeByAnalyseDataPO po = new AnalyseCodeByAnalyseDataPO(); | 
				
			||||
        po.setDeviceCode(deviceCode); | 
				
			||||
 | 
				
			||||
        List<AnalyzeDataConditionPO> signboardConditions = new ArrayList<>(); | 
				
			||||
        AnalyzeDataConditionPO conditionPO = new AnalyzeDataConditionPO(); | 
				
			||||
        conditionPO.setBeginTime(start); | 
				
			||||
        conditionPO.setEndTime(end); | 
				
			||||
        conditionPO.setSignages(col); | 
				
			||||
//        conditionPO.setKeepFigures(3);
 | 
				
			||||
        conditionPO.setAccessRules(accessRules); | 
				
			||||
        conditionPO.setSaveTimeType(saveTimeType); | 
				
			||||
        conditionPO.setTimeInterval(timeInterval); | 
				
			||||
        conditionPO.setFull(1); | 
				
			||||
        signboardConditions.add(conditionPO); | 
				
			||||
        po.setSignboardConditions(signboardConditions); | 
				
			||||
 | 
				
			||||
        Result<List<AnalyzeDataConditionVO>> result = analyseDataSearchClient.getAnalyzeDataByAnalyzeCodeAndSignages(po); | 
				
			||||
        if (result == null || !result.isSuccess()) { | 
				
			||||
            return reportData; | 
				
			||||
        } | 
				
			||||
        List<AnalyzeDataConditionVO> datas = result.getData(); | 
				
			||||
        if (datas == null || datas.isEmpty()) { | 
				
			||||
            return reportData; | 
				
			||||
        } | 
				
			||||
        for (AnalyzeDataConditionVO vo : datas) { | 
				
			||||
            List<AnalyseDataTaosVO> dataTaosVOs = vo.getList(); | 
				
			||||
            for (AnalyseDataTaosVO vv : dataTaosVOs) { | 
				
			||||
                if (vo.getSignage().equals(col)) { | 
				
			||||
                    ReportData data = new ReportData(); | 
				
			||||
                    data.setKeyStr(CommonUtil.getKeyBySaveTimeType(vv.getTs(), saveTimeType)); | 
				
			||||
                    String val = vv.getVal(); | 
				
			||||
                    data.setStcd(deviceCode); | 
				
			||||
                    data.setVal(val); | 
				
			||||
                    if (val != null && !"".equals(val)) { | 
				
			||||
                        data.setValue(Double.valueOf(vv.getVal())); | 
				
			||||
                    } else { | 
				
			||||
                        data.setValue(0.0); | 
				
			||||
                    } | 
				
			||||
                    data.setName(vo.getName()); | 
				
			||||
                    reportData.add(data); | 
				
			||||
                } | 
				
			||||
            } | 
				
			||||
        } | 
				
			||||
        return reportData; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public List<AnalyzeInstanceFieldVO> getSignages(String stcd) { | 
				
			||||
        //查询列
 | 
				
			||||
        Result<List<AnalyzeInstanceFieldVO>> result = | 
				
			||||
                analyseDataSearchClient.getInstanceFieldByAnalyseCode(stcd, 1, ""); | 
				
			||||
        if (result == null || !result.isSuccess()) { | 
				
			||||
            return null; | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        List<AnalyzeInstanceFieldVO> analyzeInstanceFieldVOS = result.getData(); | 
				
			||||
        return analyzeInstanceFieldVOS; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    int getDayInfo(String stcd, BigDecimal discharge) { | 
				
			||||
        // 获取当前时间
 | 
				
			||||
        LocalDateTime now = LocalDateTime.now(); | 
				
			||||
        // 获取昨天的日期
 | 
				
			||||
        LocalDateTime last = now.minusDays(1); | 
				
			||||
        // 昨天的开始时间(00:00) 昨天的结束时间(00:00)yesterday: 2024-03-10 00:00:00 yesterday: 2024-03-11 00:00:00
 | 
				
			||||
        LocalDateTime startTime = last.withHour(0).withMinute(0).withSecond(0).withNano(0); | 
				
			||||
        LocalDateTime endTime = last.plusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0); | 
				
			||||
        // 昨日达标情况 达标率就是有没有达到核定下限流量
 | 
				
			||||
        // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
        // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
        List<Map<String, Object>> dataList = getData(stcd, 3, 3, 1, startTime, endTime); | 
				
			||||
        log.info("昨日达标情况data: {}, 设备编码为:{}", dataList, stcd); | 
				
			||||
        return getCount(dataList, discharge); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    int getWeekInfo(String stcd, BigDecimal discharge) { | 
				
			||||
        LocalDate today = LocalDate.now(); | 
				
			||||
        // 获取上周的星期一(假设周一是周的开始)
 | 
				
			||||
        LocalDate lastWeekMonday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).minusWeeks(1); | 
				
			||||
        // 上周的开始时间:上周星期一的00:00
 | 
				
			||||
        LocalDateTime startTime = LocalDateTime.of(lastWeekMonday, LocalTime.MIN); | 
				
			||||
        LocalDateTime endTime = startTime.plusDays(7).withHour(0).withMinute(0).withSecond(0).withNano(0); | 
				
			||||
        // 周达标情况 达标率就是有没有达到核定下限流量
 | 
				
			||||
        // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
        // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
        List<Map<String, Object>> dataList = getData(stcd, 3, 4, 1, startTime, endTime); | 
				
			||||
        log.info("周达标情况data: {}, 设备编码为:{}", dataList, stcd); | 
				
			||||
        return getCount(dataList, discharge); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    int getMouthInfo(String stcd, BigDecimal discharge) { | 
				
			||||
        // 获取当前时间
 | 
				
			||||
        LocalDateTime now = LocalDateTime.now(); | 
				
			||||
        // 获取上个月的开始日期
 | 
				
			||||
        LocalDateTime last = now.minusMonths(1); | 
				
			||||
        // 上个月的开始时间(00:00) 上个月的结束时间(00:00)
 | 
				
			||||
        LocalDateTime startTime = last.withHour(0).withDayOfMonth(1).withMinute(0).withSecond(0).withNano(0); | 
				
			||||
        LocalDateTime endTime = last.plusMonths(1).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0); | 
				
			||||
        // 上月达标情况 达标率就是有没有达到核定下限流量
 | 
				
			||||
        // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
        // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
        List<Map<String, Object>> dataList = getData(stcd, 3, 5, 1, startTime, endTime); | 
				
			||||
        log.info("月达标情况data: {}, 设备编码为:{}", dataList, stcd); | 
				
			||||
        return getCount(dataList, discharge); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    int getQuarterInfo(String stcd, BigDecimal discharge) { | 
				
			||||
        LocalDateTime now = LocalDateTime.now(); | 
				
			||||
        LocalDateTime startTime = DateUtil.getStartOfLastQuarter(now); | 
				
			||||
        LocalDateTime endTime = DateUtil.getEndOfLastQuarter(now); | 
				
			||||
        // 周达标情况 达标率就是有没有达到核定下限流量
 | 
				
			||||
        // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
        // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
        List<Map<String, Object>> dataList = getData(stcd, 3, 5, 3, startTime, endTime); | 
				
			||||
        log.info("季度达标情况data: {}, 设备编码为:{}", dataList, stcd); | 
				
			||||
        return getCount(dataList, discharge); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    int getHaltYearInfo(String stcd, BigDecimal discharge) { | 
				
			||||
        LocalDateTime now = LocalDateTime.now(); | 
				
			||||
        LocalDateTime startTime = DateUtil.getStartOfHalfYear(now); | 
				
			||||
        LocalDateTime endTime = DateUtil.getEndOfHalfYear(now); | 
				
			||||
        // 上月达标情况 达标率就是有没有达到核定下限流量
 | 
				
			||||
        // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
        // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
        List<Map<String, Object>> dataList = getData(stcd, 3, 5, 6, startTime, endTime); | 
				
			||||
        log.info("半年达标情况data: {}, 设备编码为:{}", dataList, stcd); | 
				
			||||
        return getCount(dataList, discharge); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    int getYearInfo(String stcd, BigDecimal discharge) { | 
				
			||||
        LocalDateTime startTime = LocalDateTime.of(Year.now().getValue() - 1, Month.JANUARY, 1, 0, 0); | 
				
			||||
        LocalDateTime endTime = LocalDateTime.of(Year.now().getValue(), Month.JANUARY, 1, 0, 0, 0); | 
				
			||||
        // 上月达标情况 达标率就是有没有达到核定下限流量
 | 
				
			||||
        // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
        // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
 | 
				
			||||
        List<Map<String, Object>> dataList = getData(stcd, 3, 6, 1, startTime, endTime); | 
				
			||||
        log.info("去年达标情况data: {}, 设备编码为:{}", dataList, stcd); | 
				
			||||
        return getCount(dataList, discharge); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    Map<String, Integer> reportAndWarnToday(String stcd) { | 
				
			||||
        // 获取当前时间
 | 
				
			||||
        LocalDateTime now = LocalDateTime.now(); | 
				
			||||
        LocalDateTime startTime = now.withHour(0).withMinute(0).withSecond(0).withNano(0); | 
				
			||||
        LocalDateTime endTime = now; | 
				
			||||
        // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
        // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
        List<Map<String, Object>> dataList = getData(stcd, 3, 2, 1, startTime, endTime); | 
				
			||||
        log.info("今天上报data: {}, 设备编码为:{}", dataList, stcd); | 
				
			||||
        int count = 0; | 
				
			||||
        if (!CollectionUtils.isEmpty(dataList)) { | 
				
			||||
            for (Map<String, Object> info : dataList) { | 
				
			||||
                String ecologicalFlowValue = null == info.get(signage) ? null : | 
				
			||||
                        info.get(signage).toString(); | 
				
			||||
                log.info("ecologicalFlowValue的值: {}", ecologicalFlowValue); | 
				
			||||
                if (StringUtils.isNotBlank(ecologicalFlowValue)) { | 
				
			||||
                    count++; | 
				
			||||
                } | 
				
			||||
            } | 
				
			||||
        } | 
				
			||||
        HashMap<String, Integer> map = new HashMap<>(); | 
				
			||||
        map.put("count", count); | 
				
			||||
        FlowWarnQueryDTO dto = new FlowWarnQueryDTO(); | 
				
			||||
        dto.setStartTime(DateUtil.getStringTime(startTime)); | 
				
			||||
        dto.setEndTime(DateUtil.getStringTime(endTime)); | 
				
			||||
        dto.setObjectCode(stcd); | 
				
			||||
        List<FlowWarnVo> flowWarnList = ecologicalFlowMapper.getFlowWarnCount(dto); | 
				
			||||
        if (CollectionUtils.isEmpty(flowWarnList)) { | 
				
			||||
            map.put("warnCount", 0); | 
				
			||||
        } else { | 
				
			||||
            map.put("warnCount", flowWarnList.size()); | 
				
			||||
        } | 
				
			||||
        return map; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    Map<String, Integer> reportAndWarnYesTerday(String stcd) { | 
				
			||||
        // 获取当前时间
 | 
				
			||||
        LocalDateTime now = LocalDateTime.now(); | 
				
			||||
        // 获取昨天的日期
 | 
				
			||||
        LocalDateTime last = now.minusDays(1); | 
				
			||||
        // 昨天的开始时间(00:00) 昨天的结束时间(00:00)yesterday: 2024-03-10 00:00:00 yesterday: 2024-03-11 00:00:00
 | 
				
			||||
        LocalDateTime startTime = last.withHour(0).withMinute(0).withSecond(0).withNano(0); | 
				
			||||
        LocalDateTime endTime = last.plusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0); | 
				
			||||
        // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
        // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
        List<Map<String, Object>> dataList = getData(stcd, 3, 2, 1, startTime, endTime); | 
				
			||||
        log.info("昨天上报data: {}, 设备编码为:{}", dataList, stcd); | 
				
			||||
        int count = 0; | 
				
			||||
        if (!CollectionUtils.isEmpty(dataList)) { | 
				
			||||
            for (Map<String, Object> info : dataList) { | 
				
			||||
                String ecologicalFlowValue = null == info.get(signage) ? null : | 
				
			||||
                        info.get(signage).toString(); | 
				
			||||
                log.info("ecologicalFlowValue的值: {}", ecologicalFlowValue); | 
				
			||||
                if (StringUtils.isNotBlank(ecologicalFlowValue)) { | 
				
			||||
                    count++; | 
				
			||||
                } | 
				
			||||
            } | 
				
			||||
        } | 
				
			||||
        HashMap<String, Integer> map = new HashMap<>(); | 
				
			||||
        map.put("count", count); | 
				
			||||
        FlowWarnQueryDTO dto = new FlowWarnQueryDTO(); | 
				
			||||
        dto.setStartTime(DateUtil.getStringTime(startTime)); | 
				
			||||
        dto.setEndTime(DateUtil.getStringTime(endTime)); | 
				
			||||
        dto.setObjectCode(stcd); | 
				
			||||
        Query query = new Query(); | 
				
			||||
        query.setCurrent(1); | 
				
			||||
        query.setSize(10000); | 
				
			||||
        List<FlowWarnVo> flowWarnList = ecologicalFlowMapper.getFlowWarnList(dto, Condition.getPage(query)).getRecords(); | 
				
			||||
        if (CollectionUtils.isEmpty(flowWarnList)) { | 
				
			||||
            map.put("warnCount", 0); | 
				
			||||
        } else { | 
				
			||||
            map.put("warnCount", flowWarnList.size()); | 
				
			||||
        } | 
				
			||||
        return map; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    int getCount(List<Map<String, Object>> dataList, BigDecimal discharge) { | 
				
			||||
        int count = 0; | 
				
			||||
        if (!CollectionUtils.isEmpty(dataList)) { | 
				
			||||
            Map<String, Object> info = dataList.get(dataList.size() - 1); | 
				
			||||
            String ecologicalFlowValue = null == info.get(signage) ? "0" : | 
				
			||||
                    info.get(signage).toString(); | 
				
			||||
            log.info("ecologicalFlowValue的值: {}", ecologicalFlowValue); | 
				
			||||
            if (new BigDecimal(ecologicalFlowValue).compareTo(discharge) >= 0) { | 
				
			||||
                count++; | 
				
			||||
            } | 
				
			||||
        } | 
				
			||||
        return count; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * bulid info | 
				
			||||
     * @param stationInfoList | 
				
			||||
     * @param yesterdayFinishCountList | 
				
			||||
     * @param weekCountList | 
				
			||||
     * @param monthFinishCountList | 
				
			||||
     * @param quarterCountList | 
				
			||||
     * @param halfYearCountList | 
				
			||||
     * @param yearCountList | 
				
			||||
     * @param reportAndWarnTodayMapList | 
				
			||||
     * @param reportAndWarnYesTerdayMapList | 
				
			||||
     */ | 
				
			||||
    void buildCompletableFutureList(List<StationVo> stationInfoList, | 
				
			||||
                                List<CompletableFuture<Integer>> yesterdayFinishCountList , | 
				
			||||
                                List<CompletableFuture<Integer>> weekCountList , | 
				
			||||
                                List<CompletableFuture<Integer>> monthFinishCountList , | 
				
			||||
                                List<CompletableFuture<Integer>> quarterCountList , | 
				
			||||
                                List<CompletableFuture<Integer>> halfYearCountList , | 
				
			||||
                                List<CompletableFuture<Integer>> yearCountList , | 
				
			||||
                                List<CompletableFuture<Map<String, Integer>>> reportAndWarnTodayMapList , | 
				
			||||
                                List<CompletableFuture<Map<String, Integer>>> reportAndWarnYesTerdayMapList ){ | 
				
			||||
        for (int i = 0; i < stationInfoList.size(); i++) { | 
				
			||||
            StationVo vo = stationInfoList.get(i); | 
				
			||||
//            String stcd = "JSCZ001";
 | 
				
			||||
            // 设备编号 核定流量
 | 
				
			||||
            String stcd = vo.getDeviceCode(); | 
				
			||||
            BigDecimal discharge = vo.getFlowValue(); | 
				
			||||
            // 1.昨日达标情况 达标率就是有没有达到核定下限流量
 | 
				
			||||
            yesterdayFinishCountList.add(CompletableFuture.supplyAsync(() -> getDayInfo(stcd, discharge))); | 
				
			||||
            // 2.上周达标情况
 | 
				
			||||
            weekCountList.add(CompletableFuture.supplyAsync(() -> getMouthInfo(stcd, discharge))); | 
				
			||||
            // 3.上月达标情况
 | 
				
			||||
            monthFinishCountList.add(CompletableFuture.supplyAsync(() -> getWeekInfo(stcd, discharge))); | 
				
			||||
            // 4.季度达标情况
 | 
				
			||||
            quarterCountList.add(CompletableFuture.supplyAsync(() -> getQuarterInfo(stcd, discharge))); | 
				
			||||
            // 5.半年达标情况
 | 
				
			||||
            halfYearCountList.add(CompletableFuture.supplyAsync(() -> getHaltYearInfo(stcd, discharge))); | 
				
			||||
            // 6.年达标情况
 | 
				
			||||
            yearCountList.add(CompletableFuture.supplyAsync(() -> getYearInfo(stcd, discharge))); | 
				
			||||
            // 7.今日 预警数 上报率
 | 
				
			||||
            reportAndWarnTodayMapList.add(CompletableFuture.supplyAsync(() -> reportAndWarnToday(stcd))); | 
				
			||||
            // 8.昨日 预警数 上报率
 | 
				
			||||
            reportAndWarnYesTerdayMapList.add(CompletableFuture.supplyAsync(() -> reportAndWarnYesTerday(stcd))); | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    void buildRestultInfo(EcologicalFlowVo ecologicalFlowVo, Integer size, Integer yesterdayFinishCount, | 
				
			||||
                          Integer monthFinishCount, Integer weekCount, Integer quarterCount, Integer halfYearCount, | 
				
			||||
                          Integer yearCount, Integer reportTodayCount, Integer warnTodayCount, | 
				
			||||
                          Integer reportYesTerdayCount, Integer warnYesTerdayCount) { | 
				
			||||
        // 昨日
 | 
				
			||||
        BigDecimal yesterdayFinishPer = BigDecimal.valueOf(yesterdayFinishCount).divide(BigDecimal.valueOf(size), 2, RoundingMode.HALF_UP); | 
				
			||||
        ecologicalFlowVo.setYesterdayFinishPer(yesterdayFinishPer.multiply(BigDecimal.valueOf(100)) + "%"); | 
				
			||||
        ecologicalFlowVo.setYesterdayFinishCount(yesterdayFinishCount); | 
				
			||||
        // 上月
 | 
				
			||||
        BigDecimal monthFinishPer = BigDecimal.valueOf(monthFinishCount).divide(BigDecimal.valueOf(size), 2, RoundingMode.HALF_UP); | 
				
			||||
        ecologicalFlowVo.setMonthFinishPer(monthFinishPer.multiply(BigDecimal.valueOf(100)) + "%"); | 
				
			||||
        ecologicalFlowVo.setMonthFinishCount(monthFinishCount); | 
				
			||||
        // 上周
 | 
				
			||||
        BigDecimal weekFinishPer = BigDecimal.valueOf(weekCount).divide(BigDecimal.valueOf(size), 2, RoundingMode.HALF_UP); | 
				
			||||
        ecologicalFlowVo.setWeekFinishPer(weekFinishPer.multiply(BigDecimal.valueOf(100)) + "%"); | 
				
			||||
        // 季度
 | 
				
			||||
        BigDecimal quarterFinishPer = BigDecimal.valueOf(quarterCount).divide(BigDecimal.valueOf(size), 2, RoundingMode.HALF_UP); | 
				
			||||
        ecologicalFlowVo.setQuarterFinishPer(quarterFinishPer.multiply(BigDecimal.valueOf(100)) + "%"); | 
				
			||||
        // 半年
 | 
				
			||||
        BigDecimal halfYearFinishPer = BigDecimal.valueOf(halfYearCount).divide(BigDecimal.valueOf(size), 2, RoundingMode.HALF_UP); | 
				
			||||
        ecologicalFlowVo.setHalfYearFinishPer(halfYearFinishPer.multiply(BigDecimal.valueOf(100)) + "%"); | 
				
			||||
        // 一年
 | 
				
			||||
        BigDecimal yearFinishPer = BigDecimal.valueOf(yearCount).divide(BigDecimal.valueOf(size), 2, RoundingMode.HALF_UP); | 
				
			||||
        ecologicalFlowVo.setYearFinishPer(yearFinishPer.multiply(BigDecimal.valueOf(100)) + "%"); | 
				
			||||
        // 今天预警数 上报率
 | 
				
			||||
        // 计算几天过了几个小时
 | 
				
			||||
        long hoursPassedToday = DateUtil.getHoursPassedToday() + 1; | 
				
			||||
        BigDecimal reportTodayPre; | 
				
			||||
        reportTodayPre = BigDecimal.valueOf(reportTodayCount).divide(BigDecimal.valueOf(hoursPassedToday * size), 2, RoundingMode.HALF_UP); | 
				
			||||
        ecologicalFlowVo.setReportTodayPre(reportTodayPre.multiply(BigDecimal.valueOf(100)) + "%"); | 
				
			||||
        ecologicalFlowVo.setWarnTodayCount(warnTodayCount); | 
				
			||||
        // 昨天预警数 上报率
 | 
				
			||||
        BigDecimal reportYesTerdayPre = BigDecimal.valueOf(reportYesTerdayCount).divide(BigDecimal.valueOf(24L * size), 2, RoundingMode.HALF_UP); | 
				
			||||
        ecologicalFlowVo.setReportYesTerdayPre(reportYesTerdayPre.multiply(BigDecimal.valueOf(100)) + "%"); | 
				
			||||
        ecologicalFlowVo.setWarnYesTerdayCount(warnYesTerdayCount); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
@ -1,274 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.service.impl; | 
				
			||||
 | 
				
			||||
import com.alibaba.excel.EasyExcel; | 
				
			||||
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; | 
				
			||||
import com.hnac.hzims.suichang.mapper.EcologicalFlowMapper; | 
				
			||||
import com.hnac.hzims.suichang.service.EcologicalFlowService; | 
				
			||||
import com.hnac.hzims.suichang.service.ExamStationDataService; | 
				
			||||
import com.hnac.hzims.suichang.service.RealMonitorService; | 
				
			||||
import com.hnac.hzims.suichang.util.DateUtil; | 
				
			||||
import com.hnac.hzims.suichang.vo.*; | 
				
			||||
import lombok.extern.slf4j.Slf4j; | 
				
			||||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
import org.springframework.beans.factory.annotation.Value; | 
				
			||||
import org.springframework.stereotype.Service; | 
				
			||||
import org.springframework.util.CollectionUtils; | 
				
			||||
 | 
				
			||||
import javax.servlet.http.HttpServletResponse; | 
				
			||||
import java.io.IOException; | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
import java.math.RoundingMode; | 
				
			||||
import java.net.URLEncoder; | 
				
			||||
import java.time.LocalDateTime; | 
				
			||||
import java.time.temporal.ChronoUnit; | 
				
			||||
import java.util.ArrayList; | 
				
			||||
import java.util.Arrays; | 
				
			||||
import java.util.List; | 
				
			||||
import java.util.Map; | 
				
			||||
import java.util.concurrent.CompletableFuture; | 
				
			||||
import java.util.stream.Collectors; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-14 16:19 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
@Slf4j | 
				
			||||
@Service | 
				
			||||
public class ExamStationDataServiceImpl implements ExamStationDataService { | 
				
			||||
    @Autowired | 
				
			||||
    private EcologicalFlowMapper ecologicalFlowMapper; | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private EcologicalFlowService ecologicalFlowService; | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private RealMonitorService realMonitorService; | 
				
			||||
 | 
				
			||||
    @Value("${suichang.signage}") | 
				
			||||
    String signage; | 
				
			||||
 | 
				
			||||
    @Value("${suichang.passPreValue}") | 
				
			||||
    String passPreValue; | 
				
			||||
 | 
				
			||||
    @Value("${suichang.timeSignage}") | 
				
			||||
    String timeSignage; | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public List<ExamStationFlowReportVo> examStationFlowReportByTime(ExamStationFlowDataReq req) { | 
				
			||||
        StationQueryReq queryReq = new StationQueryReq(); | 
				
			||||
        queryReq.setStationType(req.getStationType()); | 
				
			||||
        queryReq.setName(req.getName()); | 
				
			||||
        // 查询电站
 | 
				
			||||
        List<StationVo> list = ecologicalFlowMapper.getStationListByReq(queryReq); | 
				
			||||
        List<ExamStationFlowReportVo> result = new ArrayList<>(); | 
				
			||||
        // 根据电站查询日均流量
 | 
				
			||||
        for (StationVo stationRelationVo : list) { | 
				
			||||
//            String stcd = "JSCZ001";
 | 
				
			||||
            String stcd = stationRelationVo.getDeviceCode(); | 
				
			||||
            LocalDateTime startTime = DateUtil.getStartTime(req.getStartTime()); | 
				
			||||
            LocalDateTime endTime = DateUtil.getEndTimeByDay(req.getEndTime()); | 
				
			||||
            // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
            // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
            List<Map<String, Object>> dataList = ecologicalFlowService.getData(stcd, 3, 3, 1, startTime, endTime); | 
				
			||||
            long days = ChronoUnit.DAYS.between(startTime, endTime); | 
				
			||||
            log.info("dataList: {}, 设备编码为:{}, 天数:{}", dataList, stcd, days); | 
				
			||||
            // 合格情况
 | 
				
			||||
            BigDecimal flowValue = stationRelationVo.getFlowValue(); | 
				
			||||
            List<ExamStationFlowReportDetailVo> infos = new ArrayList<>(); | 
				
			||||
            int passCount = 0; | 
				
			||||
            if (!CollectionUtils.isEmpty(dataList)) { | 
				
			||||
                // 为了处理特殊返回情况 多查出一条数据的问题
 | 
				
			||||
                if (dataList.size() > days) { | 
				
			||||
                    dataList.remove(0); | 
				
			||||
                } | 
				
			||||
                for (Map<String, Object> info : dataList) { | 
				
			||||
                    ExamStationFlowReportDetailVo detailVo = new ExamStationFlowReportDetailVo(); | 
				
			||||
                    detailVo.setIsPass("不合格"); | 
				
			||||
                    String ecologicalFlowValue = null == info.get(signage) ? "0" : | 
				
			||||
                            info.get(signage).toString(); | 
				
			||||
                    log.info("ecologicalFlowValue的值: {}", ecologicalFlowValue); | 
				
			||||
                    if (new BigDecimal(ecologicalFlowValue).compareTo(flowValue) >= 0) { | 
				
			||||
                        passCount++; | 
				
			||||
                        detailVo.setIsPass("合格"); | 
				
			||||
                    } | 
				
			||||
                    detailVo.setFlowValue(flowValue); | 
				
			||||
                    detailVo.setEcologicalFlowValue(new BigDecimal(ecologicalFlowValue)); | 
				
			||||
                    detailVo.setTm(info.get(timeSignage).toString()); | 
				
			||||
                    infos.add(detailVo); | 
				
			||||
                } | 
				
			||||
            } | 
				
			||||
 | 
				
			||||
            ExamStationFlowReportVo examStationFlowReportVo = new ExamStationFlowReportVo(); | 
				
			||||
            examStationFlowReportVo.setName(stationRelationVo.getName()); | 
				
			||||
            examStationFlowReportVo.setAreaName("遂昌县"); | 
				
			||||
            examStationFlowReportVo.setFlowValue(flowValue); | 
				
			||||
            examStationFlowReportVo.setInfos(infos); | 
				
			||||
            examStationFlowReportVo.setPassCount(passCount); | 
				
			||||
            examStationFlowReportVo.setCount(days); | 
				
			||||
            BigDecimal pre = BigDecimal.valueOf(passCount).divide(BigDecimal.valueOf(days), 2, RoundingMode.HALF_UP); | 
				
			||||
            examStationFlowReportVo.setPassPre(pre.multiply(BigDecimal.valueOf(100)) + "%"); | 
				
			||||
            String isPass = pre.compareTo(new BigDecimal(passPreValue)) >= 0 ? "合格" : "不合格"; | 
				
			||||
            examStationFlowReportVo.setIsPass(isPass); | 
				
			||||
            result.add(examStationFlowReportVo); | 
				
			||||
        } | 
				
			||||
        return result; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public void exportExamStationFlowReportByTime(HttpServletResponse response, ExamStationFlowDataReq req) { | 
				
			||||
        List<ExamStationFlowReportVo> examStationFlowReportVos = this.examStationFlowReportByTime(req); | 
				
			||||
        // 动态生成的表头
 | 
				
			||||
        List<String> firstHead = new ArrayList<>(Arrays.asList("电站名称", "所属区域", "核定流量")); | 
				
			||||
        List<String> endHead = new ArrayList<>(Arrays.asList("合格天数(天)", "考核天数(天)", "合格率", "是否合格")); | 
				
			||||
        List<String> allList = new ArrayList<>(); | 
				
			||||
        allList.addAll(firstHead); | 
				
			||||
        if (!CollectionUtils.isEmpty(examStationFlowReportVos)) { | 
				
			||||
            ExamStationFlowReportVo examStationFlowReportVo = examStationFlowReportVos.get(0); | 
				
			||||
            List<ExamStationFlowReportDetailVo> infos = examStationFlowReportVo.getInfos(); | 
				
			||||
            List<String> mindHead = infos.stream().map(ExamStationFlowReportDetailVo::getTm).collect(Collectors.toList()); | 
				
			||||
            allList.addAll(mindHead); | 
				
			||||
        } | 
				
			||||
        allList.addAll(endHead); | 
				
			||||
        List<List<String>> head = allList.stream().map(v -> { | 
				
			||||
            List<String> list = new ArrayList<>(); | 
				
			||||
            list.add(v); | 
				
			||||
            return list; | 
				
			||||
        }).collect(Collectors.toList()); | 
				
			||||
 | 
				
			||||
        // 组合数据
 | 
				
			||||
        List<List<String>> contentLists = new ArrayList<>(); | 
				
			||||
        examStationFlowReportVos.forEach(o -> { | 
				
			||||
            List<String> list = new ArrayList<>(); | 
				
			||||
            list.add(o.getName()); | 
				
			||||
            list.add(o.getAreaName()); | 
				
			||||
            list.add(o.getFlowValue().toString()); | 
				
			||||
            List<ExamStationFlowReportDetailVo> exVo = o.getInfos(); | 
				
			||||
            exVo.forEach(k -> { | 
				
			||||
                list.add(k.getIsPass()); | 
				
			||||
            }); | 
				
			||||
            list.add(o.getPassCount().toString()); | 
				
			||||
            list.add(o.getCount().toString()); | 
				
			||||
            list.add(o.getPassPre()); | 
				
			||||
            list.add(o.getIsPass()); | 
				
			||||
            contentLists.add(list); | 
				
			||||
        }); | 
				
			||||
        try { | 
				
			||||
            //设置xlsx格式
 | 
				
			||||
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("电站月考核" + ".xlsx", "UTF-8")); | 
				
			||||
 | 
				
			||||
            EasyExcel.write(response.getOutputStream()).autoCloseStream(Boolean.TRUE).head(head).autoTrim(true) | 
				
			||||
                    .sheet(1, "电站月考核").registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) | 
				
			||||
                    .doWrite(contentLists); | 
				
			||||
 | 
				
			||||
            response.getOutputStream().close(); | 
				
			||||
        } catch (IOException e) { | 
				
			||||
            e.printStackTrace(); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public List<ExamStationFlowReportDayVo> examStationFlowReportOfDay(ExamStationFlowDataReq req) { | 
				
			||||
        LocalDateTime startYesTodayTime = DateUtil.getStartTime(req.getStartTime()).minusDays(1); | 
				
			||||
        LocalDateTime endYesTodayTime = DateUtil.getEndTimeByDay(req.getStartTime()).minusDays(1); | 
				
			||||
 | 
				
			||||
        LocalDateTime startTime = DateUtil.getStartTime(req.getStartTime()); | 
				
			||||
        LocalDateTime endTime = DateUtil.getEndTimeByDay(req.getStartTime()); | 
				
			||||
 | 
				
			||||
        StationQueryReq queryReq = new StationQueryReq(); | 
				
			||||
        queryReq.setStationType(req.getStationType()); | 
				
			||||
        queryReq.setName(req.getName()); | 
				
			||||
        // 查询电站
 | 
				
			||||
        List<StationVo> list = ecologicalFlowMapper.getStationListByReq(queryReq); | 
				
			||||
        List<ExamStationFlowReportDayVo> result = new ArrayList<>(); | 
				
			||||
        if (!CollectionUtils.isEmpty(list)) { | 
				
			||||
            // 多线程优化
 | 
				
			||||
            List<CompletableFuture<BigDecimal>> yesTerDayAvgFlowValueList = new ArrayList<>(); | 
				
			||||
            List<CompletableFuture<BigDecimal>> todayAvgFlowValueList = new ArrayList<>(); | 
				
			||||
            List<CompletableFuture<String>> realFlowValueList = new ArrayList<>(); | 
				
			||||
            for (int i = 0; i < list.size(); i++) { | 
				
			||||
                String stcd = list.get(i).getDeviceCode(); | 
				
			||||
                yesTerDayAvgFlowValueList.add(CompletableFuture.supplyAsync(() -> getAvgOneDayData(stcd, startYesTodayTime, endYesTodayTime))); | 
				
			||||
                todayAvgFlowValueList.add(CompletableFuture.supplyAsync(() -> getAvgOneDayData(stcd, startTime, endTime))); | 
				
			||||
                realFlowValueList.add(CompletableFuture.supplyAsync(() -> realMonitorService.getRealData(stcd, signage))); | 
				
			||||
            } | 
				
			||||
            for (int i = 0; i < list.size(); i++) { | 
				
			||||
                BigDecimal yesTerDayAvgFlowValue = null; | 
				
			||||
                BigDecimal todayAvgFlowValue = null; | 
				
			||||
                String realFlowValue = null; | 
				
			||||
                try { | 
				
			||||
                    // 前日日均流量
 | 
				
			||||
                    yesTerDayAvgFlowValue = yesTerDayAvgFlowValueList.get(i).get(); | 
				
			||||
                    // 当日日均流量
 | 
				
			||||
                    todayAvgFlowValue = todayAvgFlowValueList.get(i).get(); | 
				
			||||
                    // 实时流量
 | 
				
			||||
                    realFlowValue = realFlowValueList.get(i).get(); | 
				
			||||
                } catch (Exception e) { | 
				
			||||
                    e.printStackTrace(); | 
				
			||||
                } | 
				
			||||
                result.add(buildVo(list.get(i), yesTerDayAvgFlowValue, realFlowValue, todayAvgFlowValue)); | 
				
			||||
            } | 
				
			||||
        } | 
				
			||||
        return result; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 计算单日日均流量 | 
				
			||||
     * | 
				
			||||
     * @param stcd | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    BigDecimal getAvgOneDayData(String stcd, LocalDateTime startTime, LocalDateTime endTime) { | 
				
			||||
        long days = ChronoUnit.DAYS.between(startTime, endTime); | 
				
			||||
        // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
        // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
        List<Map<String, Object>> dataList = | 
				
			||||
                ecologicalFlowService.getData(stcd, 3, 3, 1, startTime, endTime); | 
				
			||||
        log.info("dataList: {}, 设备编码为:{}, 开始:{}, 结束 {}, 天数:{}", dataList, stcd, startTime, endTime, days); | 
				
			||||
        if (!CollectionUtils.isEmpty(dataList)) { | 
				
			||||
            // 为了处理特殊返回情况 多查出一条数据的问题
 | 
				
			||||
            if (dataList.size() > days) { | 
				
			||||
                dataList.remove(0); | 
				
			||||
            } | 
				
			||||
            Map<String, Object> info = dataList.get(0); | 
				
			||||
            String ecologicalFlowValue = null == info.get(signage) ? "0" : | 
				
			||||
                    info.get(signage).toString(); | 
				
			||||
            log.info("ecologicalFlowValue的值: {}", ecologicalFlowValue); | 
				
			||||
            return new BigDecimal(ecologicalFlowValue); | 
				
			||||
        } | 
				
			||||
        return BigDecimal.ZERO; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * build vo | 
				
			||||
     * @param stationRelationVo | 
				
			||||
     * @param yesTerDayAvgFlowValue | 
				
			||||
     * @param realFlowValue | 
				
			||||
     * @param todayAvgFlowValue | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    ExamStationFlowReportDayVo buildVo(StationVo stationRelationVo, BigDecimal yesTerDayAvgFlowValue, String realFlowValue, BigDecimal todayAvgFlowValue) { | 
				
			||||
        ExamStationFlowReportDayVo vo = new ExamStationFlowReportDayVo(); | 
				
			||||
        vo.setName(stationRelationVo.getName()); | 
				
			||||
        vo.setAreaName("遂昌县"); | 
				
			||||
        vo.setFlowValue(stationRelationVo.getFlowValue()); | 
				
			||||
        vo.setYesTerDayAvgFlowValue(yesTerDayAvgFlowValue); | 
				
			||||
        vo.setRealFlowValue(new BigDecimal(realFlowValue)); | 
				
			||||
        vo.setToDayAvgFlowValue(todayAvgFlowValue); | 
				
			||||
        BigDecimal realOutFlow = todayAvgFlowValue.multiply(new BigDecimal(86400)); | 
				
			||||
        BigDecimal outFlow = stationRelationVo.getFlowValue().multiply(new BigDecimal(86400)); | 
				
			||||
        vo.setRealOutFlow(realOutFlow); | 
				
			||||
        vo.setOutFlow(outFlow); | 
				
			||||
        BigDecimal dayOutFlowPre = realOutFlow.divide(outFlow, 2, RoundingMode.HALF_UP); | 
				
			||||
        String status = "未达标"; | 
				
			||||
        if (dayOutFlowPre.compareTo(new BigDecimal(passPreValue)) >= 0) { | 
				
			||||
            status = "达标"; | 
				
			||||
        } | 
				
			||||
        vo.setStatus(status); | 
				
			||||
        vo.setDayOutFlowPre(dayOutFlowPre.multiply(new BigDecimal(100)) + "%"); | 
				
			||||
        return vo; | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
@ -1,75 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.service.impl; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
				
			||||
import com.hnac.hzims.suichang.mapper.EcologicalFlowMapper; | 
				
			||||
import com.hnac.hzims.suichang.service.FlowWarnService; | 
				
			||||
import com.hnac.hzims.suichang.vo.FlowWarnQueryDTO; | 
				
			||||
import com.hnac.hzims.suichang.vo.FlowWarnVo; | 
				
			||||
import com.hnac.hzims.suichang.vo.StationQueryReq; | 
				
			||||
import com.hnac.hzims.suichang.vo.StationVo; | 
				
			||||
import lombok.extern.slf4j.Slf4j; | 
				
			||||
import org.springblade.core.mp.support.Condition; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
import org.springblade.core.tool.utils.Func; | 
				
			||||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
import org.springframework.stereotype.Service; | 
				
			||||
 | 
				
			||||
import java.time.LocalDateTime; | 
				
			||||
import java.time.format.DateTimeFormatter; | 
				
			||||
import java.util.*; | 
				
			||||
import java.util.stream.Collectors; | 
				
			||||
 | 
				
			||||
@Slf4j | 
				
			||||
@Service | 
				
			||||
public class FlowWarnServiceImpl implements FlowWarnService { | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private EcologicalFlowMapper ecologicalFlowMapper; | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public IPage<FlowWarnVo> getFlowWarnList(FlowWarnQueryDTO dto, Query query) { | 
				
			||||
        return ecologicalFlowMapper.getFlowWarnList(dto, Condition.getPage(query)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public Map<String, Map<String, Integer>> warningPush(FlowWarnQueryDTO dto) { | 
				
			||||
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | 
				
			||||
        List<StationVo> stationList = ecologicalFlowMapper.getStationListByReq(new StationQueryReq()); | 
				
			||||
        LocalDateTime startTime = LocalDateTime.parse(dto.getStartTime(), formatter); | 
				
			||||
        LocalDateTime endTime = LocalDateTime.parse(dto.getEndTime(), formatter); | 
				
			||||
 | 
				
			||||
        List<LocalDateTime> dayList = new ArrayList<>(); | 
				
			||||
        while (!startTime.isAfter(endTime)) { | 
				
			||||
            dayList.add(startTime); | 
				
			||||
            startTime = startTime.plusDays(1); | 
				
			||||
        } | 
				
			||||
        Query query = new Query(); | 
				
			||||
        query.setCurrent(1); | 
				
			||||
        query.setSize(10000); | 
				
			||||
        List<FlowWarnVo> list = ecologicalFlowMapper.getFlowWarnList(dto, Condition.getPage(query)).getRecords(); | 
				
			||||
 | 
				
			||||
        Map<String, Map<String, Integer>> stationMap = new HashMap<>(); | 
				
			||||
        for (StationVo station : stationList) { | 
				
			||||
            Map<String, Integer> dayMap = new LinkedHashMap<>(); | 
				
			||||
            List<FlowWarnVo> flowWarnVos = | 
				
			||||
                    list.stream().filter(var -> var.getObjectCode().equals(station.getDeviceCode())).collect(Collectors.toList()); | 
				
			||||
            for (int i = 0; i < dayList.size() - 1; i++) { | 
				
			||||
                int degree = 0; | 
				
			||||
                for (FlowWarnVo flowWarnVo : flowWarnVos) { | 
				
			||||
                    LocalDateTime warningTime = | 
				
			||||
                            LocalDateTime.parse(flowWarnVo.getSendTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); | 
				
			||||
                    if (Func.isEmpty(warningTime)) { | 
				
			||||
                        continue; | 
				
			||||
                    } | 
				
			||||
                    if (warningTime.isAfter(dayList.get(i)) && warningTime.isBefore(dayList.get(i + 1))) { | 
				
			||||
                        degree = degree + 1; | 
				
			||||
                    } | 
				
			||||
                } | 
				
			||||
                dayMap.put(dayList.get(i).format(formatter), degree); | 
				
			||||
            } | 
				
			||||
            stationMap.put(station.getDeviceCode(), dayMap); | 
				
			||||
        } | 
				
			||||
        return stationMap; | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
@ -1,198 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.service.impl; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
				
			||||
import com.hnac.hzims.suichang.mapper.EcologicalFlowMapper; | 
				
			||||
import com.hnac.hzims.suichang.mapper.ImageAndVideoMapper; | 
				
			||||
import com.hnac.hzims.suichang.service.ImageAndVideoService; | 
				
			||||
import com.hnac.hzims.suichang.util.DateUtil; | 
				
			||||
import com.hnac.hzims.suichang.vo.*; | 
				
			||||
import lombok.extern.slf4j.Slf4j; | 
				
			||||
import org.apache.commons.collections4.CollectionUtils; | 
				
			||||
import org.springblade.core.mp.support.Condition; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
import org.springblade.core.tool.utils.Func; | 
				
			||||
import org.springblade.core.tool.utils.StringUtil; | 
				
			||||
import org.springframework.beans.BeanUtils; | 
				
			||||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
import org.springframework.stereotype.Service; | 
				
			||||
 | 
				
			||||
import java.time.LocalDateTime; | 
				
			||||
import java.time.format.DateTimeFormatter; | 
				
			||||
import java.util.*; | 
				
			||||
import java.util.stream.Collectors; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-14 16:19 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
@Slf4j | 
				
			||||
@Service | 
				
			||||
public class ImageAndVideoServiceImpl implements ImageAndVideoService { | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private EcologicalFlowMapper ecologicalFlowMapper; | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private ImageAndVideoMapper imageAndVideoMapper; | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public Page<MissingImagesRes> getMissingImagesInfo(ImageReq req, Query query) { | 
				
			||||
        StationQueryReq stationQueryReq = new StationQueryReq(); | 
				
			||||
        stationQueryReq.setName(req.getName()); | 
				
			||||
        // 拿到电站列表
 | 
				
			||||
        IPage<StationVo> stationListByNamePage = | 
				
			||||
                ecologicalFlowMapper.getStationListByNamePage(stationQueryReq, Condition.getPage(query)); | 
				
			||||
        Page<MissingImagesRes> page = new Page<>(); | 
				
			||||
        BeanUtils.copyProperties(stationListByNamePage, page); | 
				
			||||
        List<MissingImagesRes> resultList = new ArrayList<>(); | 
				
			||||
        DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | 
				
			||||
        LocalDateTime dateTime = LocalDateTime.parse(req.getStartTime(), customFormatter); | 
				
			||||
        // 结合 LocalDate 和 LocalTime 创建 LocalDateTime 对象
 | 
				
			||||
        stationListByNamePage.getRecords().forEach(o -> { | 
				
			||||
            MissingImagesRes res = new MissingImagesRes(); | 
				
			||||
            res.setDeviceCode(o.getDeviceCode()); | 
				
			||||
            res.setName(o.getName()); | 
				
			||||
            res.setArea("遂昌县"); | 
				
			||||
            res.setMonth(String.valueOf(dateTime.getMonthValue())); | 
				
			||||
            resultList.add(res); | 
				
			||||
        }); | 
				
			||||
        page.setRecords(resultList); | 
				
			||||
        return page; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public Map<String, Map<String, Integer>> missingPush(ImageReq req) { | 
				
			||||
        StationQueryReq stationQueryReq = new StationQueryReq(); | 
				
			||||
        stationQueryReq.setName(req.getName()); | 
				
			||||
        List<StationVo> stationList = ecologicalFlowMapper.getStationListByReq(stationQueryReq); | 
				
			||||
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | 
				
			||||
        LocalDateTime startTime = LocalDateTime.parse(req.getStartTime(), formatter); | 
				
			||||
        LocalDateTime endTime = LocalDateTime.parse(req.getEndTime(), formatter); | 
				
			||||
 | 
				
			||||
        List<LocalDateTime> dayList = new ArrayList<>(); | 
				
			||||
        while (!startTime.isAfter(endTime)) { | 
				
			||||
            dayList.add(startTime); | 
				
			||||
            startTime = startTime.plusDays(1); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        // 查询时间段内的所有照片数据
 | 
				
			||||
        Query query = new Query(); | 
				
			||||
        query.setCurrent(1); | 
				
			||||
        query.setSize(10000); | 
				
			||||
        List<ImageVo> imageInfoList = imageAndVideoMapper.getImageInfo(req, Condition.getPage(query)).getRecords(); | 
				
			||||
 | 
				
			||||
        Map<String, Map<String, Integer>> stationMap = new HashMap<>(); | 
				
			||||
        for (StationVo station : stationList) { | 
				
			||||
            Map<String, Integer> dayMap = new LinkedHashMap<>(); | 
				
			||||
            List<ImageVo> infos = | 
				
			||||
            imageInfoList.stream().filter(o -> o.getStcd().equals(station.getDeviceCode())).collect(Collectors.toList()); | 
				
			||||
            for (int i = 0; i < dayList.size() - 1; i++) { | 
				
			||||
                int degree = 0; | 
				
			||||
                for (ImageVo info : infos) { | 
				
			||||
                    LocalDateTime warningTime = | 
				
			||||
                            LocalDateTime.parse(info.getTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); | 
				
			||||
                    if (Func.isEmpty(warningTime)) { | 
				
			||||
                        continue; | 
				
			||||
                    } | 
				
			||||
                    if (!warningTime.isBefore(dayList.get(i)) && !warningTime.isAfter(dayList.get(i + 1))) { | 
				
			||||
                        degree = degree + 1; | 
				
			||||
                    } | 
				
			||||
                } | 
				
			||||
                dayMap.put(dayList.get(i).format(formatter), degree); | 
				
			||||
            } | 
				
			||||
            stationMap.put(station.getDeviceCode(), dayMap); | 
				
			||||
        } | 
				
			||||
        return stationMap; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public IPage<ImageVo> getImageInfoByDeviceCode(ImageReq req, Query query) { | 
				
			||||
        // 根据deviceCode和时间段查询照片列表
 | 
				
			||||
        return imageAndVideoMapper.getImageInfo(req, Condition.getPage(query)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public List<ImageVo> getImageInfoStatus(ImageReq req) { | 
				
			||||
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | 
				
			||||
        LocalDateTime startTime = LocalDateTime.parse(req.getStartTime(), formatter); | 
				
			||||
        LocalDateTime endTime = LocalDateTime.parse(req.getEndTime(), formatter); | 
				
			||||
        Query query = new Query(); | 
				
			||||
        query.setCurrent(1); | 
				
			||||
        query.setSize(10000); | 
				
			||||
        List<ImageVo> records = imageAndVideoMapper.getImageInfo(req, Condition.getPage(query)).getRecords(); | 
				
			||||
        List<LocalDateTime> hourList = new ArrayList<>(); | 
				
			||||
        while (!startTime.isAfter(endTime)) { | 
				
			||||
            hourList.add(startTime); | 
				
			||||
            startTime = startTime.plusHours(1); | 
				
			||||
        } | 
				
			||||
        List<ImageVo> resultList = new ArrayList<>(); | 
				
			||||
 | 
				
			||||
        for (int i = 0; i < hourList.size() - 1; i++) { | 
				
			||||
            String stringTime = DateUtil.getStringTime(hourList.get(i)); | 
				
			||||
            boolean notHasInfo = true; | 
				
			||||
            for (ImageVo vo : records) { | 
				
			||||
                LocalDateTime warningTime = | 
				
			||||
                        LocalDateTime.parse(vo.getTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); | 
				
			||||
                if (Func.isEmpty(warningTime)) { | 
				
			||||
                    continue; | 
				
			||||
                } | 
				
			||||
                if (warningTime.isAfter(hourList.get(i)) && warningTime.isBefore(hourList.get(i + 1))) { | 
				
			||||
                    vo.setTime(stringTime); | 
				
			||||
                    vo.setStatus("正常"); | 
				
			||||
                    resultList.add(vo); | 
				
			||||
                    notHasInfo = false; | 
				
			||||
                } | 
				
			||||
 | 
				
			||||
            } | 
				
			||||
 | 
				
			||||
            if (notHasInfo) { | 
				
			||||
                ImageVo imageVo = new ImageVo(); | 
				
			||||
                imageVo.setTime(stringTime); | 
				
			||||
                imageVo.setName("暂无图片详情"); | 
				
			||||
                imageVo.setStatus("异常"); | 
				
			||||
                resultList.add(imageVo); | 
				
			||||
            } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
        } | 
				
			||||
        // 筛选
 | 
				
			||||
        if (StringUtil.isNotBlank(req.getStatus())) { | 
				
			||||
            resultList = resultList.stream().filter(o -> o.getStatus().equals(req.getStatus())).collect(Collectors.toList()); | 
				
			||||
        } | 
				
			||||
        return resultList; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public IPage<ImageVo> selectNewestImage(ImageReq req, Query query) { | 
				
			||||
        return imageAndVideoMapper.selectNewestImage(req, Condition.getPage(query)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public List<StationTreeRes> getStationVideoType(String videoType) { | 
				
			||||
        // 查询所有站点
 | 
				
			||||
        List<StationVo> stationList = ecologicalFlowMapper.getStationListByReq(new StationQueryReq()); | 
				
			||||
        // 根据类型查询所有视频点位
 | 
				
			||||
        List<StationTypeVo> videoList = imageAndVideoMapper.selectStationTypeByOwerType(videoType); | 
				
			||||
        // 组装数据
 | 
				
			||||
        List<StationTreeRes> resultList = new ArrayList<>(); | 
				
			||||
        for (StationVo stationVo : stationList) { | 
				
			||||
            StationTreeRes stationTreeRes = new StationTreeRes(); | 
				
			||||
            List<StationTypeVo> child = videoList.stream().filter(o -> | 
				
			||||
                o.getStationId().equals(stationVo.getDeviceCode()) | 
				
			||||
            ).collect(Collectors.toList()); | 
				
			||||
            if (CollectionUtils.isEmpty(child)) { | 
				
			||||
                continue; | 
				
			||||
            } | 
				
			||||
            stationTreeRes.setChild(child); | 
				
			||||
            stationTreeRes.setCount(child.size()); | 
				
			||||
            stationTreeRes.setStationVo(stationVo); | 
				
			||||
            resultList.add(stationTreeRes); | 
				
			||||
        } | 
				
			||||
        return resultList; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
@ -1,419 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.service.impl; | 
				
			||||
 | 
				
			||||
import com.alibaba.excel.EasyExcel; | 
				
			||||
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; | 
				
			||||
import com.hnac.hzims.suichang.mapper.EcologicalFlowMapper; | 
				
			||||
import com.hnac.hzims.suichang.service.EcologicalFlowService; | 
				
			||||
import com.hnac.hzims.suichang.service.RealMonitorService; | 
				
			||||
import com.hnac.hzims.suichang.util.DateUtil; | 
				
			||||
import com.hnac.hzims.suichang.vo.*; | 
				
			||||
import com.hnac.hzinfo.datasearch.analyse.domain.FieldsData; | 
				
			||||
import com.hnac.hzinfo.datasearch.real.po.RealDataSearchPO; | 
				
			||||
import com.hnac.hzinfo.sdk.core.response.Result; | 
				
			||||
import com.hnac.hzinfo.sdk.real.RealDataSearchClient; | 
				
			||||
import lombok.extern.slf4j.Slf4j; | 
				
			||||
import org.apache.commons.lang3.StringUtils; | 
				
			||||
import org.springframework.beans.BeanUtils; | 
				
			||||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
import org.springframework.beans.factory.annotation.Value; | 
				
			||||
import org.springframework.stereotype.Service; | 
				
			||||
import org.springframework.util.CollectionUtils; | 
				
			||||
 | 
				
			||||
import javax.servlet.http.HttpServletResponse; | 
				
			||||
import java.io.IOException; | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
import java.math.RoundingMode; | 
				
			||||
import java.net.URLEncoder; | 
				
			||||
import java.time.LocalDateTime; | 
				
			||||
import java.time.format.DateTimeFormatter; | 
				
			||||
import java.time.temporal.ChronoUnit; | 
				
			||||
import java.util.*; | 
				
			||||
import java.util.stream.Collectors; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-08 15:06 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
@Slf4j | 
				
			||||
@Service | 
				
			||||
public class RealMonitorServiceImpl implements RealMonitorService { | 
				
			||||
    @Autowired | 
				
			||||
    private EcologicalFlowService ecologicalFlowService; | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private EcologicalFlowMapper ecologicalFlowMapper; | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    RealDataSearchClient realDataSearchClient; | 
				
			||||
 | 
				
			||||
    @Value("${suichang.signage}") | 
				
			||||
    String signage; | 
				
			||||
 | 
				
			||||
    @Value("${suichang.timeSignage}") | 
				
			||||
    String timeSignage; | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public List<AvgMonitorVo> getAvgMonitorInfo() { | 
				
			||||
        // 获取当前时间
 | 
				
			||||
        LocalDateTime now = LocalDateTime.now(); | 
				
			||||
        // 昨天的开始时间(00:00) 昨天的结束时间(00:00)yesterday: 2024-03-12 00:00:00 yesterday: 2024-03-13 00:00:00
 | 
				
			||||
        LocalDateTime startTime = now.withHour(0).withMinute(0).withSecond(0).withNano(0); | 
				
			||||
        LocalDateTime endTime = now.withMinute(0).withSecond(0).withNano(0); | 
				
			||||
        int hours = (int)ChronoUnit.HOURS.between(startTime, endTime); | 
				
			||||
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | 
				
			||||
        String dateNow = now.format(formatter); | 
				
			||||
 | 
				
			||||
        List<StationVo> stationRelationList = ecologicalFlowMapper.getStationListByName(null); | 
				
			||||
 | 
				
			||||
        List<AvgMonitorVo> resultList = new ArrayList<>(); | 
				
			||||
        for (StationVo vo : stationRelationList) { | 
				
			||||
            String stcd = vo.getDeviceCode(); | 
				
			||||
            // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
            // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
            List<Map<String, Object>> dataList = ecologicalFlowService.getData( | 
				
			||||
                    stcd, 3, 2, hours, startTime, endTime); | 
				
			||||
            String realFlowValue = getRealData(stcd, signage); | 
				
			||||
            log.info("dataList: {}, 实时流量为:{},设备编码为:{}", dataList, realFlowValue, stcd); | 
				
			||||
            Map<String, Object> info = new HashMap<>(); | 
				
			||||
            if (!CollectionUtils.isEmpty(dataList)) { | 
				
			||||
                // 为了处理特殊返回情况 多查出一条数据的问题
 | 
				
			||||
                if (dataList.size() > 1) { | 
				
			||||
                    dataList.remove(0); | 
				
			||||
                } | 
				
			||||
                info = dataList.get(0); | 
				
			||||
            } | 
				
			||||
 | 
				
			||||
            AvgMonitorVo realMonitorVo = new AvgMonitorVo(); | 
				
			||||
            BeanUtils.copyProperties(vo, realMonitorVo); | 
				
			||||
            realMonitorVo.setRealFlow(realFlowValue); | 
				
			||||
            String ecologicalFlowValue = null == info.get(signage) ? "0" : | 
				
			||||
                    info.get(signage).toString(); | 
				
			||||
            log.info("info: {}, key:{}, 值:{}", info, signage, ecologicalFlowValue); | 
				
			||||
            realMonitorVo.setAvgFlow(ecologicalFlowValue); | 
				
			||||
            realMonitorVo.setDateNow(dateNow); | 
				
			||||
            // 上报率
 | 
				
			||||
            List<Map<String, Object>> reportList = ecologicalFlowService.getData( | 
				
			||||
                    stcd, 3, 2, 1, startTime, endTime); | 
				
			||||
            int reportCount = 0; | 
				
			||||
            if (!CollectionUtils.isEmpty(reportList)) { | 
				
			||||
                // 为了处理特殊返回情况 多查出一条数据的问题
 | 
				
			||||
                if (reportList.size() > hours) { | 
				
			||||
                    reportList.remove(0); | 
				
			||||
                } | 
				
			||||
                for (Map<String, Object> map : reportList) { | 
				
			||||
                    if (null != map.get(signage)) { | 
				
			||||
                        reportCount++; | 
				
			||||
                    } | 
				
			||||
                } | 
				
			||||
            } | 
				
			||||
            BigDecimal pre = BigDecimal.valueOf(reportCount).divide(BigDecimal.valueOf(hours), 2, RoundingMode.HALF_UP); | 
				
			||||
            pre = pre.compareTo(BigDecimal.ONE) >= 1 ? BigDecimal.ONE : pre; | 
				
			||||
            realMonitorVo.setPassPre(pre.multiply(new BigDecimal(100))+ "%"); | 
				
			||||
            resultList.add(realMonitorVo); | 
				
			||||
        } | 
				
			||||
        return resultList; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public List<AvgMonitorCountVo> getAvgMonitorCountInfo(AvgMonitorReq req) { | 
				
			||||
        // 昨日传2024-03-13 2024-03-13 时间段 2024-03-10 2024-03-13
 | 
				
			||||
 | 
				
			||||
        String dateString = req.getStartTime() + " 00:00:00"; | 
				
			||||
        String endString = req.getEndTime() + " 00:00:00"; | 
				
			||||
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | 
				
			||||
        LocalDateTime startTime = LocalDateTime.parse(dateString, formatter); | 
				
			||||
        LocalDateTime endTime = LocalDateTime.parse(endString, formatter).plusDays(1); | 
				
			||||
 | 
				
			||||
        long days = ChronoUnit.DAYS.between(startTime, endTime); | 
				
			||||
        log.info("开始结束时间: {}, {},相差天数:{}", startTime, endTime, days); | 
				
			||||
 | 
				
			||||
        List<StationVo> stationRelationList = ecologicalFlowMapper.getStationListByName(req.getName()); | 
				
			||||
 | 
				
			||||
        List<AvgMonitorCountVo> resultList = new ArrayList<>(); | 
				
			||||
        for (StationVo vo : stationRelationList) { | 
				
			||||
//            String stcd = "JSCZ001";
 | 
				
			||||
            String stcd = vo.getDeviceCode(); | 
				
			||||
            // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
            // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
            List<Map<String, Object>> dataList = ecologicalFlowService.getData( | 
				
			||||
                    stcd, 3, 3, 1, startTime, endTime); | 
				
			||||
            log.info("dataList: {}, 设备编码为:{}", dataList, stcd); | 
				
			||||
            if (!CollectionUtils.isEmpty(dataList)) { | 
				
			||||
                int passCount = 0; | 
				
			||||
                // 为了处理特殊返回情况 多查出一条数据的问题
 | 
				
			||||
                if (dataList.size() > days) { | 
				
			||||
                    dataList.remove(0); | 
				
			||||
                } | 
				
			||||
                List<RealMonitorSingleInfoVo> infos = new ArrayList<>(); | 
				
			||||
                AvgMonitorCountVo realMonitorVo = new AvgMonitorCountVo(); | 
				
			||||
                for (int j = 0 ; j < dataList.size(); j++) { | 
				
			||||
                    Map<String, Object> info = dataList.get(j); | 
				
			||||
                    log.info("info: {}, key:{}, 值:{}", info, signage, info.get(signage)); | 
				
			||||
                    String ecologicalFlowValue = null == info.get(signage) ? "0" : | 
				
			||||
                            info.get(signage).toString(); | 
				
			||||
                    if (vo.getFlowValue().compareTo(new BigDecimal(ecologicalFlowValue)) <= 0) { | 
				
			||||
                        passCount++; | 
				
			||||
                    } | 
				
			||||
                    RealMonitorSingleInfoVo realInfo = new RealMonitorSingleInfoVo(); | 
				
			||||
                    realInfo.setTm(info.get(timeSignage).toString()); | 
				
			||||
                    realInfo.setValue(ecologicalFlowValue); | 
				
			||||
                    infos.add(realInfo); | 
				
			||||
                } | 
				
			||||
 | 
				
			||||
                realMonitorVo.setName(vo.getName()); | 
				
			||||
                realMonitorVo.setFlowValue(vo.getFlowValue()); | 
				
			||||
                realMonitorVo.setCount(days); | 
				
			||||
                realMonitorVo.setPassCount(passCount); | 
				
			||||
                BigDecimal pre = BigDecimal.valueOf(passCount).divide(BigDecimal.valueOf(days), 2, RoundingMode.HALF_UP); | 
				
			||||
 | 
				
			||||
                realMonitorVo.setPassPre(pre.multiply(BigDecimal.valueOf(100)) + "%"); | 
				
			||||
                realMonitorVo.setInfos(infos); | 
				
			||||
                resultList.add(realMonitorVo); | 
				
			||||
            } | 
				
			||||
        } | 
				
			||||
        return resultList; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public RealMonitorRes getRealMonitorInfo(String name) { | 
				
			||||
        // 创建一个 DateTimeFormatter 对象来指定输出格式
 | 
				
			||||
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | 
				
			||||
        String dateNow = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0).format(formatter); | 
				
			||||
        // 查询所有站点
 | 
				
			||||
        List<StationVo> infos = ecologicalFlowMapper.getStationListByName(name); | 
				
			||||
        // 查询每个站点的名称,核定流量,实时流量,上报个数 时间
 | 
				
			||||
        List<RealMonitorVo> resultList = new ArrayList<>(); | 
				
			||||
        for (StationVo info : infos) { | 
				
			||||
//            String stcd = "JSCZ001";
 | 
				
			||||
            String stcd = info.getDeviceCode(); | 
				
			||||
            String stationName = info.getName(); | 
				
			||||
            BigDecimal flowValue = info.getFlowValue(); | 
				
			||||
            // 查询实时数据
 | 
				
			||||
            String realFlowValue = getRealData(stcd, signage); | 
				
			||||
            // 查询历史条数(上报条数)
 | 
				
			||||
            int historyDataCount = getHistoryDataCount(stcd); | 
				
			||||
            RealMonitorVo realMonitorVo = new RealMonitorVo(); | 
				
			||||
            realMonitorVo.setName(stationName); | 
				
			||||
            realMonitorVo.setDeviceCode(stcd); | 
				
			||||
            realMonitorVo.setFlowValue(flowValue); | 
				
			||||
            realMonitorVo.setRealFlow(realFlowValue); | 
				
			||||
            realMonitorVo.setReportCount(historyDataCount); | 
				
			||||
            realMonitorVo.setDateNow(dateNow); | 
				
			||||
            realMonitorVo.setAreaName("遂昌县"); | 
				
			||||
            resultList.add(realMonitorVo); | 
				
			||||
        } | 
				
			||||
        // 应上报个数
 | 
				
			||||
        long hoursPassedToday = DateUtil.getHoursPassedToday() + 1; | 
				
			||||
        RealMonitorRes realMonitorRes = new RealMonitorRes(); | 
				
			||||
        realMonitorRes.setRealMonitorVos(resultList); | 
				
			||||
        realMonitorRes.setReportCount(hoursPassedToday); | 
				
			||||
        return realMonitorRes; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public void exportRealMonitorInfo(HttpServletResponse response, String name) { | 
				
			||||
        RealMonitorRes realMonitorInfo = this.getRealMonitorInfo(name); | 
				
			||||
        List<RealMonitorVo> list = realMonitorInfo.getRealMonitorVos(); | 
				
			||||
        List<RealMonitorExportDTO> result = list.stream().map(o -> { | 
				
			||||
            RealMonitorExportDTO dto = new RealMonitorExportDTO(); | 
				
			||||
            BeanUtils.copyProperties(o, dto); | 
				
			||||
            return dto; | 
				
			||||
        }).collect(Collectors.toList()); | 
				
			||||
 | 
				
			||||
        // 下载导出
 | 
				
			||||
        String filename = "实时流量"; | 
				
			||||
        // 设置头信息
 | 
				
			||||
        response.setCharacterEncoding("UTF-8"); | 
				
			||||
        response.setContentType("application/vnd.ms-excel"); | 
				
			||||
        try { | 
				
			||||
            //设置xlsx格式
 | 
				
			||||
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename + ".xlsx", "UTF-8")); | 
				
			||||
            //创建一个输出流
 | 
				
			||||
            EasyExcel.write(response.getOutputStream(), RealMonitorExportDTO.class) | 
				
			||||
                    .autoCloseStream(Boolean.TRUE).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) | 
				
			||||
                    .sheet(1,"实时流量") | 
				
			||||
                    .doWrite(result); | 
				
			||||
            response.getOutputStream().close(); | 
				
			||||
        } catch (IOException e) { | 
				
			||||
            e.printStackTrace(); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public void exportRealMonitorSingleInfo(HttpServletResponse response, RealMonitorSingleInfoReq req) { | 
				
			||||
        List<RealMonitorSingleInfoVo> realMonitorSingleInfos = getRealMonitorSingleInfo(req); | 
				
			||||
        for (RealMonitorSingleInfoVo realMonitorSingleInfo : realMonitorSingleInfos) { | 
				
			||||
            realMonitorSingleInfo.setTm(realMonitorSingleInfo.getTm() + ":00:00"); | 
				
			||||
        } | 
				
			||||
        // 下载导出
 | 
				
			||||
        String filename = "站点流量详情"; | 
				
			||||
        // 设置头信息
 | 
				
			||||
        response.setCharacterEncoding("UTF-8"); | 
				
			||||
        response.setContentType("application/vnd.ms-excel"); | 
				
			||||
        try { | 
				
			||||
            //设置xlsx格式
 | 
				
			||||
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename + ".xlsx", "UTF-8")); | 
				
			||||
            //创建一个输出流
 | 
				
			||||
            EasyExcel.write(response.getOutputStream(), RealMonitorSingleInfoVo.class) | 
				
			||||
                    .autoCloseStream(Boolean.TRUE) | 
				
			||||
                    .sheet(1,"站点流量详情").registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) | 
				
			||||
                    .doWrite(realMonitorSingleInfos); | 
				
			||||
            response.getOutputStream().close(); | 
				
			||||
        } catch (IOException e) { | 
				
			||||
            e.printStackTrace(); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public List<RealMonitorSingleInfoVo> getRealMonitorSingleInfo(RealMonitorSingleInfoReq req) { | 
				
			||||
        String stcd = req.getDeviceCode(); | 
				
			||||
        LocalDateTime startTime = DateUtil.getStartTime(req.getStartTime()); | 
				
			||||
        LocalDateTime endTime = DateUtil.getEndTime(req.getEndTime()); | 
				
			||||
        log.info("开始时间结束时间: {}, {}", startTime, endTime); | 
				
			||||
        // 昨日达标情况 达标率就是有没有达到核定下限流量
 | 
				
			||||
        // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
        // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
        List<Map<String, Object>> dataList = ecologicalFlowService.getData( | 
				
			||||
                stcd, 3, 2, 1, startTime, endTime); | 
				
			||||
        log.info("拿到getHistoryDataCount dataList: {}, 设备编码为:{}", dataList, stcd); | 
				
			||||
        List<RealMonitorSingleInfoVo> resultList = new ArrayList<>(); | 
				
			||||
        if (!CollectionUtils.isEmpty(dataList)) { | 
				
			||||
            resultList = dataList.stream().map(info -> { | 
				
			||||
                String value = null == info.get(signage) ? "0" : | 
				
			||||
                        info.get(signage).toString(); | 
				
			||||
 | 
				
			||||
                String time = null == info.get(timeSignage) ? "" : | 
				
			||||
                        info.get(timeSignage).toString() + ":00:00"; | 
				
			||||
                RealMonitorSingleInfoVo vo = new RealMonitorSingleInfoVo(); | 
				
			||||
                vo.setValue(value); | 
				
			||||
                vo.setTm(time); | 
				
			||||
                return vo; | 
				
			||||
            }).collect(Collectors.toList()); | 
				
			||||
        } | 
				
			||||
        return resultList; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public String getRealData(String stcd, String signage) { | 
				
			||||
        RealDataSearchPO po = new RealDataSearchPO(); | 
				
			||||
        po.setAnalyzeCode(stcd); | 
				
			||||
        List<String> signages = new ArrayList<>(); | 
				
			||||
        signages.add(signage); | 
				
			||||
        po.setSignages(signages); | 
				
			||||
        Result<List<FieldsData>> result = realDataSearchClient.getRealDataByDeviceCode(po); | 
				
			||||
        log.info("result: {}, 设备编码为:{}", result, stcd); | 
				
			||||
        if (result == null || !result.isSuccess()) { | 
				
			||||
            return null; | 
				
			||||
        } | 
				
			||||
        String value = "0"; | 
				
			||||
        List<FieldsData> data = result.getData(); | 
				
			||||
        if (!CollectionUtils.isEmpty(data)) { | 
				
			||||
            value = data.get(0).getValue(); | 
				
			||||
        } | 
				
			||||
        return value; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public void exportAvgMonitorCountInfo(HttpServletResponse response, AvgMonitorReq req) { | 
				
			||||
        List<AvgMonitorCountVo> avgMonitorCountInfo = getAvgMonitorCountInfo(req); | 
				
			||||
        // 动态生成的表头
 | 
				
			||||
        List<String> firstHead = new ArrayList<>(Arrays.asList("电站名称", "核定流量")); | 
				
			||||
        List<String> endHead = new ArrayList<>(Arrays.asList("考核天数", "合格天数", "合格率")); | 
				
			||||
        List<String> allList = new ArrayList<>(); | 
				
			||||
        allList.addAll(firstHead); | 
				
			||||
        if (avgMonitorCountInfo.size() > 0) { | 
				
			||||
            AvgMonitorCountVo avgMonitorCountVo = avgMonitorCountInfo.get(0); | 
				
			||||
            List<RealMonitorSingleInfoVo> infos = avgMonitorCountVo.getInfos(); | 
				
			||||
            List<String> mindHead = infos.stream().map(RealMonitorSingleInfoVo::getTm).collect(Collectors.toList()); | 
				
			||||
            allList.addAll(mindHead); | 
				
			||||
        } | 
				
			||||
        allList.addAll(endHead); | 
				
			||||
        List<List<String>> head = allList.stream().map(v -> { | 
				
			||||
            List<String> list = new ArrayList<>(); | 
				
			||||
            list.add(v); | 
				
			||||
            return list; | 
				
			||||
        }).collect(Collectors.toList()); | 
				
			||||
        // 组合数据
 | 
				
			||||
        List<List<String>> contentLists = new ArrayList<>(); | 
				
			||||
        avgMonitorCountInfo.forEach(o -> { | 
				
			||||
            List<String> list = new ArrayList<>(); | 
				
			||||
            list.add(o.getName()); | 
				
			||||
            list.add(o.getFlowValue().toString()); | 
				
			||||
            List<RealMonitorSingleInfoVo> rsVo = o.getInfos(); | 
				
			||||
            rsVo.forEach(k -> { | 
				
			||||
                list.add(k.getValue()); | 
				
			||||
            }); | 
				
			||||
            list.add(o.getCount().toString()); | 
				
			||||
            list.add(o.getPassCount().toString()); | 
				
			||||
            list.add(o.getPassPre()); | 
				
			||||
            contentLists.add(list); | 
				
			||||
        }); | 
				
			||||
        try { | 
				
			||||
            //设置xlsx格式
 | 
				
			||||
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("日均流量" + ".xlsx", "UTF-8")); | 
				
			||||
 | 
				
			||||
            EasyExcel.write(response.getOutputStream()).autoCloseStream(Boolean.TRUE).head(head) | 
				
			||||
                    .sheet(1,"日均流量").registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) | 
				
			||||
                    .doWrite(contentLists); | 
				
			||||
            response.getOutputStream().close(); | 
				
			||||
        } catch (IOException e) { | 
				
			||||
            e.printStackTrace(); | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    int getHistoryDataCount(String stcd) { | 
				
			||||
        // 获取当前时间
 | 
				
			||||
        LocalDateTime now = LocalDateTime.now(); | 
				
			||||
        LocalDateTime startTime = now.withHour(0).withMinute(0).withSecond(0).withNano(0); | 
				
			||||
        LocalDateTime endTime = now; | 
				
			||||
        // 昨日达标情况 达标率就是有没有达到核定下限流量
 | 
				
			||||
        // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
        // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
        List<Map<String, Object>> dataList = ecologicalFlowService.getData( | 
				
			||||
                stcd, 3, 2, 1, startTime, endTime); | 
				
			||||
        log.info("拿到getHistoryDataCount dataList: {}, 设备编码为:{}", dataList, stcd); | 
				
			||||
        int count = 0; | 
				
			||||
        if (!CollectionUtils.isEmpty(dataList)) { | 
				
			||||
            for (Map<String, Object> info : dataList) { | 
				
			||||
                String ecologicalFlowValue = null == info.get(signage) ? null : | 
				
			||||
                        info.get(signage).toString(); | 
				
			||||
                log.info("ecologicalFlowValue的值: {}", ecologicalFlowValue); | 
				
			||||
                if (StringUtils.isNotBlank(ecologicalFlowValue)) { | 
				
			||||
                    count++; | 
				
			||||
                } | 
				
			||||
            } | 
				
			||||
        } | 
				
			||||
        return count; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public String getRealData(String stcd) { | 
				
			||||
        RealDataSearchPO po = new RealDataSearchPO(); | 
				
			||||
        po.setAnalyzeCode(stcd); | 
				
			||||
        List<String> signages = new ArrayList<>(); | 
				
			||||
        signages.add(signage); | 
				
			||||
        po.setSignages(signages); | 
				
			||||
        Result<List<FieldsData>> result = realDataSearchClient.getRealDataByDeviceCode(po); | 
				
			||||
        log.info("result: {}, 设备编码为:{}", result, stcd); | 
				
			||||
        if (result == null || !result.isSuccess()) { | 
				
			||||
            return null; | 
				
			||||
        } | 
				
			||||
        String value = "0"; | 
				
			||||
        List<FieldsData> data = result.getData(); | 
				
			||||
        if (!CollectionUtils.isEmpty(data)) { | 
				
			||||
            value = data.get(0).getValue(); | 
				
			||||
        } | 
				
			||||
        return value; | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
@ -1,172 +0,0 @@
					 | 
				
			||||
package com.hnac.hzims.suichang.service.impl; | 
				
			||||
 | 
				
			||||
import com.alibaba.excel.EasyExcel; | 
				
			||||
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; | 
				
			||||
import com.hnac.hzims.suichang.mapper.EcologicalFlowMapper; | 
				
			||||
import com.hnac.hzims.suichang.service.EcologicalFlowService; | 
				
			||||
import com.hnac.hzims.suichang.service.StatisticsDataService; | 
				
			||||
import com.hnac.hzims.suichang.util.DateUtil; | 
				
			||||
import com.hnac.hzims.suichang.vo.StationVo; | 
				
			||||
import com.hnac.hzims.suichang.vo.StatisticsFlowDataDetailVo; | 
				
			||||
import com.hnac.hzims.suichang.vo.StatisticsFlowDataReq; | 
				
			||||
import com.hnac.hzims.suichang.vo.StatisticsFlowDataVo; | 
				
			||||
import lombok.extern.slf4j.Slf4j; | 
				
			||||
import org.springblade.core.tool.utils.ObjectUtil; | 
				
			||||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
import org.springframework.beans.factory.annotation.Value; | 
				
			||||
import org.springframework.stereotype.Service; | 
				
			||||
import org.springframework.util.CollectionUtils; | 
				
			||||
 | 
				
			||||
import javax.servlet.http.HttpServletResponse; | 
				
			||||
import java.io.IOException; | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
import java.math.RoundingMode; | 
				
			||||
import java.net.URLEncoder; | 
				
			||||
import java.time.LocalDateTime; | 
				
			||||
import java.time.temporal.ChronoUnit; | 
				
			||||
import java.util.ArrayList; | 
				
			||||
import java.util.Arrays; | 
				
			||||
import java.util.List; | 
				
			||||
import java.util.Map; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Author: liangfan | 
				
			||||
 * @Date: 2024-03-14 16:19 | 
				
			||||
 * @Description: | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
@Slf4j | 
				
			||||
@Service | 
				
			||||
public class StatisticsDataServiceImpl implements StatisticsDataService { | 
				
			||||
    @Autowired | 
				
			||||
    private EcologicalFlowMapper ecologicalFlowMapper; | 
				
			||||
 | 
				
			||||
    @Autowired | 
				
			||||
    private EcologicalFlowService ecologicalFlowService; | 
				
			||||
 | 
				
			||||
    @Value("${suichang.signage}") | 
				
			||||
    String signage; | 
				
			||||
 | 
				
			||||
    @Value("${suichang.passPreValue}") | 
				
			||||
    String passPreValueInfo; | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public StatisticsFlowDataVo statisticsFlowReportByTime(StatisticsFlowDataReq req) { | 
				
			||||
        // 查询所有站点
 | 
				
			||||
        List<StationVo> infos = ecologicalFlowMapper.getStationListByName(req.getName()); | 
				
			||||
        // 电站信息
 | 
				
			||||
        List<StatisticsFlowDataDetailVo> dataDetailVos = new ArrayList<>(); | 
				
			||||
        // 构建detail 并返回达标数
 | 
				
			||||
        int stationPassCount = buildInfos(req, infos, dataDetailVos, passPreValueInfo); | 
				
			||||
        // 总览信息
 | 
				
			||||
        StatisticsFlowDataVo result = new StatisticsFlowDataVo(); | 
				
			||||
        result.setAreaName("遂昌县"); | 
				
			||||
        result.setExamCount(infos.size()); | 
				
			||||
        result.setPassCount(stationPassCount); | 
				
			||||
        BigDecimal pre = BigDecimal.valueOf(stationPassCount).divide(BigDecimal.valueOf(infos.size()), 2, RoundingMode.HALF_UP); | 
				
			||||
        result.setPassPre(pre.multiply(BigDecimal.valueOf(100)) + "%"); | 
				
			||||
        result.setDetail(dataDetailVos); | 
				
			||||
        return result; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public void exportStatisticsFlowReportByTime(HttpServletResponse response, StatisticsFlowDataReq req) { | 
				
			||||
        StatisticsFlowDataVo statisticsFlowDataVo = statisticsFlowReportByTime(req); | 
				
			||||
        // 动态生成的表头
 | 
				
			||||
        String areaName = statisticsFlowDataVo.getAreaName(); | 
				
			||||
        Integer examCount = statisticsFlowDataVo.getExamCount(); | 
				
			||||
        Integer passCount = statisticsFlowDataVo.getPassCount(); | 
				
			||||
        String passPre = statisticsFlowDataVo.getPassPre(); | 
				
			||||
 | 
				
			||||
        List<String> firstHead = new ArrayList<>(Arrays.asList("区域名称:" + areaName, "考核电站数:" + examCount, | 
				
			||||
                "达标电站数:" + passCount, "达标率(%):" + passPre, "安装流量计的电站数:" + examCount)); | 
				
			||||
        List<String> endHead = new ArrayList<>(Arrays.asList("电站名称", "核定生态流量", "考核天数", "合格天数", "合格率")); | 
				
			||||
        // 构建表头
 | 
				
			||||
        List<List<String>> head = new ArrayList<>(); | 
				
			||||
        for (int i = 0; i < endHead.size(); i++) { | 
				
			||||
            List<String> list = new ArrayList<>(); | 
				
			||||
            list.add(firstHead.get(i)); | 
				
			||||
            list.add(endHead.get(i)); | 
				
			||||
            head.add(list); | 
				
			||||
        } | 
				
			||||
        // 组合数据
 | 
				
			||||
        List<List<String>> contentLists = new ArrayList<>(); | 
				
			||||
        List<StatisticsFlowDataDetailVo> detail = statisticsFlowDataVo.getDetail(); | 
				
			||||
        detail.forEach(o -> { | 
				
			||||
            List<String> list = new ArrayList<>(); | 
				
			||||
            list.add(o.getName()); | 
				
			||||
            list.add(o.getFlowValue()); | 
				
			||||
            list.add(o.getExamDays().toString()); | 
				
			||||
            list.add(o.getExamPassDays().toString()); | 
				
			||||
            list.add(o.getExamPassDayPre()); | 
				
			||||
            contentLists.add(list); | 
				
			||||
        }); | 
				
			||||
        try { | 
				
			||||
            //设置xlsx格式
 | 
				
			||||
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("报表" + ".xlsx", "UTF-8")); | 
				
			||||
 | 
				
			||||
            EasyExcel.write(response.getOutputStream()).autoCloseStream(Boolean.TRUE).head(head).autoTrim(true) | 
				
			||||
                    .sheet(1, "报表").registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) | 
				
			||||
                    .doWrite(contentLists); | 
				
			||||
 | 
				
			||||
            response.getOutputStream().close(); | 
				
			||||
        } catch (IOException e) { | 
				
			||||
            e.printStackTrace(); | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    int buildInfos(StatisticsFlowDataReq req, List<StationVo> infos, | 
				
			||||
                   List<StatisticsFlowDataDetailVo> dataDetailVos, String passPreValue) { | 
				
			||||
        int stationPassCount = 0; | 
				
			||||
        for (StationVo stationRelationVo : infos) { | 
				
			||||
//            String stcd = "JSCZ001";
 | 
				
			||||
            String stcd = stationRelationVo.getDeviceCode(); | 
				
			||||
            BigDecimal flowValue = stationRelationVo.getFlowValue(); | 
				
			||||
            LocalDateTime startTime = DateUtil.getStartTime(req.getStartTime()); | 
				
			||||
            LocalDateTime endTime = DateUtil.getEndTimeByDay(req.getEndTime()); | 
				
			||||
            int days = (int) ChronoUnit.DAYS.between(startTime, endTime); | 
				
			||||
 | 
				
			||||
            log.info("开始时间结束时间: {}, {},相差天数:{}", startTime, endTime, days); | 
				
			||||
            // 查询单个站点一个时间段的日均数据
 | 
				
			||||
            // accessRules 取数规则:0=最早值、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值)6=最新值")
 | 
				
			||||
            // SaveTimeType 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时) 3->、d(天) 4->、w(周) 5->、n(自然月)、6->y(自然年)
 | 
				
			||||
            List<Map<String, Object>> dataList = ecologicalFlowService.getData( | 
				
			||||
                    stcd, 3, 3, 1, startTime, endTime); | 
				
			||||
            log.info("dataList: {}, 设备编码为:{}", dataList, stcd); | 
				
			||||
            StatisticsFlowDataDetailVo detailVo = new StatisticsFlowDataDetailVo(); | 
				
			||||
            if (!CollectionUtils.isEmpty(dataList)) { | 
				
			||||
                int passCount = 0; | 
				
			||||
                // 为了处理特殊返回情况 多查出一条数据的问题 跳过第一条
 | 
				
			||||
                if (dataList.size() > days) { | 
				
			||||
                    dataList.remove(0); | 
				
			||||
                } | 
				
			||||
                for (int j = 0; j < dataList.size(); j++) { | 
				
			||||
                    Map<String, Object> info = dataList.get(j); | 
				
			||||
                    log.info("info: {}, key:{}, 值:{}", info, signage, info.get(signage)); | 
				
			||||
                    String ecologicalFlowValue = null == info.get(signage) ? "0" : | 
				
			||||
                            info.get(signage).toString(); | 
				
			||||
                    if (flowValue.compareTo(new BigDecimal(ecologicalFlowValue)) <= 0) { | 
				
			||||
                        passCount++; | 
				
			||||
                    } | 
				
			||||
                } | 
				
			||||
                // 计算合格率
 | 
				
			||||
                BigDecimal singlePassPre = BigDecimal.valueOf(passCount).divide(BigDecimal.valueOf(days), 2, RoundingMode.HALF_UP); | 
				
			||||
                if (new BigDecimal(passPreValue).compareTo(singlePassPre) <= 0) { | 
				
			||||
                    stationPassCount++; | 
				
			||||
                } | 
				
			||||
                detailVo.setExamPassDays(passCount); | 
				
			||||
                detailVo.setExamPassDayPre(singlePassPre.multiply(BigDecimal.valueOf(100)) + "%"); | 
				
			||||
            } | 
				
			||||
            // 组装数据
 | 
				
			||||
            detailVo.setName(stationRelationVo.getName()); | 
				
			||||
            if(ObjectUtil.isNotEmpty(stationRelationVo.getFlowValue())){ | 
				
			||||
                detailVo.setFlowValue(stationRelationVo.getFlowValue().toString()); | 
				
			||||
            } | 
				
			||||
            detailVo.setExamDays(days); | 
				
			||||
            dataDetailVos.add(detailVo); | 
				
			||||
 | 
				
			||||
        } | 
				
			||||
        return stationPassCount; | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
@ -1,16 +0,0 @@
					 | 
				
			||||
#mybatis-plus配置 | 
				
			||||
mybatis-plus: | 
				
			||||
  mapper-locations: classpath:com/hnac/hzims/**/mapper/*Mapper.xml | 
				
			||||
  #实体扫描,多个package用逗号或者分号分隔 | 
				
			||||
  typeAliasesPackage: com.hnac.hzims.**.entity | 
				
			||||
 | 
				
			||||
#swagger扫描路径配置 | 
				
			||||
swagger: | 
				
			||||
  base-packages: | 
				
			||||
    - org.springbalde | 
				
			||||
    - com.hnac | 
				
			||||
 | 
				
			||||
#服务器端口 | 
				
			||||
server: | 
				
			||||
  port: 18999 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,24 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.controller; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.safeproduct.Constants; | 
				
			||||
import com.hnac.hzims.safeproduct.train.service.IInstitutionalService; | 
				
			||||
import com.hnac.hzinfo.log.annotation.Business; | 
				
			||||
import io.swagger.annotations.Api; | 
				
			||||
import lombok.AllArgsConstructor; | 
				
			||||
import org.springblade.core.boot.ctrl.BladeController; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RestController; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
@RestController | 
				
			||||
@AllArgsConstructor | 
				
			||||
@RequestMapping("/institutional") | 
				
			||||
@Business(module = Constants.APP_NAME, value = "制度资料") | 
				
			||||
@Api(tags = "制度资料") | 
				
			||||
public class InstitutionalController extends BladeController { | 
				
			||||
 | 
				
			||||
    private final IInstitutionalService institutionalService; | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,72 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.controller; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; | 
				
			||||
import com.hnac.hzims.safeproduct.Constants; | 
				
			||||
import com.hnac.hzims.safeproduct.train.entity.RectificationEntity; | 
				
			||||
import com.hnac.hzims.safeproduct.train.entity.ViolationEntity; | 
				
			||||
import com.hnac.hzims.safeproduct.train.service.IRectificlationService; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.RectificationParamVo; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.RectificationSummaryVo; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.ViolationParamVo; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.ViolationSummaryVo; | 
				
			||||
import com.hnac.hzinfo.log.annotation.Business; | 
				
			||||
import io.swagger.annotations.Api; | 
				
			||||
import io.swagger.annotations.ApiOperation; | 
				
			||||
import io.swagger.annotations.ApiParam; | 
				
			||||
import lombok.AllArgsConstructor; | 
				
			||||
import org.springblade.core.boot.ctrl.BladeController; | 
				
			||||
import org.springblade.core.mp.support.Condition; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
import org.springblade.core.tool.api.R; | 
				
			||||
import org.springblade.core.tool.utils.Func; | 
				
			||||
import org.springframework.web.bind.annotation.*; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
@RestController | 
				
			||||
@AllArgsConstructor | 
				
			||||
@RequestMapping("/rectification") | 
				
			||||
@Business(module = Constants.APP_NAME, value = "整改督办") | 
				
			||||
@Api(value = "整改督办", tags = "整改督办接口") | 
				
			||||
public class RectificationController extends BladeController { | 
				
			||||
 | 
				
			||||
    private final IRectificlationService service; | 
				
			||||
 | 
				
			||||
    @PostMapping("/save") | 
				
			||||
    @ApiOperationSupport(order = 1) | 
				
			||||
    @ApiOperation(value = "新增违章考核", notes = "传入RectificationEntity") | 
				
			||||
    public R save(@RequestBody RectificationEntity entity) { | 
				
			||||
        return R.status(service.save(entity)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @PostMapping("/update") | 
				
			||||
    @ApiOperationSupport(order = 2) | 
				
			||||
    @ApiOperation(value = "修改违章考核", notes = "传入RectificationEntity") | 
				
			||||
    public R update(@RequestBody RectificationEntity entity) { | 
				
			||||
        return R.status(service.updateById(entity)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @PostMapping("/remove") | 
				
			||||
    @ApiOperationSupport(order = 4) | 
				
			||||
    @ApiOperation(value = "删除违章考核", notes = "ids") | 
				
			||||
    public R remove(@ApiParam(value = "主键集合") @RequestParam String ids) { | 
				
			||||
        return R.status(service.removeByIds(Func.toLongList(ids))); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @GetMapping("/pages") | 
				
			||||
    @ApiOperationSupport(order = 5) | 
				
			||||
    @ApiOperation(value = "分页查询", notes = "查询条件:entity") | 
				
			||||
    public R<IPage<RectificationEntity>> pageCondition(RectificationParamVo params, Query query) { | 
				
			||||
        return R.data(service.pageCondition(params, Condition.getPage(query))); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @GetMapping("/summary") | 
				
			||||
    @ApiOperationSupport(order = 5) | 
				
			||||
    @ApiOperation(value = "汇总", notes = "查询条件:站点ID、月份") | 
				
			||||
    public R<IPage<RectificationSummaryVo>> summary(RectificationParamVo params, Query query) { | 
				
			||||
        return R.data(service.summary(params,Condition.getPage(query))); | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,23 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.controller; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.safeproduct.Constants; | 
				
			||||
import com.hnac.hzims.safeproduct.train.service.ITrainService; | 
				
			||||
import com.hnac.hzinfo.log.annotation.Business; | 
				
			||||
import io.swagger.annotations.Api; | 
				
			||||
import lombok.AllArgsConstructor; | 
				
			||||
import org.springblade.core.boot.ctrl.BladeController; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RestController; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
@RestController | 
				
			||||
@AllArgsConstructor | 
				
			||||
@RequestMapping("/train") | 
				
			||||
@Business(module = Constants.APP_NAME, value = "培训管理") | 
				
			||||
@Api(value = "培训管理", tags = "培训管理接口") | 
				
			||||
public class TrainController extends BladeController { | 
				
			||||
 | 
				
			||||
    private final ITrainService trainService; | 
				
			||||
} | 
				
			||||
@ -0,0 +1,70 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.controller; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; | 
				
			||||
import com.hnac.hzims.safeproduct.Constants; | 
				
			||||
import com.hnac.hzims.safeproduct.train.entity.ViolationEntity; | 
				
			||||
import com.hnac.hzims.safeproduct.train.service.IViolationService; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.ViolationParamVo; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.ViolationSummaryVo; | 
				
			||||
import com.hnac.hzinfo.log.annotation.Business; | 
				
			||||
import io.swagger.annotations.Api; | 
				
			||||
import io.swagger.annotations.ApiOperation; | 
				
			||||
import io.swagger.annotations.ApiParam; | 
				
			||||
import lombok.AllArgsConstructor; | 
				
			||||
import org.springblade.core.boot.ctrl.BladeController; | 
				
			||||
import org.springblade.core.mp.support.Condition; | 
				
			||||
import org.springblade.core.mp.support.Query; | 
				
			||||
import org.springblade.core.tool.api.R; | 
				
			||||
import org.springblade.core.tool.utils.Func; | 
				
			||||
import org.springframework.web.bind.annotation.*; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
@RestController | 
				
			||||
@AllArgsConstructor | 
				
			||||
@RequestMapping("/violation") | 
				
			||||
@Business(module = Constants.APP_NAME, value = "违章考核") | 
				
			||||
@Api(value = "违章考核", tags = "违章考核接口") | 
				
			||||
public class ViolationController extends BladeController { | 
				
			||||
 | 
				
			||||
    private final IViolationService service; | 
				
			||||
 | 
				
			||||
    @PostMapping("/save") | 
				
			||||
    @ApiOperationSupport(order = 1) | 
				
			||||
    @ApiOperation(value = "新增违章考核", notes = "传入ViolationEntity") | 
				
			||||
    public R save(@RequestBody ViolationEntity entity) { | 
				
			||||
        return R.status(service.save(entity)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @PostMapping("/update") | 
				
			||||
    @ApiOperationSupport(order = 2) | 
				
			||||
    @ApiOperation(value = "修改违章考核", notes = "传入HazardDetailsVo") | 
				
			||||
    public R update(@RequestBody ViolationEntity entity) { | 
				
			||||
        return R.status(service.updateById(entity)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @PostMapping("/remove") | 
				
			||||
    @ApiOperationSupport(order = 4) | 
				
			||||
    @ApiOperation(value = "删除违章考核", notes = "ids") | 
				
			||||
    public R remove(@ApiParam(value = "主键集合") @RequestParam String ids) { | 
				
			||||
        return R.status(service.removeByIds(Func.toLongList(ids))); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @GetMapping("/pages") | 
				
			||||
    @ApiOperationSupport(order = 5) | 
				
			||||
    @ApiOperation(value = "分页查询", notes = "查询条件:entity") | 
				
			||||
    public R<IPage<ViolationEntity>> pageCondition(ViolationParamVo params, Query query) { | 
				
			||||
        return R.data(service.pageCondition(params,Condition.getPage(query))); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @GetMapping("/summary") | 
				
			||||
    @ApiOperationSupport(order = 5) | 
				
			||||
    @ApiOperation(value = "汇总", notes = "查询条件:站点ID、月份") | 
				
			||||
    public R<IPage<ViolationSummaryVo>> summary(ViolationParamVo params, Query query) { | 
				
			||||
        return R.data(service.summary(params,Condition.getPage(query))); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,11 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.mapper; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.safeproduct.train.entity.InstitutionalEntity; | 
				
			||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
public interface InstitutionalMapper extends UserDataScopeBaseMapper<InstitutionalEntity> { | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,5 @@
					 | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 
				
			||||
<mapper namespace="com.hnac.hzims.safeproduct.train.mapper.InstitutionalMapper"> | 
				
			||||
 | 
				
			||||
</mapper> | 
				
			||||
@ -0,0 +1,18 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.mapper; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.hnac.hzims.safeproduct.train.entity.RectificationEntity; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.RectificationParamVo; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.RectificationSummaryVo; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.ViolationSummaryVo; | 
				
			||||
import org.apache.ibatis.annotations.Param; | 
				
			||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
public interface RectificationMapper extends UserDataScopeBaseMapper<RectificationEntity> { | 
				
			||||
 | 
				
			||||
    IPage<RectificationSummaryVo> summary(@Param("params") RectificationParamVo params, IPage<ViolationSummaryVo> page); | 
				
			||||
} | 
				
			||||
@ -0,0 +1,23 @@
					 | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 
				
			||||
<mapper namespace="com.hnac.hzims.safeproduct.train.mapper.RectificationMapper"> | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    <select id="summary" resultType="com.hnac.hzims.safeproduct.train.vo.RectificationSummaryVo"> | 
				
			||||
        select * from | 
				
			||||
                     (select station_id,rectification_type,count(1) as completeSum,count(case when `status` =  1 then 1 end) as completeCount | 
				
			||||
                      from hzims_rectification_supervision | 
				
			||||
                        <where> | 
				
			||||
                            is_deleted = 0 | 
				
			||||
                            <if test="params.stationId != null and params.stationId != ''"> | 
				
			||||
                                and station_id = #{params.stationId} | 
				
			||||
                            </if> | 
				
			||||
                            <if test="params.month != null and params.month != ''"> | 
				
			||||
                                and create_time like concat('%', #{params.month}, '%') | 
				
			||||
                            </if> | 
				
			||||
                        </where> | 
				
			||||
                        group by station_id,rectification_type | 
				
			||||
                      ) a | 
				
			||||
        order by (IFNULL(a.completeSum,0) / IFNULL(a.completeCount,0)) desc | 
				
			||||
    </select> | 
				
			||||
</mapper> | 
				
			||||
@ -0,0 +1,13 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.mapper; | 
				
			||||
 | 
				
			||||
import com.hnac.hzims.safeproduct.train.entity.TrainEntity; | 
				
			||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
public interface TrainMapper extends UserDataScopeBaseMapper<TrainEntity> { | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,5 @@
					 | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 
				
			||||
<mapper namespace="com.hnac.hzims.safeproduct.train.mapper.TrainMapper"> | 
				
			||||
 | 
				
			||||
</mapper> | 
				
			||||
@ -0,0 +1,17 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.mapper; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.hnac.hzims.safeproduct.train.entity.ViolationEntity; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.ViolationParamVo; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.ViolationSummaryVo; | 
				
			||||
import org.apache.ibatis.annotations.Param; | 
				
			||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
public interface ViolationMapper extends UserDataScopeBaseMapper<ViolationEntity> { | 
				
			||||
 | 
				
			||||
    IPage<ViolationSummaryVo> summary(@Param("params") ViolationParamVo params, IPage<ViolationSummaryVo> page); | 
				
			||||
} | 
				
			||||
@ -0,0 +1,21 @@
					 | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 
				
			||||
<mapper namespace="com.hnac.hzims.safeproduct.train.mapper.ViolationMapper"> | 
				
			||||
 | 
				
			||||
    <select id="summary" resultType="com.hnac.hzims.safeproduct.train.vo.ViolationSummaryVo"> | 
				
			||||
        select * from (select station_id,station_name,count(1) as count | 
				
			||||
        from hzims_violation_assessment | 
				
			||||
        <where> | 
				
			||||
            is_deleted = 0 | 
				
			||||
            <if test="params.stationId != null and params.stationId != ''"> | 
				
			||||
                and station_id = #{params.stationId} | 
				
			||||
            </if> | 
				
			||||
            <if test="params.month != null and params.month != ''"> | 
				
			||||
                and discover_time like concat('%', #{params.month}, '%') | 
				
			||||
            </if> | 
				
			||||
        </where> | 
				
			||||
        group by station_id,station_name) a | 
				
			||||
        order by a.count desc | 
				
			||||
    </select> | 
				
			||||
 | 
				
			||||
</mapper> | 
				
			||||
@ -0,0 +1,11 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.service; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.extension.service.IService; | 
				
			||||
import com.hnac.hzims.safeproduct.train.entity.InstitutionalEntity; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
public interface IInstitutionalService extends IService<InstitutionalEntity> { | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,20 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.service; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.baomidou.mybatisplus.extension.service.IService; | 
				
			||||
import com.hnac.hzims.safeproduct.train.entity.RectificationEntity; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.RectificationParamVo; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.RectificationSummaryVo; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.ViolationSummaryVo; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
public interface IRectificlationService extends IService<RectificationEntity> { | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    IPage<RectificationEntity> pageCondition(RectificationParamVo params, IPage<RectificationEntity> page); | 
				
			||||
 | 
				
			||||
    IPage<RectificationSummaryVo> summary(RectificationParamVo params, IPage<ViolationSummaryVo> page); | 
				
			||||
} | 
				
			||||
@ -0,0 +1,19 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.service; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.baomidou.mybatisplus.extension.service.IService; | 
				
			||||
import com.hnac.hzims.safeproduct.train.entity.ViolationEntity; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.ViolationParamVo; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.ViolationSummaryVo; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
public interface IViolationService extends IService<ViolationEntity> { | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    IPage<ViolationEntity> pageCondition(ViolationParamVo params, IPage<ViolationEntity> page); | 
				
			||||
 | 
				
			||||
    IPage<ViolationSummaryVo> summary(ViolationParamVo stationId, IPage<ViolationSummaryVo> page); | 
				
			||||
} | 
				
			||||
@ -0,0 +1,19 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.service.impl; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
				
			||||
import com.hnac.hzims.safeproduct.train.entity.InstitutionalEntity; | 
				
			||||
import com.hnac.hzims.safeproduct.train.mapper.InstitutionalMapper; | 
				
			||||
import com.hnac.hzims.safeproduct.train.service.IInstitutionalService; | 
				
			||||
import lombok.RequiredArgsConstructor; | 
				
			||||
import org.springframework.stereotype.Service; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 制度资料 | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
@Service | 
				
			||||
@RequiredArgsConstructor | 
				
			||||
public class InstitutionalServiceImpl extends ServiceImpl<InstitutionalMapper, InstitutionalEntity> implements IInstitutionalService { | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,60 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.service.impl; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
				
			||||
import com.hnac.hzims.safeproduct.train.entity.RectificationEntity; | 
				
			||||
import com.hnac.hzims.safeproduct.train.mapper.RectificationMapper; | 
				
			||||
import com.hnac.hzims.safeproduct.train.service.IRectificlationService; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.RectificationParamVo; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.RectificationSummaryVo; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.ViolationSummaryVo; | 
				
			||||
import org.springblade.core.tool.utils.ObjectUtil; | 
				
			||||
import org.springblade.core.tool.utils.StringUtil; | 
				
			||||
import org.springframework.stereotype.Service; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 整改督办 | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
@Service | 
				
			||||
public class RectificlationServiceImpl extends ServiceImpl<RectificationMapper, RectificationEntity> implements IRectificlationService { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 分页列表查询整改督办 | 
				
			||||
     * @param params | 
				
			||||
     * @param page | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    @Override | 
				
			||||
    public IPage<RectificationEntity> pageCondition(RectificationParamVo params, IPage<RectificationEntity> page) { | 
				
			||||
        LambdaQueryWrapper<RectificationEntity> wrapper = new LambdaQueryWrapper(); | 
				
			||||
        wrapper.orderByDesc(RectificationEntity::getCreateTime); | 
				
			||||
        if(StringUtil.isNotBlank(params.getStationId())){ | 
				
			||||
            wrapper.eq(RectificationEntity::getStationId,params.getStationId()); | 
				
			||||
        } | 
				
			||||
        if(ObjectUtil.isNotEmpty(params.getRectificationType())){ | 
				
			||||
            wrapper.eq(RectificationEntity::getRectificationType,params.getRectificationType()); | 
				
			||||
        } | 
				
			||||
        if(ObjectUtil.isNotEmpty(params.getStatus())){ | 
				
			||||
            wrapper.eq(RectificationEntity::getStatus,params.getStatus()); | 
				
			||||
        } | 
				
			||||
        if(ObjectUtil.isNotEmpty(params.getPersonLiableName())){ | 
				
			||||
            wrapper.like(RectificationEntity::getPersonLiableName,params.getPersonLiableName()); | 
				
			||||
        } | 
				
			||||
        return super.page(page,wrapper); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 分页列表查询整改督办汇总 | 
				
			||||
     * @param params | 
				
			||||
     * @param page | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    @Override | 
				
			||||
    public IPage<RectificationSummaryVo> summary(RectificationParamVo params, IPage<ViolationSummaryVo> page) { | 
				
			||||
        return this.baseMapper.summary(params,page); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,61 @@
					 | 
				
			||||
package com.hnac.hzims.safeproduct.train.service.impl; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
				
			||||
import com.baomidou.mybatisplus.core.metadata.IPage; | 
				
			||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
				
			||||
import com.hnac.hzims.safeproduct.train.entity.ViolationEntity; | 
				
			||||
import com.hnac.hzims.safeproduct.train.mapper.ViolationMapper; | 
				
			||||
import com.hnac.hzims.safeproduct.train.service.IViolationService; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.ViolationParamVo; | 
				
			||||
import com.hnac.hzims.safeproduct.train.vo.ViolationSummaryVo; | 
				
			||||
import org.springblade.core.tool.utils.ObjectUtil; | 
				
			||||
import org.springblade.core.tool.utils.StringUtil; | 
				
			||||
import org.springframework.stereotype.Service; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 违章考核 | 
				
			||||
 * @author ysj | 
				
			||||
 */ | 
				
			||||
@Service | 
				
			||||
public class ViolationServiceImpl extends ServiceImpl<ViolationMapper, ViolationEntity> implements IViolationService { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 分页列表查询违章考核记录 | 
				
			||||
     * @param params | 
				
			||||
     * @param page | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    @Override | 
				
			||||
    public IPage<ViolationEntity> pageCondition(ViolationParamVo params, IPage<ViolationEntity> page) { | 
				
			||||
        LambdaQueryWrapper<ViolationEntity> wrapper = new LambdaQueryWrapper(); | 
				
			||||
        wrapper.orderByDesc(ViolationEntity::getCreateTime); | 
				
			||||
        if(StringUtil.isNotBlank(params.getStationId())){ | 
				
			||||
            wrapper.eq(ViolationEntity::getStationId,params.getStartTime()); | 
				
			||||
        } | 
				
			||||
        if(StringUtil.isNotBlank(params.getStartTime())){ | 
				
			||||
            wrapper.ge(ViolationEntity::getDiscoverTime,params.getStartTime()); | 
				
			||||
        } | 
				
			||||
        if(StringUtil.isNotBlank(params.getEndTime())){ | 
				
			||||
            wrapper.eq(ViolationEntity::getDiscoverTime,params.getEndTime()); | 
				
			||||
        } | 
				
			||||
        if(ObjectUtil.isNotEmpty(params.getViolationLevel())){ | 
				
			||||
            wrapper.eq(ViolationEntity::getViolationLevel,params.getViolationLevel()); | 
				
			||||
        } | 
				
			||||
        if(ObjectUtil.isNotEmpty(params.getDiscovererName())){ | 
				
			||||
            wrapper.like(ViolationEntity::getDiscovererName,params.getDiscovererName()); | 
				
			||||
        } | 
				
			||||
        return super.page(page,wrapper); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 分页列表查询违章考核汇总 | 
				
			||||
     * @param params | 
				
			||||
     * @param page | 
				
			||||
     * @return | 
				
			||||
     */ | 
				
			||||
    @Override | 
				
			||||
    public IPage<ViolationSummaryVo> summary(ViolationParamVo params, IPage<ViolationSummaryVo> page) { | 
				
			||||
        return this.baseMapper.summary(params,page); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue