Browse Source

1、添加设备监视

dev
25604 3 weeks ago
parent
commit
1b6fe9457a
  1. 28
      user-service/src/main/java/com/mh/user/controller/ProMonitorController.java
  2. 155
      user-service/src/main/java/com/mh/user/dto/ProDevicesMonitorDTO.java
  3. 1
      user-service/src/main/java/com/mh/user/mapper/ProjectInfoMapper.java
  4. 4
      user-service/src/main/java/com/mh/user/service/MeterManageService.java
  5. 144
      user-service/src/main/java/com/mh/user/service/impl/MeterManageServiceImpl.java
  6. 2
      user-service/src/main/java/com/mh/user/utils/AESUtil.java
  7. 53
      user-service/src/main/java/com/mh/user/vo/ProMonitorVO.java

28
user-service/src/main/java/com/mh/user/controller/ProMonitorController.java

@ -0,0 +1,28 @@
package com.mh.user.controller;
import com.mh.common.http.HttpResult;
import com.mh.user.service.MeterManageService;
import com.mh.user.vo.ProMonitorVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author LJF
* @version 1.0
* @project mh_esi
* @description 项目监视管理
* @date 2026-01-14 09:51:21
*/
@RestController
@RequestMapping("/proMonitor")
public class ProMonitorController {
@Autowired
private MeterManageService meterManageService;
@PostMapping("/list")
HttpResult list(@RequestBody ProMonitorVO proMonitorVO) {
return HttpResult.ok(meterManageService.list(proMonitorVO));
}
}

155
user-service/src/main/java/com/mh/user/dto/ProDevicesMonitorDTO.java

