Browse Source

优化采集控制逻辑

prod_202403
mh 10 months ago
parent
commit
5d6b9c58b2
  1. 5
      user-service/src/main/java/com/mh/user/constants/Constant.java
  2. 56
      user-service/src/main/java/com/mh/user/controller/SerialPortController.java
  3. 14
      user-service/src/main/java/com/mh/user/job/DealDataJob.java
  4. 20
      user-service/src/main/java/com/mh/user/model/SerialPortModel.java
  5. 2
      user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive.java
  6. 6
      user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java
  7. 7
      user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java
  8. 1
      user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java
  9. 75
      user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java
  10. 2
      user-service/src/main/resources/application.yml
  11. 5
      热水新增脚本.sql

5
user-service/src/main/java/com/mh/user/constants/Constant.java

@ -11,7 +11,8 @@ public class Constant {
public static boolean CONTROL_WEB_FLAG = false;
public static boolean SEND_STATUS = false; // 指令发送状态
public static boolean FLAG = false;
public static boolean WEB_FLAG = false; // 判断是否有前端指令下发
public static volatile boolean FLAG = false;
public static volatile boolean WEB_FLAG = false; // 判断是否有前端指令下发
}

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

@ -2,6 +2,7 @@ package com.mh.user.controller;
import com.alibaba.fastjson2.JSONObject;
import com.mh.common.http.HttpResult;
import com.mh.common.utils.StringUtils;
import com.mh.user.annotation.SysLogger;
import com.mh.user.constants.Constant;
import com.mh.user.entity.ControlSetEntity;
@ -167,14 +168,14 @@ public class SerialPortController {
if (!serialPortModel.getDataValue().equals("100%")) {
deviceCodeParam.setDataValue("100%");
serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
Thread.sleep(1500);
Thread.sleep(1000);
}
} else if (brand.equals("远向")) {
deviceCodeParam.setFunCode("06"); //功能码写数据
if (!serialPortModel.getDataValue().equals("100%")) {
deviceCodeParam.setDataValue("100%");
serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
Thread.sleep(1500);
Thread.sleep(1000);
}
} else if (brand.equals("顶威")) {
deviceCodeParam.setFunCode("0407"); //功能码写数据
@ -184,7 +185,10 @@ public class SerialPortController {
//controlSetService.saveControlSet(controlData);
nowDataService.upLevelSet(buildingId, serialPortModel.getDataValue());//更新实时状态表
}
serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
String returnStr = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
if (!StringUtils.isBlank(returnStr) && "fail".equals(returnStr)) {
return HttpResult.error(500, "fail");
}
}
Constant.WEB_FLAG = false; //单抄,恢复采集
return HttpResult.ok();
@ -212,11 +216,11 @@ public class SerialPortController {
String deviceType = serialPortModel.getDeviceType();//设备类型
String buildingId = serialPortModel.getBuildingId();//楼栋
String param = serialPortModel.getParam();//操作参数
if (deviceAddr == null || deviceAddr == "") {
if (StringUtils.isBlank(deviceAddr)) {
List<DeviceModel> list = deviceInstallService.selectDevices(buildingId, deviceType);
deviceAddr = list.get(0).getDeviceAddr();
}
if (deviceAddr == null || deviceAddr.length() == 0) {
if (StringUtils.isBlank(deviceAddr)) {
Constant.WEB_FLAG = false;
return HttpResult.error("通讯ID为空!");
}
@ -234,12 +238,12 @@ public class SerialPortController {
//设置设备实体对象
ControlSetEntity controlData = new ControlSetEntity();
controlData.setBuildingId(deviceInstallEntity.getBuildingId());
if (deviceType == null || deviceType.equals("") || deviceType.equals("热泵")) {
if (StringUtils.isBlank(deviceType) || deviceType.equals("热泵")) {
//设置热泵实体对象
PumpSetEntity pumpData = new PumpSetEntity();
pumpData.setBuildingId(deviceInstallEntity.getBuildingId());
pumpData.setPumpId(deviceAddr);
if (param == null || param.equals("") || param.equals("读温度设定")) {
if (StringUtils.isBlank(param) || param.equals("读温度设定")) {
deviceCodeParam.setFunCode("03"); //功能码读数据
if (brand.equals("美的")) {
deviceCodeParam.setRegisterAddr("0642"); //寄存器地址
@ -247,7 +251,7 @@ public class SerialPortController {
deviceCodeParam.setRegisterAddr("0003"); //寄存器地址
}
rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
if (!rtData.equals("")) {
if (!rtData.equals("fail")) {
pumpData.setTempSet(rtData);
pumpSetService.savePumpSet(pumpData);//热泵信息保存数据库
}
@ -259,7 +263,7 @@ public class SerialPortController {
deviceCodeParam.setRegisterAddr("0064"); //寄存器地址
}
rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
if (!rtData.equals("")) {
if (!rtData.equals("fail")) {
pumpData.setWaterTemp(rtData);
pumpSetService.savePumpSet(pumpData);//热泵信息保存数据库
}
@ -280,15 +284,16 @@ public class SerialPortController {
deviceCodeParam.setFunCode("03"); //功能码读数据
//保存数据
rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
String time = rtData;
if (time.length() == 8) {
String statTime = time.substring(0, 2) + ":" + time.substring(2, 4);
String closeTime = time.substring(4, 6) + ":" + time.substring(6, 8);
if (!rtData.equals("fail")) {
if (rtData.length() == 8) {
String statTime = rtData.substring(0, 2) + ":" + rtData.substring(2, 4);
String closeTime = rtData.substring(4, 6) + ":" + rtData.substring(6, 8);
pumpData.setStartTime1(statTime);
pumpData.setCloseTime1(closeTime);
}
pumpSetService.savePumpSet(pumpData);//热泵信息保存数据库
}
}
} else if (param.equals("时段2")) {
if (brand.equals("美的")) {
//发送指令
@ -296,16 +301,17 @@ public class SerialPortController {
deviceCodeParam.setFunCode("03"); //功能码读数据
//保存数据
rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
String time = rtData;
if (time.length() == 8) {
String statTime = time.substring(0, 2) + ":" + time.substring(2, 4);
String closeTime = time.substring(4, 6) + ":" + time.substring(6, 8);
if (!rtData.equals("fail")) {
if (rtData.length() == 8) {
String statTime = rtData.substring(0, 2) + ":" + rtData.substring(2, 4);
String closeTime = rtData.substring(4, 6) + ":" + rtData.substring(6, 8);
pumpData.setStartTime2(statTime);
pumpData.setCloseTime2(closeTime);
}
pumpSetService.savePumpSet(pumpData);//热泵信息保存数据库
}
}
}
} else if (deviceType.equals("时控")) {
if (param.equals("L1")) {
deviceCodeParam.setRegisterAddr("0009"); //寄存器地址,L3路,L1(0009),L2(000D)
@ -316,15 +322,14 @@ public class SerialPortController {
}
deviceCodeParam.setFunCode("03"); //功能码读数据
rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
String time = rtData;
if (time.length() == 16) {
if (!rtData.equals("fail")) {
if (rtData.length() == 16) {
//时段1
String statTime1 = time.substring(0, 2) + ":" + time.substring(2, 4);
String closeTime1 = time.substring(4, 6) + ":" + time.substring(6, 8);
String statTime1 = rtData.substring(0, 2) + ":" + rtData.substring(2, 4);
String closeTime1 = rtData.substring(4, 6) + ":" + rtData.substring(6, 8);
//时段2
String statTime2 = time.substring(8, 10) + ":" + time.substring(10, 12);
String closeTime2 = time.substring(12, 14) + ":" + time.substring(14, 16);
String statTime2 = rtData.substring(8, 10) + ":" + rtData.substring(10, 12);
String closeTime2 = rtData.substring(12, 14) + ":" + rtData.substring(14, 16);
if (param.equals("L1")) {
controlData.setUseStartTime1(statTime1);
@ -344,6 +349,7 @@ public class SerialPortController {
}
}
controlSetService.saveControlSet(controlData); //保存设置内容
}
} else if (deviceType.equals("水位开关") && !param.equals("状态")) {
if (brand == null || brand.equals("") || brand.equals("中凯")) {//品牌
deviceCodeParam.setFunCode("17"); //功能码读
@ -356,7 +362,7 @@ public class SerialPortController {
deviceCodeParam.setRegisterAddr("0102");
}
rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
deviceCodeParam.setDataValue(rtData);
//deviceCodeParam.setDataValue(rtData);
//controlData.setLevelSet(serialPortModel.getDataValue());
//controlSetService.saveControlSet(controlData);
log.info("--------------读取返回数据:" + rtData + "------------------");

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

@ -52,7 +52,7 @@ public class DealDataJob {
Date date = new Date();
String curDate = sdf1.format(date);
String name = dealDataService.customName();
if (name != null && name.length() > 0 && name.contains("华夏学院")) {
if (name != null && name.contains("华夏学院")) {
dealDataService.proEnergy2(curDate);
} else {
dealDataService.proEnergy(curDate); //yyyy-MM-dd HH:00:00
@ -60,9 +60,7 @@ public class DealDataJob {
dealDataService.proGatewayState(); //判断网关在线状态:在线或离线
log.info("进入定时调试数据库过程汇总数据!yyyy-MM-dd HH:00:00");
} catch (Exception e) {
e.printStackTrace();
//Constant.FLAG=false;
//Constant.WEB_FLAG=false;
log.error("定时处理数据汇总异常==>", e);
}
}
@ -98,7 +96,10 @@ public class DealDataJob {
Thread thread = new Thread(myThread);
comThreadPool.execute(thread);
}
// 等待执行完成
countDownLatch.await();
// 释放资源
countDownLatch = null;
}
}
}
@ -106,6 +107,7 @@ public class DealDataJob {
log.error("定时采集异常==>", e);
} finally {
Constant.FLAG = false;
log.info("------定时采集结束>>>>Constant.FLAG==" + Constant.FLAG + "------");
}
}
@ -133,9 +135,7 @@ public class DealDataJob {
dealDataService.proTotalPumpMinutes(curDate); //统计周\月热泵运行时长
log.info("进入定时调试数据库过程汇总数据!yyyy-MM-dd");
} catch (Exception e) {
e.printStackTrace();
//Constant.FLAG=false;
//Constant.WEB_FLAG=false;
log.error("定时处理数据异常==>", e);
}
}

20
user-service/src/main/java/com/mh/user/model/SerialPortModel.java

@ -5,9 +5,29 @@ import lombok.Data;
@Data
public class SerialPortModel {
/**
* 楼栋id
*/
private String buildingId;
/**
* 设备地址
*/
private String deviceAddr;
/**
* 设备类型
*/
private String deviceType;
/**
* 操作类型
*/
private String param;
/**
* 操作值
*/
private String dataValue;
}

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

@ -107,11 +107,11 @@ public class SerialPortSendReceive {
continue; //continue时,跳出本次循环,继续执行下次循环。Break时,跳出循环(结束循环),执行下面的语句。
}
}catch (Exception e){
// e.printStackTrace();
Constant.WEB_FLAG=false;//可以采集的状态
if(i==size-1){
Constant.FLAG=false;
}
log.error("发送指令异常==>", e);
}
receiveStr="";
//从串口读取数据

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

@ -59,7 +59,6 @@ public class SerialPortSendReceive2 {
for (int i = 0; i < deviceManageEntityList.size(); i++) {
//判断网页端是否有操作设备的
if (Constant.WEB_FLAG) {
Constant.FLAG = false;
SerialTool.closePort(serialPort);
log.info("有指令下发退出定时采集");
break;
@ -110,7 +109,6 @@ public class SerialPortSendReceive2 {
byte[] bytes = SerialTool.readFromPort(serialPort);
if (bytes == null) {
SerialTool.closePort(serialPort);
Thread.sleep(1000);
log.info("串口" + serialPort + "没有数据返回!" + i);
log.info("----------------" + deviceType + "离线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------");
Constant.WEB_FLAG = false;//可以采集的状态
@ -133,11 +131,8 @@ public class SerialPortSendReceive2 {
// 处理返回来的数据报文
dealReceiveData(dateStr, serialPort, i, deviceAddr, deviceType, registerAddr, brand, buildingId, buildingName, bytes);
}
Constant.FLAG = false;
log.info("-------------一轮采集完,采集标志Constant.Flag=false-------------");
} catch (Exception e) {
Constant.WEB_FLAG = false;//可以采集的状态
Constant.FLAG = false;
log.error("-------------串口采集异常!----------->>", e);
}
}
@ -204,7 +199,6 @@ public class SerialPortSendReceive2 {
Constant.WEB_FLAG = false;//可以采集的状态
log.error(deviceManageEntityList.get(i).getDeviceType() + "保存数据库失败!" + i,e);
}
Thread.sleep(1000);
}
static void analysisReceiveData(String dateStr,

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

@ -35,7 +35,7 @@ public class SerialPortSingle2 {
public String serialPortSend(DeviceCodeParamEntity deviceCodeParamEntity) {
SerialPort serialPort = null;
String rtData = "";
String rtData = "fail";
String comName = deviceCodeParamEntity.getDataCom().toUpperCase();
try {
try {
@ -51,10 +51,11 @@ public class SerialPortSingle2 {
if (serialPort != null) {
String sendStr = SendOrderUtils.getSendStr(deviceCodeParamEntity);
SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceCodeParamEntity.getDeviceType());
Thread.sleep(1500);
Thread.sleep(2000);
}
} catch (Exception e) {
e.printStackTrace();
log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口", e);
return "fail";
}
//对返回数据进行相关解析处理
byte[] bytes = SerialTool.readFromPort(serialPort); //读取串口数据

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

@ -449,7 +449,6 @@ public class NowDataServiceImpl implements NowDataService {
@Override
public void updateRunState(String buildingId, String pumpId,String strState, String buildingName) {
DeviceInstallEntity deviceInstallEntity=deviceInstallMapper.selectDevice(pumpId,"热泵",buildingId);
// String buildingName=buildingService.queryBuildingName(buildingId);
NowDataEntity data=new NowDataEntity();
int r1 = nowDataMapper.selectNowDataCount(buildingId,pumpId);//判断now_data表是否存在记录
if(r1==0){

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

@ -1,10 +1,12 @@
package com.mh.user.utils;
import com.alibaba.fastjson2.JSON;
import com.mh.common.utils.StringUtils;
import com.mh.user.entity.*;
import com.mh.user.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@ -30,8 +32,10 @@ public class AnalysisReceiveOrder485 {
PumpSetService pumpSetService = context.getBean(PumpSetService.class);
DeviceInstallService deviceInstallService = context.getBean(DeviceInstallService.class);
BuildingService buildingService = context.getBean(BuildingService.class);
/**
* 解析电表返回的数据
*
* @param dataStr
*/
public void analysisMeterOrder485(final String dataStr, final String registerAddr, final String brand, String buildingId, String buildingName) {
@ -64,7 +68,6 @@ public class AnalysisReceiveOrder485 {
data = String.format("%08d", Long.parseLong(data));
data = data.substring(0, 6) + "." + data.substring(6, 8);
log.info("电表表号:" + meterId + ",电表读数:" + data);
// String buildingName=buildingService.queryBuildingName(buildingId); //查询楼栋名称
try {
DataResultEntity dataResultEntity = new DataResultEntity();
dataResultEntity.setDeviceAddr(meterId);//通讯编号
@ -86,9 +89,7 @@ public class AnalysisReceiveOrder485 {
}
public String analysisMeterOrder4852(final String dataStr, final String registerAddr, final String brand, String buildingId, final String buildingName) {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String dateStr = sdf1.format(date);
String data = "";
if (dataStr.length() == 36 || dataStr.length() == 40 || dataStr.length() == 44 || dataStr.length() == 50) {
String checkStr = dataStr.substring(0, dataStr.length() - 4); //减去校验码
@ -124,12 +125,11 @@ public class AnalysisReceiveOrder485 {
dataResultEntity.setDeviceType("电表");
dataResultEntity.setBuildingId(buildingId);
dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数
dataResultEntity.setCurDate(sdf1.parse(dateStr)); //当前日期
dataResultEntity.setCurDate(date); //当前日期
dataResultService.saveDataResult(dataResultEntity);
log.info("电表数据保存数据库成功! 楼栋名称:" + buildingName);
} catch (Exception e) {
// e.printStackTrace();
log.error("电表数据保存数据库失败!楼栋名称:"+buildingName);
log.error("电表数据保存数据库失败!楼栋名称:" + buildingName, e);
}
} else {
log.info("电表报文检验失败: " + dataStr);
@ -202,9 +202,7 @@ public class AnalysisReceiveOrder485 {
// 水表
public String analysisWtMeterOrder4852(final String dataStr, final String registerAddr, final String brand, String buildingId, String buildingName) {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String dateStr = sdf1.format(date);
String data = "";
String meterId = "";
if (dataStr.length() == 44 || dataStr.length() == 70) {
@ -216,7 +214,6 @@ public class AnalysisReceiveOrder485 {
meterId = String.format("%014d", Long.parseLong(meterId));
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < 4; i++) {
//String data1 = checkStr.substring(checkStr.length() - 2 * (i + 1), checkStr.length() - 2 * i);
String data1 = checkStr.substring(36 - 2 * (i + 1), 36 - 2 * i);
stringBuilder.append(data1);
}
@ -233,7 +230,6 @@ public class AnalysisReceiveOrder485 {
int checkNum = CRC16.CRC16_MODBUS(strOrder);
String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum));
checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2);
String sValue=null;
if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) {
meterId = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {
@ -246,20 +242,15 @@ public class AnalysisReceiveOrder485 {
log.info("水表表号: " + meterId + ",水表读数:" + data);
try {
DataResultEntity dataResultEntity = new DataResultEntity();
// if (meterId.length()>8){
// dataResultEntity.setDeviceAddr(meterId.substring(meterId.length()-8,meterId.length()));//通讯编号
// }else{
dataResultEntity.setDeviceAddr(meterId);//通讯编号
// }
dataResultEntity.setDeviceType("水表");
dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数
dataResultEntity.setCurDate(sdf1.parse(dateStr)); //当前日期
dataResultEntity.setCurDate(date); //当前日期
dataResultEntity.setBuildingId(buildingId);
dataResultService.saveDataResult(dataResultEntity);
log.info("水表数据保存数据库成功!楼栋名称:" + buildingName);
} catch (Exception e) {
e.printStackTrace();
log.error("水表数据保存数据库失败!楼栋名称:"+buildingName);
log.error("水表数据保存数据库失败!楼栋名称:" + buildingName, e);
}
if (!data.equals("")) {
data = String.valueOf(Double.valueOf(data));
@ -271,17 +262,17 @@ public class AnalysisReceiveOrder485 {
public void analysisPumpOrder485(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) {
// if (!Constant.CONTROL_WEB_FLAG) {
// threadPoolService.execute(() -> {
// SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Date date = new Date();
String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
String checkStr = receiveData.substring(0, receiveData.length() - 4);//检验报文
String checkWord = ExchangeStringUtil.getStrCRC16(checkStr);//生成校验码
String sValue = null;
String dataType = null;
if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) {
if (!checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) {
log.info("热泵报文检验失败: " + receiveData);
return;
}
String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址
String data = "";
// String buildingName=buildingService.queryBuildingName(buildingId); //查询楼栋名称
if (brand == null || brand.equals("") || brand.equals("美的")) {
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读
if (registerAddr.equalsIgnoreCase("0641")) { //运行状态
@ -442,9 +433,7 @@ public class AnalysisReceiveOrder485 {
}
nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存楼栋时间点温度变化
log.info("----------------保存楼栋时间点温度变化值!----------------");
}else{
log.info("热泵报文检验失败: " + receiveData);
}
// });
// }
}
@ -463,7 +452,7 @@ public class AnalysisReceiveOrder485 {
log.info("热泵报文检验成功: " + receiveData);
String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));
String data = "";
if (brand==null || brand.equals("") || brand.equals("美的")){
if (StringUtils.isBlank(brand) || brand.equals("美的")) {
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读
if (registerAddr.equalsIgnoreCase("0641")) { //运行状态
dataType = "runState";
@ -483,10 +472,6 @@ public class AnalysisReceiveOrder485 {
nowDataService.proPumpMinutes(buildingId, addr, sValue);
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue);
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
// NowPublicDataEntity publicData=new NowPublicDataEntity();
// publicData.setBuildingId(buildingId);
// publicData.setUpWater(sValue);
// nowPublicDataService.saveNowHistoryPublicData(publicData);
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName);
} else if (registerAddr.equalsIgnoreCase("0642") || registerAddr.equalsIgnoreCase("0007")) {
//0642设定温度,0007水箱水温
@ -522,7 +507,8 @@ public class AnalysisReceiveOrder485 {
}
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName);
}else if (registerAddr.equalsIgnoreCase("0656") || registerAddr.equalsIgnoreCase("065A")
} else if (registerAddr.equalsIgnoreCase("0656")
|| registerAddr.equalsIgnoreCase("065A")
|| registerAddr.equalsIgnoreCase("065E")) { //读定时设置值
String startTime = checkStr.substring(8, 10) + checkStr.substring(12, 14);
String closetTime = checkStr.substring(16, 18) + checkStr.substring(20, 22);
@ -533,7 +519,7 @@ public class AnalysisReceiveOrder485 {
}
rtData = sValue;
} else if (brand.equals("美的2")) {
System.out.println("品牌:"+brand+","+"寄存器地址:"+registerAddr);
log.info("品牌:" + brand + "," + "寄存器地址:" + registerAddr);
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读
if (registerAddr.equalsIgnoreCase("0BBD")) { //运行状态
dataType = "runState";
@ -559,10 +545,6 @@ public class AnalysisReceiveOrder485 {
nowDataService.proPumpMinutes(buildingId, addr, sValue);
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue);
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
// NowPublicDataEntity publicData=new NowPublicDataEntity();
// publicData.setBuildingId(buildingId);
// publicData.setUpWater(sValue);
// nowPublicDataService.saveNowHistoryPublicData(publicData);
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName);
} else if (registerAddr.equalsIgnoreCase("0003") || registerAddr.equalsIgnoreCase("0064")) {
//0003设定温度,0064水箱水温
@ -596,7 +578,8 @@ public class AnalysisReceiveOrder485 {
}
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName);
}else if (registerAddr.equalsIgnoreCase("0656") || registerAddr.equalsIgnoreCase("065A")
} else if (registerAddr.equalsIgnoreCase("0656")
|| registerAddr.equalsIgnoreCase("065A")
|| registerAddr.equalsIgnoreCase("065E")) { //定时设置值
String startTime = checkStr.substring(8, 10) + checkStr.substring(12, 14);
String closetTime = checkStr.substring(16, 18) + checkStr.substring(20, 22);
@ -741,6 +724,7 @@ public class AnalysisReceiveOrder485 {
checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2);
if (!checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) {
log.info("温控报文检验失败: " + receiveData);
return;
}
String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址
String data = "";
@ -769,21 +753,21 @@ public class AnalysisReceiveOrder485 {
// 压变,长度14,18读功能03
public void analysisPressureOrder485(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) {
// if (!Constant.CONTROL_WEB_FLAG) {
// threadPoolService.execute(() -> {
String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文
byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr);
int checkNum = CRC16.CRC16_MODBUS(strOrder);
String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum));
checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2);
String sValue=null;
if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) {
if (!checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) {
log.info("压变报文检验失败: " + receiveData);
return;
}
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String dateStr = sdf1.format(date);
String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址
String data = "";
// String buildingName=buildingService.queryBuildingName(buildingId); //查询楼栋名称
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读
Double wtHeight = 0.0;
if (brand == null || brand.equals("")) {
@ -811,11 +795,7 @@ public class AnalysisReceiveOrder485 {
nowDataService.proWaterLevel(dateStr, buildingId); //楼栋水位
log.info("------保存每栋楼小时水位情况" + dateStr + "------");
}
}else{
log.info("压变报文检验失败: " + receiveData);
}
// });
// }
}
// 压变,长度14,18读功能03
@ -826,7 +806,6 @@ public class AnalysisReceiveOrder485 {
int checkNum = CRC16.CRC16_MODBUS(strOrder);
String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum));
checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2);
String sValue=null;
if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
@ -835,7 +814,7 @@ public class AnalysisReceiveOrder485 {
String data = "";
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读
Double wtHeight = 0.0;
if (brand==null || brand.equals("")){
if (StringUtils.isBlank(brand)) {
float fdata = ExchangeStringUtil.hexToSingle(checkStr.substring(6, 14));//十六进制转浮点型
wtHeight = fdata * 1.02; //通过压力求水高
} else if (brand.equals("澳升") || brand.equals("汝翊")) {
@ -1509,7 +1488,6 @@ public class AnalysisReceiveOrder485 {
//状态检测
public void analysisStateOrder485(final String dataStr, final String registerAddr, final String brand, String buildingId, String buildingName) {
// threadPoolService.execute(() -> {
if (dataStr.length() == 30) {
//检验报文
String checkStr = dataStr.substring(0, dataStr.length() - 4); //减去校验码
@ -1561,13 +1539,12 @@ public class AnalysisReceiveOrder485 {
nowDataService.proPumpMinutes(buildingId, "1", hotPump); //如果只有一台热泵,pumpId为1
log.info("状态ID:" + meterId + ",回水:" + backWater + ",补水:" + upWater + ",供水:" + useWater + ",热泵:" + hotPump + ",保存数据成功!楼栋:" + buildingName);
} catch (Exception e) {
// e.printStackTrace();
log.error("解析状态检测异常==>", e);
}
} else {
log.info("状态检测报文检验失败: " + dataStr);
}
}
// });
}
//时间控制器,长度26、22

2
user-service/src/main/resources/application.yml

@ -1,3 +1,3 @@
spring:
profiles:
active: dev
active: prod

5
热水新增脚本.sql

@ -0,0 +1,5 @@
-- 2023-11-10 新增索引
create index pump_set_pump_id_building_id on pump_set(pump_id, building_id);
create index now_data_building_id on pump_set(building_id);
create index now_data_pump_id on pump_set(pump_id);
Loading…
Cancel
Save