diff --git a/ems-common/src/main/java/com/xzzn/common/utils/DateUtils.java b/ems-common/src/main/java/com/xzzn/common/utils/DateUtils.java index 12c8167..cfc07e2 100644 --- a/ems-common/src/main/java/com/xzzn/common/utils/DateUtils.java +++ b/ems-common/src/main/java/com/xzzn/common/utils/DateUtils.java @@ -11,6 +11,8 @@ import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.Calendar; import java.util.Date; +import java.util.TimeZone; + import org.apache.commons.lang3.time.DateFormatUtils; /** @@ -34,6 +36,9 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils public static String YYYY_MM_DD_HH_MM_00 = "yyyy-MM-dd HH:mm:00"; + private static final DateTimeFormatter DAY_INPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + private static final DateTimeFormatter MIN_HOUR_INPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", @@ -289,4 +294,58 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils // 5. 格式化为目标字符串 return new SimpleDateFormat(YYYY_MM_DD_HH_MM_00).format(cal.getTime()); } + + /** + * 将"yyyy-MM-dd"字符串转换为Date类型的"yyyy-MM-dd 23:59:59" + */ + public static Date adjustToEndOfDay(String dateStr) { + // 1. 解析字符串为LocalDate(仅日期) + LocalDate localDate = LocalDate.parse(dateStr, DAY_INPUT_FORMATTER); + + // 2. 补充时间为23:59:59,转换为LocalDateTime + LocalDateTime localDateTime = localDate.atTime(23, 59, 59); + + // 3. 转换为Date类型(兼容旧API) + return Date.from( + localDateTime.atZone(TimeZone.getDefault().toZoneId()) // 适配系统时区 + .toInstant() + ); + } + + /** + * 将 "yyyy-MM-dd HH:mm:ss" 字符串转换为Date类型的"yyyy-MM-dd HH:00:00" + */ + public static Date adjustToStartOfHour(String inputTime) { + // 1. 解析输入字符串为LocalDateTime(包含日期和小时、分钟) + LocalDateTime inputLdt = LocalDateTime.parse(inputTime, MIN_HOUR_INPUT_FORMATTER); + + // 2. 调整分钟为00,秒为00(保留日期和小时不变) + LocalDateTime adjustedLdt = inputLdt + .withMinute(00) // 强制设为00分 + .withSecond(00); // 强制设为00秒 + + // 3. 转换为Date类型(适配旧API) + return Date.from( + adjustedLdt.atZone(TimeZone.getDefault().toZoneId()) // 适配系统时区 + .toInstant() + ); + } + + /** + * 将 "yyyy-MM-dd HH:mm:ss" 字符串转换为Date类型的"yyyy-MM-dd HH:mm:00" + */ + public static Date adjustToStartOfMinutes(String inputTime) { + // 1. 解析输入字符串为LocalDateTime(包含日期和小时、分钟) + LocalDateTime inputLdt = LocalDateTime.parse(inputTime, MIN_HOUR_INPUT_FORMATTER); + + // 2. 调整分钟为00,秒为00(保留日期和小时不变) + LocalDateTime adjustedLdt = inputLdt + .withSecond(00); // 强制设为00秒 + + // 3. 转换为Date类型(适配旧API) + return Date.from( + adjustedLdt.atZone(TimeZone.getDefault().toZoneId()) // 适配系统时区 + .toInstant() + ); + } } diff --git a/ems-system/src/main/java/com/xzzn/ems/domain/vo/DevicePointDataList.java b/ems-system/src/main/java/com/xzzn/ems/domain/vo/DevicePointDataList.java index d5230b1..90526b5 100644 --- a/ems-system/src/main/java/com/xzzn/ems/domain/vo/DevicePointDataList.java +++ b/ems-system/src/main/java/com/xzzn/ems/domain/vo/DevicePointDataList.java @@ -9,7 +9,8 @@ public class DevicePointDataList { // 设备id private String deviceId; - + // 父类设备id + private String parentDeviceId; // 该设备点位数据list private List pointValueList; @@ -18,6 +19,10 @@ public class DevicePointDataList this.pointValueList = pointValueList; } + public DevicePointDataList() { + + } + public String getDeviceId() { return deviceId; } @@ -33,4 +38,12 @@ public class DevicePointDataList public void setPointValueList(List pointValueList) { this.pointValueList = pointValueList; } + + public String getParentDeviceId() { + return parentDeviceId; + } + + public void setParentDeviceId(String parentDeviceId) { + this.parentDeviceId = parentDeviceId; + } } diff --git a/ems-system/src/main/java/com/xzzn/ems/domain/vo/GeneralQueryDataVo.java b/ems-system/src/main/java/com/xzzn/ems/domain/vo/GeneralQueryDataVo.java index 50c0468..81d67ff 100644 --- a/ems-system/src/main/java/com/xzzn/ems/domain/vo/GeneralQueryDataVo.java +++ b/ems-system/src/main/java/com/xzzn/ems/domain/vo/GeneralQueryDataVo.java @@ -12,6 +12,7 @@ public class GeneralQueryDataVo { private String deviceId; private String valueDate; private Object pointValue; + private String parentDeviceId; public String getSiteId() { return siteId; @@ -44,4 +45,12 @@ public class GeneralQueryDataVo { public void setPointValue(Object pointValue) { this.pointValue = pointValue; } + + public String getParentDeviceId() { + return parentDeviceId; + } + + public void setParentDeviceId(String parentDeviceId) { + this.parentDeviceId = parentDeviceId; + } } diff --git a/ems-system/src/main/java/com/xzzn/ems/domain/vo/GeneralQueryResponse.java b/ems-system/src/main/java/com/xzzn/ems/domain/vo/GeneralQueryResponse.java index 0569696..a4e8248 100644 --- a/ems-system/src/main/java/com/xzzn/ems/domain/vo/GeneralQueryResponse.java +++ b/ems-system/src/main/java/com/xzzn/ems/domain/vo/GeneralQueryResponse.java @@ -19,6 +19,10 @@ public class GeneralQueryResponse { this.deviceList = deviceList; } + public GeneralQueryResponse() { + + } + public String getSiteId() { return siteId; } diff --git a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPointMatchMapper.java b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPointMatchMapper.java index 01ee073..818acb3 100644 --- a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPointMatchMapper.java +++ b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPointMatchMapper.java @@ -73,25 +73,44 @@ public interface EmsPointMatchMapper public List getMatchInfo(@Param("siteIds") List siteIds, @Param("deviceCategory")String deviceCategory, @Param("pointName") String pointName); - // 根据条件查询数据-按分钟 - public List getPointDataListByMinutes(@Param("siteIds")List siteIds, + // 根据条件查询数据-按分钟-单体电池特殊处理 + public List getBatteryPointDataByMinutes(@Param("siteIds")List siteIds, @Param("tableName")String tableName, @Param("tableField")String tableField, @Param("startDate")Date startDate, @Param("endDate")Date endDate, @Param("params") Map> params); - // 根据条件查询数据-按小时 - public List getPointDataListByHours(@Param("siteIds")List siteIds, + // 根据条件查询数据-按小时-单体电池特殊处理 + public List getBatteryPointDataByHours(@Param("siteIds")List siteIds, @Param("tableName")String tableName, @Param("tableField")String tableField, @Param("startDate") Date startDate, @Param("endDate")Date endDate, @Param("params") Map> params); - // 根据条件查询数据-按天 - public List getPointDataListByDays(@Param("siteIds")List siteIds, + // 根据条件查询数据-按天-单体电池特殊处理 + public List getBatteryPointDataByDays(@Param("siteIds")List siteIds, @Param("tableName")String tableName, @Param("tableField")String tableField, @Param("startDate")Date startDate, @Param("endDate")Date endDate, - @Param("params") Map> params); + @Param("params") Map> params); + + // 根据条件查询数据-按分钟-其他设备 + public List getCommonPointDataByMinutes(@Param("siteIds")List siteIds, + @Param("tableName")String tableName, + @Param("tableField")String tableField, + @Param("startDate")Date startDate, + @Param("endDate")Date endDate); + // 根据条件查询数据-按小时-其他设备 + public List getCommonPointDataByHours(@Param("siteIds")List siteIds, + @Param("tableName")String tableName, + @Param("tableField")String tableField, + @Param("startDate") Date startDate, + @Param("endDate")Date endDate); + // 根据条件查询数据-按天-其他设备 + public List getCommonPointDataByDays(@Param("siteIds")List siteIds, + @Param("tableName")String tableName, + @Param("tableField")String tableField, + @Param("startDate")Date startDate, + @Param("endDate")Date endDate); } diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/GeneralQueryServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/GeneralQueryServiceImpl.java index 5d4d46d..78bf576 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/GeneralQueryServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/GeneralQueryServiceImpl.java @@ -95,69 +95,175 @@ public class GeneralQueryServiceImpl implements IGeneralQueryService } } + // 单体电池特殊校验 Map> siteDeviceMap = request.getSiteDeviceMap(); if (DeviceCategory.BATTERY.getCode().equals(deviceCategory) && (siteDeviceMap == null || siteDeviceMap.size() == 0)) { return result; } - // 处理时间范围,如果未传根据单位设默认值 + // 处理时间范围,如果未传根据数据单位设默认值 dealDataTime(request); - int dataUnit = request.getDataUnit(); - Date startDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS,request.getStartDate()); - Date endDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS,request.getEndDate()); try { // 不同的site_id根据设备类型和字段,默认取第一个匹配到的表和表字段只会有一个, String tableName = matchInfo.get(0).getMatchTable(); String tableField = matchInfo.get(0).getMatchField(); - List dataVoList = new ArrayList<>(); - if (dataUnit == 1) { // 分钟 - dataVoList = emsPointMatchMapper.getPointDataListByMinutes(querySiteIds,tableName,tableField,startDate,endDate,siteDeviceMap); - if (dataVoList != null && dataVoList.size() > 0) { - dataVoList = dealWithMinutesData(querySiteIds,dataVoList,deviceCategory, - request.getStartDate(),request.getEndDate(),siteDeviceMap); - } - } else if (dataUnit == 2) { // 小时 - if (DeviceCategory.BATTERY.getCode().equals(deviceCategory)) { - // 单体电池特殊处理,已经提前按小时分表 - tableName = "ems_battery_data_hour"; - } - dataVoList = emsPointMatchMapper.getPointDataListByHours(querySiteIds,tableName,tableField,startDate,endDate,siteDeviceMap); - } else if (dataUnit == 3) { // 天 - if (DeviceCategory.BATTERY.getCode().equals(deviceCategory)) { - tableName = "ems_battery_data_day"; - } - dataVoList = emsPointMatchMapper.getPointDataListByDays(querySiteIds,tableName,tableField,startDate,endDate,siteDeviceMap); + + if (DeviceCategory.BATTERY.getCode().equals(deviceCategory)) { + // 单体电池数据特殊处理 + result = generalQueryBatteryData(querySiteIds,tableName,tableField,request,deviceCategory); + } else { + // 其他设备数据 + result = generalQueryCommonData(querySiteIds,tableName,tableField,request,deviceCategory); } - - // 数据转换: 先按siteId分组,再按deviceId分组 - result = dataVoList.stream() - // 第一层分组:按siteId分组,得到 - .collect(Collectors.groupingBy(GeneralQueryDataVo::getSiteId)) - .entrySet().stream() - .map(siteEntry -> { - String siteId = siteEntry.getKey(); - List siteAllData = siteEntry.getValue(); - - // 第二层分组:在当前站点下,按deviceId分组,得到 - List deviceList = siteAllData.stream() - .collect(Collectors.groupingBy(GeneralQueryDataVo::getDeviceId)) - .entrySet().stream() - .map(deviceEntry -> new DevicePointDataList( - deviceEntry.getKey(), - deviceEntry.getValue() - )) - .collect(Collectors.toList()); - - return new GeneralQueryResponse(siteId, deviceList); - }) - .collect(Collectors.toList()); } catch (ParseException e) { throw new RuntimeException(e); } return result; } + private List generalQueryCommonData(List querySiteIds,String tableName, + String tableField, PointNameRequest request, + String deviceCategory) throws ParseException { + List result = new ArrayList<>(); + List dataVoList = new ArrayList<>(); + + int dataUnit = request.getDataUnit(); + Date startDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS,request.getStartDate()); + Date endDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS,request.getEndDate()); + if (dataUnit == 1) { // 分钟:yyyy-MM-dd HH:mm:ss + startDate = DateUtils.adjustToStartOfMinutes(request.getStartDate()); + dataVoList = emsPointMatchMapper.getCommonPointDataByMinutes(querySiteIds,tableName,tableField,startDate,endDate); + if (dataVoList != null && dataVoList.size() > 0) { + dataVoList = dealWithMinutesData(querySiteIds,dataVoList,deviceCategory, + request.getStartDate(),request.getEndDate()); + } + } else if (dataUnit == 2) { // 小时:yyyy-MM-dd HH:mm:ss + dataVoList = emsPointMatchMapper.getCommonPointDataByHours(querySiteIds,tableName,tableField,startDate,endDate); + } else if (dataUnit == 3) { // 天:yyyy-MM-dd 00:00:00 + endDate = DateUtils.adjustToEndOfDay(request.getEndDate()); + dataVoList = emsPointMatchMapper.getCommonPointDataByDays(querySiteIds,tableName,tableField,startDate,endDate); + } + + // 数据转换 + result = convertCommonToResultList(dataVoList); + return result; + } + + private List generalQueryBatteryData(List querySiteIds,String tableName, + String tableField, PointNameRequest request, + String deviceCategory) throws ParseException { + List result = new ArrayList<>(); + List dataVoList = new ArrayList<>(); + + int dataUnit = request.getDataUnit(); + Date startDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS,request.getStartDate()); + Date endDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS,request.getEndDate()); + Map> siteDeviceMap = request.getSiteDeviceMap(); + if (dataUnit == 1) { // 分钟 + startDate = DateUtils.adjustToStartOfMinutes(request.getStartDate()); + dataVoList = emsPointMatchMapper.getBatteryPointDataByMinutes(querySiteIds,tableName,tableField,startDate,endDate,siteDeviceMap); + if (dataVoList != null && dataVoList.size() > 0) { + dataVoList = dealWithBatteryMinutesData(querySiteIds,dataVoList,deviceCategory, + request.getStartDate(),request.getEndDate(),siteDeviceMap); + } + } else if (dataUnit == 2) { // 小时 + startDate = DateUtils.adjustToStartOfHour(request.getStartDate()); + tableName = "ems_battery_data_hour"; + dataVoList = emsPointMatchMapper.getBatteryPointDataByHours(querySiteIds,tableName,tableField,startDate,endDate,siteDeviceMap); + } else if (dataUnit == 3) { // 天 + endDate = DateUtils.adjustToEndOfDay(request.getEndDate()); + tableName = "ems_battery_data_day"; + dataVoList = emsPointMatchMapper.getBatteryPointDataByDays(querySiteIds,tableName,tableField,startDate,endDate,siteDeviceMap); + } + // 数据转换 + result = convertBatteryToResultList(dataVoList); + return result; + } + + private List convertBatteryToResultList(List dataVoList) { + // 先按siteId分组 + return dataVoList.stream() + .collect(Collectors.groupingBy(GeneralQueryDataVo::getSiteId)) + .entrySet().stream() + .map(siteEntry -> { + String siteId = siteEntry.getKey(); + List siteData = siteEntry.getValue(); + + // 2. 按(deviceId + parentDeviceId)组合分组,生成deviceList + List deviceList = siteData.stream() + // 分组键:deviceId + parentDeviceId(确保唯一设备) + .collect(Collectors.groupingBy(data -> + data.getDeviceId() + "_" + data.getParentDeviceId() + )) + .entrySet().stream() + .map(deviceEntry -> { + // 解析分组键,获取deviceId和parentDeviceId + String[] keyParts = deviceEntry.getKey().split("_"); + String deviceId = keyParts[0]; + String parentDeviceId = keyParts[1]; + + // 3. 转换为PointValue列表 + List pointValueList = deviceEntry.getValue().stream() + .map(data -> { + GeneralQueryDataVo pv = new GeneralQueryDataVo(); + pv.setSiteId(siteId); + pv.setDeviceId(deviceId); + pv.setValueDate(data.getValueDate()); + pv.setPointValue(data.getPointValue()); + pv.setParentDeviceId(parentDeviceId); + return pv; + }) + .collect(Collectors.toList()); + + // 4. 构建DeviceItem + DevicePointDataList deviceItem = new DevicePointDataList(); + deviceItem.setDeviceId(deviceId); + deviceItem.setParentDeviceId(parentDeviceId); + deviceItem.setPointValueList(pointValueList); + return deviceItem; + })// 关键排序步骤:先按deviceId升序,再按parentDeviceId升序 + .sorted( + Comparator.comparing(DevicePointDataList::getDeviceId) // 第一排序键:deviceId + .thenComparing(DevicePointDataList::getParentDeviceId) // 第二排序键:parentDeviceId + ) + .collect(Collectors.toList()); + + // 5. 构建SiteData + GeneralQueryResponse site = new GeneralQueryResponse(); + site.setSiteId(siteId); + site.setDeviceList(deviceList); + return site; + }) + .collect(Collectors.toList()); + } + + private List convertCommonToResultList(List dataVoList) { + // 数据转换: 先按siteId分组,再按deviceId分组 + return dataVoList.stream() + // 第一层分组:按siteId分组,得到 + .collect(Collectors.groupingBy(GeneralQueryDataVo::getSiteId)) + .entrySet().stream() + .map(siteEntry -> { + String siteId = siteEntry.getKey(); + List siteAllData = siteEntry.getValue(); + + // 第二层分组:在当前站点下,按deviceId分组,得到 + List deviceList = siteAllData.stream() + .collect(Collectors.groupingBy(GeneralQueryDataVo::getDeviceId)) + .entrySet().stream() + .map(deviceEntry -> new DevicePointDataList( + deviceEntry.getKey(), + deviceEntry.getValue() + )) + .collect(Collectors.toList()); + + return new GeneralQueryResponse(siteId, deviceList); + }) + .collect(Collectors.toList()); + + } + private void dealDataTime(PointNameRequest request) { String startDate = request.getStartDate(); String endDate = request.getEndDate(); @@ -192,28 +298,22 @@ public class GeneralQueryServiceImpl implements IGeneralQueryService } private List dealWithMinutesData(List querySiteIds, List dataVoList, - String deviceCategory, String startDate, String endDate, Map> siteDeviceMap) throws ParseException { + String deviceCategory, String startDate, String endDate) throws ParseException { List fullData = new ArrayList<>(); Map dataMap = new HashMap<>(); + List deviceIds = new ArrayList<>(); for (GeneralQueryDataVo data : dataVoList) { String key = data.getSiteId() + "_" + data.getDeviceId() + "_" + data.getValueDate(); dataMap.put(key, data); + + if (!deviceIds.contains(data.getDeviceId())) { + deviceIds.add(data.getDeviceId()); + } } // 生成分钟序列 Set minuteSeries = generateMinuteSeries(startDate, endDate); - // 遍历每个站点,动态获取该站点下的所有设备 + // 遍历每个站点,查看设备 for (String siteId : querySiteIds) { - List deviceIds = new ArrayList<>(); - // 单体电池deviceId特殊处理 - if (DeviceCategory.BATTERY.getCode().equals(deviceCategory) && (siteDeviceMap != null || siteDeviceMap.size() > 0)) { - deviceIds = siteDeviceMap.get(siteId); - } else { - deviceIds = emsDevicesSettingMapper.getDeviceIdsBySiteIdAndCategory(siteId,deviceCategory); - } - if (deviceIds.isEmpty()) { - continue; // 跳过无设备的站点 - } - // 处理该站点下的所有设备 for (String deviceId : deviceIds) { Object lastValue = null; @@ -228,7 +328,7 @@ public class GeneralQueryServiceImpl implements IGeneralQueryService data.setValueDate(minute); data.setSiteId(siteId); data.setDeviceId(deviceId); - data.setPointValue(lastValue); // 用上一分钟值填充 + data.setPointValue(lastValue==null? 0 : lastValue); // 用上一分钟值填充 } else { lastValue = data.getPointValue(); // 更新最新值 } @@ -245,6 +345,64 @@ public class GeneralQueryServiceImpl implements IGeneralQueryService return fullData; } + private List dealWithBatteryMinutesData(List querySiteIds, List dataVoList, + String deviceCategory, String startDate, String endDate, + Map> siteDeviceMap) throws ParseException { + List fullData = new ArrayList<>(); + Map dataMap = new HashMap<>(); + List clusterIds = new ArrayList<>(); + for (GeneralQueryDataVo data : dataVoList) { + String key = data.getParentDeviceId() + "_" + data.getDeviceId() + "_" + data.getValueDate(); + dataMap.put(key, data); + + if (!clusterIds.contains(data.getParentDeviceId())) { + clusterIds.add(data.getParentDeviceId()); + } + } + // 生成分钟序列 + Set minuteSeries = generateMinuteSeries(startDate, endDate); + + Map lastValueMap = new HashMap<>(); + String siteId = querySiteIds.get(0); + // 单站-先处理站点下的簇id + for (String clusterId : clusterIds) { + List deviceIds = siteDeviceMap.get(siteId); + if (deviceIds.isEmpty()) { + continue; + } + for (String deviceId : deviceIds) { + String deviceKey = clusterId + "_" + deviceId; + + for (String minute : minuteSeries) { + Object lastValue = lastValueMap.get(deviceKey); + String dataKey = clusterId + "_" + deviceId + "_" + minute; + GeneralQueryDataVo data = dataMap.get(dataKey); + + // 空值填充逻辑 + if (data == null) { + data = new GeneralQueryDataVo(); + data.setValueDate(minute); + data.setSiteId(siteId); + data.setDeviceId(deviceId); + data.setParentDeviceId(clusterId); + data.setPointValue(lastValue == null ? 0 : lastValue); // 上一分钟数据不存在默认0 + } else { + lastValueMap.put(deviceKey,data.getPointValue());// 更新最新值 + } + + fullData.add(data); + } + } + + } + + fullData.sort(Comparator.comparing(GeneralQueryDataVo::getValueDate) + .thenComparing(GeneralQueryDataVo::getSiteId) + .thenComparing(GeneralQueryDataVo::getDeviceId)); + + return fullData; + } + /** * 根据前端传递的startDate和endDate生成所有分钟点的序列 * @param startDate 起始时间(格式:yyyy-MM-dd HH:mm:00) @@ -256,7 +414,7 @@ public class GeneralQueryServiceImpl implements IGeneralQueryService Set minutes = new TreeSet<>(); // TreeSet保证时间有序 // 解析起止时间 - startDate = DateUtils.adjustToNextMinute(startDate); + //startDate = DateUtils.adjustToNextMinute(startDate); Date startTime = TIME_FORMAT.parse(startDate.substring(0, 16) + ":00"); Date endTime = TIME_FORMAT.parse(endDate.substring(0, 16) + ":00"); diff --git a/ems-system/src/main/resources/mapper/ems/EmsPointMatchMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsPointMatchMapper.xml index 2f21263..5064b7d 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsPointMatchMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsPointMatchMapper.xml @@ -158,7 +158,74 @@ - + SELECT DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:00') AS valueDate, + site_id as siteId, + device_id as deviceId, + cluster_device_id as parentDeviceId, + ${tableField} as pointValue + FROM ${tableName} + WHERE create_time >= #{startDate} + AND create_time <= #{endDate} + AND ${tableField} is not null + + GROUP BY valueDate, site_id, device_id,cluster_device_id,pointValue + ORDER BY site_id,device_id,cluster_device_id, valueDate ASC + + + + + + + - SELECT DATE_FORMAT(t.create_time, '%Y-%m-%d %H:00') AS valueDate, t.site_id as siteId, t.device_id as deviceId, @@ -181,12 +251,15 @@ FROM ${tableName} t INNER JOIN ( SELECT site_id, device_id, DATE_FORMAT(create_time, '%Y-%m-%d %H:00') AS hour_group, MAX(create_time) AS max_time - FROM ${tableName} - WHERE create_time >= #{startDate} - AND create_time < #{endDate} + FROM ${tableName} + WHERE create_time >= #{startDate} + AND create_time <= #{endDate} AND ${tableField} is not null - - GROUP BY site_id, device_id, hour_group + AND site_id IN + + #{siteId} + + GROUP BY site_id, device_id, hour_group ) tmp ON t.site_id = tmp.site_id AND t.device_id = tmp.device_id AND DATE_FORMAT(t.create_time, '%Y-%m-%d %H:00') = tmp.hour_group @@ -195,7 +268,7 @@ ORDER BY t.site_id, t.device_id, valueDate ASC - SELECT DATE_FORMAT(t.create_time, '%Y-%m-%d') AS valueDate, t.site_id as siteId, t.device_id as deviceId, @@ -203,12 +276,15 @@ t.create_time AS last_update_time FROM ${tableName} t INNER JOIN ( SELECT site_id, device_id, DATE_FORMAT(create_time, '%Y-%m-%d') AS day_group, - MAX(create_time) AS max_time - FROM ${tableName} - WHERE create_time >= #{startDate} - AND create_time <= #{endDate} - AND ${tableField} is not null - + MAX(create_time) AS max_time + FROM ${tableName} + WHERE create_time >= #{startDate} + AND create_time <= #{endDate} + AND ${tableField} is not null + AND site_id IN + + #{siteId} + GROUP BY site_id, device_id, day_group ) tmp ON t.site_id = tmp.site_id AND t.device_id = tmp.device_id