添加IMS数据接收状态监控
This commit is contained in:
parent
3f7a11e890
commit
b01380adc3
|
|
@ -8,14 +8,9 @@ import java.sql.Timestamp;
|
|||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.*;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 类描述:时间操作定义类
|
||||
|
|
@ -50,19 +45,22 @@ public class DateUtils extends PropertyEditorSupport {
|
|||
return new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
||||
}
|
||||
};
|
||||
public static ThreadLocal<SimpleDateFormat> yyyymmddhhmmss = new ThreadLocal<SimpleDateFormat>() {
|
||||
public static ThreadLocal<SimpleDateFormat> yyyymmddhhmmss =
|
||||
new ThreadLocal<SimpleDateFormat>() {
|
||||
@Override
|
||||
protected SimpleDateFormat initialValue() {
|
||||
return new SimpleDateFormat("yyyyMMddHHmmss");
|
||||
}
|
||||
};
|
||||
public static ThreadLocal<SimpleDateFormat> short_time_sdf = new ThreadLocal<SimpleDateFormat>() {
|
||||
public static ThreadLocal<SimpleDateFormat> short_time_sdf =
|
||||
new ThreadLocal<SimpleDateFormat>() {
|
||||
@Override
|
||||
protected SimpleDateFormat initialValue() {
|
||||
return new SimpleDateFormat("HH:mm");
|
||||
}
|
||||
};
|
||||
public static ThreadLocal<SimpleDateFormat> datetimeFormat = new ThreadLocal<SimpleDateFormat>() {
|
||||
public static ThreadLocal<SimpleDateFormat> datetimeFormat =
|
||||
new ThreadLocal<SimpleDateFormat>() {
|
||||
@Override
|
||||
protected SimpleDateFormat initialValue() {
|
||||
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
|
|
@ -79,6 +77,7 @@ public class DateUtils extends PropertyEditorSupport {
|
|||
|
||||
/**
|
||||
* 指定模式的时间格式
|
||||
*
|
||||
* @param pattern
|
||||
* @return
|
||||
*/
|
||||
|
|
@ -585,7 +584,8 @@ public class DateUtils extends PropertyEditorSupport {
|
|||
return cal;
|
||||
}
|
||||
|
||||
public static String formatAddDate(String src, String pattern, int amount) throws ParseException {
|
||||
public static String formatAddDate(String src, String pattern, int amount)
|
||||
throws ParseException {
|
||||
Calendar cal;
|
||||
cal = parseCalendar(src, pattern);
|
||||
cal.add(Calendar.DATE, amount);
|
||||
|
|
@ -669,10 +669,12 @@ public class DateUtils extends PropertyEditorSupport {
|
|||
} else if (text.indexOf(SymbolConstant.COLON) > 0 && text.length() == length19) {
|
||||
setValue(DateUtils.datetimeFormat.get().parse(text));
|
||||
} else {
|
||||
throw new IllegalArgumentException("Could not parse date, date format is error ");
|
||||
throw new IllegalArgumentException(
|
||||
"Could not parse date, date format is error ");
|
||||
}
|
||||
} catch (ParseException ex) {
|
||||
IllegalArgumentException iae = new IllegalArgumentException("Could not parse date: " + ex.getMessage());
|
||||
IllegalArgumentException iae =
|
||||
new IllegalArgumentException("Could not parse date: " + ex.getMessage());
|
||||
iae.initCause(ex);
|
||||
throw iae;
|
||||
}
|
||||
|
|
@ -689,6 +691,7 @@ public class DateUtils extends PropertyEditorSupport {
|
|||
|
||||
/**
|
||||
* 将字符串转成时间
|
||||
*
|
||||
* @param str
|
||||
* @return
|
||||
*/
|
||||
|
|
@ -716,8 +719,10 @@ public class DateUtils extends PropertyEditorSupport {
|
|||
Calendar calendar2 = Calendar.getInstance();
|
||||
calendar2.setTime(date2);
|
||||
boolean isSameYear = calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR);
|
||||
boolean isSameMonth = isSameYear && calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH);
|
||||
return isSameMonth && calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH);
|
||||
boolean isSameMonth =
|
||||
isSameYear && calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH);
|
||||
return isSameMonth &&
|
||||
calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -731,7 +736,8 @@ public class DateUtils extends PropertyEditorSupport {
|
|||
LocalDateTime currentTime = LocalDateTime.now();
|
||||
|
||||
// 将java.util.Date转换为java.time.LocalDateTime
|
||||
LocalDateTime convertedTargetDate = targetDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
||||
LocalDateTime convertedTargetDate =
|
||||
targetDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
||||
|
||||
// 计算时间差
|
||||
Duration duration = Duration.between(currentTime, convertedTargetDate);
|
||||
|
|
@ -752,7 +758,8 @@ public class DateUtils extends PropertyEditorSupport {
|
|||
// 获取当前日期
|
||||
LocalDate currentDate = LocalDate.now();
|
||||
// 将java.util.Date转换为java.time.LocalDate
|
||||
LocalDate convertedTargetDate = targetDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||
LocalDate convertedTargetDate =
|
||||
targetDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||
// 计算日期差
|
||||
long daysDifference = ChronoUnit.DAYS.between(currentDate, convertedTargetDate);
|
||||
return daysDifference;
|
||||
|
|
@ -774,7 +781,8 @@ public class DateUtils extends PropertyEditorSupport {
|
|||
Calendar calendar2 = Calendar.getInstance();
|
||||
calendar2.setTime(date2);
|
||||
boolean isSameYear = calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR);
|
||||
return isSameYear && calendar1.get(Calendar.WEEK_OF_YEAR) == calendar2.get(Calendar.WEEK_OF_YEAR);
|
||||
return isSameYear &&
|
||||
calendar1.get(Calendar.WEEK_OF_YEAR) == calendar2.get(Calendar.WEEK_OF_YEAR);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -814,4 +822,31 @@ public class DateUtils extends PropertyEditorSupport {
|
|||
return calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定年月的所有日期(yyyy-MM-dd格式)
|
||||
*
|
||||
* @param year 年份(如2026)
|
||||
* @param month 月份(1-12)
|
||||
* @return 日期列表(按时间正序排列)
|
||||
*/
|
||||
public static List<String> getDaysOfMonth(Integer year, Integer month) {
|
||||
// 参数校验
|
||||
if (year == null || month == null || month < 1 || month > 12) {
|
||||
throw new IllegalArgumentException("无效的年月参数");
|
||||
}
|
||||
|
||||
List<String> dateList = new ArrayList<>();
|
||||
YearMonth yearMonth = YearMonth.of(year, month);
|
||||
// 获取该月的总天数
|
||||
int totalDays = yearMonth.lengthOfMonth();
|
||||
|
||||
// 遍历该月所有日期
|
||||
for (int day = 1; day <= totalDays; day++) {
|
||||
LocalDate date = LocalDate.of(year, month, day);
|
||||
dateList.add(date_sdf.get().format(date));
|
||||
}
|
||||
|
||||
return dateList;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
package org.jeecg.modules.base.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@TableName("stas_station_setting")
|
||||
public class StasStationSetting {
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private Integer id;
|
||||
/**
|
||||
* 区分PHDF或PHD等
|
||||
*/
|
||||
private String typeGroup;
|
||||
/**
|
||||
* 类型,如SAUNA, SPALAX, PARTICULATE
|
||||
*/
|
||||
private String stationType;
|
||||
/**
|
||||
* 最低采集时长
|
||||
*/
|
||||
private Double collectLow;
|
||||
/**
|
||||
* 最高采集时长
|
||||
*/
|
||||
private Double collectHigh;
|
||||
/**
|
||||
* 最低acquisition_live_sec
|
||||
*/
|
||||
private Double liveLow;
|
||||
/**
|
||||
* 最高acquisition_live_sec
|
||||
*/
|
||||
private Double liveHigh;
|
||||
/**
|
||||
* quantity
|
||||
*/
|
||||
private Integer quantity;
|
||||
/**
|
||||
* Xe体积
|
||||
*/
|
||||
private Double xeVolume;
|
||||
/**
|
||||
* mdc
|
||||
*/
|
||||
private Integer mdc;
|
||||
/**
|
||||
* 核素名称
|
||||
*/
|
||||
private String nuclideName;
|
||||
/**
|
||||
* live_qc
|
||||
*/
|
||||
private Integer liveQc;
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private Integer number;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createdTime;
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
package org.jeecg.modules.base.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.jeecg.modules.base.entity.StasStationSetting;
|
||||
|
||||
@Mapper
|
||||
public interface StasStationSettingMapper extends BaseMapper<StasStationSetting> {
|
||||
}
|
||||
|
|
@ -0,0 +1,175 @@
|
|||
package org.jeecg.imsDataMonitor.controller;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.jeecg.common.api.vo.Result;
|
||||
import org.jeecg.common.aspect.annotation.AutoLog;
|
||||
import org.jeecg.imsDataMonitor.entity.ProvisionData;
|
||||
import org.jeecg.imsDataMonitor.entity.StationInfo;
|
||||
import org.jeecg.imsDataMonitor.service.IMSDataMonitorService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/imsDataMonitor")
|
||||
public class imsDataMonitorController {
|
||||
|
||||
@Autowired
|
||||
private IMSDataMonitorService imsDataMonitorService;
|
||||
|
||||
|
||||
/**
|
||||
* 获取Particulate 台站的有效率和提供率
|
||||
*
|
||||
* @param code 类型代码
|
||||
* @param startDate 开始日期
|
||||
* @param endDate 结束日期
|
||||
* @return 返回 Result
|
||||
*/
|
||||
@AutoLog(value = "Particulate 台站的有效率")
|
||||
@GetMapping("getParticulate")
|
||||
public Result<?> getParticulate(@RequestParam(value = "code", required = false) String code,
|
||||
@RequestParam(value = "startDate", required = false)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
Date startDate,
|
||||
@RequestParam(value = "endDate", required = false)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
Date endDate) {
|
||||
// List<ProvisionData> data = imsDataMonitorService.getParticulate(code, startDate, endDate);
|
||||
// return Result.OK(data);
|
||||
//TODO 测试待删除
|
||||
try (InputStream inputStream = imsDataMonitorController.class.getClassLoader()
|
||||
.getResourceAsStream("Particulate.json")) {
|
||||
//region 测试数据
|
||||
//endregion
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
Result<List<ProvisionData>> resultData =
|
||||
objectMapper.readValue(inputStream, new TypeReference<>() {
|
||||
});
|
||||
return resultData;
|
||||
} catch (Exception e) {
|
||||
return Result.error(e.getMessage());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Spalax 台站的有效率
|
||||
*
|
||||
* @param code
|
||||
* @param startDate
|
||||
* @param endDate
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "Spalax 台站的有效率")
|
||||
@GetMapping("getSpalax")
|
||||
public Result<?> getSpalax(@RequestParam(value = "code", required = false) String code,
|
||||
@RequestParam(value = "startDate", required = false)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
Date startDate,
|
||||
@RequestParam(value = "endDate", required = false)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
Date endDate) {
|
||||
// List<ProvisionData> data = imsDataMonitorService.getSpalax(code, startDate, endDate);
|
||||
// return Result.OK(data);
|
||||
//TODO 测试待删除
|
||||
try (InputStream inputStream = imsDataMonitorController.class.getClassLoader()
|
||||
.getResourceAsStream("Spalax.json")) {
|
||||
//region 测试数据
|
||||
//endregion
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
Result<List<ProvisionData>> resultData =
|
||||
objectMapper.readValue(inputStream, new TypeReference<>() {
|
||||
});
|
||||
return resultData;
|
||||
} catch (Exception e) {
|
||||
return Result.error(e.getMessage());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Sauna2 台站的有效率
|
||||
*
|
||||
* @param code
|
||||
* @param startDate
|
||||
* @param endDate
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "Sauna2 台站的有效率")
|
||||
@GetMapping("getSauna2")
|
||||
public Result<?> getSauna2(@RequestParam(value = "code", required = false) String code,
|
||||
@RequestParam(value = "startDate", required = false)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
Date startDate,
|
||||
@RequestParam(value = "endDate", required = false)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
Date endDate) {
|
||||
// List<ProvisionData> data = imsDataMonitorService.getSauna2(code, startDate, endDate);
|
||||
// return Result.OK(data);
|
||||
//TODO 测试待删除
|
||||
try (InputStream inputStream = imsDataMonitorController.class.getClassLoader()
|
||||
.getResourceAsStream("Sauna2.json")) {
|
||||
//region 测试数据
|
||||
//endregion
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
Result<List<ProvisionData>> resultData =
|
||||
objectMapper.readValue(inputStream, new TypeReference<>() {
|
||||
});
|
||||
return resultData;
|
||||
} catch (Exception e) {
|
||||
return Result.error(e.getMessage());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sauna3 台站的有效率
|
||||
*
|
||||
* @param code
|
||||
* @param startDate
|
||||
* @param endDate
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "Sauna3 台站的有效率")
|
||||
@GetMapping("getSauna3")
|
||||
public Result<?> getSauna3(@RequestParam(value = "code", required = false) String code,
|
||||
@RequestParam(value = "startDate", required = false)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
Date startDate,
|
||||
@RequestParam(value = "endDate", required = false)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
Date endDate) {
|
||||
// List<ProvisionData> data = imsDataMonitorService.getSauna3(code, startDate, endDate);
|
||||
// return Result.OK(data);
|
||||
//TODO 测试待删除
|
||||
try (InputStream inputStream = imsDataMonitorController.class.getClassLoader()
|
||||
.getResourceAsStream("Sauna3.json")) {
|
||||
//region 测试数据
|
||||
//endregion
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
Result<List<ProvisionData>> resultData =
|
||||
objectMapper.readValue(inputStream, new TypeReference<>() {
|
||||
});
|
||||
return resultData;
|
||||
} catch (Exception e) {
|
||||
return Result.error(e.getMessage());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package org.jeecg.imsDataMonitor.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class PhdfProvisionEfficiency {
|
||||
//liveLow
|
||||
private String liveLow;
|
||||
//liveHigh
|
||||
private String liveHigh;
|
||||
//quantity
|
||||
private String quantity;
|
||||
//collectLow
|
||||
private String collectLow;
|
||||
//collectHigh
|
||||
private String collectHigh;
|
||||
//curDateTime
|
||||
private String curDateTime;
|
||||
//pretime
|
||||
private String pretime;
|
||||
//number
|
||||
private String number;
|
||||
|
||||
private String nuclideName;
|
||||
|
||||
private String liveQc;
|
||||
private String mdc;
|
||||
private String xeVolume;
|
||||
//stationId
|
||||
private List<Integer> stationId;
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package org.jeecg.imsDataMonitor.entity;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import org.jeecgframework.poi.excel.annotation.Excel;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class ProvisionData implements Serializable {
|
||||
|
||||
private String stationCode;
|
||||
/**
|
||||
* 数据数量
|
||||
*/
|
||||
private Integer dataNumber;
|
||||
/**
|
||||
* 数据提供率
|
||||
*/
|
||||
private double dataRate;
|
||||
/**
|
||||
* 数据有效率
|
||||
*/
|
||||
private double dataEfficiency;
|
||||
/**
|
||||
* 采集开始时间
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date collectStart;
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package org.jeecg.imsDataMonitor.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class StationInfo implements Serializable {
|
||||
|
||||
private String id;
|
||||
|
||||
private String stationCode;
|
||||
|
||||
private String countryCode;
|
||||
|
||||
private String type;
|
||||
|
||||
private String lon;
|
||||
|
||||
private String lat;
|
||||
|
||||
private String description;
|
||||
|
||||
private String status;
|
||||
|
||||
private String phdf;
|
||||
|
||||
private String phd;
|
||||
|
||||
private String met;
|
||||
|
||||
private String soh;
|
||||
|
||||
private String phdMetSoh;
|
||||
|
||||
private String used;
|
||||
|
||||
private String quality;
|
||||
|
||||
private String efficCalculType;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
package org.jeecg.imsDataMonitor.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.jeecg.imsDataMonitor.entity.PhdfProvisionEfficiency;
|
||||
import org.jeecg.imsDataMonitor.entity.ProvisionData;
|
||||
import org.jeecg.modules.base.entity.configuration.GardsStations;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface IMSDataMonitorMapper extends BaseMapper<GardsStations> {
|
||||
|
||||
List<GardsStations> findStationList(@Param("systemType") String systemType);
|
||||
|
||||
List<GardsStations> findEfficStationList(@Param("efficType") String efficType);
|
||||
|
||||
/**
|
||||
* 查询台站每天的有效率
|
||||
*
|
||||
* @param efficiency
|
||||
* @return List<ProvisionData>
|
||||
*/
|
||||
List<ProvisionData> findPhdfParticulateEfficiency(
|
||||
@Param("efficiency") PhdfProvisionEfficiency efficiency);
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询台站每天的有效率
|
||||
*
|
||||
* @param efficiency
|
||||
* @return List<ProvisionData>
|
||||
*/
|
||||
List<ProvisionData> findPhdfSpalaxEfficiency(
|
||||
@Param("efficiency") PhdfProvisionEfficiency efficiency);
|
||||
/**
|
||||
* 查询台站每天的有效率
|
||||
*
|
||||
* @param efficiency
|
||||
* @return List<ProvisionData>
|
||||
*/
|
||||
List<ProvisionData> findPhdfSauna2Efficiency(
|
||||
@Param("efficiency") PhdfProvisionEfficiency efficiency);
|
||||
/**
|
||||
* 查询台站每天的有效率
|
||||
*
|
||||
* @param efficiency
|
||||
* @return List<ProvisionData>
|
||||
*/
|
||||
List<ProvisionData> findPhdfSauna3Efficiency(
|
||||
@Param("efficiency") PhdfProvisionEfficiency efficiency);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,185 @@
|
|||
<?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="org.jeecg.imsDataMonitor.mapper.IMSDataMonitorMapper">
|
||||
<select id="findStationList" resultType="org.jeecg.modules.base.entity.configuration.GardsStations">
|
||||
SELECT * FROM CONFIGURATION.GARDS_STATIONS
|
||||
<where>
|
||||
TYPE IN
|
||||
<if test='systemType == "P"'>
|
||||
('Manual', 'CINDER', 'RASA', 'LAB')
|
||||
</if>
|
||||
<if test='systemType == "B"'>
|
||||
('SAUNA', 'ARIX-4', 'ARIX-2', 'SPALAX')
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
<select id="findEfficStationList" resultType="org.jeecg.modules.base.entity.configuration.GardsStations">
|
||||
SELECT * FROM CONFIGURATION.GARDS_STATIONS
|
||||
<where>
|
||||
EFFIC_CALCUL_TYPE ='${efficType}'
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="findPhdfParticulateEfficiency" resultType="org.jeecg.imsDataMonitor.entity.ProvisionData">
|
||||
SELECT TRUNC(sdata.COLLECT_START) AS collectStart,
|
||||
COUNT(*) AS total_samples,
|
||||
sta.STATION_CODE ,
|
||||
COUNT(
|
||||
CASE
|
||||
WHEN sdata.data_type = 'Q' THEN
|
||||
1
|
||||
WHEN sdata.data_type = 'S'
|
||||
AND (sdata.acquisition_live_sec / 60 / 60.00) BETWEEN #{efficiency.liveLow}
|
||||
AND #{efficiency.liveHigh}
|
||||
AND
|
||||
(to_number(sdata.COLLECT_STOP - sdata.COLLECT_START) * 24) BETWEEN #{efficiency.liveLow}
|
||||
AND #{efficiency.liveHigh}
|
||||
AND sdata.quantity > 10800 THEN
|
||||
1
|
||||
END
|
||||
) AS dataNumber,
|
||||
ROUND(
|
||||
COUNT(
|
||||
CASE
|
||||
WHEN sdata.data_type = 'Q' THEN
|
||||
1
|
||||
WHEN sdata.data_type = 'S'
|
||||
AND (sdata.acquisition_live_sec / 60 / 60.00) BETWEEN #{efficiency.liveLow}
|
||||
AND #{efficiency.liveHigh}
|
||||
AND
|
||||
(to_number(sdata.COLLECT_STOP - sdata.COLLECT_START) * 24) BETWEEN #{efficiency.liveLow}
|
||||
AND #{efficiency.liveHigh}
|
||||
AND sdata.quantity > #{efficiency.quantity} THEN
|
||||
1
|
||||
END
|
||||
) * 100.0 / (1 * ${efficiency.number}),
|
||||
2
|
||||
)AS dataEfficiency
|
||||
|
||||
FROM ORIGINAL.GARDS_SAMPLE_DATA sdata
|
||||
LEFT JOIN CONFIGURATION.GARDS_STATIONS sta ON sta.station_id = sdata.station_id
|
||||
WHERE SDATA.SAMPLE_TYPE = 'P'
|
||||
AND sdata.spectral_qualifie = 'FULL'
|
||||
AND sta.station_code LIKE '__P%'
|
||||
AND sdata.station_id IN
|
||||
<foreach collection="efficiency.stationId" item="id" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
AND sdata.COLLECT_START BETWEEN TO_DATE('${efficiency.pretime}', 'YYYY-MM-DD hh24:mi:ss')
|
||||
AND TO_DATE('${efficiency.curDateTime}', 'YYYY-MM-DD hh24:mi:ss')
|
||||
GROUP BY TRUNC(sdata.COLLECT_START),sta.STATION_CODE
|
||||
ORDER BY collectStart;
|
||||
</select>
|
||||
|
||||
<select id="findPhdfSpalaxEfficiency" resultType="org.jeecg.imsDataMonitor.entity.ProvisionData">
|
||||
SELECT
|
||||
TRUNC(sdata.COLLECT_START) AS collectStart,
|
||||
sta.STATION_CODE ,
|
||||
SUM(CASE
|
||||
WHEN sdata.acquisition_live_sec > ${efficiency.liveQc}
|
||||
AND sdata.data_type = 'Q'
|
||||
AND sdata.spectral_qualifie = 'FULL'
|
||||
THEN 1 ELSE 0
|
||||
END)
|
||||
+ SUM(CASE
|
||||
WHEN sdata.data_type = 'S'
|
||||
AND (sdata.acquisition_live_sec/60/60.00) BETWEEN ${efficiency.liveLow} AND ${efficiency.liveHigh}
|
||||
AND (to_number(SDATA.COLLECT_STOP - SDATA.COLLECT_START) * 24) BETWEEN ${efficiency.collectLow} AND ${efficiency.collectHigh}
|
||||
AND sdata.quantity > ${efficiency.quantity}
|
||||
THEN 1 ELSE 0
|
||||
END) AS dataNumber,
|
||||
ROUND(
|
||||
(SUM(CASE
|
||||
WHEN sdata.acquisition_live_sec > ${efficiency.liveQc}
|
||||
AND sdata.data_type = 'Q'
|
||||
AND sdata.spectral_qualifie = 'FULL'
|
||||
THEN 1 ELSE 0
|
||||
END)
|
||||
+ SUM(CASE
|
||||
WHEN sdata.data_type = 'S'
|
||||
AND (sdata.acquisition_live_sec/60/60.00) BETWEEN ${efficiency.liveLow} AND ${efficiency.liveHigh}
|
||||
AND (to_number(SDATA.COLLECT_STOP - SDATA.COLLECT_START) * 24) BETWEEN ${efficiency.collectLow} AND ${efficiency.collectHigh}
|
||||
AND sdata.quantity > ${efficiency.quantity}
|
||||
THEN 1 ELSE 0
|
||||
END))
|
||||
/ 1 * ${efficiency.number} * 100,
|
||||
2
|
||||
) AS dataEfficiency
|
||||
FROM ORIGINAL.GARDS_SAMPLE_DATA sdata
|
||||
LEFT JOIN RNAUTO.GARDS_XE_RESULTS xe ON xe.sample_id = sdata.sample_id
|
||||
LEFT JOIN ORIGINAL.GARDS_SAMPLE_AUX aux ON aux.sample_id = sdata.sample_id
|
||||
LEFT JOIN CONFIGURATION.GARDS_STATIONS sta ON sta.station_id = sdata.station_id
|
||||
|
||||
<where>
|
||||
sta.EFFIC_CALCUL_TYPE = 'SPALAX'
|
||||
AND SDATA.SAMPLE_TYPE = 'G'
|
||||
AND substr(sta.station_code, 3, 1) = 'X'
|
||||
AND sdata.station_id IN
|
||||
<foreach collection="efficiency.stationId" item="id" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
AND sdata.COLLECT_START BETWEEN TO_DATE(#{efficiency.pretime}, 'YYYY-MM-DD hh24:mi:ss')
|
||||
AND TO_DATE(#{efficiency.curDateTime}, 'YYYY-MM-DD hh24:mi:ss')
|
||||
</where>
|
||||
|
||||
GROUP BY TRUNC(sdata.COLLECT_START),sta.STATION_CODE
|
||||
ORDER BY collectStart
|
||||
|
||||
</select>
|
||||
|
||||
<select id="findPhdfSauna2Efficiency" resultType="org.jeecg.imsDataMonitor.entity.ProvisionData">
|
||||
SELECT
|
||||
TRUNC(sdata.COLLECT_START) AS collectStart,
|
||||
sta.STATION_CODE ,
|
||||
(SUM(CASE WHEN ROUND(sdata.acquisition_live_sec/60/60.00) BETWEEN ${efficiency.liveLow} AND ${efficiency.liveHigh}
|
||||
AND sdata.quantity > ${efficiency.quantity}
|
||||
AND xe.MDC < ${efficiency.mdc}
|
||||
AND (to_number(SDATA.COLLECT_STOP - SDATA.COLLECT_START)*24) BETWEEN ${efficiency.collectLow} AND ${efficiency.collectHigh}
|
||||
AND aux.xe_volume > ${efficiency.xeVolume}
|
||||
AND xe.nuclide_name = '${efficiency.nuclideName}'
|
||||
AND sdata.data_type = 'S' THEN 1 ELSE 0 END)
|
||||
+ SUM(CASE WHEN sdata.acquisition_live_sec > ${efficiency.liveQc} AND sdata.data_type = 'Q' THEN 1 ELSE 0 END)
|
||||
+ SUM(CASE WHEN ROUND(sdata.acquisition_live_sec/60/60.00, 2) BETWEEN ${efficiency.liveLow} AND ${efficiency.liveHigh}
|
||||
AND sdata.data_type = 'G' THEN 1 ELSE 0 END)) AS dataNumber,
|
||||
|
||||
ROUND((SUM(CASE WHEN ROUND(sdata.acquisition_live_sec/60/60.00) BETWEEN ${efficiency.liveLow} AND ${efficiency.liveHigh}
|
||||
AND sdata.quantity > ${efficiency.quantity}
|
||||
AND xe.MDC < ${efficiency.mdc}
|
||||
AND (to_number(SDATA.COLLECT_STOP - SDATA.COLLECT_START)*24) BETWEEN ${efficiency.collectLow} AND ${efficiency.collectHigh}
|
||||
AND aux.xe_volume > ${efficiency.xeVolume}
|
||||
AND xe.nuclide_name = '${efficiency.nuclideName}'
|
||||
AND sdata.data_type = 'S' THEN 1 ELSE 0 END)
|
||||
+ SUM(CASE WHEN sdata.acquisition_live_sec > ${efficiency.liveQc} AND sdata.data_type = 'Q' THEN 1 ELSE 0 END)
|
||||
+ SUM(CASE WHEN ROUND(sdata.acquisition_live_sec/60/60.00, 2) BETWEEN ${efficiency.liveLow} AND ${efficiency.liveHigh}
|
||||
AND sdata.data_type = 'G' THEN 1 ELSE 0 END))
|
||||
/ ${efficiency.number} * 100, 2) AS dataEfficiency
|
||||
|
||||
FROM ORIGINAL.GARDS_SAMPLE_DATA sdata
|
||||
LEFT JOIN RNAUTO.GARDS_XE_RESULTS xe ON xe.sample_id = sdata.sample_id
|
||||
LEFT JOIN ORIGINAL.GARDS_SAMPLE_AUX aux ON aux.sample_id = sdata.sample_id
|
||||
LEFT JOIN CONFIGURATION.GARDS_STATIONS sta ON sta.station_id = sdata.station_id
|
||||
|
||||
<where>
|
||||
substr(sta.station_code, 3, 1) = 'X'
|
||||
AND SDATA.SAMPLE_TYPE = 'B'
|
||||
AND sdata.spectral_qualifie = 'FULL'
|
||||
AND sdata.station_id IN
|
||||
<foreach collection="efficiency.stationId" item="id" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
AND sdata.COLLECT_START BETWEEN TO_DATE(#{efficiency.pretime}, 'YYYY-MM-DD hh24:mi:ss')
|
||||
AND TO_DATE(#{efficiency.curDateTime}, 'YYYY-MM-DD hh24:mi:ss')
|
||||
</where>
|
||||
|
||||
GROUP BY TRUNC(sdata.COLLECT_START),sta.STATION_CODE
|
||||
ORDER BY collectStart
|
||||
</select>
|
||||
|
||||
<select id="findPhdfSauna3Efficiency" resultType="org.jeecg.imsDataMonitor.entity.ProvisionData">
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
package org.jeecg.imsDataMonitor.service;
|
||||
|
||||
|
||||
import org.jeecg.imsDataMonitor.entity.ProvisionData;
|
||||
import org.jeecg.modules.base.entity.configuration.GardsStations;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface IMSDataMonitorService {
|
||||
|
||||
/**
|
||||
* 获取台站集合
|
||||
*
|
||||
* @param systemType
|
||||
* @return List<GardsStations> 集合
|
||||
*/
|
||||
List<GardsStations> getGardsStationList(String systemType);
|
||||
|
||||
/**
|
||||
*获取Particulate类型的有效率数据
|
||||
* @return Map<String, List<ProvisionData>>
|
||||
*/
|
||||
List<ProvisionData> getParticulate(String code, Date startDate, Date endDate);
|
||||
|
||||
List<ProvisionData> getSpalax(String code, Date startDate, Date endDate);
|
||||
|
||||
List<ProvisionData> getSauna2(String code, Date startDate, Date endDate);
|
||||
|
||||
List<ProvisionData> getSauna3(String code, Date startDate, Date endDate);
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,237 @@
|
|||
package org.jeecg.imsDataMonitor.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.jeecg.common.util.DateUtils;
|
||||
import org.jeecg.imsDataMonitor.entity.PhdfProvisionEfficiency;
|
||||
import org.jeecg.imsDataMonitor.entity.ProvisionData;
|
||||
import org.jeecg.imsDataMonitor.mapper.IMSDataMonitorMapper;
|
||||
import org.jeecg.imsDataMonitor.service.IMSDataMonitorService;
|
||||
import org.jeecg.modules.base.entity.configuration.GardsStations;
|
||||
import org.jeecg.modules.base.mapper.GardsStationsMapper;
|
||||
import org.jeecg.modules.base.mapper.StasStationSettingMapper;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
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
|
||||
@DS("ora")
|
||||
public class IMSDataMonitorServiceImpl implements IMSDataMonitorService {
|
||||
@Autowired
|
||||
private IMSDataMonitorMapper imsDataMonitorMapper;
|
||||
@Autowired
|
||||
private StasStationSettingMapper settingMapper;
|
||||
|
||||
@Override
|
||||
public List<GardsStations> getGardsStationList(String systemType) {
|
||||
return imsDataMonitorMapper.findStationList(systemType);
|
||||
}
|
||||
|
||||
//region Particulate
|
||||
@Override
|
||||
public List<ProvisionData> getParticulate(String code, Date startDate, Date endDate) {
|
||||
//获取Particulate类型的台站信息
|
||||
List<GardsStations> stations = imsDataMonitorMapper.findStationList("P");
|
||||
String[] times = getDataTime(startDate, endDate);
|
||||
//有效率状态
|
||||
return getStationDailyData(stations, times[0], times[1]);
|
||||
|
||||
}
|
||||
|
||||
private List<ProvisionData> getStationDailyData(List<GardsStations> stationList,
|
||||
String startTime, String endTime) {
|
||||
|
||||
if (CollectionUtil.isEmpty(stationList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
|
||||
String liveLow = "21.6";
|
||||
String liveHigh = "26.4";
|
||||
String quantity = "10800";
|
||||
String collectLow = "21.6";
|
||||
String collectHigh = "26.4";
|
||||
String number = "1";
|
||||
//每个台站一个月的有效率
|
||||
|
||||
PhdfProvisionEfficiency efficiency = new PhdfProvisionEfficiency();
|
||||
List<Integer> sts = stationList.stream()
|
||||
.map(GardsStations::getStationId)
|
||||
.collect(Collectors.toList());
|
||||
efficiency.setStationId(sts);
|
||||
efficiency.setNumber(number);
|
||||
efficiency.setCollectHigh(collectHigh);
|
||||
efficiency.setLiveHigh(liveHigh);
|
||||
efficiency.setCollectLow(collectLow);
|
||||
efficiency.setLiveLow(liveLow);
|
||||
efficiency.setQuantity(quantity);
|
||||
efficiency.setCurDateTime(endTime);
|
||||
efficiency.setPretime(startTime);
|
||||
//查询数据库 获取台站有效率
|
||||
List<ProvisionData> rawDataList =
|
||||
imsDataMonitorMapper.findPhdfParticulateEfficiency(efficiency);
|
||||
//dataMap.put(station.getStationCode(), rawDataList);
|
||||
return rawDataList;
|
||||
|
||||
}
|
||||
|
||||
private String[] getDataTime(Date startDate, Date endDate) {
|
||||
|
||||
// 使用final确保不可变性,提供更好的线程安全性
|
||||
final LocalDateTime currentTime = LocalDateTime.now();
|
||||
|
||||
// 计算默认时间范围
|
||||
final LocalDateTime defaultStartTime = currentTime.minusDays(30);
|
||||
final LocalDateTime defaultEndTime = currentTime;
|
||||
|
||||
// 定义时间格式器常量(避免重复创建)
|
||||
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
|
||||
// 处理开始时间
|
||||
String startTime = Objects.isNull(startDate)
|
||||
? defaultStartTime.format(formatter)
|
||||
: DateUtils.formatDate(startDate, "yyyy-MM-dd") + " 00:00:00";
|
||||
|
||||
// 处理结束时间
|
||||
String endTime = Objects.isNull(endDate)
|
||||
? defaultEndTime.format(formatter)
|
||||
: DateUtils.formatDate(endDate, "yyyy-MM-dd") + " 23:59:59";
|
||||
|
||||
return new String[] {startTime, endTime};
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
//region SPALAX
|
||||
@Override
|
||||
public List<ProvisionData> getSpalax(String code, Date startDate, Date endDate) {
|
||||
String actualCode = (code == null || code.trim().isEmpty()) ? "SPALAX" : code;
|
||||
//获取Particulate类型的台站信息
|
||||
List<GardsStations> stations = imsDataMonitorMapper.findEfficStationList(actualCode);
|
||||
String[] times = getDataTime(startDate, endDate);
|
||||
//有效率状态
|
||||
return getSpalaxStationDailyData(stations, times[0], times[1]);
|
||||
}
|
||||
|
||||
private List<ProvisionData> getSpalaxStationDailyData(List<GardsStations> stationList,
|
||||
String startTime, String endTime) {
|
||||
|
||||
if (CollectionUtil.isEmpty(stationList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
|
||||
String liveLow = "10";
|
||||
String liveHigh = "11";
|
||||
String quantity = "10";
|
||||
String collectLow = "10.8";
|
||||
String collectHigh = "13.2";
|
||||
String number = "4";
|
||||
String liveqc = "240";
|
||||
//每个台站一个月的有效率
|
||||
|
||||
PhdfProvisionEfficiency efficiency = new PhdfProvisionEfficiency();
|
||||
List<Integer> sts = stationList.stream()
|
||||
.map(GardsStations::getStationId)
|
||||
.collect(Collectors.toList());
|
||||
efficiency.setStationId(sts);
|
||||
efficiency.setNumber(number);
|
||||
efficiency.setCollectHigh(collectHigh);
|
||||
efficiency.setLiveHigh(liveHigh);
|
||||
efficiency.setCollectLow(collectLow);
|
||||
efficiency.setLiveLow(liveLow);
|
||||
efficiency.setQuantity(quantity);
|
||||
efficiency.setCurDateTime(endTime);
|
||||
efficiency.setPretime(startTime);
|
||||
efficiency.setLiveQc(liveqc);
|
||||
//查询数据库 获取台站有效率
|
||||
List<ProvisionData> rawDataList =
|
||||
imsDataMonitorMapper.findPhdfSpalaxEfficiency(efficiency);
|
||||
//dataMap.put(station.getStationCode(), rawDataList);
|
||||
return rawDataList;
|
||||
|
||||
}
|
||||
|
||||
|
||||
//endregion
|
||||
|
||||
//region SAUNA II
|
||||
@Override
|
||||
public List<ProvisionData> getSauna2(String code, Date startDate, Date endDate) {
|
||||
String actualCode = (code == null || code.trim().isEmpty()) ? "SAUNA2" : code;
|
||||
//获取Particulate类型的台站信息
|
||||
List<GardsStations> stations = imsDataMonitorMapper.findEfficStationList(actualCode);
|
||||
String[] times = getDataTime(startDate, endDate);
|
||||
//有效率状态
|
||||
return getSauna2StationDailyData(stations, times[0], times[1]);
|
||||
}
|
||||
|
||||
private List<ProvisionData> getSauna2StationDailyData(List<GardsStations> stationList,
|
||||
String startTime, String endTime) {
|
||||
|
||||
if (CollectionUtil.isEmpty(stationList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
|
||||
String collectLow = "5.4";
|
||||
String collectHigh = "6.6";
|
||||
String liveLow = "4.2";
|
||||
String liveHigh = "6.6";
|
||||
String quantity = "10";
|
||||
String xeVolume = "0.87";
|
||||
String mdc = "1";
|
||||
String nuclideName = "Xe133";
|
||||
String liveQc = "600";
|
||||
String number = "16";
|
||||
//每个台站一个月的有效率
|
||||
|
||||
PhdfProvisionEfficiency efficiency = new PhdfProvisionEfficiency();
|
||||
List<Integer> sts = stationList.stream()
|
||||
.map(GardsStations::getStationId)
|
||||
.collect(Collectors.toList());
|
||||
efficiency.setStationId(sts);
|
||||
efficiency.setNumber(number);
|
||||
efficiency.setCollectHigh(collectHigh);
|
||||
efficiency.setLiveHigh(liveHigh);
|
||||
efficiency.setCollectLow(collectLow);
|
||||
efficiency.setLiveLow(liveLow);
|
||||
efficiency.setQuantity(quantity);
|
||||
efficiency.setCurDateTime(endTime);
|
||||
efficiency.setPretime(startTime);
|
||||
efficiency.setNuclideName(nuclideName);
|
||||
efficiency.setMdc(mdc);
|
||||
efficiency.setLiveQc(liveQc);
|
||||
efficiency.setXeVolume(xeVolume);
|
||||
//查询数据库 获取台站有效率
|
||||
List<ProvisionData> rawDataList =
|
||||
imsDataMonitorMapper.findPhdfSauna2Efficiency(efficiency);
|
||||
//dataMap.put(station.getStationCode(), rawDataList);
|
||||
return rawDataList;
|
||||
|
||||
}
|
||||
//endregion
|
||||
|
||||
//region SAUNA III
|
||||
@Override
|
||||
public List<ProvisionData> getSauna3(String code, Date startDate, Date endDate) {
|
||||
String actualCode = (code == null || code.trim().isEmpty()) ? "SAUNA3" : code;
|
||||
//获取Particulate类型的台站信息
|
||||
List<GardsStations> stations = imsDataMonitorMapper.findEfficStationList(actualCode);
|
||||
String[] times = getDataTime(startDate, endDate);
|
||||
//有效率状态
|
||||
return getSauna2StationDailyData(stations, times[0], times[1]);
|
||||
}
|
||||
//endregion
|
||||
}
|
||||
|
|
@ -5,12 +5,10 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.http.client.utils.URIBuilder;
|
||||
import org.jeecg.common.api.vo.Result;
|
||||
import org.jeecg.common.properties.HttpClientHostProperties;
|
||||
import org.jeecg.sysEmail.entity.SysEmail;
|
||||
import org.jeecg.utils.HttpClientUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
|
@ -18,15 +16,11 @@ import org.springframework.web.bind.annotation.RestController;
|
|||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URLEncoder;
|
||||
import java.time.LocalDate;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/sysEmail")
|
||||
|
|
|
|||
23584
jeecg-module-large-screen/src/main/resources/Particulate.json
Normal file
23584
jeecg-module-large-screen/src/main/resources/Particulate.json
Normal file
File diff suppressed because it is too large
Load Diff
288
jeecg-module-large-screen/src/main/resources/Sanua3.json
Normal file
288
jeecg-module-large-screen/src/main/resources/Sanua3.json
Normal file
|
|
@ -0,0 +1,288 @@
|
|||
{
|
||||
"success": true,
|
||||
"message": "",
|
||||
"code": 200,
|
||||
"result": [
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-31"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-01"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-02"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-03"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-04"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-05"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-06"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-07"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 4,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 25,
|
||||
"collectStart": "2025-11-08"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-09"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-01"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-02"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-03"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-04"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-05"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-06"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-07"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-08"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-09"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-10"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-11"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-12"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-13"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-14"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-15"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-16"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-17"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-18"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-19"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-20"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-21"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-22"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-23"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-24"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-25"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-26"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-27"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-28"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-29"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-30"
|
||||
}
|
||||
],
|
||||
"timestamp": 1768792471998
|
||||
}
|
||||
288
jeecg-module-large-screen/src/main/resources/Sauna2.json
Normal file
288
jeecg-module-large-screen/src/main/resources/Sauna2.json
Normal file
|
|
@ -0,0 +1,288 @@
|
|||
{
|
||||
"success": true,
|
||||
"message": "",
|
||||
"code": 200,
|
||||
"result": [
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-31"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-01"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-02"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-03"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-04"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-05"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-06"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-07"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 4,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 25,
|
||||
"collectStart": "2025-11-08"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 2,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 12.5,
|
||||
"collectStart": "2025-11-09"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-01"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-02"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-03"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-04"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-05"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-06"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-07"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-08"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-09"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-10"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-11"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-12"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-13"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-14"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-15"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-16"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-17"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-18"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-19"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-20"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-21"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-22"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-23"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-24"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-25"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-26"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-27"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-28"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-29"
|
||||
},
|
||||
{
|
||||
"stationCode": "JPX38",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-12-30"
|
||||
}
|
||||
],
|
||||
"timestamp": 1768792471998
|
||||
}
|
||||
596
jeecg-module-large-screen/src/main/resources/Spalax.json
Normal file
596
jeecg-module-large-screen/src/main/resources/Spalax.json
Normal file
|
|
@ -0,0 +1,596 @@
|
|||
{
|
||||
"success": true,
|
||||
"message": "",
|
||||
"code": 200,
|
||||
"result": [
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-09-30"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-09-30"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-09-30"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-01"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-01"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-02"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-02"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-02"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-03"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-03"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-03"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-04"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-04"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-04"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-05"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-05"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-05"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-06"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-06"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-06"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-07"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-07"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-07"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-08"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-08"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-08"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-09"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-09"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-09"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-10"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-10"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-10"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-11"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-11"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-11"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-12"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-12"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-12"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-13"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-13"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-13"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-14"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-14"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-14"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-15"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-15"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-15"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-16"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-16"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-17"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-17"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-18"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-18"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-19"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-19"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-19"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-20"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-20"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-20"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-21"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-21"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-21"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-22"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-22"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-22"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-23"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-23"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-23"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-24"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-24"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-24"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-25"
|
||||
},
|
||||
{
|
||||
"stationCode": "DEX33",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-25"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-25"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-26"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-26"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-27"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-27"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-28"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-28"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-29"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-29"
|
||||
},
|
||||
{
|
||||
"stationCode": "CMX13",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-30"
|
||||
},
|
||||
{
|
||||
"stationCode": "CNX20",
|
||||
"dataNumber": 0,
|
||||
"dataRate": 0,
|
||||
"dataEfficiency": 0,
|
||||
"collectStart": "2025-10-30"
|
||||
}
|
||||
],
|
||||
"timestamp": 1768791911932
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user