Browse Source

1、设备更换,动态添加采集指令以及增加校验位;2、增加时控校验;3、增加瑞星热泵时钟校验;

prod_202403
mh 8 months ago
parent
commit
19248479eb
  1. 16
      user-service/pom.xml
  2. 1
      user-service/src/main/java/com/mh/user/UserServiceApplication.java
  3. 182
      user-service/src/main/java/com/mh/user/aspect/DaoAspect.java
  4. 1
      user-service/src/main/java/com/mh/user/config/QuartzConfig.java
  5. 5
      user-service/src/main/java/com/mh/user/controller/DeviceInstallController.java
  6. 2
      user-service/src/main/java/com/mh/user/controller/SerialPortController.java
  7. 5
      user-service/src/main/java/com/mh/user/entity/DeviceInstallEntity.java
  8. 1
      user-service/src/main/java/com/mh/user/entity/WaterLevelEntity.java
  9. 3
      user-service/src/main/java/com/mh/user/job/DealDataJob.java
  10. 15
      user-service/src/main/java/com/mh/user/mapper/DeviceCodeParamMapper.java
  11. 12
      user-service/src/main/java/com/mh/user/mapper/DeviceInstallMapper.java
  12. 7
      user-service/src/main/java/com/mh/user/mapper/NowDataMapper.java
  13. 558
      user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive.java
  14. 4
      user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java
  15. 436
      user-service/src/main/java/com/mh/user/serialport/SerialPortSingle.java
  16. 15
      user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java
  17. 2
      user-service/src/main/java/com/mh/user/service/DeviceInstallService.java
  18. 2
      user-service/src/main/java/com/mh/user/service/NowDataService.java
  19. 56
      user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java
  20. 19
      user-service/src/main/java/com/mh/user/service/impl/DeviceInstallServiceImpl.java
  21. 4
      user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java
  22. 21
      user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java
  23. 7
      user-service/src/main/java/com/mh/user/utils/CacheUtil.java
  24. 34
      user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java
  25. 204
      user-service/src/main/java/com/mh/user/utils/TimedTask2.java
  26. 6
      user-service/src/main/resources/application-dev.yml
  27. 18
      user-service/src/main/resources/application-prod.yml
  28. 15
      user-service/src/test/java/com/mh/user/UserServiceApplicationTests.java
  29. 7
      热水新增脚本.sql

16
user-service/pom.xml

@ -36,11 +36,11 @@
<artifactId>spring-boot-starter-quartz</artifactId> <artifactId>spring-boot-starter-quartz</artifactId>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config --> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config -->
<dependency> <!-- <dependency>-->
<groupId>org.springframework.cloud</groupId> <!-- <groupId>org.springframework.cloud</groupId>-->
<artifactId>spring-cloud-starter-config</artifactId> <!-- <artifactId>spring-cloud-starter-config</artifactId>-->
<version>2.2.2.RELEASE</version> <!-- <version>2.2.2.RELEASE</version>-->
</dependency> <!-- </dependency>-->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
@ -142,6 +142,12 @@
<version>2.8.8</version> <version>2.8.8</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
</dependencies> </dependencies>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>

1
user-service/src/main/java/com/mh/user/UserServiceApplication.java

@ -3,7 +3,6 @@ package com.mh.user;
import com.mh.user.job.CollectionLoopRunner; import com.mh.user.job.CollectionLoopRunner;
import com.mh.user.serialport.SerialPortListener; import com.mh.user.serialport.SerialPortListener;
import com.mh.user.serialport.SerialPortUtil; import com.mh.user.serialport.SerialPortUtil;
import com.mh.user.utils.TimedTask2;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.builder.SpringApplicationBuilder;

182
user-service/src/main/java/com/mh/user/aspect/DaoAspect.java

@ -1,91 +1,91 @@
package com.mh.user.aspect; //package com.mh.user.aspect;
//
import java.util.Date; //import java.util.Date;
//
import javax.servlet.http.HttpServletRequest; //import javax.servlet.http.HttpServletRequest;
//
import com.mh.common.utils.StringUtils; //import com.mh.common.utils.StringUtils;
import com.mh.user.utils.SecurityUtils; //import com.mh.user.utils.SecurityUtils;
import org.apache.commons.beanutils.BeanUtils; //import org.apache.commons.beanutils.BeanUtils;
import org.aspectj.lang.ProceedingJoinPoint; //import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; //import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect; //import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut; //import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.Configuration; //import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component; //import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder; //import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; //import org.springframework.web.context.request.ServletRequestAttributes;
//
/** ///**
* DAO切面插入创建人创建时间修改人修改时间 // * DAO切面,插入创建人,创建时间,修改人,修改时间
* @author Louis // * @author Louis
* @date Oct 29, 2018 // * @date Oct 29, 2018
*/ // */
@Aspect //@Aspect
@Component //@Component
@Configuration //@Configuration
public class DaoAspect { //public class DaoAspect {
private static final String createBy = "createBy"; // private static final String createBy = "createBy";
private static final String createTime = "createTime"; // private static final String createTime = "createTime";
private static final String lastUpdateBy = "lastUpdateBy"; // private static final String lastUpdateBy = "lastUpdateBy";
private static final String lastUpdateTime = "lastUpdateTime"; // private static final String lastUpdateTime = "lastUpdateTime";
//
@Pointcut("execution(* com.mh.*.mapper.*.update*(..))") // @Pointcut("execution(* com.mh.*.mapper.*.update*(..))")
public void daoUpdate() { // public void daoUpdate() {
} // }
//
@Pointcut("execution(* com.mh.*.mapper.*.insert*(..))") // @Pointcut("execution(* com.mh.*.mapper.*.insert*(..))")
public void daoCreate() { // public void daoCreate() {
} // }
//
@Around("daoUpdate()") // @Around("daoUpdate()")
public Object doAroundUpdate(ProceedingJoinPoint pjp) throws Throwable { // public Object doAroundUpdate(ProceedingJoinPoint pjp) throws Throwable {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); // ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes == null) { // if (attributes == null) {
return pjp.proceed(); // return pjp.proceed();
} // }
HttpServletRequest request = attributes.getRequest(); // HttpServletRequest request = attributes.getRequest();
String token = request.getHeader("token"); // String token = request.getHeader("token");
String username = getUserName(); // String username = getUserName();
if (token != null && username != null) { // if (token != null && username != null) {
Object[] objects = pjp.getArgs(); // Object[] objects = pjp.getArgs();
if (objects != null && objects.length > 0) { // if (objects != null && objects.length > 0) {
for (Object arg : objects) { // for (Object arg : objects) {
BeanUtils.setProperty(arg, lastUpdateBy, username); // BeanUtils.setProperty(arg, lastUpdateBy, username);
BeanUtils.setProperty(arg, lastUpdateTime, new Date()); // BeanUtils.setProperty(arg, lastUpdateTime, new Date());
} // }
} // }
} // }
Object object = pjp.proceed(); // Object object = pjp.proceed();
return object; // return object;
//
} // }
//
@Around("daoCreate()") // @Around("daoCreate()")
public Object doAroundCreate(ProceedingJoinPoint pjp) throws Throwable { // public Object doAroundCreate(ProceedingJoinPoint pjp) throws Throwable {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); // ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes == null) { // if (attributes == null) {
return pjp.proceed(); // return pjp.proceed();
} // }
Object[] objects = pjp.getArgs(); // Object[] objects = pjp.getArgs();
if (objects != null && objects.length > 0) { // if (objects != null && objects.length > 0) {
for (Object arg : objects) { // for (Object arg : objects) {
String username = getUserName(); // String username = getUserName();
if (username != null) { // if (username != null) {
if (StringUtils.isBlank(BeanUtils.getProperty(arg, createBy))) { // if (StringUtils.isBlank(BeanUtils.getProperty(arg, createBy))) {
BeanUtils.setProperty(arg, createBy, username); // BeanUtils.setProperty(arg, createBy, username);
} // }
if (StringUtils.isBlank(BeanUtils.getProperty(arg, createTime))) { // if (StringUtils.isBlank(BeanUtils.getProperty(arg, createTime))) {
BeanUtils.setProperty(arg, createTime, new Date()); // BeanUtils.setProperty(arg, createTime, new Date());
} // }
} // }
} // }
} // }
Object object = pjp.proceed(); // Object object = pjp.proceed();
return object; // return object;
} // }
//
private String getUserName() { // private String getUserName() {
return SecurityUtils.getUsername(); // return SecurityUtils.getUsername();
} // }
} //}

1
user-service/src/main/java/com/mh/user/config/QuartzConfig.java

@ -1,7 +1,6 @@
package com.mh.user.config; package com.mh.user.config;
import com.mh.user.job.JobFactory; import com.mh.user.job.JobFactory;
import com.mh.user.utils.TimedTask2;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.quartz.Scheduler; import org.quartz.Scheduler;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;

5
user-service/src/main/java/com/mh/user/controller/DeviceInstallController.java

@ -1,6 +1,7 @@
package com.mh.user.controller; package com.mh.user.controller;
import com.mh.common.http.HttpResult; import com.mh.common.http.HttpResult;
import com.mh.common.utils.StringUtils;
import com.mh.user.annotation.BusinessType; import com.mh.user.annotation.BusinessType;
import com.mh.user.annotation.SysLogger; import com.mh.user.annotation.SysLogger;
import com.mh.user.entity.BuildingEntity; import com.mh.user.entity.BuildingEntity;
@ -55,6 +56,10 @@ public class DeviceInstallController {
DeviceInstallEntity oldEntity = deviceInstallService.selectDeviceById(deviceInstallEntity.getId()); DeviceInstallEntity oldEntity = deviceInstallService.selectDeviceById(deviceInstallEntity.getId());
// 删除全部的device_code_param值 // 删除全部的device_code_param值
deviceInstallService.deleteParamCode(oldEntity); deviceInstallService.deleteParamCode(oldEntity);
// 设置校验位
if (StringUtils.isBlank(deviceInstallEntity.getParity())) {
deviceInstallEntity.setParity(oldEntity.getParity());
}
// 在创建新的device_code_param值 // 在创建新的device_code_param值
deviceInstallService.createParamCode(deviceInstallEntity); deviceInstallService.createParamCode(deviceInstallEntity);
// 更新device_install // 更新device_install

2
user-service/src/main/java/com/mh/user/controller/SerialPortController.java

@ -11,8 +11,6 @@ import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.entity.PumpSetEntity; import com.mh.user.entity.PumpSetEntity;
import com.mh.user.model.DeviceModel; import com.mh.user.model.DeviceModel;
import com.mh.user.model.SerialPortModel; import com.mh.user.model.SerialPortModel;
import com.mh.user.serialport.SerialPortSendReceive;
import com.mh.user.serialport.SerialPortSingle;
import com.mh.user.serialport.SerialPortSingle2; import com.mh.user.serialport.SerialPortSingle2;
import com.mh.user.service.ControlSetService; import com.mh.user.service.ControlSetService;
import com.mh.user.service.DeviceInstallService; import com.mh.user.service.DeviceInstallService;

5
user-service/src/main/java/com/mh/user/entity/DeviceInstallEntity.java

@ -32,5 +32,10 @@ public class DeviceInstallEntity {
private String remarks; private String remarks;
private double dayValue; private double dayValue;
private double deviationValue; private double deviationValue;
private int isUse;
private int isFault;
private String seat;
} }

1
user-service/src/main/java/com/mh/user/entity/WaterLevelEntity.java

