Browse Source

1、设备更换,优化采集指令动态生成;2、定时采集动态获取对应的线程数

prod_202403
mh 8 months ago
parent
commit
6aa5718d6a
  1. 18
      user-service/src/main/java/com/mh/user/job/DealDataJob.java
  2. 2
      user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java
  3. 3
      user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java
  4. 2
      user-service/src/main/java/com/mh/user/service/impl/DeviceInstallServiceImpl.java
  5. 9
      user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java
  6. 46
      user-service/src/test/java/com/mh/user/TestJwtUtils.java
  7. 4
      热水新增脚本.sql

18
user-service/src/main/java/com/mh/user/job/DealDataJob.java

@ -1,9 +1,11 @@
package com.mh.user.job; package com.mh.user.job;
import com.mh.user.constants.Constant; import com.mh.user.constants.Constant;
import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.serialport.SerialPortThread; import com.mh.user.serialport.SerialPortThread;
import com.mh.user.service.DeviceCodeParamService; import com.mh.user.service.DeviceCodeParamService;
import com.mh.user.service.DealDataService; import com.mh.user.service.DealDataService;
import com.mh.user.utils.CacheUtil;
import com.mh.user.utils.ComThreadPoolService; import com.mh.user.utils.ComThreadPoolService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -12,8 +14,11 @@ import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.stream.Collectors;
/** /**
* @author ljf * @author ljf
@ -74,6 +79,7 @@ public class DealDataJob {
if (!Constant.WEB_FLAG) { if (!Constant.WEB_FLAG) {
Constant.FLAG = true; Constant.FLAG = true;
log.info("------Constant.WEB_FLAG==" + false + "------"); log.info("------Constant.WEB_FLAG==" + false + "------");
CacheUtil cacheUtil = CacheUtil.getInstance();
for (int i = 1; i <= 4; i++) { for (int i = 1; i <= 4; i++) {
if (Constant.WEB_FLAG) { if (Constant.WEB_FLAG) {
break; break;
@ -89,13 +95,19 @@ public class DealDataJob {
threadName = "3"; threadName = "3";
log.info("------采集设定温度、设定水位、故障状态!" + i + "------"); log.info("------采集设定温度、设定水位、故障状态!" + i + "------");
} }
CountDownLatch countDownLatch = new CountDownLatch(10); // 从缓存中获取到对应的采集内容
for (int j = 1; j < 11; j++) { List<DeviceCodeParamEntity> deviceParamsByType = cacheUtil.getDeviceParamsByType(threadName);
// 分组data_com
Map<String, List<DeviceCodeParamEntity>> dataComMap = deviceParamsByType.stream().collect(Collectors.groupingBy(DeviceCodeParamEntity::getDataCom));
CountDownLatch countDownLatch = new CountDownLatch(dataComMap.size());
for (int j = 0; j < dataComMap.size(); j++) {
if (Constant.WEB_FLAG) { if (Constant.WEB_FLAG) {
break; break;
} }
// 获取data_com口
String dataCom = dataComMap.keySet().toArray(new String[0])[j];
SerialPortThread myThread = new SerialPortThread(); SerialPortThread myThread = new SerialPortThread();
myThread.setName(threadName, String.valueOf(j), countDownLatch); myThread.setName(threadName, dataCom.toLowerCase().replace("com", ""), countDownLatch);
Thread thread = new Thread(myThread); Thread thread = new Thread(myThread);
comThreadPool.execute(thread); comThreadPool.execute(thread);
} }

2
user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java

@ -113,7 +113,7 @@ public class SerialPortSingle2 {
} }
} }
try { try {
if ((dataStr.length() == 18 || dataStr.length() == 70 || dataStr.length() == 44) && deviceType.equals("水表")) { if ((dataStr.length() == 18 || dataStr.length() == 70 || dataStr.length() == 72 || dataStr.length() == 44) && deviceType.equals("水表")) {
rtData = analysisReceiveOrder485.analysisWtMeterOrder4852(dataStr, registerAddr, brand, buildingId, buildingName); rtData = analysisReceiveOrder485.analysisWtMeterOrder4852(dataStr, registerAddr, brand, buildingId, buildingName);
} else if ((dataStr.length() == 36 || dataStr.length() == 44 || dataStr.length() == 40 || dataStr.length() == 50) && deviceType.equals("电表")) { } else if ((dataStr.length() == 36 || dataStr.length() == 44 || dataStr.length() == 40 || dataStr.length() == 50) && deviceType.equals("电表")) {
rtData = analysisReceiveOrder485.analysisMeterOrder4852(dataStr, registerAddr, brand, buildingId, buildingName); rtData = analysisReceiveOrder485.analysisMeterOrder4852(dataStr, registerAddr, brand, buildingId, buildingName);

3
user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java

@ -117,6 +117,7 @@ public class DeviceControlServiceImpl implements DeviceControlService {
&& (deviceCodeParam.getParam().equals("时段1") || deviceCodeParam.getParam().equals("时段2")) && (deviceCodeParam.getParam().equals("时段1") || deviceCodeParam.getParam().equals("时段2"))
&& !rtData.equals(Constant.FAIL)) { && !rtData.equals(Constant.FAIL)) {
deviceCodeParam.setFunCode("06"); deviceCodeParam.setFunCode("06");
log.info("开启热泵定时==>{}", deviceCodeParam.getParam() + deviceCodeParam.getRegisterAddr());
// 开启热泵定时 // 开启热泵定时
if ("0028".equals(deviceCodeParam.getRegisterAddr())) { if ("0028".equals(deviceCodeParam.getRegisterAddr())) {
deviceCodeParam.setRegisterAddr("00230001"); deviceCodeParam.setRegisterAddr("00230001");
@ -143,7 +144,7 @@ public class DeviceControlServiceImpl implements DeviceControlService {
rtData = serialPortSingle.serialPortSend(deviceCodeParam); rtData = serialPortSingle.serialPortSend(deviceCodeParam);
// 要添加校准值 // 要添加校准值
Double deviationValue = deviceInstallService.selectDeviceDeviation(deviceCodeParam.getDeviceAddr(),deviceCodeParam.getDeviceType(), deviceCodeParam.getBuildingId()); Double deviationValue = deviceInstallService.selectDeviceDeviation(deviceCodeParam.getDeviceAddr(),deviceCodeParam.getDeviceType(), deviceCodeParam.getBuildingId());
if (null != deviationValue && !"fail".equals(rtData)) { if (null != deviationValue && !StringUtils.isBlank(rtData) && !"fail".equals(rtData)) {
rtData = new BigDecimal(rtData).add(BigDecimal.valueOf(deviationValue)).toString(); rtData = new BigDecimal(rtData).add(BigDecimal.valueOf(deviationValue)).toString();
} }
return rtData; return rtData;

2
user-service/src/main/java/com/mh/user/service/impl/DeviceInstallServiceImpl.java

@ -51,7 +51,7 @@ public class DeviceInstallServiceImpl implements DeviceInstallService {
DeviceCodeParamEntity deviceCodeParamEntity = new DeviceCodeParamEntity(); DeviceCodeParamEntity deviceCodeParamEntity = new DeviceCodeParamEntity();
BeanUtils.copyProperties(deviceInstallEntity,deviceCodeParamEntity); BeanUtils.copyProperties(deviceInstallEntity,deviceCodeParamEntity);
deviceCodeParamEntity.setBaudrate(deviceInstallEntity.getBaudRate()); deviceCodeParamEntity.setBaudrate(deviceInstallEntity.getBaudRate());
deviceCodeParamEntity.setThread(String.valueOf(new Random().nextInt(10))); deviceCodeParamEntity.setThread(deviceInstallEntity.getDataCom().toLowerCase().replace("com",""));
// 顺便生成采集信息 // 顺便生成采集信息
switch (deviceInstallEntity.getDeviceType()) { switch (deviceInstallEntity.getDeviceType()) {
case "压变": case "压变":

9
user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java

@ -2,6 +2,7 @@ package com.mh.user.utils;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.mh.common.utils.StringUtils; import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant;
import com.mh.user.entity.*; import com.mh.user.entity.*;
import com.mh.user.service.*; import com.mh.user.service.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -205,7 +206,8 @@ public class AnalysisReceiveOrder485 {
Date date = new Date(); Date date = new Date();
String data = ""; String data = "";
String meterId = ""; String meterId = "";
if (dataStr.length() == 44 || dataStr.length() == 70) { // 68 10 3987835C03000081B31CDA1C006502002C006502002C0000000000000000FF3416
if (dataStr.length() == 44 || dataStr.length() == 70 || dataStr.length() == 72) {
String checkStr = dataStr.substring(0, dataStr.length() - 4);//减去校验码 String checkStr = dataStr.substring(0, dataStr.length() - 4);//减去校验码
String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码
if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) {
@ -223,6 +225,7 @@ public class AnalysisReceiveOrder485 {
data = data.substring(0, 6) + "." + data.substring(6, 8); data = data.substring(0, 6) + "." + data.substring(6, 8);
} else { } else {
log.info("水表报文检验失败: " + dataStr); log.info("水表报文检验失败: " + dataStr);
return data;
} }
} else if (dataStr.length() == 18) { } else if (dataStr.length() == 18) {
String checkStr = dataStr.substring(0, dataStr.length() - 4);//检验报文 String checkStr = dataStr.substring(0, dataStr.length() - 4);//检验报文
@ -237,6 +240,7 @@ public class AnalysisReceiveOrder485 {
} }
} else { } else {
log.info("水表报文检验失败: " + dataStr); log.info("水表报文检验失败: " + dataStr);
return data;
} }
} }
log.info("水表表号: " + meterId + ",水表读数:" + data); log.info("水表表号: " + meterId + ",水表读数:" + data);
@ -516,6 +520,7 @@ public class AnalysisReceiveOrder485 {
} }
} else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { } else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) {
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! ");
return Constant.SUCCESS;
} }
rtData = sValue; rtData = sValue;
} else if (brand.equals("美的2")) { } else if (brand.equals("美的2")) {
@ -588,6 +593,7 @@ public class AnalysisReceiveOrder485 {
rtData = sValue; rtData = sValue;
} else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) { } else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) {
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! ");
return Constant.SUCCESS;
} }
} else if (brand.equals("瑞星")) { } else if (brand.equals("瑞星")) {
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读 if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读
@ -651,6 +657,7 @@ public class AnalysisReceiveOrder485 {
} }
} else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { } else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) {
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! ");
return Constant.SUCCESS;
} }
rtData = sValue; rtData = sValue;
} }

46
user-service/src/test/java/com/mh/user/TestJwtUtils.java

@ -1,10 +1,15 @@
package com.mh.user; package com.mh.user;
import com.alibaba.fastjson2.JSONObject;
import com.mh.user.model.SysUser; import com.mh.user.model.SysUser;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.SignatureAlgorithm;
import sun.security.provider.MD5;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -136,24 +141,39 @@ public class TestJwtUtils {
*/ */
public static void main(String[] args) { public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("no", "abc");
jsonObject.put("model", 1);
jsonObject.put("scheme", 202);
String inputString = "85b5cebb6132a189570d51bf5e34d93c"+jsonObject.toJSONString();
SysUser user = new SysUser(); try {
user.setId((long) 1); // 获取MessageDigest实例用于MD5算法
user.setUserName("admin"); MessageDigest md = MessageDigest.getInstance("MD5");
String token = generateJsonWebToken(user);
// 将输入字符串转换为字节数组并进行更新
byte[] messageBytes = inputString.getBytes();
md.update(messageBytes);
// 完成哈希计算并获取结果字节数组
byte[] digestBytes = md.digest();
System.out.println(token); // 将字节数组转换为大写的十六进制字符串表示形式
BigInteger no = new BigInteger(1, digestBytes);
String hashtext = no.toString(16);
Claims claims = checkJWT(token); // 如果生成的十六进制字符串长度小于32,则前面补0以达到32位
if (claims != null) { while (hashtext.length() < 32) {
String id = claims.get("id").toString(); hashtext = "0" + hashtext;
String name = claims.get("name").toString(); }
System.out.println("id:" + id); System.out.println("MD5 Hash: " + hashtext);
System.out.println("name:" + name);
} } catch (NoSuchAlgorithmException e) {
// 处理MD5算法不可用的情况
e.printStackTrace();
}
} }
} }

4
热水新增脚本.sql

@ -4,6 +4,10 @@ create index pump_set_pump_id_building_id on pump_set(pump_id, building_id);
create index now_data_building_id on pump_set(building_id); create index now_data_building_id on pump_set(building_id);
create index now_data_pump_id on pump_set(pump_id); create index now_data_pump_id on pump_set(pump_id);
-- 2023-12-19 添加偏差值
alter table device_install add deviation_value numeric(24,2) null;
exec sp_addextendedproperty N'MS_Description', N'偏差值', N'schema', N'dbo',N'table', N'device_install', N'column', N'deviation_value';
-- 2024-01-08 新增字段,waterLevel表 -- 2024-01-08 新增字段,waterLevel表
alter table waterLevel add device_addr varchar(32) not null default ''; alter table waterLevel add device_addr varchar(32) not null default '';
exec sp_addextendedproperty N'MS_Description', N'设备地址', N'schema', N'dbo',N'table', N'waterLevel', N'column', N'device_addr'; exec sp_addextendedproperty N'MS_Description', N'设备地址', N'schema', N'dbo',N'table', N'waterLevel', N'column', N'device_addr';

Loading…
Cancel
Save