diff --git a/user-service/src/main/java/com/mh/user/controller/TestController.java b/user-service/src/main/java/com/mh/user/controller/TestController.java index 3691070..a0289ce 100644 --- a/user-service/src/main/java/com/mh/user/controller/TestController.java +++ b/user-service/src/main/java/com/mh/user/controller/TestController.java @@ -1,17 +1,16 @@ package com.mh.user.controller; +import com.mh.common.utils.DateTimeUtils; import com.mh.user.constants.Constant; import com.mh.user.dynamic.datasource.DataSourceContextHolder; import com.mh.user.dynamic.datasource.DataSourceObject; import com.mh.user.entity.DBEntity; import com.mh.user.manage.QuartzManager; import com.mh.user.mapper.NowDataMapper; +import com.mh.user.serialport.SerialTool; import com.mh.user.service.NowDataService; import com.mh.user.service.SysUserService; -import com.mh.user.utils.AESUtil; -import com.mh.user.utils.AnalysisReceiveOrder485; -import com.mh.user.utils.GetReadOrder485; -import com.mh.user.utils.TimedTask2; +import com.mh.user.utils.*; import org.quartz.SchedulerException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; @@ -19,6 +18,9 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import purejavacomm.CommPort; +import purejavacomm.CommPortIdentifier; +import purejavacomm.PortInUseException; import javax.annotation.Resource; @@ -88,4 +90,79 @@ public class TestController { } + @GetMapping + public String testCollection(String type) throws Exception { + purejavacomm.SerialPort serialPort1 = null; + System.out.println("开始时间==>" + DateTimeUtils.getDateTime()); + String returnStr = "未采集到数据"; + Constant.WEB_FLAG = true; + try { + if ("0".equals(type)) { + // 采集水表 + // 采集水表 + try { + serialPort1 = SerialTool.openPort("COM12", + 2400, + purejavacomm.SerialPort.DATABITS_8, + purejavacomm.SerialPort.STOPBITS_1, + purejavacomm.SerialPort.PARITY_NONE); + } catch (PortInUseException e) { + System.out.println("进入异常==>"); + if (null != serialPort1) { + serialPort1.close(); + } + serialPort1 = SerialTool.openPort("COM12", + 2400, + purejavacomm.SerialPort.DATABITS_8, + purejavacomm.SerialPort.STOPBITS_1, + purejavacomm.SerialPort.PARITY_NONE); + } + //从串口读取数据 SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceType); + String sendStr = "FE FE FE 68 10 39 87 10 81 00 00 00 01 03 90 1F 00 7C 16".replace(" ",""); + SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort1, sendStr, "水表"); + Thread.sleep(888); + byte[] bytes = SerialTool.readFromPort(serialPort1); + assert bytes != null; + returnStr = ExchangeStringUtil.parseByte2HexStr(bytes); + System.out.println("控制读取回来的水表报文==>" + returnStr); + serialPort1.close(); + + } + if ("1".equals(type)) { + // 采集电表 + // 采集电表 + try { + serialPort1 = SerialTool.openPort("COM12", + 1200, + purejavacomm.SerialPort.DATABITS_8, + purejavacomm.SerialPort.STOPBITS_1, + purejavacomm.SerialPort.PARITY_EVEN); + } catch (Exception e) { + System.out.println("进入异常==>"); + if (null != serialPort1) { + serialPort1.close(); + } + serialPort1 = SerialTool.openPort("COM12", + 1200, + purejavacomm.SerialPort.DATABITS_8, + purejavacomm.SerialPort.STOPBITS_1, + purejavacomm.SerialPort.PARITY_EVEN); + } + //从串口读取数据 SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceType); + String sendStr = "FE FE FE 68 69 04 00 70 01 08 68 01 02 43 C3 BF 16".replace(" ",""); + SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort1, sendStr, "电表"); + Thread.sleep(888); + byte[] bytes = SerialTool.readFromPort(serialPort1); + assert bytes != null; + returnStr = ExchangeStringUtil.parseByte2HexStr(bytes); + System.out.println("控制读取回来的电表报文==>" + returnStr); + serialPort1.close(); + } + } finally { + Constant.WEB_FLAG = false; + } + System.out.println("结束时间==>" + DateTimeUtils.getDateTime()); + return returnStr; + } + } diff --git a/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java b/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java index 7b8b716..e9ce21d 100644 --- a/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java +++ b/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java @@ -5,13 +5,13 @@ import com.mh.user.entity.AddCronJobReq; import com.mh.user.manage.QuartzManager; import com.mh.user.serialport.SerialPortListener; import com.mh.user.serialport.SerialPortUtil; +import com.mh.user.serialport.SerialTool; import com.mh.user.service.DeviceCodeParamService; import com.mh.user.utils.CacheUtil; +import com.mh.user.utils.ExchangeStringUtil; import com.mh.user.utils.GetReadOrder485; -import com.mh.user.utils.TimedTask2; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @@ -44,6 +44,59 @@ public class CollectionLoopRunner implements ApplicationRunner { // Constant.WEB_FLAG=false; //恢复采集 // 初始化指令设备参数 initialDeviceCodeParams(); + // 模拟采集 + //simulationCollection(); + } + + private void simulationCollection() throws Exception { + purejavacomm.SerialPort serialPort1 = null; + do { + if (!Constant.WEB_FLAG) { + try { + // 采集水表 + serialPort1 = SerialTool.openPort("COM12", + 2400, + purejavacomm.SerialPort.DATABITS_8, + purejavacomm.SerialPort.STOPBITS_1, + purejavacomm.SerialPort.PARITY_NONE); + //从串口读取数据 SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceType); + // 81108739 + String sendStr = "FE FE FE 68 10 39 87 10 81 00 00 00 01 03 90 1F 00 7C 16".replace(" ", ""); + SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort1, sendStr, "水表"); + Thread.sleep(888); + byte[] bytes = SerialTool.readFromPort(serialPort1); + assert bytes != null; + String returnStr = ExchangeStringUtil.parseByte2HexStr(bytes); + System.out.println("响应报文==>" + returnStr); + serialPort1.close(); + if (!Constant.WEB_FLAG) { + continue; + } + // 采集电表 + serialPort1 = SerialTool.openPort("COM12", + 1200, + purejavacomm.SerialPort.DATABITS_8, + purejavacomm.SerialPort.STOPBITS_1, + purejavacomm.SerialPort.PARITY_EVEN); + //从串口读取数据 SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceType); + // 080170000469 + sendStr = "FE FE FE 68 69 04 00 70 01 08 68 01 02 43 C3 BF 16".replace(" ", ""); + SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort1, sendStr, "电表"); + Thread.sleep(888); + bytes = SerialTool.readFromPort(serialPort1); + assert bytes != null; + returnStr = ExchangeStringUtil.parseByte2HexStr(bytes); + System.out.println("响应报文==>" + returnStr); + serialPort1.close(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (null != serialPort1) { + serialPort1.close(); + } + } + } + } while (true); } private void initialDeviceCodeParams() { 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 7b197b2..e60f6ad 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 @@ -78,6 +78,9 @@ public class DealDataJob { Constant.FLAG = true; log.info("------Constant.WEB_FLAG==" + false + "------"); for (int i = 1; i <= 4; i++) { + if (!Constant.WEB_FLAG) { + break; + } String threadName; if (i == 1 || i == 3) { threadName = "1"; @@ -91,6 +94,9 @@ public class DealDataJob { } CountDownLatch countDownLatch = new CountDownLatch(10); for (int j = 1; j < 11; j++) { + if (!Constant.WEB_FLAG) { + break; + } SerialPortThread myThread = new SerialPortThread(); myThread.setName(threadName, String.valueOf(j), countDownLatch); Thread thread = new Thread(myThread); diff --git a/user-service/src/main/java/com/mh/user/mapper/NowDataMapper.java b/user-service/src/main/java/com/mh/user/mapper/NowDataMapper.java index f489425..f763403 100644 --- a/user-service/src/main/java/com/mh/user/mapper/NowDataMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/NowDataMapper.java @@ -237,8 +237,13 @@ public interface NowDataMapper { //初始化结束----------------------------------------------------------------------------------------- //求热泵平均温度 - @Select("select Convert(decimal(18,1),avg(CAST(water_temp as FLOAT))) from now_data where building_id=#{buildingId}") - String selectAve(@Param("buildingId") String buildingId); + @Select("") + String selectAve(@Param("buildingId") String buildingId, @Param("temp") Integer temp); //求单个热泵温度 @Select("select water_temp from now_data where pump_id=#{pumpId} and building_id=#{buildingId}") @@ -415,4 +420,7 @@ public interface NowDataMapper { @Param("seat") String seat, @Param("buildingId") String buildingId, @Param("curDate") String curDate); + + @Select("select count(1) from now_data where pump_name like '%热泵%' ") + int selectPumpCount(@Param("buildingId") String buildingId); } diff --git a/user-service/src/main/java/com/mh/user/mapper/NowPublicDataMapper.java b/user-service/src/main/java/com/mh/user/mapper/NowPublicDataMapper.java index 900705a..18b904f 100644 --- a/user-service/src/main/java/com/mh/user/mapper/NowPublicDataMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/NowPublicDataMapper.java @@ -87,7 +87,7 @@ public interface NowPublicDataMapper { @Result(property ="singleTemp",column ="single_temp"), @Result(property ="avgTemp",column ="use_water_temp") }) - @Select("select building_id,building_name,use_water_temp,single_temp from now_public_data") + @Select("select building_id,building_name,use_water_temp+3,single_temp+3 from now_public_data order by building_id ") List queryWtTemp(); //查询单个楼栋水箱平均温度 diff --git a/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java b/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java index fc4ba62..a351e23 100644 --- a/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java +++ b/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java @@ -70,7 +70,7 @@ public class SerialPortSendReceive2 { String comName = deviceManageEntityList.get(i).getDataCom(); if (StringUtils.isBlank(comName)) { - Constant.WEB_FLAG = false;//可以采集的状态 + Constant.FLAG = false;//可以采集的状态 log.info("-------------串口:" + comName + "不存在!-------------"); continue; } @@ -101,7 +101,7 @@ public class SerialPortSendReceive2 { continue; } } catch (Exception e) { - Constant.WEB_FLAG = false;//可以采集的状态 + Constant.FLAG = false;//可以采集的状态 log.error("发送窗口数据异常==>", e); } @@ -111,7 +111,7 @@ public class SerialPortSendReceive2 { SerialTool.closePort(serialPort); log.info("串口" + serialPort + "没有数据返回!" + i); log.info("----------------" + deviceType + "离线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------"); - Constant.WEB_FLAG = false;//可以采集的状态 + Constant.FLAG = false;//可以采集的状态 String time1 = deviceInstallService.selectLastDate(deviceType, deviceAddr, buildingId); Date date1 = new Date(); String time2 = DateUtil.dateToString(date1, "yyyy-MM-dd HH:mm:ss");; @@ -132,7 +132,7 @@ public class SerialPortSendReceive2 { dealReceiveData(dateStr, serialPort, i, deviceAddr, deviceType, registerAddr, brand, buildingId, buildingName, bytes); } } catch (Exception e) { - Constant.WEB_FLAG = false;//可以采集的状态 + Constant.FLAG = false;//可以采集的状态 log.error("-------------串口采集异常!----------->>", e); } } 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 2a84bea..3b87334 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 @@ -51,7 +51,11 @@ public class SerialPortSingle2 { if (serialPort != null) { String sendStr = SendOrderUtils.getSendStr(deviceCodeParamEntity); SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceCodeParamEntity.getDeviceType()); - Thread.sleep(2000); + if (deviceCodeParamEntity.getDeviceType().equals("热泵")) { + Thread.sleep(4000); + } else { + Thread.sleep(2000); + } } } catch (Exception e) { log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口", e); diff --git a/user-service/src/main/java/com/mh/user/serialport/SerialTool.java b/user-service/src/main/java/com/mh/user/serialport/SerialTool.java index 5cf9bc8..16d8961 100644 --- a/user-service/src/main/java/com/mh/user/serialport/SerialTool.java +++ b/user-service/src/main/java/com/mh/user/serialport/SerialTool.java @@ -84,8 +84,6 @@ public class SerialTool { throw e; } return serialPort; - } else { - throw new Exception(); } } catch (NoSuchPortException e) { @@ -95,6 +93,7 @@ public class SerialTool { log.error("串口使用中:",e); throw e; } + return null; } diff --git a/user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java index 62a88c0..5a37e33 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java @@ -363,7 +363,12 @@ public class NowDataServiceImpl implements NowDataService { //从监视表查询热泵温度平均值 @Override public String selectAve(String buildingId) { - return nowDataMapper.selectAve(buildingId); +// int pumpCount = nowDataMapper.selectPumpCount(buildingId); +// Integer temp = null; +// if (pumpCount > 1) { +// temp = 40; +// } + return nowDataMapper.selectAve(buildingId, null); } @Override diff --git a/user-service/src/main/java/com/mh/user/utils/ComThreadPoolService.java b/user-service/src/main/java/com/mh/user/utils/ComThreadPoolService.java index 5c37ea4..d5ab75a 100644 --- a/user-service/src/main/java/com/mh/user/utils/ComThreadPoolService.java +++ b/user-service/src/main/java/com/mh/user/utils/ComThreadPoolService.java @@ -17,13 +17,13 @@ public class ComThreadPoolService { public static final int CORE_POOL_SIZE = 11; /** 线程池最大线程数 */ - public static final int MAX_POOL_SIZE = 50; + public static final int MAX_POOL_SIZE = 20; /** 空闲线程回收时间 */ public static final int KEEP_ALIVE_TIME = 30000; /** 线程池等待队列 */ - public static final int BLOCKING_QUEUE_SIZE = 500; + public static final int BLOCKING_QUEUE_SIZE = 100; // 私有化构造器 private ComThreadPoolService(){}