@ -10,6 +10,7 @@ public class WaterLevelEntity {
private Date curDate; private Date curDate;
private String buildingID; private String buildingID;
private String buildingName; private String buildingName;
private String deviceName;
private String level00; private String level00;
private String level02; private String level02;
private String level08; private String level08;

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

@ -1,13 +1,10 @@
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.serialport.SerialPortSendReceive;
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.AnalysisReceiveOrder485;
import com.mh.user.utils.ComThreadPoolService; import com.mh.user.utils.ComThreadPoolService;
import com.mh.user.utils.GetReadOrder485;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;

15
user-service/src/main/java/com/mh/user/mapper/DeviceCodeParamMapper.java

@ -101,11 +101,12 @@ public interface DeviceCodeParamMapper {
"register_addr," + "register_addr," +
"create_time," + "create_time," +
"building_id," + "building_id," +
"parity" + "parity," +
"thread" +
")" + ")" +
"values " + "values " +
"<foreach collection='deviceCodeParamEntityList' item='item' separator=','>" + "<foreach collection='deviceCodeParamEntityList' item='item' separator=','>" +
"(#{item.deviceAddr},#{item.deviceName},#{item.deviceType},#{item.dataCom},#{item.baudrate},#{item.brand},#{item.funCode},#{item.registerAddr},getDate(),#{item.buildingId},#{item.parity})" + "(#{item.deviceAddr},#{item.deviceName},#{item.deviceType},#{item.dataCom},#{item.baudrate},#{item.brand},#{item.funCode},#{item.registerAddr},getDate(),#{item.buildingId},#{item.parity},#{item.thread})" +
"</foreach>" + "</foreach>" +
"</script>") "</script>")
void insertDeviceCodeParamList(@Param("deviceCodeParamEntityList") List<DeviceCodeParamEntity> deviceCodeParamEntityList); void insertDeviceCodeParamList(@Param("deviceCodeParamEntityList") List<DeviceCodeParamEntity> deviceCodeParamEntityList);
@ -123,11 +124,12 @@ public interface DeviceCodeParamMapper {
"register_addr," + "register_addr," +
"create_time," + "create_time," +
"building_id," + "building_id," +
"parity" + "parity," +
"thread" +
")" + ")" +
"values " + "values " +
"<foreach collection='deviceCodeParamEntityList' item='item' separator=','>" + "<foreach collection='deviceCodeParamEntityList' item='item' separator=','>" +
"(#{item.deviceAddr},#{item.deviceName},#{item.deviceType},#{item.dataCom},#{item.baudrate},#{item.brand},#{item.funCode},#{item.registerAddr},getDate(),#{item.buildingId},#{item.parity})" + "(#{item.deviceAddr},#{item.deviceName},#{item.deviceType},#{item.dataCom},#{item.baudrate},#{item.brand},#{item.funCode},#{item.registerAddr},getDate(),#{item.buildingId},#{item.parity},#{item.thread})" +
"</foreach>" + "</foreach>" +
"</script>") "</script>")
void insertDeviceCodeParamList2(@Param("deviceCodeParamEntityList") List<DeviceCodeParamEntity> deviceCodeParamEntityList); void insertDeviceCodeParamList2(@Param("deviceCodeParamEntityList") List<DeviceCodeParamEntity> deviceCodeParamEntityList);
@ -145,11 +147,12 @@ public interface DeviceCodeParamMapper {
"register_addr," + "register_addr," +
"create_time," + "create_time," +
"building_id," + "building_id," +
"parity" + "parity," +
"thread" +
")" + ")" +
"values " + "values " +
"<foreach collection='deviceCodeParamEntityList' item='item' separator=','>" + "<foreach collection='deviceCodeParamEntityList' item='item' separator=','>" +
"(#{item.deviceAddr},#{item.deviceName},#{item.deviceType},#{item.dataCom},#{item.baudrate},#{item.brand},#{item.funCode},#{item.registerAddr},getDate(),#{item.buildingId},#{item.parity})" + "(#{item.deviceAddr},#{item.deviceName},#{item.deviceType},#{item.dataCom},#{item.baudrate},#{item.brand},#{item.funCode},#{item.registerAddr},getDate(),#{item.buildingId},#{item.parity},#{item.thread})" +
"</foreach>" + "</foreach>" +
"</script>") "</script>")
void insertDeviceCodeParamList3(@Param("deviceCodeParamEntityList") List<DeviceCodeParamEntity> deviceCodeParamEntityList); void insertDeviceCodeParamList3(@Param("deviceCodeParamEntityList") List<DeviceCodeParamEntity> deviceCodeParamEntityList);

12
user-service/src/main/java/com/mh/user/mapper/DeviceInstallMapper.java

