Browse Source

1、添加modbus电表通信

dev
25604 2 weeks ago
parent
commit
47a6e1672f
  1. 4
      user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java
  2. 4
      user-service/src/main/java/com/mh/user/service/impl/DealDataExceptionServiceImpl.java
  3. 1
      user-service/src/main/java/com/mh/user/service/impl/MeterManageServiceImpl.java
  4. 37
      user-service/src/main/java/com/mh/user/strategy/ModbusProtocolStrategy.java
  5. 6
      user-service/src/main/java/com/mh/user/utils/AESUtil.java

4
user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java

@ -409,7 +409,9 @@ public class DataResultServiceImpl implements DataResultService {
} else {
count = dataResultFiveMiCount(projectId, startDate, curDate, momentCoolingStr, registerAddr);
}
dealDataExceptionService.dealFifteenInstantaneousExceptionData(mergedRecords);
new Thread(() ->{
dealDataExceptionService.dealFifteenInstantaneousExceptionData(mergedRecords);
}).start();
return HttpResult.ok(count, mergedRecords);
}
// else if (dateType.equals("12小时")) {

4
user-service/src/main/java/com/mh/user/service/impl/DealDataExceptionServiceImpl.java

@ -41,7 +41,7 @@ public class DealDataExceptionServiceImpl implements DealDataExceptionService {
BigDecimal momentCooling = new BigDecimal(dataResultDTO.getMomentCooling());
return momentCooling.compareTo(BigDecimal.ZERO) <= 0;
}).collect(Collectors.toList());
if (momentCoolingList.size() <= 10 && !momentCoolingList.isEmpty()) {
if (momentCoolingList.size() <= 20 && !momentCoolingList.isEmpty()) {
// 重新计算momentCooling的值
for (DataResultDTO dataResultDTO : momentCoolingList) {
// 将字符串转换为 LocalDateTime
@ -58,7 +58,7 @@ public class DealDataExceptionServiceImpl implements DealDataExceptionService {
BigDecimal intTemp = new BigDecimal(dataResultDTO.getIntTemp());
return intTemp.compareTo(BigDecimal.ZERO) <= 0;
}).collect(Collectors.toList());
if (intTempList.size() <= 10 && !intTempList.isEmpty()) {
if (intTempList.size() <= 20 && !intTempList.isEmpty()) {
// 重新计算intTemp,outTemp的值
for (DataResultDTO dataResultDTO : intTempList) {
// 将字符串转换为 LocalDateTime

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

@ -93,6 +93,7 @@ public class MeterManageServiceImpl implements MeterManageService {
// 电表格式化成12位
if (entity.getMtType() == 1) {
entity.setMtCode(ExchangeStringUtil.addZeroForNum(entity.getMtCode(), 12));
entity.setMtNum(ExchangeStringUtil.addZeroForNum(entity.getMtNum(), 12));
}
meterManageMapper.updateById(entity);
// 更新对应的设备采集参数

37
user-service/src/main/java/com/mh/user/strategy/ModbusProtocolStrategy.java

@ -2,10 +2,7 @@ package com.mh.user.strategy;
import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant;
import com.mh.user.entity.DataResultChEntity;
import com.mh.user.entity.DataResultClEntity;
import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.MeterManageEntity;
import com.mh.user.entity.*;
import com.mh.user.service.DataResultService;
import com.mh.user.service.ProjectInfoService;
import com.mh.user.utils.ExchangeStringUtil;
@ -134,6 +131,9 @@ public class ModbusProtocolStrategy implements ProtocolStrategy {
analysisCloudOrder485(sValue, deviceCodeParamEntity);
} else if ("0".equals(deviceCodeParamEntity.getDeviceType())) {
analysisChillerOrder485(sValue, deviceCodeParamEntity);
} else if ("1".equals(deviceCodeParamEntity.getDeviceType())) {
// 解析入库
analysisMeterOrder485(sValue, deviceCodeParamEntity);
}
} catch (NumberFormatException e) {
log.error("modbus标准协议:策略解析报文异常", e);
@ -141,6 +141,35 @@ public class ModbusProtocolStrategy implements ProtocolStrategy {
return sValue;
}
/**
* 解析电表返回的数据
*
* @param dataStr
*/
public void analysisMeterOrder485(final String dataStr, final DeviceCodeParamEntity deviceCodeParam) {
threadPoolService.execute(() -> {
Date date = new Date();
String dateStr = sdf1.format(date);
try {
DataResultEntity dataResultEntity = new DataResultEntity();
dataResultEntity.setDeviceAddr(deviceCodeParam.getDeviceAddr()); //通讯编号
dataResultEntity.setDeviceType(deviceCodeParam.getDeviceType()); //类型
dataResultEntity.setProjectId(deviceCodeParam.getProjectId()); //所属项目
dataResultEntity.setCurValue(new BigDecimal(dataStr)); //当前读数
dataResultEntity.setCurDate(sdf1.parse(dateStr)); //当前日期
dataResultEntity.setGrade(deviceCodeParam.getGrade());
dataResultEntity.setRegisterAddr(deviceCodeParam.getRegisterAddr());
dataResultEntity.setRegisterName(deviceCodeParam.getRegisterName());
String projectName = projectInfoService.selectName(deviceCodeParam.getProjectId());
log.info("电表==>{},读数==>{},项目名称==>{}", deviceCodeParam.getDeviceAddr(), dataStr, projectName);
dataResultService.saveDataResult(dataResultEntity);
log.info("电表保存数据成功!项目名称:{}", projectName);
} catch (Exception e) {
log.error("保存电表数据失败!", e);
}
});
}
/**
* 解析冷水机组返回的数据
*/

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

@ -21,8 +21,10 @@ public class AESUtil {
private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding"; // 默认的加密算法,CBC模式
public static void main(String[] args) throws Exception {
String s = AESencrypt("test");
System.out.println(s);
String dataStr = "030302002d0199";
String data = dataStr.substring(dataStr.length() - 8, dataStr.length() - 6)
+ dataStr.substring(dataStr.length() - 6, dataStr.length() - 4);
System.out.println(data);
}
/**

Loading…
Cancel
Save