@ -0,0 +1,155 @@
package com.mh.user.dto;
/**
* @author LJF
* @version 1.0
* @project mh_esi
* @description 能耗监测
* @date 2024-11-26 11:51:42
*/
public class ProDevicesMonitorDTO {
// private String time;
/**
* 项目名称
*/
private String projectName;
/**
* 项目id
*/
private String projectId;
/**
* 项目类型
*/
private String projectType;
/**
* 仪表编号
*/
private String mtNum;
/**
* 仪表位置名称
*/
private String installAddr;
/**
* 瞬时量
*/
private String momentCooling;
/**
* 进水温度/温度
*/
private String intTemp;
/**
* 出水温度/压力
*/
private String outTemp;
/**
* 是否在线
*/
private boolean isOnline;
public ProDevicesMonitorDTO() {
}
public ProDevicesMonitorDTO(String projectName, String projectId, String projectType, String mtNum, String installAddr, String momentCooling, String intTemp, String outTemp, boolean isOnline) {
this.projectName = projectName;
this.projectId = projectId;
this.projectType = projectType;
this.mtNum = mtNum;
this.installAddr = installAddr;
this.momentCooling = momentCooling;
this.intTemp = intTemp;
this.outTemp = outTemp;
this.isOnline = isOnline;
}
public String getProjectType() {
return projectType;
}
public void setProjectType(String projectType) {
this.projectType = projectType;
}
public String getMtNum() {
return mtNum;
}
public void setMtNum(String mtNum) {
this.mtNum = mtNum;
}
public String getInstallAddr() {
return installAddr;
}
public void setInstallAddr(String installAddr) {
this.installAddr = installAddr;
}
public boolean isOnline() {
return isOnline;
}
public void setOnline(boolean online) {
isOnline = online;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getProjectId() {
return projectId;
}
public void setProjectId(String projectId) {
this.projectId = projectId;
}
public String getMomentCooling() {
return momentCooling;
}
public void setMomentCooling(String momentCooling) {
this.momentCooling = momentCooling;
}
public String getIntTemp() {
return intTemp;
}
public void setIntTemp(String intTemp) {
this.intTemp = intTemp;
}
public String getOutTemp() {
return outTemp;
}
public void setOutTemp(String outTemp) {
this.outTemp = outTemp;
}
@Override
public String toString() {
return "DataResultChEntity{" +
", momentCooling=" + momentCooling +
", intTemp=" + intTemp +
", outTemp=" + outTemp +
'}';
}
}

1
user-service/src/main/java/com/mh/user/mapper/ProjectInfoMapper.java

@ -33,6 +33,7 @@ public interface ProjectInfoMapper extends BaseMapper<ProjectInfoEntity> {
"<if test='systemId != null and systemId != \"\"'>" +
" and pi.system_id=#{systemId} " +
"</if>" +
" order by pi.id " +
"</script>")
List<ProjectInfoEntity> queryProjectInfo(@Param("systemId") String systemID, @Param("account") String projectId);

4
user-service/src/main/java/com/mh/user/service/MeterManageService.java

@ -1,6 +1,8 @@
package com.mh.user.service;
import com.mh.user.dto.ProDevicesMonitorDTO;
import com.mh.user.entity.MeterManageEntity;
import com.mh.user.vo.ProMonitorVO;
import java.util.List;
@ -18,4 +20,6 @@ public interface MeterManageService extends BaseService<MeterManageEntity> {
void updateDataById(Long mmId, String analysisData);
int queryIsHotCollection(String systemId, String projectId);
List<ProDevicesMonitorDTO> list(ProMonitorVO proMonitorVO);
}

144
user-service/src/main/java/com/mh/user/service/impl/MeterManageServiceImpl.java

@ -9,16 +9,22 @@ import com.mh.common.page.PageRequest;
import com.mh.common.page.PageResult;
import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant;
import com.mh.user.dto.ProDevicesMonitorDTO;
import com.mh.user.entity.MeterManageEntity;
import com.mh.user.entity.ProjectInfoEntity;
import com.mh.user.mapper.MeterManageMapper;
import com.mh.user.mapper.ProjectInfoMapper;
import com.mh.user.service.DeviceCodeParamService;
import com.mh.user.service.MeterManageService;
import com.mh.user.utils.ExchangeStringUtil;
import com.mh.user.vo.ProMonitorVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList;
/**
* @author LJF
@ -36,6 +42,140 @@ public class MeterManageServiceImpl implements MeterManageService {
@Autowired
private DeviceCodeParamService deviceCodeParamService;
@Autowired
private ProjectInfoMapper projectInfoMapper;
@Override
public List<ProDevicesMonitorDTO> list(ProMonitorVO proMonitorVO) {
if (StringUtils.isBlank(proMonitorVO.getUserName()) || StringUtils.isBlank(proMonitorVO.getSystemId())) {
return Collections.emptyList();
}
// 根据用户名和系统编号查询项目编号
List<ProjectInfoEntity> projectInfoEntities = projectInfoMapper.queryProjectInfo(proMonitorVO.getSystemId(), proMonitorVO.getUserName());
if (projectInfoEntities.isEmpty()) {
return Collections.emptyList();
}
List<String> projectIds = proMonitorVO.getProjectIds();
if (null != projectIds && !projectIds.isEmpty()) {
projectInfoEntities = projectInfoEntities.stream().filter(projectInfoEntity -> projectIds.contains(projectInfoEntity.getId().toString())).collect(toList());
}
// 构建项目ID到项目信息的映射,避免重复查询
Map<Long, String> projectIdToNameMap = projectInfoEntities.stream()
.collect(Collectors.toMap(ProjectInfoEntity::getId, ProjectInfoEntity::getProjectName));
// 获取有效的项目ID集合
Set<Long> validProjectIds = projectIdToNameMap.keySet();
// 查询全部的冷量计类型实时数据
List<MeterManageEntity> meterManageEntities = meterManageMapper.selectList(
new QueryWrapper<MeterManageEntity>()
.eq("system_id", proMonitorVO.getSystemId())
.and(wrapper -> wrapper.eq("mt_type", 2).or().eq("mt_type", 4))
.in("project_id", validProjectIds)
);
if (meterManageEntities.isEmpty()) {
return Collections.emptyList();
}
// 按projectId分组,再按mtNum分组
Map<Long, Map<String, List<MeterManageEntity>>> groupedMeters = meterManageEntities.stream()
.collect(Collectors.groupingBy(
MeterManageEntity::getProjectId,
Collectors.groupingBy(meter -> meter.getMtNum() == null ? "" : meter.getMtNum())
));
// 构建项目ID到设备类型的映射,避免重复查询
Map<Long, Integer> projectTypeMap = new HashMap<>();
for (Long projectId : groupedMeters.keySet()) {
int isHotCollection = queryIsHotCollection(proMonitorVO.getSystemId(), String.valueOf(projectId));
projectTypeMap.put(projectId, isHotCollection);
}
// 组装结果数据
List<ProDevicesMonitorDTO> result = new ArrayList<>();
// 遍历每个项目
for (Map.Entry<Long, Map<String, List<MeterManageEntity>>> projectEntry : groupedMeters.entrySet()) {
Long projectId = projectEntry.getKey();
String projectName = projectIdToNameMap.get(projectId);
Integer projectType = projectTypeMap.getOrDefault(projectId, 0);
// 遍历项目中每个mtNum分组
for (Map.Entry<String, List<MeterManageEntity>> mtNumEntry : projectEntry.getValue().entrySet()) {
String mtNum = mtNumEntry.getKey();
List<MeterManageEntity> metersWithSameMtNum = mtNumEntry.getValue();
ProDevicesMonitorDTO dto = new ProDevicesMonitorDTO();
dto.setProjectName(projectName);
dto.setProjectId(String.valueOf(projectId));
dto.setProjectType(String.valueOf(projectType));
dto.setMtNum(mtNum);
for (MeterManageEntity meter : metersWithSameMtNum) {
dto.setInstallAddr(meter.getRemark());
// 根据设备类型设置不同字段
if (projectType == 0) {
// 0:冷量计,瞬时冷量,进出水温度
if ("0020".equalsIgnoreCase(meter.getRegisterAddr())) {
dto.setMomentCooling(formatValue(meter.getCurValue()));
} else if ("0073".equalsIgnoreCase(meter.getRegisterAddr())) {
dto.setOutTemp(formatValue(meter.getCurValue()));
} else if ("0075".equalsIgnoreCase(meter.getRegisterAddr())) {
dto.setIntTemp(formatValue(meter.getCurValue()));
}
} else if (projectType == 1) {
// 1:热量计,瞬时热量,进出水温度
if ("0020".equalsIgnoreCase(meter.getRegisterAddr())) {
dto.setMomentCooling(formatValue(meter.getCurValue()));
} else if ("0073".equalsIgnoreCase(meter.getRegisterAddr())) {
dto.setOutTemp(formatValue(meter.getCurValue()));
} else if ("0075".equalsIgnoreCase(meter.getRegisterAddr())) {
dto.setIntTemp(formatValue(meter.getCurValue()));
}
} else if (projectType == 2) {
// 2:蒸汽流量计,瞬时流量,压力温度
if ("0006".equalsIgnoreCase(meter.getRegisterAddr())) {
dto.setMomentCooling(formatValue(meter.getCurValue()));
} else if ("0012".equalsIgnoreCase(meter.getRegisterAddr())) {
dto.setOutTemp(formatValue(meter.getCurValue()));
} else if ("0010".equalsIgnoreCase(meter.getRegisterAddr())) {
dto.setIntTemp(formatValue(meter.getCurValue()));
}
}
// 设置在线状态(根据curTime判断)
dto.setOnline(isOnline(meter.getCurTime()));
}
result.add(dto);
}
}
return result;
}
/**
* 格式化数值
*/
private String formatValue(java.math.BigDecimal value) {
if (value == null) {
return "0.00";
}
return value.setScale(2, java.math.RoundingMode.HALF_UP).toPlainString();
}
/**
* 判断是否在线超过5分钟未更新视为离线
*/
private boolean isOnline(Date curTime) {
if (curTime == null) {
return false;
}
long timeDiff = System.currentTimeMillis() - curTime.getTime();
return timeDiff <= 5 * 60 * 1000; // 5分钟
}
@Override
public List<MeterManageEntity> queryBySystemIdAndProjectId(String systemId, String projectId) {
QueryWrapper<MeterManageEntity> queryWrapper = new QueryWrapper<>();

2
user-service/src/main/java/com/mh/user/utils/AESUtil.java

@ -5,6 +5,7 @@ import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Date;
/**
* @author chison
@ -25,6 +26,7 @@ public class AESUtil {
String data = dataStr.substring(dataStr.length() - 8, dataStr.length() - 6)
+ dataStr.substring(dataStr.length() - 6, dataStr.length() - 4);
System.out.println(data);
Date now = new Date();
}
/**

53
user-service/src/main/java/com/mh/user/vo/ProMonitorVO.java

@ -0,0 +1,53 @@
package com.mh.user.vo;
import java.util.List;
import java.util.StringJoiner;
/**
* @author LJF
* @version 1.0
* @project mh_esi
* @description 设备类型监控
* @date 2026-01-14 14:33:40
*/
public class ProMonitorVO {
private String userName;
private String systemId;
private List<String> projectIds;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getSystemId() {
return systemId;
}
public void setSystemId(String systemId) {
this.systemId = systemId;
}
public List<String> getProjectIds() {
return projectIds;
}
public void setProjectIds(List<String> projectIds) {
this.projectIds = projectIds;
}
@Override
public String toString() {
return new StringJoiner(", ", ProMonitorVO.class.getSimpleName() + "[", "]")
.add("userName='" + userName + "'")
.add("systemId='" + systemId + "'")
.add("projectIds=" + projectIds)
.toString();
}
}
Loading…
Cancel
Save