@ -6,11 +6,13 @@ import com.mh.user.mapper.provider.DeviceInstallProvider;
import com.mh.user.model.DeviceModel; import com.mh.user.model.DeviceModel;
import org.apache.ibatis.annotations.*; import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.StatementType; import org.apache.ibatis.mapping.StatementType;
import tk.mybatis.mapper.common.BaseMapper;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@Mapper @Mapper
public interface DeviceInstallMapper { public interface DeviceInstallMapper extends BaseMapper<DeviceInstallEntity> {
/** /**
* 设备安装模块 * 设备安装模块
@ -41,6 +43,7 @@ public interface DeviceInstallMapper {
" <if test='installer!=null'> , installer = #{installer} </if>" + " <if test='installer!=null'> , installer = #{installer} </if>" +
" <if test='buildingId!=null'> , building_id = #{buildingId} </if>" + " <if test='buildingId!=null'> , building_id = #{buildingId} </if>" +
" <if test='remarks!=null'> , remarks = #{remarks} </if>" + " <if test='remarks!=null'> , remarks = #{remarks} </if>" +
" <if test='parity!=null'> , parity = #{parity} </if>" +
" where id = #{id} " + " where id = #{id} " +
"</script>") "</script>")
int updateDevice(DeviceInstallEntity deviceInstallEntity); int updateDevice(DeviceInstallEntity deviceInstallEntity);
@ -320,6 +323,13 @@ public interface DeviceInstallMapper {
@Param("deviceType") String deviceType, @Param("deviceType") String deviceType,
@Param("buildingId") String buildingId); @Param("buildingId") String buildingId);
@ResultMap("rs")
@Select("select * from device_install where id = #{id} ") @Select("select * from device_install where id = #{id} ")
DeviceInstallEntity selectDeviceById(@Param("id") Long id); DeviceInstallEntity selectDeviceById(@Param("id") Long id);
@Update("update device_install set last_value = #{lastValue}, last_date = getdate() where device_addr = #{deviceAddr} and building_id = #{buildingId} and device_type = #{deviceType} ")
void updateLastValueByOther(@Param("deviceAddr") String addr,
@Param("lastValue") String strWtLevel,
@Param("deviceType") String deviceType,
@Param("buildingId") String buildingId);
} }

7
user-service/src/main/java/com/mh/user/mapper/NowDataMapper.java

@ -176,7 +176,8 @@ public interface NowDataMapper {
@Results({ @Results({
@Result(property="curDate",column="cur_date"), @Result(property="curDate",column="cur_date"),
@Result(property="buildingID",column="building_id"), @Result(property="buildingID",column="building_id"),
@Result(property="buildingName",column="building_name") @Result(property="buildingName",column="building_name"),
@Result(property="deviceName",column="device_name")
}) })
@SelectProvider(type = NowDataProvider.class,method = "queryBuildWaterLevel") @SelectProvider(type = NowDataProvider.class,method = "queryBuildWaterLevel")
List<WaterLevelEntity> queryBuildWaterLevel(@Param("curDate") String curDate, List<WaterLevelEntity> queryBuildWaterLevel(@Param("curDate") String curDate,
@ -305,9 +306,9 @@ public interface NowDataMapper {
void proWaterTemp(@Param("curDate") String curDate,@Param("buildingID") String buildingID,@Param("pumpID") String pumpID); void proWaterTemp(@Param("curDate") String curDate,@Param("buildingID") String buildingID,@Param("pumpID") String pumpID);
//生成楼栋水位 //生成楼栋水位
@Select("exec pro_waterLevel #{curDate,jdbcType=VARCHAR,mode=IN},#{buildingID,jdbcType=VARCHAR,mode=IN} ") @Select("exec pro_waterLevel #{curDate,jdbcType=VARCHAR,mode=IN},#{buildingID,jdbcType=VARCHAR,mode=IN}, #{deviceAddr,jdbcType=VARCHAR,mode=IN} ")
@Options(statementType = StatementType.CALLABLE) @Options(statementType = StatementType.CALLABLE)
void proWaterLevel(@Param("curDate") String curDate,@Param("buildingID") String buildingID); void proWaterLevel(@Param("curDate") String curDate,@Param("buildingID") String buildingID, @Param("deviceAddr") String deviceAddr);
//在没有接收到返回值前设置监控界面热泵是否离线 //在没有接收到返回值前设置监控界面热泵是否离线
@Update("update now_data set run_state=#{strState} where building_id=#{buildingId} and pump_id=#{pumpId}") @Update("update now_data set run_state=#{strState} where building_id=#{buildingId} and pump_id=#{pumpId}")

558
user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive.java

@ -1,281 +1,281 @@
package com.mh.user.serialport; //package com.mh.user.serialport;
//
import com.mh.user.constants.Constant; //import com.mh.user.constants.Constant;
import com.mh.user.entity.DeviceCodeParamEntity; //import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.service.BuildingService; //import com.mh.user.service.BuildingService;
import com.mh.user.service.DeviceCodeParamService; //import com.mh.user.service.DeviceCodeParamService;
import com.mh.user.service.DeviceInstallService; //import com.mh.user.service.DeviceInstallService;
import com.mh.user.service.NowDataService; //import com.mh.user.service.NowDataService;
import com.mh.user.utils.*; //import com.mh.user.utils.*;
import lombok.extern.slf4j.Slf4j; //import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext; //import org.springframework.context.ApplicationContext;
import gnu.io.SerialPort; //import gnu.io.SerialPort;
import java.nio.ByteBuffer; //import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets; //import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat; //import java.text.SimpleDateFormat;
import java.util.ArrayList; //import java.util.ArrayList;
import java.util.Date; //import java.util.Date;
import java.util.List; //import java.util.List;
//
/** ///**
* @author nxr // * @author nxr
* @title // * @title :
* @description 串口发送和接收处理,采集类 // * @description : 串口发送和接收处理,采集类
* @updateTime 2022-08-10 // * @updateTime 2022-08-10
* @throws // * @throws :
*/ // */
@Slf4j //@Slf4j
public class SerialPortSendReceive { //public class SerialPortSendReceive {
//
private String receiveStr = null; // private String receiveStr = null;
public SerialPort serialPort = null; // public SerialPort serialPort = null;
private int size = 0; // private int size = 0;
private int baudrate=9600; // private int baudrate=9600;
private String parity=null; // private String parity=null;
List<DeviceCodeParamEntity> deviceManageEntityList; // List<DeviceCodeParamEntity> deviceManageEntityList;
// 调用service // // 调用service
ApplicationContext context = SpringBeanUtil.getApplicationContext(); // ApplicationContext context = SpringBeanUtil.getApplicationContext();
DeviceCodeParamService deviceCodeParamService = context.getBean(DeviceCodeParamService.class); // DeviceCodeParamService deviceCodeParamService = context.getBean(DeviceCodeParamService.class);
DeviceInstallService deviceInstallService = context.getBean(DeviceInstallService.class); // DeviceInstallService deviceInstallService = context.getBean(DeviceInstallService.class);
NowDataService nowDataService = context.getBean(NowDataService.class); // NowDataService nowDataService = context.getBean(NowDataService.class);
BuildingService buildingService = context.getBean(BuildingService.class); // BuildingService buildingService = context.getBean(BuildingService.class);
AnalysisReceiveOrder485 analysisReceiveOrder485 = new AnalysisReceiveOrder485(); // AnalysisReceiveOrder485 analysisReceiveOrder485 = new AnalysisReceiveOrder485();
//
public void serialPortSend(String sort,String thread) { // public void serialPortSend(String sort,String thread) {
//查看所有串口 // //查看所有串口
SerialPortUtil serialPortUtil = SerialPortUtil.getSerialPortUtil(); // SerialPortUtil serialPortUtil = SerialPortUtil.getSerialPortUtil();
ArrayList<String> port = serialPortUtil.findPort();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String dateStr = df.format(date);
// SerialTool serialPortUtil = SerialTool.getSerialPortUtil();
// ArrayList<String> port = serialPortUtil.findPort(); // ArrayList<String> port = serialPortUtil.findPort();
// comName=comName.toUpperCase(); //转为大写 // SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// if (port.contains(comName)){ // Date date = new Date();
try{ // String dateStr = df.format(date);
//生成对应的采集指令 //
if (sort.equals("1")){ //水温、水位 //// SerialTool serialPortUtil = SerialTool.getSerialPortUtil();
deviceManageEntityList = deviceCodeParamService.queryCodeParam3(thread); //// ArrayList<String> port = serialPortUtil.findPort();
}else if (sort.equals("2")){ //采集水、电、运行状态! //// comName=comName.toUpperCase(); //转为大写
deviceManageEntityList = deviceCodeParamService.queryCodeParam4(thread); //// if (port.contains(comName)){
}else if (sort.equals("3")){ //采集设定温度、设定水位、故障状态! // try{
deviceManageEntityList = deviceCodeParamService.queryCodeParam5(thread); // //生成对应的采集指令
}else{ // if (sort.equals("1")){ //水温、水位
deviceManageEntityList = deviceCodeParamService.queryCodeParam3(thread); // deviceManageEntityList = deviceCodeParamService.queryCodeParam3(thread);
} // }else if (sort.equals("2")){ //采集水、电、运行状态!
size = deviceManageEntityList.size(); // deviceManageEntityList = deviceCodeParamService.queryCodeParam4(thread);
for (int i=0;i<size;i++){ // }else if (sort.equals("3")){ //采集设定温度、设定水位、故障状态!
//判断网页端是否有操作设备的 // deviceManageEntityList = deviceCodeParamService.queryCodeParam5(thread);
if (Constant.WEB_FLAG) { // }else{
Constant.FLAG=false; // deviceManageEntityList = deviceCodeParamService.queryCodeParam3(thread);
serialPortUtil.closePort(serialPort); // }
// Thread.sleep(2000); // size = deviceManageEntityList.size();
log.info("有指令下发退出定时采集"); // for (int i=0;i<size;i++){
break; // //判断网页端是否有操作设备的
} // if (Constant.WEB_FLAG) {
//获取设备实际波特率 // Constant.FLAG=false;
baudrate=deviceManageEntityList.get(i).getBaudrate(); // serialPortUtil.closePort(serialPort);
//获取设备实际校验位 //// Thread.sleep(2000);
parity=deviceManageEntityList.get(i).getParity(); // log.info("有指令下发退出定时采集");
String comName=deviceManageEntityList.get(i).getDataCom(); // break;
comName=comName.toUpperCase(); //转为大写 // }
if (port.contains(comName)){ // //获取设备实际波特率
String deviceAddr=deviceManageEntityList.get(i).getDeviceAddr(); // baudrate=deviceManageEntityList.get(i).getBaudrate();
String deviceType=deviceManageEntityList.get(i).getDeviceType(); // //获取设备实际校验位
String registerAddr=deviceManageEntityList.get(i).getRegisterAddr(); // parity=deviceManageEntityList.get(i).getParity();
String brand=deviceManageEntityList.get(i).getBrand();//品牌 // String comName=deviceManageEntityList.get(i).getDataCom();
String buildingId=deviceManageEntityList.get(i).getBuildingId(); // comName=comName.toUpperCase(); //转为大写
String buildingName=buildingService.queryBuildingName(buildingId); //查询楼栋名称 // if (port.contains(comName)){
try{ // String deviceAddr=deviceManageEntityList.get(i).getDeviceAddr();
//传入对应的串口参数并打开串口 // String deviceType=deviceManageEntityList.get(i).getDeviceType();
if (parity==null || parity.equals("") || parity.equalsIgnoreCase("none")){ // String registerAddr=deviceManageEntityList.get(i).getRegisterAddr();
serialPort = serialPortUtil.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.PARITY_NONE, SerialPort.PARITY_ODD); // String brand=deviceManageEntityList.get(i).getBrand();//品牌
}else{ // String buildingId=deviceManageEntityList.get(i).getBuildingId();
serialPort = serialPortUtil.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.PARITY_EVEN, SerialPort.PARITY_ODD); // String buildingName=buildingService.queryBuildingName(buildingId); //查询楼栋名称
} // try{
//向串口发送指令 // //传入对应的串口参数并打开串口
if (serialPort != null) { // if (parity==null || parity.equals("") || parity.equalsIgnoreCase("none")){
// log.info("---------波特率:"+baudrate+",校验位:"+parity+" -----------"); // serialPort = serialPortUtil.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.PARITY_NONE, SerialPort.PARITY_ODD);
SendOrderUtils.sendSerialPort(deviceManageEntityList.get(i), serialPort); // }else{
if (deviceType.equals("热泵")){ // serialPort = serialPortUtil.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.PARITY_EVEN, SerialPort.PARITY_ODD);
Thread.sleep(4000); // }
}else{ // //向串口发送指令
Thread.sleep(2000); // if (serialPort != null) {
} //// log.info("---------波特率:"+baudrate+",校验位:"+parity+" -----------");
}else{ // SendOrderUtils.sendSerialPort(deviceManageEntityList.get(i), serialPort);
continue; //continue时,跳出本次循环,继续执行下次循环。Break时,跳出循环(结束循环),执行下面的语句。 // if (deviceType.equals("热泵")){
} // Thread.sleep(4000);
}catch (Exception e){ // }else{
Constant.WEB_FLAG=false;//可以采集的状态 // Thread.sleep(2000);
if(i==size-1){ // }
Constant.FLAG=false; // }else{
} // continue; //continue时,跳出本次循环,继续执行下次循环。Break时,跳出循环(结束循环),执行下面的语句。
log.error("发送指令异常==>", e); // }
} // }catch (Exception e){
receiveStr=""; // Constant.WEB_FLAG=false;//可以采集的状态
//从串口读取数据 // if(i==size-1){
byte[] bytes= serialPortUtil.readFromPort(serialPort); // Constant.FLAG=false;
try { // }
String byteStr = new String(bytes, 0, bytes.length).trim(); // log.error("发送指令异常==>", e);
} catch (NullPointerException e) { // }
serialPortUtil.closePort(serialPort); // receiveStr="";
Thread.sleep(2000); // //从串口读取数据
log.info("串口"+serialPort+"没有数据返回!"+i); // byte[] bytes= serialPortUtil.readFromPort(serialPort);
log.info("----------------"+deviceType+"离线,设备号:"+deviceAddr+",所属楼栋:"+buildingName+"----------------"); // try {
Constant.WEB_FLAG=false;//可以采集的状态 // String byteStr = new String(bytes, 0, bytes.length).trim();
if(i==size-1){ // } catch (NullPointerException e) {
Constant.FLAG=false; // serialPortUtil.closePort(serialPort);
} // Thread.sleep(2000);
String time1=deviceInstallService.selectLastDate(deviceType,deviceAddr,buildingId); // log.info("串口"+serialPort+"没有数据返回!"+i);
Date date1=new Date(); // log.info("----------------"+deviceType+"离线,设备号:"+deviceAddr+",所属楼栋:"+buildingName+"----------------");
String time2=df.format(date1); // Constant.WEB_FLAG=false;//可以采集的状态
if (time1==null){ // if(i==size-1){
time1=df.format(date1); // Constant.FLAG=false;
} // }
int d= ExchangeStringUtil.compareCopyTime(time1,time2); // String time1=deviceInstallService.selectLastDate(deviceType,deviceAddr,buildingId);
if (d==1){ // Date date1=new Date();
deviceInstallService.updateNotOnline(deviceAddr,deviceType,buildingId,"离线"); //所有设备离线 // String time2=df.format(date1);
if (deviceType.equals("热泵")){ // if (time1==null){
nowDataService.updateRunState(buildingId,deviceAddr,"离线", buildingName); //监控界面状态表热泵在线状态 // time1=df.format(date1);
} // }
} // int d= ExchangeStringUtil.compareCopyTime(time1,time2);
continue; // if (d==1){
} // deviceInstallService.updateNotOnline(deviceAddr,deviceType,buildingId,"离线"); //所有设备离线
receiveStr = receiveStr + printHexString(bytes); // if (deviceType.equals("热泵")){
//去掉空格和null // nowDataService.updateRunState(buildingId,deviceAddr,"离线", buildingName); //监控界面状态表热泵在线状态
receiveStr = receiveStr.replace("null", ""); // }
receiveStr = receiveStr.replace(" ", ""); // }
log.info("串口"+serialPort+"接受第"+i+"数据:" + receiveStr + ",大小: " + receiveStr.length()); // continue;
try{ // }
serialPortUtil.closePort(serialPort); // receiveStr = receiveStr + printHexString(bytes);
log.info("关闭"+serialPort); // //去掉空格和null
}catch (Exception e){ // receiveStr = receiveStr.replace("null", "");
// e.printStackTrace(); // receiveStr = receiveStr.replace(" ", "");
Constant.WEB_FLAG=false;//可以采集的状态 // log.info("串口"+serialPort+"接受第"+i+"数据:" + receiveStr + ",大小: " + receiveStr.length());
if(i==size-1){ // try{
Constant.FLAG=false; // serialPortUtil.closePort(serialPort);
} // log.info("关闭"+serialPort);
log.error("关闭"+serialPort+"失败!"); // }catch (Exception e){
} //// e.printStackTrace();
//返回值全部变成大写 // Constant.WEB_FLAG=false;//可以采集的状态
String receiveData = receiveStr.toUpperCase(); // if(i==size-1){
//截取去掉FE // Constant.FLAG=false;
String dataStr; // }
if (receiveData.length()>8){ // log.error("关闭"+serialPort+"失败!");
String str1=receiveData.substring(0,8); // }
String str2=receiveData.substring(8); // //返回值全部变成大写
dataStr=str1.replace("FE", "")+str2; // String receiveData = receiveStr.toUpperCase();
}else{ // //截取去掉FE
dataStr = receiveData.replace("FE", ""); // String dataStr;
} // if (receiveData.length()>8){
deviceInstallService.updateOnline(deviceAddr,deviceType,buildingId,"在线"); //设备在线 // String str1=receiveData.substring(0,8);
log.info("----------------"+deviceType+"在线,设备号:"+deviceAddr+",所属楼栋:"+buildingName+"----------------"); // String str2=receiveData.substring(8);
if (deviceType.equals("热泵")){ // dataStr=str1.replace("FE", "")+str2;
String strState=nowDataService.selectState(buildingId,deviceAddr); // }else{
if (strState!=null && strState.equals("离线")){ //采集到数据 // dataStr = receiveData.replace("FE", "");
nowDataService.updateRunState(buildingId,deviceAddr,"不运行", buildingName); //监控界面状态表热泵在线状态 // }
} // deviceInstallService.updateOnline(deviceAddr,deviceType,buildingId,"在线"); //设备在线
} // log.info("----------------"+deviceType+"在线,设备号:"+deviceAddr+",所属楼栋:"+buildingName+"----------------");
try{ // if (deviceType.equals("热泵")){
SerialPortSendReceive2.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, dataStr, analysisReceiveOrder485, nowDataService, buildingName); // String strState=nowDataService.selectState(buildingId,deviceAddr);
}catch (Exception e){ // if (strState!=null && strState.equals("离线")){ //采集到数据
// e.printStackTrace(); // nowDataService.updateRunState(buildingId,deviceAddr,"不运行", buildingName); //监控界面状态表热泵在线状态
Constant.WEB_FLAG=false;//可以采集的状态 // }
if(i==size-1){ // }
Constant.FLAG=false; // try{
} // SerialPortSendReceive2.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, dataStr, analysisReceiveOrder485, nowDataService, buildingName);
log.error(deviceManageEntityList.get(i).getDeviceType()+"保存数据库失败!"+i); // }catch (Exception e){
} //// e.printStackTrace();
Thread.sleep(1000); // Constant.WEB_FLAG=false;//可以采集的状态
}else{ // if(i==size-1){
Constant.WEB_FLAG=false;//可以采集的状态 // Constant.FLAG=false;
if(i==size-1){ // }
Constant.FLAG=false; // log.error(deviceManageEntityList.get(i).getDeviceType()+"保存数据库失败!"+i);
} // }
log.info("-------------串口:"+comName+"不存在!-------------"); // Thread.sleep(1000);
} // }else{
if(i==size-1){ // Constant.WEB_FLAG=false;//可以采集的状态
Constant.FLAG=false; // if(i==size-1){
log.info("-------------一轮采集完,采集标志Constant.Flag="+Constant.FLAG+"-------------"); // Constant.FLAG=false;
} // }
} // log.info("-------------串口:"+comName+"不存在!-------------");
}catch (Exception e){ // }
e.printStackTrace(); // if(i==size-1){
Constant.WEB_FLAG=false;//可以采集的状态 // Constant.FLAG=false;
Constant.FLAG=false; // log.info("-------------一轮采集完,采集标志Constant.Flag="+Constant.FLAG+"-------------");
log.error("-------------串口采集异常!-------------"); // }
} // }
// }else { // }catch (Exception e){
// log.info("串口:"+comName+"不存在!"); // e.printStackTrace();
// Constant.WEB_FLAG=false;//可以采集的状态
// Constant.FLAG=false;
// log.error("-------------串口采集异常!-------------");
// }
//// }else {
//// log.info("串口:"+comName+"不存在!");
//// }
// }
// /**
// * 字节数组转16进制字符串
// * @param b 字节数组
// * @return 16进制字符串
// */
// public static String printHexString(byte[] b) {
// StringBuilder sbf = new StringBuilder();
// for (byte value : b) {
// String hex = Integer.toHexString(value & 0xFF);
// if (hex.length() == 1) {
// hex = '0' + hex;
// }
// sbf.append(hex.toUpperCase()).append(" ");
// } // }
} // return sbf.toString().trim();
/** // }
* 字节数组转16进制字符串 //
* @param b 字节数组 // /**
* @return 16进制字符串 // * 十六进制字符串转byte[]
*/ // * @param hex 十六进制字符串
public static String printHexString(byte[] b) { // * @return byte[]
StringBuilder sbf = new StringBuilder(); // */
for (byte value : b) { // public static byte[] hexStr2Byte(String hex) {
String hex = Integer.toHexString(value & 0xFF); // if (hex == null) {
if (hex.length() == 1) { // return new byte[] {};
hex = '0' + hex; // }
} //
sbf.append(hex.toUpperCase()).append(" "); // // 奇数位补0
} // if (hex.length() % 2 != 0) {
return sbf.toString().trim(); // hex = "0" + hex;
} // }
//
/** // int length = hex.length();
* 十六进制字符串转byte[] // ByteBuffer buffer = ByteBuffer.allocate(length / 2);
* @param hex 十六进制字符串 // for (int i = 0; i < length; i++) {
* @return byte[] // String hexStr = hex.charAt(i) + "";
*/ // i++;
public static byte[] hexStr2Byte(String hex) { // hexStr += hex.charAt(i);
if (hex == null) { // byte b = (byte) Integer.parseInt(hexStr, 16);
return new byte[] {}; // buffer.put(b);
} // }
// return buffer.array();
// 奇数位补0 // }
if (hex.length() % 2 != 0) { //
hex = "0" + hex; // /**
} // * 16进制转换成为string类型字符串
// * @param s 待转换字符串
int length = hex.length(); // */
ByteBuffer buffer = ByteBuffer.allocate(length / 2); // public static String hexStringToString(String s) {
for (int i = 0; i < length; i++) { // if (s == null || "".equals(s)) {
String hexStr = hex.charAt(i) + ""; // return null;
i++; // }
hexStr += hex.charAt(i); // s = s.replace(" ", "");
byte b = (byte) Integer.parseInt(hexStr, 16); // byte[] baKeyword = new byte[s.length() / 2];
buffer.put(b); // for (int i = 0; i < baKeyword.length; i++) {
} // try {
return buffer.array(); // baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
} // } catch (Exception e) {
// e.printStackTrace();
/** // }
* 16进制转换成为string类型字符串 // }
* @param s 待转换字符串 // try {
*/ // s = new String(baKeyword, StandardCharsets.UTF_8);
public static String hexStringToString(String s) { // } catch (Exception e1) {
if (s == null || "".equals(s)) { // e1.printStackTrace();
return null; // }
} // return s;
s = s.replace(" ", ""); // }
byte[] baKeyword = new byte[s.length() / 2]; //}
for (int i = 0; i < baKeyword.length; i++) {
try {
baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
} catch (Exception e) {
e.printStackTrace();
}
}
try {
s = new String(baKeyword, StandardCharsets.UTF_8);
} catch (Exception e1) {
e1.printStackTrace();
}
return s;
}
}

