diff --git a/user-service/src/main/java/com/mh/user/job/DealDataJob.java b/user-service/src/main/java/com/mh/user/job/DealDataJob.java index 0a398e4..f6e1b95 100644 --- a/user-service/src/main/java/com/mh/user/job/DealDataJob.java +++ b/user-service/src/main/java/com/mh/user/job/DealDataJob.java @@ -1,9 +1,11 @@ package com.mh.user.job; import com.mh.user.constants.Constant; +import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.serialport.SerialPortThread; import com.mh.user.service.DeviceCodeParamService; import com.mh.user.service.DealDataService; +import com.mh.user.utils.CacheUtil; import com.mh.user.utils.ComThreadPoolService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -12,8 +14,11 @@ import org.springframework.stereotype.Component; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; +import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ThreadPoolExecutor; +import java.util.stream.Collectors; /** * @author ljf @@ -74,6 +79,7 @@ public class DealDataJob { if (!Constant.WEB_FLAG) { Constant.FLAG = true; log.info("------Constant.WEB_FLAG==" + false + "------"); + CacheUtil cacheUtil = CacheUtil.getInstance(); for (int i = 1; i <= 4; i++) { if (Constant.WEB_FLAG) { break; @@ -89,13 +95,19 @@ public class DealDataJob { threadName = "3"; log.info("------采集设定温度、设定水位、故障状态!" + i + "------"); } - CountDownLatch countDownLatch = new CountDownLatch(10); - for (int j = 1; j < 11; j++) { + // 从缓存中获取到对应的采集内容 + List deviceParamsByType = cacheUtil.getDeviceParamsByType(threadName); + // 分组data_com + Map> 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) { break; } + // 获取data_com口 + String dataCom = dataComMap.keySet().toArray(new String[0])[j]; SerialPortThread myThread = new SerialPortThread(); - myThread.setName(threadName, String.valueOf(j), countDownLatch); + myThread.setName(threadName, dataCom.toLowerCase().replace("com", ""), countDownLatch); Thread thread = new Thread(myThread); comThreadPool.execute(thread); } diff --git a/user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java b/user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java index 257af2c..fc55ae6 100644 --- a/user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java +++ b/user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java @@ -113,7 +113,7 @@ public class SerialPortSingle2 { } } 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); } else if ((dataStr.length() == 36 || dataStr.length() == 44 || dataStr.length() == 40 || dataStr.length() == 50) && deviceType.equals("电表")) { rtData = analysisReceiveOrder485.analysisMeterOrder4852(dataStr, registerAddr, brand, buildingId, buildingName); diff --git a/user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java index b7410e8..a305608 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java +++ b/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")) && !rtData.equals(Constant.FAIL)) { deviceCodeParam.setFunCode("06"); + log.info("开启热泵定时==>{}", deviceCodeParam.getParam() + deviceCodeParam.getRegisterAddr()); // 开启热泵定时 if ("0028".equals(deviceCodeParam.getRegisterAddr())) { deviceCodeParam.setRegisterAddr("00230001"); @@ -143,7 +144,7 @@ public class DeviceControlServiceImpl implements DeviceControlService { rtData = serialPortSingle.serialPortSend(deviceCodeParam); // 要添加校准值 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(); } return rtData; diff --git a/user-service/src/main/java/com/mh/user/service/impl/DeviceInstallServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/DeviceInstallServiceImpl.java index dce1a1e..e750a16 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/DeviceInstallServiceImpl.java +++ b/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(); BeanUtils.copyProperties(deviceInstallEntity,deviceCodeParamEntity); deviceCodeParamEntity.setBaudrate(deviceInstallEntity.getBaudRate()); - deviceCodeParamEntity.setThread(String.valueOf(new Random().nextInt(10))); + deviceCodeParamEntity.setThread(deviceInstallEntity.getDataCom().toLowerCase().replace("com","")); // 顺便生成采集信息 switch (deviceInstallEntity.getDeviceType()) { case "压变": diff --git a/user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java b/user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java index a33b03e..b062d01 100644 --- a/user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java +++ b/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.mh.common.utils.StringUtils; +import com.mh.user.constants.Constant; import com.mh.user.entity.*; import com.mh.user.service.*; import lombok.extern.slf4j.Slf4j; @@ -205,7 +206,8 @@ public class AnalysisReceiveOrder485 { Date date = new Date(); String data = ""; 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 checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 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); } else { log.info("水表报文检验失败: " + dataStr); + return data; } } else if (dataStr.length() == 18) { String checkStr = dataStr.substring(0, dataStr.length() - 4);//检验报文 @@ -237,6 +240,7 @@ public class AnalysisReceiveOrder485 { } } else { log.info("水表报文检验失败: " + dataStr); + return data; } } log.info("水表表号: " + meterId + ",水表读数:" + data); @@ -516,6 +520,7 @@ public class AnalysisReceiveOrder485 { } } else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); + return Constant.SUCCESS; } rtData = sValue; } else if (brand.equals("美的2")) { @@ -588,6 +593,7 @@ public class AnalysisReceiveOrder485 { rtData = sValue; } else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) { log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); + return Constant.SUCCESS; } } else if (brand.equals("瑞星")) { if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读 @@ -651,6 +657,7 @@ public class AnalysisReceiveOrder485 { } } else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); + return Constant.SUCCESS; } rtData = sValue; } diff --git a/user-service/src/test/java/com/mh/user/TestJwtUtils.java b/user-service/src/test/java/com/mh/user/TestJwtUtils.java index 8a57372..e26a303 100644 --- a/user-service/src/test/java/com/mh/user/TestJwtUtils.java +++ b/user-service/src/test/java/com/mh/user/TestJwtUtils.java @@ -1,10 +1,15 @@ package com.mh.user; +import com.alibaba.fastjson2.JSONObject; import com.mh.user.model.SysUser; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; 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.HashMap; import java.util.Map; @@ -136,24 +141,39 @@ public class TestJwtUtils { */ 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(); - user.setId((long) 1); - user.setUserName("admin"); - String token = generateJsonWebToken(user); + try { + // 获取MessageDigest实例用于MD5算法 + MessageDigest md = MessageDigest.getInstance("MD5"); + + // 将输入字符串转换为字节数组并进行更新 + 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); - if (claims != null) { - String id = claims.get("id").toString(); - String name = claims.get("name").toString(); + // 如果生成的十六进制字符串长度小于32,则前面补0以达到32位 + while (hashtext.length() < 32) { + hashtext = "0" + hashtext; + } - System.out.println("id:" + id); - System.out.println("name:" + name); + System.out.println("MD5 Hash: " + hashtext); - } + } catch (NoSuchAlgorithmException e) { + // 处理MD5算法不可用的情况 + e.printStackTrace(); + } - } + } } diff --git a/热水新增脚本.sql b/热水新增脚本.sql index 829c418..33e530d 100644 --- a/热水新增脚本.sql +++ b/热水新增脚本.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_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表 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';