diff --git a/mh-admin/src/main/java/com/mh/web/controller/monitor/IndoorTempMonitorController.java b/mh-admin/src/main/java/com/mh/web/controller/monitor/IndoorTempMonitorController.java index 81ebaf9..c29ae25 100644 --- a/mh-admin/src/main/java/com/mh/web/controller/monitor/IndoorTempMonitorController.java +++ b/mh-admin/src/main/java/com/mh/web/controller/monitor/IndoorTempMonitorController.java @@ -4,13 +4,13 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.mh.common.core.controller.BaseController; import com.mh.common.core.domain.AjaxResult; import com.mh.common.core.domain.dto.HouseGroupDTO; +import com.mh.common.core.domain.dto.IndoorTempDTO; +import com.mh.common.core.domain.dto.TempHisRequest; +import com.mh.common.core.domain.vo.IndoorTempVO; import com.mh.common.core.page.TableDataInfo; import com.mh.system.service.device.IIndoorTempMonitorService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -42,9 +42,10 @@ public class IndoorTempMonitorController extends BaseController { return getDataTable(indoorTempByFloor); } - @GetMapping("/tempHis") - public AjaxResult getIndoorTempHisByHouseId(String houseId) { - return AjaxResult.success(indoorTempMonitorService.getIndoorTempHisByHouseId(houseId)); + @PostMapping("/tempHis") + public TableDataInfo getIndoorTempHisByHouseId(@RequestBody TempHisRequest tempHisRequest) { + List indoorTempHisByHouseId = indoorTempMonitorService.getIndoorTempHisByHouseId(tempHisRequest.getSystemType(), tempHisRequest.getHouseIds()); + return getDataTable(indoorTempHisByHouseId); } } diff --git a/mh-common/src/main/java/com/mh/common/core/domain/dto/DeviceDTO.java b/mh-common/src/main/java/com/mh/common/core/domain/dto/DeviceDTO.java index dec1057..4877528 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/dto/DeviceDTO.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/dto/DeviceDTO.java @@ -27,6 +27,22 @@ class DeviceDTO { this.status = data.getStatus(); } + public String getCpmId() { + return cpmId; + } + + public void setCpmId(String cpmId) { + this.cpmId = cpmId; + } + + public int getOrderNum() { + return orderNum; + } + + public void setOrderNum(int orderNum) { + this.orderNum = orderNum; + } + public String getOtherName() { return otherName; } diff --git a/mh-common/src/main/java/com/mh/common/core/domain/dto/IndoorTempDTO.java b/mh-common/src/main/java/com/mh/common/core/domain/dto/IndoorTempDTO.java new file mode 100644 index 0000000..006aa26 --- /dev/null +++ b/mh-common/src/main/java/com/mh/common/core/domain/dto/IndoorTempDTO.java @@ -0,0 +1,45 @@ +package com.mh.common.core.domain.dto; + +import com.mh.common.core.domain.vo.IndoorTempVO; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 响应给前端的室内温湿度监测 + * @date 2025-03-16 10:58:39 + */ +@Setter +@Getter +public class IndoorTempDTO { + + private String houseId; + + private String houseName; + + private int orderNum; + + private List dataList; + + public IndoorTempDTO(int orderNum, String houseId, String houseName, List collect) { + this.orderNum = orderNum; + this.houseId = houseId; + this.houseName = houseName; + this.dataList = collect; + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("orderNum", orderNum) + .append("houseId", houseId) + .append("houseName", houseName) + .append("dataList", dataList) + .toString(); + } +} diff --git a/mh-common/src/main/java/com/mh/common/core/domain/dto/TempHisRequest.java b/mh-common/src/main/java/com/mh/common/core/domain/dto/TempHisRequest.java new file mode 100644 index 0000000..52c9a71 --- /dev/null +++ b/mh-common/src/main/java/com/mh/common/core/domain/dto/TempHisRequest.java @@ -0,0 +1,23 @@ +package com.mh.common.core.domain.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description + * @date 2025-03-16 14:06:30 + */ +@Setter +@Getter +public class TempHisRequest { + + private String systemType; + + private List houseIds; + +} diff --git a/mh-common/src/main/java/com/mh/common/core/domain/entity/ChillersEntity.java b/mh-common/src/main/java/com/mh/common/core/domain/entity/ChillersEntity.java index b82dc74..442815b 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/entity/ChillersEntity.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/entity/ChillersEntity.java @@ -3,6 +3,9 @@ package com.mh.common.core.domain.entity; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; @@ -15,7 +18,6 @@ import java.util.Date; * @updateTime 2020-05-20 * @throws : */ -@Data public class ChillersEntity implements Serializable { static final long serialVersionUID = 42L; @@ -28,7 +30,7 @@ public class ChillersEntity implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; - private int register_id; + private int registerId; private String deviceCode; // 设备代码 private String deviceNum; // 设备码 private String collectionNum; // 冷水机组采集地址 @@ -58,5 +60,216 @@ public class ChillersEntity implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date curTime; + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public int getRegisterId() { + return registerId; + } + + public void setRegisterId(int registerId) { + this.registerId = registerId; + } + + public String getDeviceCode() { + return deviceCode; + } + + public void setDeviceCode(String deviceCode) { + this.deviceCode = deviceCode; + } + + public String getDeviceNum() { + return deviceNum; + } + + public void setDeviceNum(String deviceNum) { + this.deviceNum = deviceNum; + } + + public String getCollectionNum() { + return collectionNum; + } + + public void setCollectionNum(String collectionNum) { + this.collectionNum = collectionNum; + } + + public String getRegisterAddress() { + return registerAddress; + } + + public void setRegisterAddress(String registerAddress) { + this.registerAddress = registerAddress; + } + + public String getRegisterName() { + return registerName; + } + + public void setRegisterName(String registerName) { + this.registerName = registerName; + } + + public String getFunCode() { + return funCode; + } + + public void setFunCode(String funCode) { + this.funCode = funCode; + } + + public int getDigit() { + return digit; + } + + public void setDigit(int digit) { + this.digit = digit; + } + + public String getOtherName() { + return otherName; + } + + public void setOtherName(String otherName) { + this.otherName = otherName; + } + + public int getGrade() { + return grade; + } + + public void setGrade(int grade) { + this.grade = grade; + } + + public String getLastValue() { + return lastValue; + } + + public void setLastValue(String lastValue) { + this.lastValue = lastValue; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getDataCom() { + return dataCom; + } + + public void setDataCom(String dataCom) { + this.dataCom = dataCom; + } + + public String getDdcAddr() { + return ddcAddr; + } + + public void setDdcAddr(String ddcAddr) { + this.ddcAddr = ddcAddr; + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getIP() { + return IP; + } + + public void setIP(String IP) { + this.IP = IP; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public Integer getParamType() { + return paramType; + } + + public void setParamType(Integer paramType) { + this.paramType = paramType; + } + + public String getCurValue() { + return curValue; + } + + public void setCurValue(String curValue) { + this.curValue = curValue; + } + + public Date getCurTime() { + return curTime; + } + + public void setCurTime(Date curTime) { + this.curTime = curTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("id", id) + .append("createTime", createTime) + .append("updateTime", updateTime) + .append("registerId", registerId) + .append("deviceCode", deviceCode) + .append("deviceNum", deviceNum) + .append("collectionNum", collectionNum) + .append("registerAddress", registerAddress) + .append("registerName", registerName) + .append("funCode", funCode) + .append("digit", digit) + .append("otherName", otherName) + .append("grade", grade) + .append("lastValue", lastValue) + .append("lastTime", lastTime) + .append("dataCom", dataCom) + .append("ddcAddr", ddcAddr) + .append("deviceType", deviceType) + .append("IP", IP) + .append("port", port) + .append("paramType", paramType) + .append("curValue", curValue) + .append("curTime", curTime) + .toString(); + } } diff --git a/mh-common/src/main/java/com/mh/common/core/domain/vo/IndoorTempVO.java b/mh-common/src/main/java/com/mh/common/core/domain/vo/IndoorTempVO.java new file mode 100644 index 0000000..bf86160 --- /dev/null +++ b/mh-common/src/main/java/com/mh/common/core/domain/vo/IndoorTempVO.java @@ -0,0 +1,35 @@ +package com.mh.common.core.domain.vo; + +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.math.BigDecimal; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 室内温湿度监测 + * @date 2025-03-16 10:23:00 + */ +@Setter +@Getter +public class IndoorTempVO { + + private String curTime; + + private BigDecimal indoorTemp; + + private BigDecimal indoorHumidity; + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("curTime", curTime) + .append("indoorTemp", indoorTemp) + .append("indoorHumidity", indoorHumidity) + .toString(); + } + +} diff --git a/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java b/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java index 4c55624..1500aff 100644 --- a/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java +++ b/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java @@ -99,6 +99,32 @@ public interface CollectionParamsManageMapper extends BaseMapper selectByBuildingId(@Param("buildingId") String buildingId); + @Select("") + List> selectByHouseIdAndMtType(@Param("houseIds") List houseIds, + @Param("mtType") String mtType, + @Param("paramType") String paramType); + @Select("select " + " cpm.* " + "from " + @@ -115,6 +141,7 @@ public interface CollectionParamsManageMapper extends BaseMapper> selectByHouseIdAndMtType(@Param("houseId") String houseId, - @Param("mtType") String mtType); - @Select("select " + " cpm.id, " + diff --git a/mh-system/src/main/java/com/mh/system/mapper/device/DataProcessMapper.java b/mh-system/src/main/java/com/mh/system/mapper/device/DataProcessMapper.java index f8bf198..acff0aa 100644 --- a/mh-system/src/main/java/com/mh/system/mapper/device/DataProcessMapper.java +++ b/mh-system/src/main/java/com/mh/system/mapper/device/DataProcessMapper.java @@ -3,6 +3,7 @@ package com.mh.system.mapper.device; import com.mh.common.core.domain.entity.ChillersEntity; import com.mh.common.core.domain.entity.CollectionParamsManage; import com.mh.common.core.domain.entity.DeviceReport; +import com.mh.common.core.domain.vo.IndoorTempVO; import org.apache.ibatis.annotations.*; import java.util.Date; @@ -175,7 +176,14 @@ public interface DataProcessMapper { List selectLineDataByCodeAndRegisterAddr(@Param("tableName") String tableName, @Param("registerId") String registerId); - @Select("select * from ${tableName} where register_id = #{registerId} order by cur_time desc") - List selectHisDataByCodeAndRegisterAddr(@Param("tableName") String tableName, - @Param("registerId") String registerId); + @Select("") + List selectHisDataByCodeAndRegisterAddr(@Param("tableName") String tableName, + @Param("registerIds") List registerIds); } diff --git a/mh-system/src/main/java/com/mh/system/service/device/IIndoorTempMonitorService.java b/mh-system/src/main/java/com/mh/system/service/device/IIndoorTempMonitorService.java index 12eb681..128a4a0 100644 --- a/mh-system/src/main/java/com/mh/system/service/device/IIndoorTempMonitorService.java +++ b/mh-system/src/main/java/com/mh/system/service/device/IIndoorTempMonitorService.java @@ -3,7 +3,9 @@ package com.mh.system.service.device; import com.alibaba.fastjson2.JSONObject; import com.fasterxml.jackson.core.JsonProcessingException; import com.mh.common.core.domain.dto.HouseGroupDTO; +import com.mh.common.core.domain.dto.IndoorTempDTO; import com.mh.common.core.domain.entity.ChillersEntity; +import com.mh.common.core.domain.vo.IndoorTempVO; import java.util.List; @@ -18,5 +20,7 @@ public interface IIndoorTempMonitorService { List getIndoorTempByFloor(String systemType, String floorId) throws JsonProcessingException; - List getIndoorTempHisByHouseId(String houseId); + List getIndoorTempHisByFloorAndHouseId(String systemType, String floorId, String houseId); + + List getIndoorTempHisByHouseId(String systemType, List houseId); } diff --git a/mh-system/src/main/java/com/mh/system/service/device/impl/IndoorTempMonitorServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/device/impl/IndoorTempMonitorServiceImpl.java index f220e82..d61ba8a 100644 --- a/mh-system/src/main/java/com/mh/system/service/device/impl/IndoorTempMonitorServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/device/impl/IndoorTempMonitorServiceImpl.java @@ -4,21 +4,27 @@ import com.alibaba.fastjson2.JSONObject; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.mh.common.core.domain.dto.HouseGroupDTO; +import com.mh.common.core.domain.dto.IndoorTempDTO; import com.mh.common.core.domain.dto.TempHumidityDTO; import com.mh.common.core.domain.entity.ChillersEntity; +import com.mh.common.core.domain.vo.IndoorTempVO; import com.mh.common.utils.DateUtils; +import com.mh.common.utils.StringUtils; import com.mh.system.mapper.device.CollectionParamsManageMapper; import com.mh.system.mapper.device.DataProcessMapper; import com.mh.system.service.device.IIndoorTempMonitorService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @author LJF @@ -46,6 +52,7 @@ public class IndoorTempMonitorServiceImpl implements IIndoorTempMonitorService { /** * 格式转换成json + * * @param dataList * @return * @throws JsonProcessingException @@ -77,24 +84,111 @@ public class IndoorTempMonitorServiceImpl implements IIndoorTempMonitorService { } @Override - public List getIndoorTempHisByHouseId(String houseId) { - String now = DateUtils.getTime(); - String tableName = "chillers_data_min" + now.substring(0, 4); - // 根据房间id查询对应的cpm.id - List> list = collectionParamsManageMapper.selectByHouseIdAndMtType(houseId, "99"); - if (list.isEmpty()) { - return List.of(); - } - List result = new ArrayList<>(); - // 遍历查询到的cpm.id - for (Map cpmIdMap : list) { - String id = cpmIdMap.get("id").toString(); - List chillersEntities = dataProcessMapper.selectHisDataByCodeAndRegisterAddr(tableName, id); - result.addAll(chillersEntities); - } - if (result.isEmpty()) { - return List.of(); + public List getIndoorTempHisByFloorAndHouseId(String systemType, String floorId, String houseId) { + return List.of(); + } + + @Override + public List getIndoorTempHisByHouseId(String systemType, List houseIds) { + // 1. 使用Java 8时间API替代字符串截取 + LocalDateTime now = LocalDateTime.now(); + String tableName = "chillers_data_min" + now.getYear(); // 直接获取年份更安全 + + // 2. 增强SQL查询参数校验 + if (houseIds.isEmpty()) { + log.warn("无效房间ID: {}", houseIds); + return Collections.emptyList(); } - return result; + + // 3. 使用更明确的集合类型声明 + List> cpmIdList = collectionParamsManageMapper.selectByHouseIdAndMtType( + houseIds, + "7", // 使用枚举常量 + "12" + ); + + // cpmIdList用stream houseId分组遍历得出houseId,houseName, orderNum先赋值给result; + // 使用Stream分组映射 + Map houseMapping = cpmIdList.stream() + .filter(map -> map.containsKey("houseId") && map.containsKey("houseName")) + .collect(Collectors.toMap( + map -> map.get("houseId"), // 键:houseId + map -> map.get("houseName"), // 值:houseName + (oldVal, newVal) -> oldVal // 重复键处理:保留首次出现的值 + )); + + Map houseOrderMapping = cpmIdList.stream() + .filter(map -> map.containsKey("houseId") && map.containsKey("houseName")) + .collect(Collectors.toMap( + map -> map.get("houseId"), // 键:houseId + map -> map.get("orderNum"), // 值:houseName + (oldVal, newVal) -> oldVal // 重复键处理:保留首次出现的值 + )); + + // 构建结果集合 + return houseIds.stream() + .map(houseId -> { + // 根据houseId查询对应的cmpList + List cpmData = cpmIdList.stream() + .filter(map -> houseId.equals(map.get("houseId"))) + .map(map -> map.get("cpmId")) + .collect(Collectors.toList()); + List rawData = dataProcessMapper.selectHisDataByCodeAndRegisterAddr(tableName, cpmData); + // 4. 优化聚合计算(单次Stream完成所有操作) + List collect = rawData.stream() +// .filter(vo -> isValidTimeFormat(vo.getCurTime())) // 格式校验 + .collect(Collectors.groupingBy( + IndoorTempVO::getCurTime, + () -> new TreeMap<>(this::compareTimeString), // 自定义排序 + Collectors.collectingAndThen( + Collectors.toList(), + this::calculateAverage + ) + )) + .entrySet().stream() + .map(entry -> buildResultVO(entry.getKey(), entry.getValue())) + .toList(); + return new IndoorTempDTO( + Integer.parseInt(String.valueOf(houseOrderMapping.getOrDefault(houseId, 0))), // 默认值兜底 + houseId, + String.valueOf(houseMapping.getOrDefault(houseId, "未知房间")), // 默认值兜底 + collect); // 初始化数据列表 + }) + .collect(Collectors.toList()); + } + + // 辅助方法:时间格式校验 + private boolean isValidTimeFormat(String time) { + return time != null && time.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}"); } + + // 辅助方法:时间字符串比较 + private int compareTimeString(String t1, String t2) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00:00"); + LocalDateTime dt1 = LocalDateTime.parse(t1, formatter); + LocalDateTime dt2 = LocalDateTime.parse(t2, formatter); + return dt1.compareTo(dt2); + } + + // 辅助方法:计算平均值 + private BigDecimal calculateAverage(List list) { + BigDecimal sum = list.stream() + .map(IndoorTempVO::getIndoorTemp) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + return sum.divide( + new BigDecimal(list.size()), + 2, + RoundingMode.HALF_UP + ); + } + + // 辅助方法:构建结果对象 + private IndoorTempVO buildResultVO(String time, BigDecimal avg) { + IndoorTempVO vo = new IndoorTempVO(); + vo.setCurTime(time); + vo.setIndoorTemp(avg); + return vo; + } + }