4
user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java

@ -212,7 +212,7 @@ public class SerialPortSendReceive2 {
String buildingName) { String buildingName) {
if ((dataStr.length() == 36 || dataStr.length() == 44 || dataStr.length() == 40 || dataStr.length() == 50) && deviceType.equals("电表")) { if ((dataStr.length() == 36 || dataStr.length() == 44 || dataStr.length() == 40 || dataStr.length() == 50) && deviceType.equals("电表")) {
analysisReceiveOrder485.analysisMeterOrder485(dataStr, registerAddr, brand, buildingId, buildingName); analysisReceiveOrder485.analysisMeterOrder485(dataStr, registerAddr, brand, buildingId, buildingName);
nowDataService.proWaterLevel(dateStr, buildingId); //保存时间点楼栋水位 nowDataService.proWaterLevel(dateStr, buildingId, ""); //保存时间点楼栋水位
} else if ((dataStr.length() == 18 || dataStr.length() == 70 || dataStr.length() == 44) && deviceType.equals("水表")) { } else if ((dataStr.length() == 18 || dataStr.length() == 70 || dataStr.length() == 44) && deviceType.equals("水表")) {
analysisReceiveOrder485.analysisWtMeterOrder485(dataStr, registerAddr, brand, buildingId, buildingName); analysisReceiveOrder485.analysisWtMeterOrder485(dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("压变")) { } else if (deviceType.equals("压变")) {
@ -230,7 +230,7 @@ public class SerialPortSendReceive2 {
} else if (deviceType.equals("水位开关") && registerAddr.equals("0010")) { } else if (deviceType.equals("水位开关") && registerAddr.equals("0010")) {
analysisReceiveOrder485.analysisPumpStateOrder(dataStr, registerAddr, brand, buildingId, buildingName); //创新,热泵状态与水位共用一个8路设备 analysisReceiveOrder485.analysisPumpStateOrder(dataStr, registerAddr, brand, buildingId, buildingName); //创新,热泵状态与水位共用一个8路设备
// analysisReceiveOrder485.analysisRelayOrder485(dataStr,registerAddr,brand,buildingId); //华厦 // analysisReceiveOrder485.analysisRelayOrder485(dataStr,registerAddr,brand,buildingId); //华厦
nowDataService.proWaterLevel(dateStr, buildingId); //保存时间点楼栋水位 nowDataService.proWaterLevel(dateStr, buildingId, ""); //保存时间点楼栋水位
} else if (deviceType.equals("温度变送器")) { } else if (deviceType.equals("温度变送器")) {
analysisReceiveOrder485.analysisMulTempOrder485(dataStr, registerAddr, brand, buildingId, buildingName); analysisReceiveOrder485.analysisMulTempOrder485(dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("热泵状态")) { } else if (deviceType.equals("热泵状态")) {

436
user-service/src/main/java/com/mh/user/serialport/SerialPortSingle.java

@ -1,219 +1,219 @@
package com.mh.user.serialport; //package com.mh.user.serialport;
//
import com.mh.user.constants.Constant; //import com.mh.user.constants.Constant;
import com.mh.user.entity.DeviceCodeParamEntity; //import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.service.BuildingService; //import com.mh.user.service.BuildingService;
import com.mh.user.service.DeviceCodeParamService; //import com.mh.user.service.DeviceCodeParamService;
import com.mh.user.service.DeviceInstallService; //import com.mh.user.service.DeviceInstallService;
import com.mh.user.service.NowDataService; //import com.mh.user.service.NowDataService;
import com.mh.user.utils.AnalysisReceiveOrder485; //import com.mh.user.utils.AnalysisReceiveOrder485;
import com.mh.user.utils.SendOrderUtils; //import com.mh.user.utils.SendOrderUtils;
import com.mh.user.utils.SpringBeanUtil; //import com.mh.user.utils.SpringBeanUtil;
import lombok.extern.slf4j.Slf4j; //import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext; //import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component; //import org.springframework.stereotype.Component;
//import purejavacomm.SerialPort; ////import purejavacomm.SerialPort;
import gnu.io.SerialPort; //import gnu.io.SerialPort;
//
import java.nio.ByteBuffer; //import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets; //import java.nio.charset.StandardCharsets;
import java.util.ArrayList; //import java.util.ArrayList;
import java.util.List; //import java.util.List;
//
/** ///**
* @author nxr // * @author nxr
* @title // * @title :
* @description 串口发送和接收处理,操作类 // * @description : 串口发送和接收处理,操作类
* @updateTime 2022-08-10 // * @updateTime 2022-08-10
* @throws // * @throws :
*/ // */
@Slf4j //@Slf4j
public class SerialPortSingle { //public class SerialPortSingle {
//
public SerialPort serialPort = null; // public SerialPort serialPort = null;
private String receiveStr = null; // private String receiveStr = null;
private int baudrate = 9600; // private int baudrate = 9600;
private String parity = null; // private String parity = null;
//
// 调用service // // 调用service
ApplicationContext context = SpringBeanUtil.getApplicationContext(); // ApplicationContext context = SpringBeanUtil.getApplicationContext();
//DeviceCodeParamService deviceCodeParamService = context.getBean(DeviceCodeParamService.class); // //DeviceCodeParamService deviceCodeParamService = context.getBean(DeviceCodeParamService.class);
AnalysisReceiveOrder485 analysisReceiveOrder485 = new AnalysisReceiveOrder485(); // AnalysisReceiveOrder485 analysisReceiveOrder485 = new AnalysisReceiveOrder485();
DeviceInstallService deviceInstallService = context.getBean(DeviceInstallService.class); // DeviceInstallService deviceInstallService = context.getBean(DeviceInstallService.class);
NowDataService nowDataService = context.getBean(NowDataService.class); // NowDataService nowDataService = context.getBean(NowDataService.class);
BuildingService buildingService = context.getBean(BuildingService.class); // BuildingService buildingService = context.getBean(BuildingService.class);
//
public String serialPortSend(DeviceCodeParamEntity deviceCodeParamEntity) { // public String serialPortSend(DeviceCodeParamEntity deviceCodeParamEntity) {
//
//查看所有串口 // //查看所有串口
SerialPortUtil serialPortUtil = SerialPortUtil.getSerialPortUtil(); // SerialPortUtil serialPortUtil = SerialPortUtil.getSerialPortUtil();
ArrayList<String> port = serialPortUtil.findPort();
// SerialTool serialPortUtil = SerialTool.getSerialPortUtil();
// ArrayList<String> port = serialPortUtil.findPort(); // ArrayList<String> port = serialPortUtil.findPort();
String rtData = ""; //// SerialTool serialPortUtil = SerialTool.getSerialPortUtil();
// System.out.println("发现全部串口:" + port); //// ArrayList<String> port = serialPortUtil.findPort();
String comName = deviceCodeParamEntity.getDataCom().toUpperCase(); // String rtData = "";
if (!port.contains(comName)) { //// System.out.println("发现全部串口:" + port);
log.info("串口:" + comName + "不存在!"); // String comName = deviceCodeParamEntity.getDataCom().toUpperCase();
return "fail"; // if (!port.contains(comName)) {
} // log.info("串口:" + comName + "不存在!");
try { // return "fail";
try { // }
baudrate = deviceCodeParamEntity.getBaudrate(); // try {
parity = deviceCodeParamEntity.getParity(); // try {
if (parity == null || parity.equals("") || parity.equalsIgnoreCase("none")) { // baudrate = deviceCodeParamEntity.getBaudrate();
serialPort = serialPortUtil.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.PARITY_NONE, SerialPort.PARITY_ODD); // parity = deviceCodeParamEntity.getParity();
} else { // if (parity == null || parity.equals("") || parity.equalsIgnoreCase("none")) {
serialPort = serialPortUtil.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.PARITY_EVEN, SerialPort.PARITY_ODD); // serialPort = serialPortUtil.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.PARITY_NONE, SerialPort.PARITY_ODD);
} // } else {
//向串口发送指令 // serialPort = serialPortUtil.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.PARITY_EVEN, SerialPort.PARITY_ODD);
log.info("-----------------------------单抄向串口" + serialPort + "发送指令!-----------------------------"); // }
SendOrderUtils.sendSerialPort(deviceCodeParamEntity, serialPort); // //向串口发送指令
Thread.sleep(1500); // log.info("-----------------------------单抄向串口" + serialPort + "发送指令!-----------------------------");
} catch (Exception e) { // SendOrderUtils.sendSerialPort(deviceCodeParamEntity, serialPort);
log.error("前端设置出现异常==>", e); // Thread.sleep(1500);
return "fail"; // } catch (Exception e) {
} // log.error("前端设置出现异常==>", e);
//对返回数据进行相关解析处理 // return "fail";
receiveStr = null; // }
byte[] bytes = serialPortUtil.readFromPort(serialPort); //读取串口数据 // //对返回数据进行相关解析处理
if (null == bytes) { // receiveStr = null;
serialPortUtil.closePort(serialPort); // byte[] bytes = serialPortUtil.readFromPort(serialPort); //读取串口数据
log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口"); // if (null == bytes) {
return "fail"; // serialPortUtil.closePort(serialPort);
} // log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口");
receiveStr = receiveStr + printHexString(bytes); // return "fail";
//去掉空格和null // }
receiveStr = receiveStr.replace("null", ""); // receiveStr = receiveStr + printHexString(bytes);
receiveStr = receiveStr.replace(" ", ""); // //去掉空格和null
log.info("串口" + serialPort + "接收数据:" + receiveStr + ",大小: " + receiveStr.length()); // receiveStr = receiveStr.replace("null", "");
//返回值全部变成大写 // receiveStr = receiveStr.replace(" ", "");
String receiveData = receiveStr.toUpperCase(); // log.info("串口" + serialPort + "接收数据:" + receiveStr + ",大小: " + receiveStr.length());
//截取去掉FE // //返回值全部变成大写
String dataStr = receiveData.replace("FE", ""); // String receiveData = receiveStr.toUpperCase();
String deviceType = deviceCodeParamEntity.getDeviceType(); // //截取去掉FE
String deviceAddr = deviceCodeParamEntity.getDeviceAddr(); // String dataStr = receiveData.replace("FE", "");
String registerAddr = deviceCodeParamEntity.getRegisterAddr(); // String deviceType = deviceCodeParamEntity.getDeviceType();
String brand = deviceCodeParamEntity.getBrand(); // String deviceAddr = deviceCodeParamEntity.getDeviceAddr();
String buildingId = deviceCodeParamEntity.getBuildingId(); // String registerAddr = deviceCodeParamEntity.getRegisterAddr();
String buildingName = buildingService.queryBuildingName(buildingId); //查询楼栋名称 // String brand = deviceCodeParamEntity.getBrand();
// String buildingId = deviceCodeParamEntity.getBuildingId();
deviceInstallService.updateOnline(deviceAddr, deviceType, buildingId, "在线"); //设备在线 // String buildingName = buildingService.queryBuildingName(buildingId); //查询楼栋名称
log.info(deviceType + "在线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName); //
if (deviceType.equals("热泵")) { // deviceInstallService.updateOnline(deviceAddr, deviceType, buildingId, "在线"); //设备在线
String strState = nowDataService.selectState(buildingId, deviceAddr); // log.info(deviceType + "在线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName);
if (strState != null && strState.equals("离线")) { //采集到数据 // if (deviceType.equals("热泵")) {
nowDataService.updateRunState(buildingId, deviceAddr, "不运行", buildingName); //监控界面状态表热泵在线状态 // String strState = nowDataService.selectState(buildingId, deviceAddr);
} // if (strState != null && strState.equals("离线")) { //采集到数据
} // nowDataService.updateRunState(buildingId, deviceAddr, "不运行", buildingName); //监控界面状态表热泵在线状态
try { // }
if ((dataStr.length() == 18 || dataStr.length() == 70 || dataStr.length() == 44) && deviceType.equals("水表")) { // }
rtData = analysisReceiveOrder485.analysisWtMeterOrder4852(dataStr, registerAddr, brand, buildingId, buildingName); // try {
} else if ((dataStr.length() == 36 || dataStr.length() == 44 || dataStr.length() == 40 || dataStr.length() == 50) && deviceType.equals("电表")) { // if ((dataStr.length() == 18 || dataStr.length() == 70 || dataStr.length() == 44) && deviceType.equals("水表")) {
rtData = analysisReceiveOrder485.analysisMeterOrder4852(dataStr, registerAddr, brand, buildingId, buildingName); // rtData = analysisReceiveOrder485.analysisWtMeterOrder4852(dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("压变")) { // } else if ((dataStr.length() == 36 || dataStr.length() == 44 || dataStr.length() == 40 || dataStr.length() == 50) && deviceType.equals("电表")) {
rtData = analysisReceiveOrder485.analysisPressureOrder4852(dataStr, registerAddr, brand, buildingId, buildingName); // rtData = analysisReceiveOrder485.analysisMeterOrder4852(dataStr, registerAddr, brand, buildingId, buildingName);
} else if ((dataStr.length() == 30) && deviceType.equals("状态检测")) {//五路状态读取,兼容旧版系统 // } else if (deviceType.equals("压变")) {
analysisReceiveOrder485.analysisStateOrder485(dataStr, registerAddr, brand, buildingId, buildingName); // rtData = analysisReceiveOrder485.analysisPressureOrder4852(dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("水位开关") && (registerAddr.equals("0018") || registerAddr.equals("0017"))) { // } else if ((dataStr.length() == 30) && deviceType.equals("状态检测")) {//五路状态读取,兼容旧版系统
rtData = analysisReceiveOrder485.analysisRelayOrder4852(dataStr, registerAddr, brand, buildingId, buildingName); // analysisReceiveOrder485.analysisStateOrder485(dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("热泵")) { // } else if (deviceType.equals("水位开关") && (registerAddr.equals("0018") || registerAddr.equals("0017"))) {
rtData = analysisReceiveOrder485.analysisPumpOrder4852(dataStr, registerAddr, brand, buildingId, buildingName); // rtData = analysisReceiveOrder485.analysisRelayOrder4852(dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("时控")) { // } else if (deviceType.equals("热泵")) {
rtData = analysisReceiveOrder485.analysisTimeSetOrder4852(dataStr, registerAddr, brand, buildingId, buildingName); // rtData = analysisReceiveOrder485.analysisPumpOrder4852(dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("水位开关") && registerAddr.equals("0010")) { //热泵状态 // } else if (deviceType.equals("时控")) {
rtData = analysisReceiveOrder485.analysisPumpStateOrder2(dataStr, registerAddr, brand, buildingId, buildingName); // rtData = analysisReceiveOrder485.analysisTimeSetOrder4852(dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("温度变送器")) { // } else if (deviceType.equals("水位开关") && registerAddr.equals("0010")) { //热泵状态
rtData = analysisReceiveOrder485.analysisMulTempOrder4852(dataStr, registerAddr, brand, buildingId, buildingName); // rtData = analysisReceiveOrder485.analysisPumpStateOrder2(dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("热泵状态")) { // } else if (deviceType.equals("温度变送器")) {
rtData = analysisReceiveOrder485.analysisPumpStateOrder2(dataStr, registerAddr, brand, buildingId, buildingName); // rtData = analysisReceiveOrder485.analysisMulTempOrder4852(dataStr, registerAddr, brand, buildingId, buildingName);
} // } else if (deviceType.equals("热泵状态")) {
} catch (Exception e) { // rtData = analysisReceiveOrder485.analysisPumpStateOrder2(dataStr, registerAddr, brand, buildingId, buildingName);
log.error(deviceCodeParamEntity.getDeviceType() + "单抄保存数据库失败!"); // }
return "fail"; // } catch (Exception e) {
} // log.error(deviceCodeParamEntity.getDeviceType() + "单抄保存数据库失败!");
Thread.sleep(500); // return "fail";
log.info("-----------------------------" + serialPort + "单抄结束!-----------------------------"); // }
return rtData; // Thread.sleep(500);
} catch (Exception e) { // log.info("-----------------------------" + serialPort + "单抄结束!-----------------------------");
log.error("前端设置出现异常==>", e); // return rtData;
return "fail"; // } catch (Exception e) {
} finally { // log.error("前端设置出现异常==>", e);
if (null != serialPort) { // return "fail";
serialPortUtil.closePort(serialPort); // } finally {
} // if (null != serialPort) {
} // serialPortUtil.closePort(serialPort);
} // }
// }
/** // }
* 字节数组转16进制字符串 //
* // /**
* @param b 字节数组 // * 字节数组转16进制字符串
* @return 16进制字符串 // *
*/ // * @param b 字节数组
public static String printHexString(byte[] b) { // * @return 16进制字符串
StringBuilder sbf = new StringBuilder(); // */
for (byte value : b) { // public static String printHexString(byte[] b) {
String hex = Integer.toHexString(value & 0xFF); // StringBuilder sbf = new StringBuilder();
if (hex.length() == 1) { // for (byte value : b) {
hex = '0' + hex; // String hex = Integer.toHexString(value & 0xFF);
} // if (hex.length() == 1) {
sbf.append(hex.toUpperCase()).append(" "); // hex = '0' + hex;
} // }
return sbf.toString().trim(); // sbf.append(hex.toUpperCase()).append(" ");
} // }
// return sbf.toString().trim();
/** // }
* 十六进制字符串转byte[] //
* // /**
* @param hex 十六进制字符串 // * 十六进制字符串转byte[]
* @return byte[] // *
*/ // * @param hex 十六进制字符串
public static byte[] hexStr2Byte(String hex) { // * @return byte[]
if (hex == null) { // */
return new byte[]{}; // public static byte[] hexStr2Byte(String hex) {
} // if (hex == null) {
// return new byte[]{};
// 奇数位补0 // }
if (hex.length() % 2 != 0) { //
hex = "0" + hex; // // 奇数位补0
} // if (hex.length() % 2 != 0) {
// hex = "0" + hex;
int length = hex.length(); // }
ByteBuffer buffer = ByteBuffer.allocate(length / 2); //
for (int i = 0; i < length; i++) { // int length = hex.length();
String hexStr = hex.charAt(i) + ""; // ByteBuffer buffer = ByteBuffer.allocate(length / 2);
i++; // for (int i = 0; i < length; i++) {
hexStr += hex.charAt(i); // String hexStr = hex.charAt(i) + "";
byte b = (byte) Integer.parseInt(hexStr, 16); // i++;
buffer.put(b); // hexStr += hex.charAt(i);
} // byte b = (byte) Integer.parseInt(hexStr, 16);
return buffer.array(); // buffer.put(b);
} // }
// return buffer.array();
/** // }
* 16进制转换成为string类型字符串 //
* // /**
* @param s 待转换字符串 // * 16进制转换成为string类型字符串
*/ // *
public static String hexStringToString(String s) { // * @param s 待转换字符串
if (s == null || "".equals(s)) { // */
return null; // public static String hexStringToString(String s) {
} // if (s == null || "".equals(s)) {
s = s.replace(" ", ""); // return null;
byte[] baKeyword = new byte[s.length() / 2]; // }
for (int i = 0; i < baKeyword.length; i++) { // s = s.replace(" ", "");
try { // byte[] baKeyword = new byte[s.length() / 2];
baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16)); // for (int i = 0; i < baKeyword.length; i++) {
} catch (Exception e) { // try {
e.printStackTrace(); // baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
} // } catch (Exception e) {
} // e.printStackTrace();
try { // }
s = new String(baKeyword, StandardCharsets.UTF_8); // }
} catch (Exception e1) { // try {
e1.printStackTrace(); // s = new String(baKeyword, StandardCharsets.UTF_8);
} // } catch (Exception e1) {
return s; // e1.printStackTrace();
} // }
} // return s;
// }
//}

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

@ -46,9 +46,9 @@ public class SerialPortSingle2 {
} else { } else {
serialPort = SerialTool.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN); serialPort = SerialTool.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN);
} }
//向串口发送指令
log.info("-----------------------------单抄向串口" + serialPort + "发送指令!-----------------------------");
if (serialPort != null) { if (serialPort != null) {
//向串口发送指令
log.info("-----------------------------单抄向串口" + serialPort.getName() + "发送指令!-----------------------------");
String sendStr = SendOrderUtils.getSendStr(deviceCodeParamEntity); String sendStr = SendOrderUtils.getSendStr(deviceCodeParamEntity);
SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceCodeParamEntity.getDeviceType()); SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceCodeParamEntity.getDeviceType());
CacheTools.initReceiveMsg(serialPort.getName()); CacheTools.initReceiveMsg(serialPort.getName());
@ -92,7 +92,7 @@ public class SerialPortSingle2 {
return "fail"; return "fail";
} }
receiveStr = receiveStr.replace("null", "").replace(" ", ""); receiveStr = receiveStr.replace("null", "").replace(" ", "");
log.info("串口" + serialPort + "接收数据:" + receiveStr + ",大小: " + receiveStr.length()); log.info("串口" + serialPort.getName() + "接收数据:" + receiveStr + ",大小: " + receiveStr.length());
//返回值全部变成大写 //返回值全部变成大写
String receiveData = receiveStr.toUpperCase(); String receiveData = receiveStr.toUpperCase();
//截取去掉FE //截取去掉FE
@ -127,6 +127,7 @@ public class SerialPortSingle2 {
rtData = analysisReceiveOrder485.analysisPumpOrder4852(dataStr, registerAddr, brand, buildingId, buildingName); rtData = analysisReceiveOrder485.analysisPumpOrder4852(dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("时控")) { } else if (deviceType.equals("时控")) {
rtData = analysisReceiveOrder485.analysisTimeSetOrder4852(dataStr, registerAddr, brand, buildingId, buildingName); rtData = analysisReceiveOrder485.analysisTimeSetOrder4852(dataStr, registerAddr, brand, buildingId, buildingName);
log.info("时控读取或者设置返回值==>{}", rtData);
} else if (deviceType.equals("水位开关") && !StringUtils.isBlank(registerAddr) && registerAddr.equals("0010")) { //热泵状态 } else if (deviceType.equals("水位开关") && !StringUtils.isBlank(registerAddr) && registerAddr.equals("0010")) { //热泵状态
rtData = analysisReceiveOrder485.analysisPumpStateOrder2(dataStr, registerAddr, brand, buildingId, buildingName); rtData = analysisReceiveOrder485.analysisPumpStateOrder2(dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("温度变送器")) { } else if (deviceType.equals("温度变送器")) {
@ -140,22 +141,22 @@ public class SerialPortSingle2 {
return "fail"; return "fail";
} }
} else { } else {
log.info("串口为空,无法进行采集控制");
return "fail"; return "fail";
} }
SerialTool.closePort(serialPort); SerialTool.closePort(serialPort);
System.out.println("关闭" + serialPort);
Thread.sleep(200); Thread.sleep(200);
log.info("-----------------------------" + serialPort + "单抄结束!-----------------------------"); log.info("-----------------------------" + serialPort.getName() + "单抄结束!-----------------------------");
return rtData; return rtData;
} catch (Exception e) { } catch (Exception e) {
log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口", e); log.info("单抄串口" + serialPort.getName() + "异常,没有数据返回!关闭串口", e);
} finally { } finally {
try { try {
if (null != serialPort) { if (null != serialPort) {
SerialTool.closePort(serialPort); SerialTool.closePort(serialPort);
} }
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); log.error("关闭串口异常!", e);
} }
} }
return "fail"; return "fail";

2
user-service/src/main/java/com/mh/user/service/DeviceInstallService.java

@ -181,4 +181,6 @@ public interface DeviceInstallService {
DeviceInstallEntity selectDeviceById(Long id); DeviceInstallEntity selectDeviceById(Long id);
void deleteParamCode(DeviceInstallEntity oldEntity); void deleteParamCode(DeviceInstallEntity oldEntity);
void updateLastValueByOther(String addr, String strWtLevel, String deviceType, String buildingId);
} }

2
user-service/src/main/java/com/mh/user/service/NowDataService.java

@ -100,7 +100,7 @@ public interface NowDataService {
void proWaterTemp(String curDate,String buildingID,String pumpID); void proWaterTemp(String curDate,String buildingID,String pumpID);
//生成楼栋水位 //生成楼栋水位
void proWaterLevel(String curDate,String buildingID); void proWaterLevel(String curDate,String buildingID, String deviceAddr);
//在没有接收到返回值前设置监控界面热泵是否离线 //在没有接收到返回值前设置监控界面热泵是否离线
void updateRunState(String buildingId,String pumpId,String strState, String buildingName); void updateRunState(String buildingId,String pumpId,String strState, String buildingName);

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

@ -87,6 +87,7 @@ public class DeviceControlServiceImpl implements DeviceControlService {
switch (deviceType) { switch (deviceType) {
case "时控": case "时控":
rtData = handleTimeControl(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle); rtData = handleTimeControl(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle);
log.info("设备类型为时控==>{}", rtData);
break; break;
case "水位开关": case "水位开关":
rtData = handleWaterLevelSwitch(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle); rtData = handleWaterLevelSwitch(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle);
@ -110,6 +111,20 @@ public class DeviceControlServiceImpl implements DeviceControlService {
} }
if (Constant.WRITE.equals(type)) { if (Constant.WRITE.equals(type)) {
rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
log.info("写入设备返回值==>{}", rtData);
// 如果是瑞星泵,需要在发送启动指令
if (!StringUtils.isBlank(brand) && brand.equals("瑞星")
&& (deviceCodeParam.getParam().equals("时段1") || deviceCodeParam.getParam().equals("时段2"))
&& !rtData.equals(Constant.FAIL)) {
deviceCodeParam.setFunCode("06");
// 开启热泵定时
if ("0028".equals(deviceCodeParam.getRegisterAddr())) {
deviceCodeParam.setRegisterAddr("00230001");
} if ("002A".equals(deviceCodeParam.getRegisterAddr())) {
deviceCodeParam.setRegisterAddr("00240001");
}
rtData = serialPortSingle.serialPortSend(deviceCodeParam);
}
} }
} }
return rtData; return rtData;
@ -202,16 +217,27 @@ public class DeviceControlServiceImpl implements DeviceControlService {
String time = serialPortModel.getDataValue(); String time = serialPortModel.getDataValue();
if (Constant.READ.equals(type)) { if (Constant.READ.equals(type)) {
deviceCodeParam.setFunCode("03"); //功能码读数据 deviceCodeParam.setFunCode("03"); //功能码读数据
if (deviceCodeParam.getParam().equals("L1")) { switch (deviceCodeParam.getParam()) {
deviceCodeParam.setRegisterAddr("0009"); //寄存器地址,L3路,L1(0009),L2(000D) case "L1":
} else if (deviceCodeParam.getParam().equals("L2")) { deviceCodeParam.setRegisterAddr("0009"); //寄存器地址,L3路,L1(0009),L2(000D)
deviceCodeParam.setRegisterAddr("000D"); break;
} else { case "L2":
deviceCodeParam.setRegisterAddr("0011"); deviceCodeParam.setRegisterAddr("000D");
break;
case "L3":
deviceCodeParam.setRegisterAddr("0011");
break;
case "checkTime":
// 时控校准时间读取
deviceCodeParam.setRegisterAddr("0000");
break;
} }
rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
time = rtData; time = rtData;
} else { } else {
if ("checkTime".equals(deviceCodeParam.getParam())) {
deviceCodeParam.setRegisterAddr("0000");
}
deviceCodeParam.setFunCode("10"); //功能码写数据 deviceCodeParam.setFunCode("10"); //功能码写数据
} }
if (time.length() == 16) { if (time.length() == 16) {
@ -285,17 +311,21 @@ public class DeviceControlServiceImpl implements DeviceControlService {
nowDataService.upTempSet2(deviceCodeParam.getBuildingId(), serialPortModel.getDataValue(), deviceCodeParam.getDeviceAddr());//更新实时状态表 nowDataService.upTempSet2(deviceCodeParam.getBuildingId(), serialPortModel.getDataValue(), deviceCodeParam.getDeviceAddr());//更新实时状态表
log.info("楼栋编号:" + deviceCodeParam.getBuildingId() + ",设定温度:" + serialPortModel.getDataValue() + ",热泵编号:" + deviceCodeParam.getDeviceAddr()); log.info("楼栋编号:" + deviceCodeParam.getBuildingId() + ",设定温度:" + serialPortModel.getDataValue() + ",热泵编号:" + deviceCodeParam.getDeviceAddr());
} else if (deviceCodeParam.getParam().equals("时段1") || deviceCodeParam.getParam().equals("时段2")) { } else if (deviceCodeParam.getParam().equals("时段1") || deviceCodeParam.getParam().equals("时段2")) {
if (deviceCodeParam.getBrand().equals("美的")) { if (deviceCodeParam.getBrand().equals("美的") || deviceCodeParam.getBrand().equals("瑞星")) {
//发送指令 //发送指令
if (Constant.READ.equals(type)) { if (Constant.READ.equals(type)) {
deviceCodeParam.setFunCode("03"); //功能码读数据 deviceCodeParam.setFunCode("03"); //功能码读数据
} else { } else {
deviceCodeParam.setFunCode("10"); //功能码写数据 deviceCodeParam.setFunCode("10"); //功能码写数据
} }
if ("时段1".equals(deviceCodeParam.getParam())) { if ("时段1".equals(deviceCodeParam.getParam()) && "美的".equals(deviceCodeParam.getBrand())) {
deviceCodeParam.setRegisterAddr("0656"); //寄存器地址 deviceCodeParam.setRegisterAddr("0656"); //寄存器地址
} else { } else if ("时段2".equals(deviceCodeParam.getParam()) && "美的".equals(deviceCodeParam.getBrand())) {
deviceCodeParam.setRegisterAddr("065A"); //寄存器地址 deviceCodeParam.setRegisterAddr("065A"); //寄存器地址
} else if ("时段1".equals(deviceCodeParam.getParam()) && "瑞星".equals(deviceCodeParam.getBrand())) {
deviceCodeParam.setRegisterAddr("0028"); //寄存器地址
} else if ("时段2".equals(deviceCodeParam.getParam()) && "瑞星".equals(deviceCodeParam.getBrand())) {
deviceCodeParam.setRegisterAddr("002C"); //寄存器地址
} }
if (Constant.READ.equals(type)) { if (Constant.READ.equals(type)) {
@ -345,6 +375,14 @@ public class DeviceControlServiceImpl implements DeviceControlService {
} }
rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
return rtData; return rtData;
} else if ("closeTime".equals(deviceCodeParam.getParam())) {
// 关闭热泵
deviceCodeParam.setFunCode("06"); //功能码读数据
if ("瑞星".equals(deviceCodeParam.getBrand()) && "1".equals(deviceCodeParam.getDataValue())) {
deviceCodeParam.setRegisterAddr("00230000");
} else {
deviceCodeParam.setRegisterAddr("00240000"); //寄存器地址
}
} }
return rtData; return rtData;
} }

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

@ -4,19 +4,13 @@ import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.entity.DeviceInstallTempEntity; import com.mh.user.entity.DeviceInstallTempEntity;
import com.mh.user.entity.UploadDeviceInstallEntity; import com.mh.user.entity.UploadDeviceInstallEntity;
import com.mh.user.exception.CommonNum;
import com.mh.user.exception.ServiceRuntimeException;
import com.mh.user.mapper.DeviceCodeParamMapper; import com.mh.user.mapper.DeviceCodeParamMapper;
import com.mh.user.mapper.DeviceInstallMapper; import com.mh.user.mapper.DeviceInstallMapper;
import com.mh.user.mapper.provider.DeviceInstallProvider;
import com.mh.user.model.DeviceModel; import com.mh.user.model.DeviceModel;
import com.mh.user.serialport.SerialPortSendReceive;
import com.mh.user.service.BuildingService; import com.mh.user.service.BuildingService;
import com.mh.user.service.DeviceInstallService; import com.mh.user.service.DeviceInstallService;
import com.mh.user.utils.CacheUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -165,6 +159,8 @@ public class DeviceInstallServiceImpl implements DeviceInstallService {
default: default:
break; break;
} }
// 删除之前的缓存
CacheUtil.getInstance().deleteCache();
} }
@Override @Override
@ -256,6 +252,10 @@ public class DeviceInstallServiceImpl implements DeviceInstallService {
@Override @Override
public int deleteDevice(String id) { public int deleteDevice(String id) {
// 根据id查询对应的deviceInstall
DeviceInstallEntity oldEntity = deviceInstallMapper.selectDeviceById(Long.valueOf(id));
// 删除全部的device_code_param值
this.deleteParamCode(oldEntity);
return deviceInstallMapper.deleteDevice(id); return deviceInstallMapper.deleteDevice(id);
} }
@ -412,5 +412,10 @@ public class DeviceInstallServiceImpl implements DeviceInstallService {
deviceCodeParamMapper.deleteParamCode2(oldEntity); deviceCodeParamMapper.deleteParamCode2(oldEntity);
deviceCodeParamMapper.deleteParamCode3(oldEntity); deviceCodeParamMapper.deleteParamCode3(oldEntity);
} }
@Override
public void updateLastValueByOther(String addr, String strWtLevel, String deviceType, String buildingId) {
deviceInstallMapper.updateLastValueByOther(addr, strWtLevel, deviceType, buildingId);
}
} }

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

@ -453,8 +453,8 @@ public class NowDataServiceImpl implements NowDataService {
} }
@Override @Override
public void proWaterLevel(String curDate, String buildingID) { public void proWaterLevel(String curDate, String buildingID, String deviceAddr) {
nowDataMapper.proWaterLevel(curDate, buildingID); nowDataMapper.proWaterLevel(curDate, buildingID, deviceAddr);
} }
@Override @Override

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

@ -581,8 +581,8 @@ public class AnalysisReceiveOrder485 {
} else if (registerAddr.equalsIgnoreCase("0656") } else if (registerAddr.equalsIgnoreCase("0656")
|| registerAddr.equalsIgnoreCase("065A") || registerAddr.equalsIgnoreCase("065A")
|| registerAddr.equalsIgnoreCase("065E")) { //定时设置值 || registerAddr.equalsIgnoreCase("065E")) { //定时设置值
String startTime = checkStr.substring(8, 10) + checkStr.substring(12, 14); String startTime = ExchangeStringUtil.hexToDec(checkStr.substring(8, 10)) + ExchangeStringUtil.hexToDec(checkStr.substring(12, 14));
String closetTime = checkStr.substring(16, 18) + checkStr.substring(20, 22); String closetTime = ExchangeStringUtil.hexToDec(checkStr.substring(16, 18)) + ExchangeStringUtil.hexToDec(checkStr.substring(20, 22));
sValue = startTime + closetTime; sValue = startTime + closetTime;
} }
rtData = sValue; rtData = sValue;
@ -642,8 +642,11 @@ public class AnalysisReceiveOrder485 {
} else if (registerAddr.equalsIgnoreCase("0028") } else if (registerAddr.equalsIgnoreCase("0028")
|| registerAddr.equalsIgnoreCase("002C") || registerAddr.equalsIgnoreCase("002C")
|| registerAddr.equalsIgnoreCase("0030")) { //读定时设置值 || registerAddr.equalsIgnoreCase("0030")) { //读定时设置值
String startTime = checkStr.substring(8, 10) + checkStr.substring(12, 14); // 01 03 08 0003 0000 0016 0000 4713
String closetTime = checkStr.substring(16, 18) + checkStr.substring(20, 22); String startTime = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)), 2)
+ ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(10, 14)), 2);
String closetTime = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(14, 18)), 2)
+ ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(18, 22)), 2);
sValue = startTime + closetTime; sValue = startTime + closetTime;
} }
} else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { } else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) {
@ -851,9 +854,12 @@ public class AnalysisReceiveOrder485 {
} }
DecimalFormat df = new DecimalFormat("0.0"); DecimalFormat df = new DecimalFormat("0.0");
String strWtLevel = df.format(wtLevel); String strWtLevel = df.format(wtLevel);
// 更新device_install数据
deviceInstallService.updateLastValueByOther(addr, strWtLevel, "压变", buildingId);
nowDataService.saveNowHistoryData2(addr, "压变", strWtLevel, "waterLevel", buildingId); nowDataService.saveNowHistoryData2(addr, "压变", strWtLevel, "waterLevel", buildingId);
log.info("压变号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); log.info("压变号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName);
nowDataService.proWaterLevel(dateStr, buildingId); //楼栋水位 nowDataService.proWaterLevel(dateStr, buildingId, addr); //楼栋水位
log.info("------保存每栋楼小时水位情况" + dateStr + "------"); log.info("------保存每栋楼小时水位情况" + dateStr + "------");
} }
// }); // });
@ -896,9 +902,12 @@ public class AnalysisReceiveOrder485 {
DecimalFormat df = new DecimalFormat("0.0"); DecimalFormat df = new DecimalFormat("0.0");
String strWtLevel = df.format(wtLevel); String strWtLevel = df.format(wtLevel);
result = strWtLevel; result = strWtLevel;
// 更新device_install数据
deviceInstallService.updateLastValueByOther(addr, strWtLevel, "压变", buildingId);
nowDataService.saveNowHistoryData2(addr, "压变", strWtLevel, "waterLevel", buildingId); nowDataService.saveNowHistoryData2(addr, "压变", strWtLevel, "waterLevel", buildingId);
log.info("压变号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); log.info("压变号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName);
nowDataService.proWaterLevel(dateStr, buildingId); //楼栋水位 nowDataService.proWaterLevel(dateStr, buildingId, addr); //楼栋水位
log.info("------保存每栋楼小时水位情况------" + dateStr); log.info("------保存每栋楼小时水位情况------" + dateStr);
} }
} else { } else {

7
user-service/src/main/java/com/mh/user/utils/CacheUtil.java

@ -75,5 +75,12 @@ public class CacheUtil {
return JSONArray.parseArray(JSONObject.toJSONString(cacheObject), DeviceCodeParamEntity.class); return JSONArray.parseArray(JSONObject.toJSONString(cacheObject), DeviceCodeParamEntity.class);
} }
/**
* 删除缓存
*/
public void deleteCache() {
caffeineCache.invalidateAll();
}
} }

34
user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java

@ -180,18 +180,23 @@ public class GetReadOrder485 {
str = str + "03002C0004"; str = str + "03002C0004";
param = "时段2"; param = "时段2";
} }
} else if ("06".equals(funCode)) {
str = str + funCode + registerAddr;// 定时开机开关机
if ("0023".equals(registerAddr)) {
param = "时段1";
} else {
param = "时段2";
}
} else {//10 } else {//10
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("000A")) {//温度设定,写 if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("000A")) {//温度设定,写
str = str + "10000A000102" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试 str = str + "10000A000102" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试
} else if (registerAddr.equalsIgnoreCase("0028")) {//时段1 } else if (registerAddr.equalsIgnoreCase("0028") || registerAddr.equalsIgnoreCase("002C")) {//时段1
if (dataValue.length() == 8) { if (dataValue.length() == 8) {
String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8); String strData = "00" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.IntToHex(Integer.parseInt(dataValue.substring(0, 2))),2)
str = str + "100028000408" + strData; //写 + "00" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.IntToHex(Integer.parseInt(dataValue.substring(2, 4))),2)
} + "00" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.IntToHex(Integer.parseInt(dataValue.substring(4, 6))),2)
} else if (registerAddr.equalsIgnoreCase("002C")) {//时段2 + "00" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.IntToHex(Integer.parseInt(dataValue.substring(6, 8))),2);
if (dataValue.length() == 8) { str = str + "10"+registerAddr+"000408" + strData; //写
String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8);
str = str + "10002C000408" + strData; //写
} }
} }
} }
@ -517,10 +522,19 @@ public class GetReadOrder485 {
funCode = ExchangeStringUtil.addZeroForNum(funCode, 2); // 功能码 funCode = ExchangeStringUtil.addZeroForNum(funCode, 2); // 功能码
if (funCode.equals("03")) { //功能码,读 if (funCode.equals("03")) { //功能码,读
str = str + "03" + registerAddr + "0004"; if (orderParamModel.getParam().equals("checkTime")) {
// 读取时间:0A 03 00 00 00 03 04 B0
str = str + "03" + registerAddr + "0003";
} else {
str = str + "03" + registerAddr + "0004";
}
} else if (funCode.equals("10")) {//写 } else if (funCode.equals("10")) {//写
if (!dataValue.equals("")) { if (!dataValue.equals("") && !orderParamModel.getParam().equals("checkTime")) {
str = str + "10" + registerAddr + "000408" + dataValue; str = str + "10" + registerAddr + "000408" + dataValue;
} else {
// 校验时间:0A 10 00 00 00 03 06 00 24 01 10 08 59 48 CF
// 0A 10 00 00 00 03 06 00 24 01 10 09 40 8B 95
str = str + "10" + registerAddr + "00030600" + dataValue.substring(2);
} }
} }
} }

204
user-service/src/main/java/com/mh/user/utils/TimedTask2.java

@ -1,75 +1,39 @@
package com.mh.user.utils; //package com.mh.user.utils;
//
import com.mh.user.entity.DeviceCodeParamEntity; //import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity; //import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.entity.PumpSetEntity; //import com.mh.user.entity.PumpSetEntity;
import com.mh.user.model.SerialPortModel; //import com.mh.user.model.SerialPortModel;
import com.mh.user.serialport.SerialPortSingle; //import com.mh.user.serialport.SerialPortSingle;
import com.mh.user.service.DeviceInstallService; //import com.mh.user.service.DeviceInstallService;
import com.mh.user.service.PumpSetService; //import com.mh.user.service.PumpSetService;
import io.swagger.models.auth.In; //import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext; //import org.springframework.context.ApplicationContext;
//
import java.text.SimpleDateFormat; //import java.text.SimpleDateFormat;
import java.util.*; //import java.util.*;
//
public class TimedTask2 { //public class TimedTask2 {
//
ApplicationContext context = SpringBeanUtil.getApplicationContext(); // ApplicationContext context = SpringBeanUtil.getApplicationContext();
PumpSetService pumpSetService=context.getBean(PumpSetService.class); // PumpSetService pumpSetService=context.getBean(PumpSetService.class);
DeviceInstallService deviceInstallService=context.getBean(DeviceInstallService.class); // DeviceInstallService deviceInstallService=context.getBean(DeviceInstallService.class);
//
public void cronJobClose(int shi, int fen, int miao) { //定时关机 // public void cronJobClose(int shi, int fen, int miao) { //定时关机
Calendar cal = Calendar.getInstance(); // Calendar cal = Calendar.getInstance();
// 每天定点执行 // // 每天定点执行
cal.set(Calendar.HOUR_OF_DAY, shi); // cal.set(Calendar.HOUR_OF_DAY, shi);
cal.set(Calendar.MINUTE, fen); // cal.set(Calendar.MINUTE, fen);
cal.set(Calendar.SECOND, miao); // cal.set(Calendar.SECOND, miao);
//
Timer timer = new Timer(); // Timer timer = new Timer();
timer.schedule(new TimerTask() { // timer.schedule(new TimerTask() {
//
public void run() { // public void run() {
// 把run方法里的内容换成你要执行的内容 // // 把run方法里的内容换成你要执行的内容
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前的系统时间为:" + sdf.format(new Date())); // System.out.println("当前的系统时间为:" + sdf.format(new Date()));
SerialPortSingle serialPortSingle = new SerialPortSingle(); //发送接收类
DeviceCodeParamEntity deviceCodeParam=new DeviceCodeParamEntity();//参数实体类
List<DeviceInstallEntity> deviceList=deviceInstallService.selectDevicePump();
if (deviceList.size()>0){
for (DeviceInstallEntity deviceInstall :deviceList){
deviceCodeParam.setDeviceAddr(deviceInstall.getDeviceAddr()); //传入通讯编号
deviceCodeParam.setDeviceType(deviceInstall.getDeviceType());
deviceCodeParam.setDataCom(deviceInstall.getDataCom());
deviceCodeParam.setBaudrate(deviceInstall.getBaudRate());
deviceCodeParam.setParity(deviceInstall.getParity());
deviceCodeParam.setDataValue("0000");//传入相关参数值,关机
deviceCodeParam.setBuildingId(deviceInstall.getBuildingId());
deviceCodeParam.setBrand(deviceInstall.getBrand());
deviceCodeParam.setRegisterAddr("0000"); //寄存器地址
deviceCodeParam.setFunCode("06");
serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
}
}
}
}, cal.getTime(), 24 * 60 * 60 * 1000);
}
public void cronJobStart(int shi, int fen, int miao) { //定时开机
Calendar cal = Calendar.getInstance();
// 每天定点执行
cal.set(Calendar.HOUR_OF_DAY, shi);
cal.set(Calendar.MINUTE, fen);
cal.set(Calendar.SECOND, miao);
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
// 把run方法里的内容换成你要执行的内容
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前的系统时间为:" + sdf.format(new Date()));
// SerialPortSingle serialPortSingle = new SerialPortSingle(); //发送接收类 // SerialPortSingle serialPortSingle = new SerialPortSingle(); //发送接收类
// DeviceCodeParamEntity deviceCodeParam=new DeviceCodeParamEntity();//参数实体类 // DeviceCodeParamEntity deviceCodeParam=new DeviceCodeParamEntity();//参数实体类
// List<DeviceInstallEntity> deviceList=deviceInstallService.selectDevicePump(); // List<DeviceInstallEntity> deviceList=deviceInstallService.selectDevicePump();
@ -80,7 +44,7 @@ public class TimedTask2 {
// deviceCodeParam.setDataCom(deviceInstall.getDataCom()); // deviceCodeParam.setDataCom(deviceInstall.getDataCom());
// deviceCodeParam.setBaudrate(deviceInstall.getBaudRate()); // deviceCodeParam.setBaudrate(deviceInstall.getBaudRate());
// deviceCodeParam.setParity(deviceInstall.getParity()); // deviceCodeParam.setParity(deviceInstall.getParity());
// deviceCodeParam.setDataValue("0003");//传入相关参数值,制热 // deviceCodeParam.setDataValue("0000");//传入相关参数值,关机
// deviceCodeParam.setBuildingId(deviceInstall.getBuildingId()); // deviceCodeParam.setBuildingId(deviceInstall.getBuildingId());
// deviceCodeParam.setBrand(deviceInstall.getBrand()); // deviceCodeParam.setBrand(deviceInstall.getBrand());
// deviceCodeParam.setRegisterAddr("0000"); //寄存器地址 // deviceCodeParam.setRegisterAddr("0000"); //寄存器地址
@ -88,33 +52,69 @@ public class TimedTask2 {
// serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 // serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
// } // }
// } // }
// }
} // }, cal.getTime(), 24 * 60 * 60 * 1000);
}, cal.getTime(), 24 * 60 * 60 * 1000); // }
} //
// public void cronJobStart(int shi, int fen, int miao) { //定时开机
public void cronJob(){ // Calendar cal = Calendar.getInstance();
PumpSetEntity pumpSet=pumpSetService.queryHandTime(); // // 每天定点执行
if (pumpSet!=null){ // cal.set(Calendar.HOUR_OF_DAY, shi);
String HH=""; // cal.set(Calendar.MINUTE, fen);
String mm=""; // cal.set(Calendar.SECOND, miao);
String startTime=pumpSet.getStartTime1(); //
HH=startTime.substring(0,2); // Timer timer = new Timer();
mm=startTime.substring(3,5); // timer.schedule(new TimerTask() {
// cronJobStart(Integer.valueOf(HH), Integer.valueOf(mm), 00); //
cronJobStart(16, 13, 00); // public void run() {
System.out.println("-----------小时:"+HH+",分钟:"+mm+"-----------"); // // 把run方法里的内容换成你要执行的内容
// String closeTime=pumpSet.getCloseTime1(); // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// HH=closeTime.substring(0,2); // System.out.println("当前的系统时间为:" + sdf.format(new Date()));
// mm=closeTime.substring(3,5); //// SerialPortSingle serialPortSingle = new SerialPortSingle(); //发送接收类
// cronJobClose(Integer.valueOf(HH), Integer.valueOf(mm), 00); //// DeviceCodeParamEntity deviceCodeParam=new DeviceCodeParamEntity();//参数实体类
System.out.println("-----------小时:"+HH+",分钟:"+mm+"-----------"); //// List<DeviceInstallEntity> deviceList=deviceInstallService.selectDevicePump();
} //// if (deviceList.size()>0){
} //// for (DeviceInstallEntity deviceInstall :deviceList){
//// deviceCodeParam.setDeviceAddr(deviceInstall.getDeviceAddr()); //传入通讯编号
//// deviceCodeParam.setDeviceType(deviceInstall.getDeviceType());
//// deviceCodeParam.setDataCom(deviceInstall.getDataCom());
//// deviceCodeParam.setBaudrate(deviceInstall.getBaudRate());
//// deviceCodeParam.setParity(deviceInstall.getParity());
//// deviceCodeParam.setDataValue("0003");//传入相关参数值,制热
//// deviceCodeParam.setBuildingId(deviceInstall.getBuildingId());
//// deviceCodeParam.setBrand(deviceInstall.getBrand());
//// deviceCodeParam.setRegisterAddr("0000"); //寄存器地址
//// deviceCodeParam.setFunCode("06");
//// serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
//// }
//// }
//
// }
// }, cal.getTime(), 24 * 60 * 60 * 1000);
// }
//
// public void cronJob(){
// PumpSetEntity pumpSet=pumpSetService.queryHandTime();
// if (pumpSet!=null){
// String HH="";
// String mm="";
// String startTime=pumpSet.getStartTime1();
// HH=startTime.substring(0,2);
// mm=startTime.substring(3,5);
//// cronJobStart(Integer.valueOf(HH), Integer.valueOf(mm), 00);
// cronJobStart(16, 13, 00);
// System.out.println("-----------小时:"+HH+",分钟:"+mm+"-----------");
//// String closeTime=pumpSet.getCloseTime1();
//// HH=closeTime.substring(0,2);
//// mm=closeTime.substring(3,5);
//// cronJobClose(Integer.valueOf(HH), Integer.valueOf(mm), 00);
// System.out.println("-----------小时:"+HH+",分钟:"+mm+"-----------");
// }
// }
////
//// public static void main(String[] args) {
//// cronJob(11, 46, 0); //24小时制 时分秒
//// }
//
// //
// public static void main(String[] args) { //}
// cronJob(11, 46, 0); //24小时制 时分秒
// }
}

6
user-service/src/main/resources/application-dev.yml

@ -1,5 +1,5 @@
server: server:
port: 8761 #8761创新、8762广商、8763华厦、广州理工 port: 8762 #8761创新、8762广商、8763华厦、广州理工
spring: spring:
application: application:
name: user-service name: user-service
@ -12,6 +12,10 @@ spring:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
username: sa username: sa
password: mh@803 password: mh@803
# url: jdbc:sqlserver://119.29.33.133:2008;DatabaseName=chws_gsh;allowMultiQueries=true
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# username: chws
# password: mh@803
filters: stat,wall,config filters: stat,wall,config
max-active: 100 max-active: 100

18
user-service/src/main/resources/application-prod.yml

@ -1,5 +1,5 @@
server: server:
port: 8763 #8761创新、8762广商、8763华厦、广州理工 port: 8762 #8761创新、8762广商、8763华厦、广州理工
spring: spring:
application: application:
name: user-service name: user-service
@ -14,10 +14,10 @@ spring:
# password: mh@803 # password: mh@803
## url: jdbc:sqlserver://120.25.220.177:32012;DatabaseName=M_CHWS;allowMultiQueries=true ## url: jdbc:sqlserver://120.25.220.177:32012;DatabaseName=M_CHWS;allowMultiQueries=true
#阿里云服务器-广州理工 #阿里云服务器-广州理工
url: jdbc:sqlserver://120.25.220.177:32012;DatabaseName=CHWS;allowMultiQueries=true # url: jdbc:sqlserver://120.25.220.177:32012;DatabaseName=CHWS;allowMultiQueries=true
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
username: test # username: test
password: minghan123456@ # password: minghan123456@
#华厦云服务器 #华厦云服务器
# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=CHWS;allowMultiQueries=true # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=CHWS;allowMultiQueries=true
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
@ -29,10 +29,10 @@ spring:
# username: chws # username: chws
# password: mh@803 # password: mh@803
#广商服务器 #广商服务器
# url: jdbc:sqlserver://119.29.33.133:2008;DatabaseName=chws_gsh;allowMultiQueries=true url: jdbc:sqlserver://119.29.33.133:2008;DatabaseName=chws_gsh;allowMultiQueries=true
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# username: chws username: chws
# password: mh@803 password: mh@803
#本机 #本机
# url: jdbc:sqlserver://127.0.0.1:9956;DatabaseName=CHWS;allowMultiQueries=true # url: jdbc:sqlserver://127.0.0.1:9956;DatabaseName=CHWS;allowMultiQueries=true
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver

15
user-service/src/test/java/com/mh/user/UserServiceApplicationTests.java

@ -57,7 +57,7 @@ class UserServiceApplicationTests {
//0203020008FD82 //0203020008FD82
// analysis.analysisPumpOrder485("0203020008FD82","0641"); // analysis.analysisPumpOrder485("0203020008FD82","0641");
// getReadOrder485.createOrderParam(); // getReadOrder485.createOrderParam();
// analysis.analysisRelayOrder485("220611000000013A220611000000023B220611000000033C220611000000043D220611000000053E220611000000063F22061100000007402206110000000841","0017","中凯"); analysis.analysisTimeSetOrder4852("0B10000900041162",null, null, null, null);
} }
@Test @Test
public void testHotWater() throws InterruptedException { public void testHotWater() throws InterruptedException {
@ -92,4 +92,17 @@ class UserServiceApplicationTests {
} }
} }
@Test
public void testGetPump() {
String dataValue = "03002200";
System.out.println(ExchangeStringUtil.IntToHex(Integer.parseInt(dataValue.substring(0, 2))));
System.out.println(ExchangeStringUtil.IntToHex(Integer.parseInt(dataValue.substring(2, 4))));
System.out.println(ExchangeStringUtil.IntToHex(Integer.parseInt(dataValue.substring(4, 6))));
System.out.println(ExchangeStringUtil.IntToHex(Integer.parseInt(dataValue.substring(6, 8))));
String strData = "00" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.IntToHex(Integer.parseInt(dataValue.substring(0, 2))),2)
+ "00" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.IntToHex(Integer.parseInt(dataValue.substring(2, 4))),2)
+ "00" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.IntToHex(Integer.parseInt(dataValue.substring(4, 6))),2)
+ "00" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.IntToHex(Integer.parseInt(dataValue.substring(6, 8))),2);
System.out.println(strData);
}
} }

7
热水新增脚本.sql

@ -3,3 +3,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);
-- 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';
alter table waterLevel add device_name varchar(50) not null default '';
exec sp_addextendedproperty N'MS_Description', N'设备名称', N'schema', N'dbo',N'table', N'waterLevel', N'column', N'device_name';

Loading…
Cancel
Save