You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1741 lines
99 KiB
1741 lines
99 KiB
package com.mh.user.utils; |
|
|
|
import com.alibaba.fastjson2.JSON; |
|
import com.mh.common.utils.StringUtils; |
|
import com.mh.user.constants.Constant; |
|
import com.mh.user.entity.*; |
|
import com.mh.user.service.*; |
|
import lombok.extern.slf4j.Slf4j; |
|
import org.springframework.context.ApplicationContext; |
|
|
|
import java.text.DecimalFormat; |
|
import java.text.ParseException; |
|
import java.text.SimpleDateFormat; |
|
import java.util.*; |
|
import java.util.concurrent.ThreadPoolExecutor; |
|
|
|
/** |
|
* @author ljf |
|
* @title : |
|
* @description : 解析485接收的数据 |
|
* @updateTime 2020-04-23 |
|
* @throws : |
|
*/ |
|
@Slf4j |
|
public class AnalysisReceiveOrder485 { |
|
|
|
// 调用service |
|
ApplicationContext context = SpringBeanUtil.getApplicationContext(); |
|
ThreadPoolExecutor threadPoolService = ThreadPoolService.getInstance(); |
|
DataResultService dataResultService = context.getBean(DataResultService.class); |
|
NowDataService nowDataService = context.getBean(NowDataService.class); |
|
NowPublicDataService nowPublicDataService = context.getBean(NowPublicDataService.class); |
|
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) { |
|
// threadPoolService.execute(() -> { |
|
if (dataStr.length() == 36 || dataStr.length() == 40 || dataStr.length() == 44 || dataStr.length() == 50) { |
|
String checkStr = dataStr.substring(0, dataStr.length() - 4); //减去校验码 |
|
String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 |
|
//返回的校验码与重新生成的校验码进行校验 |
|
if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { |
|
//表号,12位 |
|
String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) |
|
+ checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); |
|
meterId = String.format("%012d", Long.parseLong(meterId)); |
|
String data = ""; |
|
StringBuilder stringBuilder = new StringBuilder(); |
|
if (dataStr.length() == 36) { |
|
for (int i = 0; i < 4; i++) { |
|
String data1 = checkStr.substring(32 - 2 * (i + 1), 32 - 2 * i); |
|
stringBuilder.append(data1); |
|
} |
|
} else { |
|
for (int i = 0; i < 4; i++) { |
|
String data1 = checkStr.substring(36 - 2 * (i + 1), 36 - 2 * i); |
|
stringBuilder.append(data1); |
|
} |
|
} |
|
data = stringBuilder.toString(); |
|
data = ExchangeStringUtil.cutThree(data); |
|
// 0 代表前面补充0,4 代表长度为4,d 代表参数为正数型 |
|
data = String.format("%08d", Long.parseLong(data)); |
|
data = data.substring(0, 6) + "." + data.substring(6, 8); |
|
log.info("电表表号:" + meterId + ",电表读数:" + data); |
|
try { |
|
DataResultEntity dataResultEntity = new DataResultEntity(); |
|
dataResultEntity.setDeviceAddr(meterId);//通讯编号 |
|
dataResultEntity.setDeviceType("电表"); |
|
dataResultEntity.setBuildingId(buildingId); |
|
dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 |
|
Date date = new Date(); |
|
dataResultEntity.setCurDate(date); //当前日期 |
|
dataResultService.saveDataResult(dataResultEntity); |
|
log.info("电表数据保存数据库成功! 楼栋名称:" + buildingName); |
|
} catch (Exception e) { |
|
log.error("电表数据保存数据库失败!楼栋名称:" + buildingName, e); |
|
} |
|
} else { |
|
log.info("电表报文检验失败: " + dataStr); |
|
} |
|
} |
|
// }); |
|
} |
|
|
|
public String analysisMeterOrder4852(final String dataStr, final String registerAddr, final String brand, String buildingId, final String buildingName) { |
|
Date date = new Date(); |
|
String data = ""; |
|
if (dataStr.length() == 36 || dataStr.length() == 40 || dataStr.length() == 44 || dataStr.length() == 50) { |
|
String checkStr = dataStr.substring(0, dataStr.length() - 4); //减去校验码 |
|
String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 |
|
//返回的校验码与重新生成的校验码进行校验 |
|
if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { |
|
log.info("电表报文检验成功: " + dataStr); |
|
//表号,12位 |
|
String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) |
|
+ checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); |
|
meterId = String.format("%012d", Long.parseLong(meterId)); |
|
StringBuilder stringBuilder = new StringBuilder(); |
|
if (dataStr.length() == 36) { |
|
for (int i = 0; i < 4; i++) { |
|
String data1 = checkStr.substring(32 - 2 * (i + 1), 32 - 2 * i); |
|
stringBuilder.append(data1); |
|
} |
|
} else { |
|
for (int i = 0; i < 4; i++) { |
|
String data1 = checkStr.substring(36 - 2 * (i + 1), 36 - 2 * i); |
|
stringBuilder.append(data1); |
|
} |
|
} |
|
data = stringBuilder.toString(); |
|
data = ExchangeStringUtil.cutThree(data); |
|
// 0 代表前面补充0,4 代表长度为4,d 代表参数为正数型 |
|
data = String.format("%08d", Long.parseLong(data)); |
|
data = data.substring(0, 6) + "." + data.substring(6, 8); |
|
log.info("电表表号:" + meterId + ",电表读数:" + data); |
|
try { |
|
DataResultEntity dataResultEntity = new DataResultEntity(); |
|
dataResultEntity.setDeviceAddr(meterId);//通讯编号 |
|
dataResultEntity.setDeviceType("电表"); |
|
dataResultEntity.setBuildingId(buildingId); |
|
dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 |
|
dataResultEntity.setCurDate(date); //当前日期 |
|
dataResultService.saveDataResult(dataResultEntity); |
|
log.info("电表数据保存数据库成功! 楼栋名称:" + buildingName); |
|
} catch (Exception e) { |
|
log.error("电表数据保存数据库失败!楼栋名称:" + buildingName, e); |
|
} |
|
} else { |
|
log.info("电表报文检验失败: " + dataStr); |
|
} |
|
} |
|
if (!data.equals("")) { |
|
data = String.valueOf(Double.valueOf(data)); //00010.76,去除读数前面带0的情况 |
|
} |
|
return data; |
|
} |
|
|
|
// 水表 |
|
public void analysisWtMeterOrder485(final String dataStr, final String registerAddr, final String brand, String buildingId, String buildingName) { |
|
// threadPoolService.execute(() -> { |
|
String data = ""; |
|
String meterId = ""; |
|
if (dataStr.length() == 44 || dataStr.length() == 70) { |
|
String checkStr = dataStr.substring(0, dataStr.length() - 4);//减去校验码 |
|
String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 |
|
if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { |
|
meterId = checkStr.substring(16, 18) + checkStr.substring(14, 16) + checkStr.substring(12, 14) + checkStr.substring(10, 12)// 表号 |
|
+ checkStr.substring(8, 10) + checkStr.substring(6, 8) + checkStr.substring(4, 6); |
|
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); |
|
} |
|
data = stringBuilder.toString(); |
|
// 0 代表前面补充0,4 代表长度为4,d 代表参数为正数型 |
|
data = String.format("%08d", Long.parseLong(data)); |
|
data = data.substring(0, 6) + "." + data.substring(6, 8); |
|
} else { |
|
log.info("水表报文检验失败: " + dataStr); |
|
} |
|
} else if (dataStr.length() == 18) { |
|
String checkStr = dataStr.substring(0, dataStr.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(dataStr.substring(dataStr.length() - 4))) { |
|
meterId = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) { |
|
data = String.valueOf(Integer.parseInt(ExchangeStringUtil.hexToDec(checkStr.substring(6, 14))) / 10); //读数 |
|
} |
|
} else { |
|
log.info("水表报文检验失败: " + dataStr); |
|
} |
|
} |
|
log.info("水表表号: " + meterId + ",水表读数:" + data); |
|
try { |
|
DataResultEntity dataResultEntity = new DataResultEntity(); |
|
dataResultEntity.setDeviceAddr(meterId);//通讯编号 |
|
dataResultEntity.setDeviceType("水表"); |
|
dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 |
|
Date date = new Date(); |
|
dataResultEntity.setCurDate(date); //当前日期 |
|
dataResultEntity.setBuildingId(buildingId); |
|
dataResultService.saveDataResult(dataResultEntity); |
|
log.info("水表数据保存数据库成功!楼栋名称:" + buildingName); |
|
} catch (Exception e) { |
|
e.printStackTrace(); |
|
log.error("水表数据保存数据库失败!楼栋名称:" + buildingName); |
|
} |
|
// }); |
|
} |
|
|
|
// 水表 |
|
public String analysisWtMeterOrder4852(final String dataStr, final String registerAddr, final String brand, String buildingId, String buildingName) { |
|
Date date = new Date(); |
|
String data = ""; |
|
String meterId = ""; |
|
// 68 10 3987835C03000081B31CDA1C006502002C006502002C0000000000000000FF3416 |
|
if (dataStr.length() == 44 || dataStr.length() == 70 || dataStr.length() == 72) { |
|
String checkStr = dataStr.substring(0, dataStr.length() - 4);//减去校验码 |
|
String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 |
|
if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { |
|
meterId = checkStr.substring(16, 18) + checkStr.substring(14, 16) + checkStr.substring(12, 14) + checkStr.substring(10, 12)// 表号 |
|
+ checkStr.substring(8, 10) + checkStr.substring(6, 8) + checkStr.substring(4, 6); |
|
meterId = String.format("%014d", Long.parseLong(meterId)); |
|
StringBuilder stringBuilder = new StringBuilder(); |
|
for (int i = 0; i < 4; i++) { |
|
String data1 = checkStr.substring(36 - 2 * (i + 1), 36 - 2 * i); |
|
stringBuilder.append(data1); |
|
} |
|
data = stringBuilder.toString(); |
|
// 0 代表前面补充0,4 代表长度为4,d 代表参数为正数型 |
|
data = String.format("%08d", Long.parseLong(data)); |
|
data = data.substring(0, 6) + "." + data.substring(6, 8); |
|
} else { |
|
log.info("水表报文检验失败: " + dataStr); |
|
return data; |
|
} |
|
} else if (dataStr.length() == 18) { |
|
String checkStr = dataStr.substring(0, dataStr.length() - 4);//检验报文 |
|
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); |
|
if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { |
|
meterId = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) { |
|
data = String.valueOf(Integer.parseInt(ExchangeStringUtil.hexToDec(checkStr.substring(6, 14))) / 10); //读数 |
|
} |
|
} else { |
|
log.info("水表报文检验失败: " + dataStr); |
|
return data; |
|
} |
|
} |
|
log.info("水表表号: " + meterId + ",水表读数:" + data); |
|
try { |
|
DataResultEntity dataResultEntity = new DataResultEntity(); |
|
dataResultEntity.setDeviceAddr(meterId);//通讯编号 |
|
dataResultEntity.setDeviceType("水表"); |
|
dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 |
|
dataResultEntity.setCurDate(date); //当前日期 |
|
dataResultEntity.setBuildingId(buildingId); |
|
dataResultService.saveDataResult(dataResultEntity); |
|
log.info("水表数据保存数据库成功!楼栋名称:" + buildingName); |
|
} catch (Exception e) { |
|
log.error("水表数据保存数据库失败!楼栋名称:" + buildingName, e); |
|
} |
|
if (!data.equals("")) { |
|
data = String.valueOf(Double.valueOf(data)); |
|
} |
|
return data; |
|
} |
|
|
|
// 热泵 |
|
public void analysisPumpOrder485(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { |
|
// if (!Constant.CONTROL_WEB_FLAG) { |
|
// threadPoolService.execute(() -> { |
|
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))) { |
|
log.info("热泵报文检验失败: " + receiveData); |
|
return; |
|
} |
|
String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 |
|
String data = ""; |
|
if (brand == null || brand.equals("") || brand.equals("美的")) { |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读 |
|
if (registerAddr.equalsIgnoreCase("0641")) { //运行状态 |
|
dataType = "runState"; |
|
data = checkStr.substring(8, 10); |
|
log.info("------------美的热泵状态值-----------" + data); |
|
if (data.equalsIgnoreCase("08")) { |
|
sValue = "不运行"; //关机模式 |
|
} else if (data.equalsIgnoreCase("01")) { |
|
sValue = "运行"; //制冷模式 |
|
} else if (data.equalsIgnoreCase("02")) { |
|
sValue = "运行"; //制热模式 |
|
} else if (data.equalsIgnoreCase("04")) { |
|
sValue = "运行"; //水泵模式 |
|
} else if (data.equalsIgnoreCase("10")) { |
|
sValue = "运行"; //制热水模式 |
|
} |
|
//计算热泵运行时间,按分钟 |
|
nowDataService.proPumpMinutes(buildingId, addr, sValue); |
|
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
// String state=nowDataService.selectState(buildingId); //判断热泵状态,如果有一个以上热泵运行,楼栋公共信息补水运行 |
|
// NowPublicDataEntity publicData=new NowPublicDataEntity(); |
|
// publicData.setBuildingId(buildingId); |
|
// publicData.setUpWater(state); |
|
// nowPublicDataService.saveNowHistoryPublicData(publicData); |
|
log.info("热泵ID:" + addr + ",数据: " + sValue + ",保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equalsIgnoreCase("0642") || registerAddr.equalsIgnoreCase("0007")) { |
|
//0642设定温度,0007水箱水温 |
|
if (registerAddr.equalsIgnoreCase("0642")) { |
|
dataType = "tempSet"; |
|
} else { |
|
dataType = "waterTemp"; |
|
} |
|
//读数 |
|
sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); |
|
if (dataType.equals("waterTemp")) { |
|
String avgTemp = nowDataService.selectAve(buildingId); |
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
publicData.setBuildingId(buildingId); |
|
publicData.setUseWaterTemp(avgTemp); |
|
publicData.setBackWaterTemp(avgTemp); |
|
String pumpId = nowDataService.selectMinPumpId(buildingId); |
|
if (addr.equals(pumpId)) { //取ID最小的热泵为单箱温度 |
|
publicData.setSingleTemp(sValue); |
|
log.info("---------------单箱温度:" + sValue + "---------------"); |
|
} |
|
nowPublicDataService.saveNowHistoryPublicData(publicData); |
|
log.info("楼栋名称:" + buildingName + ",热泵编号:" + addr); |
|
// nowDataService.proWaterTemp(dateStr,buildingId,addr); //保存楼栋时间点温度变化 |
|
// log.info("=========保存楼栋时间点温度变化值!==========="); |
|
} else if (dataType.equals("tempSet")) { |
|
pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度 |
|
} |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
log.info("热泵ID:" + addr + ",数据:" + sValue + ",保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equalsIgnoreCase("000B")) { //故障状态 |
|
dataType = "isFault"; |
|
String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); |
|
sData = ExchangeStringUtil.addZeroForNum(sData, 8); |
|
if (sData.substring(7, 8).equalsIgnoreCase("0")) { |
|
sValue = "无故障"; |
|
deviceInstallService.updateDeviceFault("0", addr, "热泵"); |
|
} else if (sData.substring(7, 8).equalsIgnoreCase("1")) { |
|
sValue = "有故障"; |
|
deviceInstallService.updateDeviceFault("1", addr, "热泵"); |
|
} |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
log.info("热泵ID:" + addr + ",数据: " + sValue + ",保存数据库成功!楼栋名称:" + buildingName); |
|
} |
|
// else if (registerAddr.equalsIgnoreCase("0656") || registerAddr.equalsIgnoreCase("065A") |
|
// || registerAddr.equalsIgnoreCase("065E")) { //定时设置值 |
|
// sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); |
|
// } |
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); |
|
} |
|
} else if (brand.equals("美的2")) { |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 |
|
if (registerAddr.equalsIgnoreCase("0BBD")) { //运行状态 |
|
dataType = "runState"; |
|
data = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); |
|
data = ExchangeStringUtil.addZeroForNum(data, 8);//二进制数,补够8位 |
|
data = data.substring(4, 8); //截取后四位 |
|
log.info("------------美的2热泵状态值-----------" + data); |
|
if (data.equalsIgnoreCase("0000")) { //0 |
|
sValue = "不运行"; //关机 |
|
} else if (data.equalsIgnoreCase("0001")) {//1 |
|
sValue = "运行"; //水泵 |
|
} else if (data.equalsIgnoreCase("0010")) {//2 |
|
sValue = "运行"; //制冷 |
|
} else if (data.equalsIgnoreCase("0011")) {//3 |
|
sValue = "运行"; //制热 |
|
} else if (data.equalsIgnoreCase("0100")) {//4 |
|
sValue = "运行"; //热水 |
|
} else if (data.equalsIgnoreCase("0101")) {//5 |
|
sValue = "运行"; //采暖 |
|
} else if (data.equalsIgnoreCase("0110")) {//6 |
|
sValue = "运行"; //电热模式 |
|
} |
|
//计算热泵运行时间,按分钟 |
|
nowDataService.proPumpMinutes(buildingId, addr, sValue); |
|
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
// String state=nowDataService.selectState(buildingId); //判断热泵状态,如果有一个以上热泵运行,楼栋公共信息补水运行 |
|
// NowPublicDataEntity publicData=new NowPublicDataEntity(); |
|
// publicData.setBuildingId(buildingId); |
|
// publicData.setUpWater(state); |
|
// nowPublicDataService.saveNowHistoryPublicData(publicData); |
|
log.info("热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equalsIgnoreCase("0003") || registerAddr.equalsIgnoreCase("0064")) { |
|
//0003设定温度,0064水箱水温 |
|
if (registerAddr.equalsIgnoreCase("0003")) { |
|
dataType = "tempSet"; |
|
} else { |
|
dataType = "waterTemp"; |
|
} |
|
//读数 |
|
sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); |
|
if (dataType.equals("waterTemp")) { |
|
String avgTemp = nowDataService.selectAve(buildingId); |
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
publicData.setBuildingId(buildingId); |
|
publicData.setUseWaterTemp(avgTemp); |
|
publicData.setBackWaterTemp(avgTemp); |
|
String pumpId = nowDataService.selectMinPumpId(buildingId); |
|
log.info("---------------addr:" + addr + ",pumpId:" + pumpId + " ---------------"); |
|
if (addr.equals(pumpId)) { //取ID最小的热泵为单箱温度 |
|
publicData.setSingleTemp(sValue); |
|
log.info("---------------单箱温度:" + sValue + "---------------"); |
|
} |
|
nowPublicDataService.saveNowHistoryPublicData(publicData); |
|
log.info("楼栋名称:" + buildingName + ",热泵编号:" + addr); |
|
} else if (dataType.equals("tempSet")) { |
|
pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度 |
|
} |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
log.info("热泵ID: " + addr + ",数据: " + sValue + ",保存数据库成功!楼栋编号:" + buildingId); |
|
} else if (registerAddr.equalsIgnoreCase("0BBB")) { //故障状态 |
|
dataType = "isFault"; |
|
String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); |
|
sData = ExchangeStringUtil.addZeroForNum(sData, 8); |
|
if (sData.substring(7, 8).equalsIgnoreCase("0")) { |
|
sValue = "无故障"; |
|
} else if (sData.substring(7, 8).equalsIgnoreCase("1")) { |
|
sValue = "有故障"; |
|
} |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); |
|
} |
|
// else if (registerAddr.equalsIgnoreCase("0656") || registerAddr.equalsIgnoreCase("065A") |
|
// || registerAddr.equalsIgnoreCase("065E")) { //定时设置值 |
|
// sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); |
|
// } |
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) { |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); |
|
} |
|
} |
|
nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存楼栋时间点温度变化 |
|
log.info("----------------保存楼栋时间点温度变化值!----------------"); |
|
|
|
// }); |
|
// } |
|
} |
|
|
|
public String analysisPumpOrder4852(final String receiveData, 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 rtData = ""; |
|
//检验报文 |
|
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))) { |
|
log.info("热泵报文检验成功: " + receiveData); |
|
String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2)); |
|
String data = ""; |
|
if (StringUtils.isBlank(brand) || brand.equals("美的")) { |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读 |
|
if (registerAddr.equalsIgnoreCase("0641")) { //运行状态 |
|
dataType = "runState"; |
|
data = checkStr.substring(8, 10); |
|
if (data.equalsIgnoreCase("08")) { |
|
sValue = "不运行"; //关机模式 |
|
} else if (data.equalsIgnoreCase("01")) { |
|
sValue = "运行"; //制冷模式 |
|
} else if (data.equalsIgnoreCase("02")) { |
|
sValue = "运行"; //制热模式 |
|
} else if (data.equalsIgnoreCase("04")) { |
|
sValue = "运行"; //水泵模式 |
|
} else if (data.equalsIgnoreCase("10")) { |
|
sValue = "运行"; //制热水模式 |
|
} |
|
//计算热泵运行时间,按分钟 |
|
nowDataService.proPumpMinutes(buildingId, addr, sValue); |
|
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equalsIgnoreCase("0642") || registerAddr.equalsIgnoreCase("0007")) { |
|
//0642设定温度,0007水箱水温 |
|
if (registerAddr.equalsIgnoreCase("0642")) { |
|
dataType = "tempSet"; |
|
} else { |
|
dataType = "waterTemp"; |
|
} |
|
//读数 |
|
sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); |
|
if (dataType.equals("waterTemp")) { |
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
publicData.setBuildingId(buildingId); |
|
publicData.setUseWaterTemp(sValue); |
|
publicData.setBackWaterTemp(sValue); |
|
nowPublicDataService.saveNowHistoryPublicData(publicData); |
|
nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存楼栋时间点温度变化 |
|
} else if (dataType.equals("tempSet")) { |
|
pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度 |
|
} |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equalsIgnoreCase("000B")) { //故障状态 |
|
dataType = "isFault"; |
|
String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); |
|
sData = ExchangeStringUtil.addZeroForNum(sData, 8); |
|
if (sData.substring(7, 8).equalsIgnoreCase("0")) { |
|
sValue = "无故障"; |
|
deviceInstallService.updateDeviceFault("0", addr, "热泵"); |
|
} else if (sData.substring(7, 8).equalsIgnoreCase("1")) { |
|
sValue = "有故障"; |
|
deviceInstallService.updateDeviceFault("1", addr, "热泵"); |
|
} |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); |
|
} 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); |
|
sValue = startTime + closetTime; |
|
} |
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); |
|
return Constant.SUCCESS; |
|
} |
|
rtData = sValue; |
|
} else if (brand.equals("美的2")) { |
|
log.info("品牌:" + brand + "," + "寄存器地址:" + registerAddr); |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 |
|
if (registerAddr.equalsIgnoreCase("0BBD")) { //运行状态 |
|
dataType = "runState"; |
|
data = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); |
|
data = ExchangeStringUtil.addZeroForNum(data, 8);//二进制数,补够8位 |
|
data = data.substring(4, 8); //截取后四位 |
|
if (data.equalsIgnoreCase("0000")) { //0 |
|
sValue = "不运行"; //关机 |
|
} else if (data.equalsIgnoreCase("0001")) {//1 |
|
sValue = "运行"; //水泵 |
|
} else if (data.equalsIgnoreCase("0010")) {//2 |
|
sValue = "运行"; //制冷 |
|
} else if (data.equalsIgnoreCase("0011")) {//3 |
|
sValue = "运行"; //制热 |
|
} else if (data.equalsIgnoreCase("0100")) {//4 |
|
sValue = "运行"; //热水 |
|
} else if (data.equalsIgnoreCase("0101")) {//5 |
|
sValue = "运行"; //采暖 |
|
} else if (data.equalsIgnoreCase("0110")) {//6 |
|
sValue = "运行"; //电热模式 |
|
} |
|
//计算热泵运行时间,按分钟 |
|
nowDataService.proPumpMinutes(buildingId, addr, sValue); |
|
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equalsIgnoreCase("0003") || registerAddr.equalsIgnoreCase("0064")) { |
|
//0003设定温度,0064水箱水温 |
|
if (registerAddr.equalsIgnoreCase("0003")) { |
|
dataType = "tempSet"; |
|
} else { |
|
dataType = "waterTemp"; |
|
} |
|
//读数 |
|
sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); |
|
if (dataType.equals("waterTemp")) { |
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
publicData.setBuildingId(buildingId); |
|
publicData.setUseWaterTemp(sValue); |
|
publicData.setBackWaterTemp(sValue); |
|
nowPublicDataService.saveNowHistoryPublicData(publicData); |
|
nowDataService.proWaterTemp(dateStr, buildingId, addr);//保存楼栋温度变化 |
|
} else if (dataType.equals("tempSet")) { |
|
pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度 |
|
} |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equalsIgnoreCase("0BBB")) { //故障状态 |
|
dataType = "isFault"; |
|
String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); |
|
sData = ExchangeStringUtil.addZeroForNum(sData, 8); |
|
if (sData.substring(7, 8).equalsIgnoreCase("0")) { |
|
sValue = "无故障"; |
|
} else if (sData.substring(7, 8).equalsIgnoreCase("1")) { |
|
sValue = "有故障"; |
|
} |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equalsIgnoreCase("0656") |
|
|| registerAddr.equalsIgnoreCase("065A") |
|
|| registerAddr.equalsIgnoreCase("065E")) { //定时设置值 |
|
String startTime = ExchangeStringUtil.hexToDec(checkStr.substring(8, 10)) + ExchangeStringUtil.hexToDec(checkStr.substring(12, 14)); |
|
String closetTime = ExchangeStringUtil.hexToDec(checkStr.substring(16, 18)) + ExchangeStringUtil.hexToDec(checkStr.substring(20, 22)); |
|
sValue = startTime + closetTime; |
|
} |
|
rtData = sValue; |
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) { |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); |
|
return Constant.SUCCESS; |
|
} |
|
} else if (brand.equals("瑞星")) { |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读 |
|
if (registerAddr.equalsIgnoreCase("0001")) { //运行状态 |
|
dataType = "runState"; |
|
data = checkStr.substring(8, 10); |
|
if (data.equalsIgnoreCase("00")) { |
|
sValue = "不运行"; //关机模式 |
|
} else if (data.equalsIgnoreCase("01")) { |
|
sValue = "运行"; //制热模式 |
|
} |
|
//计算热泵运行时间,按分钟 |
|
nowDataService.proPumpMinutes(buildingId, addr, sValue); |
|
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equalsIgnoreCase("000A") || registerAddr.equalsIgnoreCase("0046")) { |
|
//000A设定温度,0046水箱水温 |
|
if (registerAddr.equalsIgnoreCase("000A")) { |
|
dataType = "tempSet"; |
|
} else { |
|
dataType = "waterTemp"; |
|
} |
|
//读数 |
|
sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); |
|
if (dataType.equals("waterTemp")) { |
|
sValue = String.valueOf(Double.parseDouble(sValue)/10); |
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
publicData.setBuildingId(buildingId); |
|
publicData.setUseWaterTemp(sValue); |
|
publicData.setBackWaterTemp(sValue); |
|
nowPublicDataService.saveNowHistoryPublicData(publicData); |
|
nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存楼栋时间点温度变化 |
|
} else if (dataType.equals("tempSet")) { |
|
pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度 |
|
} |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equalsIgnoreCase("0050")) { //故障状态 |
|
dataType = "isFault"; |
|
String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); |
|
sData = ExchangeStringUtil.addZeroForNum(sData, 8); |
|
if (sData.substring(7, 8).equalsIgnoreCase("0")) { |
|
sValue = "无故障"; |
|
deviceInstallService.updateDeviceFault("0", addr, "热泵"); |
|
} else if (sData.substring(7, 8).equalsIgnoreCase("1")) { |
|
sValue = "有故障"; |
|
deviceInstallService.updateDeviceFault("1", addr, "热泵"); |
|
} |
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equalsIgnoreCase("0028") |
|
|| registerAddr.equalsIgnoreCase("002C") |
|
|| registerAddr.equalsIgnoreCase("0030")) { //读定时设置值 |
|
// 01 03 08 0003 0000 0016 0000 4713 |
|
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; |
|
} |
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { |
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); |
|
return Constant.SUCCESS; |
|
} |
|
rtData = sValue; |
|
} |
|
} else { |
|
log.info("热泵报文检验失败: " + receiveData); |
|
} |
|
return rtData; |
|
} |
|
|
|
// 温度变送器,长度42,读功能03 |
|
public void analysisMulTempOrder485(final String receiveData, final String registerAddr, final String brand, final String buildingId, final String buildingName) { |
|
// 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); |
|
if (!checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { |
|
log.info("温度变送器报文检验失败: " + receiveData); |
|
} |
|
//log.info("温度变送器报文检验成功: " + receiveData); |
|
String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 |
|
//log.info("温度变送器:" + addr); |
|
String data = ""; |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 |
|
Map<String, String> map = new HashMap<>(); |
|
String L1 = checkStr.substring(6, 10); //1路 |
|
map.put("1", String.valueOf(ExchangeStringUtil.parseHex4(L1) / 10)); |
|
String L2 = checkStr.substring(10, 14); //2路 |
|
map.put("2", String.valueOf(ExchangeStringUtil.parseHex4(L2) / 10)); |
|
String L3 = checkStr.substring(14, 18); //3路 |
|
map.put("3", String.valueOf(ExchangeStringUtil.parseHex4(L3) / 10)); |
|
String L4 = checkStr.substring(18, 22); //4路 |
|
map.put("4", String.valueOf(ExchangeStringUtil.parseHex4(L4) / 10)); |
|
String L5 = checkStr.substring(22, 26); //5路 |
|
map.put("5", String.valueOf(ExchangeStringUtil.parseHex4(L5) / 10)); |
|
String L6 = checkStr.substring(26, 30); //6路 |
|
map.put("6", String.valueOf(ExchangeStringUtil.parseHex4(L6) / 10)); |
|
String L7 = checkStr.substring(30, 34); //7路 |
|
map.put("7", String.valueOf(ExchangeStringUtil.parseHex4(L7) / 10)); |
|
String L8 = checkStr.substring(34, 38); //8路 |
|
map.put("8", String.valueOf(ExchangeStringUtil.parseHex4(L8) / 10)); |
|
|
|
int count = buildingService.selectPumpCount(buildingId); //楼栋热泵数 |
|
if (count > 0) { |
|
String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); |
|
for (Map.Entry<String, String> entry : map.entrySet()) { |
|
addr = entry.getKey(); |
|
data = entry.getValue(); |
|
if (addr != null && Integer.parseInt(addr) <= count) { |
|
nowDataService.saveNowHistoryData3(addr, "温度变送器", data, "waterTemp", buildingId); |
|
nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存时间点温度 |
|
} |
|
} |
|
log.info("温度变送器:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); |
|
String avgTemp = nowDataService.selectAve(buildingId); |
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
publicData.setBuildingId(buildingId); |
|
publicData.setUseWaterTemp(avgTemp); |
|
publicData.setBackWaterTemp(avgTemp); |
|
nowPublicDataService.saveNowHistoryPublicData(publicData); |
|
} |
|
} |
|
// }); |
|
} |
|
|
|
// 温度变送器,长度42,读功能03 |
|
public String analysisMulTempOrder4852(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { |
|
String result = "fail"; |
|
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
|
Date date = new Date(); |
|
String dateStr = sdf1.format(date); |
|
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); |
|
if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { |
|
//log.info("温度变送器报文检验成功: " + receiveData); |
|
String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 |
|
String data = ""; |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 |
|
Map<String, String> map = new HashMap<>(); |
|
String L1 = checkStr.substring(6, 10); //1路 |
|
map.put("1", String.valueOf(ExchangeStringUtil.parseHex4(L1) / 10)); |
|
String L2 = checkStr.substring(10, 14); //2路 |
|
map.put("2", String.valueOf(ExchangeStringUtil.parseHex4(L2) / 10)); |
|
String L3 = checkStr.substring(14, 18); //3路 |
|
map.put("3", String.valueOf(ExchangeStringUtil.parseHex4(L3) / 10)); |
|
String L4 = checkStr.substring(18, 22); //4路 |
|
map.put("4", String.valueOf(ExchangeStringUtil.parseHex4(L4) / 10)); |
|
String L5 = checkStr.substring(22, 26); //5路 |
|
map.put("5", String.valueOf(ExchangeStringUtil.parseHex4(L5) / 10)); |
|
String L6 = checkStr.substring(26, 30); //6路 |
|
map.put("6", String.valueOf(ExchangeStringUtil.parseHex4(L6) / 10)); |
|
String L7 = checkStr.substring(30, 34); //7路 |
|
map.put("7", String.valueOf(ExchangeStringUtil.parseHex4(L7) / 10)); |
|
String L8 = checkStr.substring(34, 38); //8路 |
|
map.put("8", String.valueOf(ExchangeStringUtil.parseHex4(L8) / 10)); |
|
int count = buildingService.selectPumpCount(buildingId); //楼栋热泵数 |
|
if (count > 0) { |
|
for (Map.Entry<String, String> entry : map.entrySet()) { |
|
addr = entry.getKey(); |
|
data = entry.getValue(); |
|
if (addr != null && Integer.valueOf(addr) <= count) { |
|
nowDataService.saveNowHistoryData3(addr, "温度变送器", data, "waterTemp", buildingId); |
|
nowDataService.proWaterTemp(dateStr, buildingId, addr);//保存时间点温度 |
|
} |
|
} |
|
log.info("温度变送器:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); |
|
String avgTemp = nowDataService.selectAve(buildingId); |
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
publicData.setBuildingId(buildingId); |
|
publicData.setUseWaterTemp(avgTemp); |
|
publicData.setBackWaterTemp(avgTemp); |
|
publicData.setSingleTemp(map.get("1"));//编号最小的热泵温度作为单箱温度 |
|
nowPublicDataService.saveNowHistoryPublicData(publicData); |
|
result = JSON.toJSONString(map); //map转json字符串 |
|
} |
|
} |
|
} else { |
|
log.info("温度变送器报文检验失败: " + receiveData); |
|
} |
|
return result; |
|
} |
|
|
|
// 温控,长度18,读功能03,用于检测水箱水温 |
|
public void analysisTempOrder485(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { |
|
// 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); |
|
if (!checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { |
|
log.info("温控报文检验失败: " + receiveData); |
|
return; |
|
} |
|
String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 |
|
String data = ""; |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 |
|
data = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); |
|
Double fdata = Double.parseDouble(data) / 10; |
|
if (fdata <= 25) { |
|
fdata = 25.0; |
|
} else if (fdata >= 65) { |
|
fdata = 65.0; |
|
} |
|
nowDataService.saveNowHistoryData2(addr, "温控", String.valueOf(fdata), "waterTemp", buildingId); |
|
String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); |
|
nowDataService.proWaterTemp(dateStr, buildingId, "");//保存时间点温度 |
|
String avgTemp = nowDataService.selectAve(buildingId); |
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
publicData.setBuildingId(buildingId); |
|
publicData.setUseWaterTemp(avgTemp); |
|
publicData.setBackWaterTemp(avgTemp); |
|
publicData.setSingleTemp(String.valueOf(fdata));//单箱温度 |
|
nowPublicDataService.saveNowHistoryPublicData(publicData); |
|
log.info("温控号:" + addr + ",温度值:" + fdata + ",保存数据库成功!楼栋名称:" + buildingName); |
|
} |
|
// }); |
|
} |
|
|
|
// 压变,长度14,18读功能03 |
|
public void analysisPressureOrder485(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { |
|
// 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); |
|
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 = ""; |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 |
|
Double wtHeight = 0.0; |
|
if (brand == null || brand.equals("")) { |
|
float fdata = ExchangeStringUtil.hexToSingle(checkStr.substring(6, 14));//十六进制转浮点型 |
|
wtHeight = fdata * 1.02; //通过压力求水高 |
|
} else if (brand.equals("澳升") || brand.equals("汝翊")) { |
|
data = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10));//十六进制转整形 |
|
wtHeight = Double.parseDouble(data) / 100 * 0.102; //通过压力求水高 |
|
} |
|
Double tankHeight = buildingService.queryTankHeight(buildingId);//水箱高,从数据库获取 |
|
if (tankHeight == null) { |
|
tankHeight = 2.0; |
|
} |
|
Double wtLevel = wtHeight / tankHeight * 100; //水箱水位 |
|
log.info("------水箱水高:" + wtLevel + "------"); |
|
if (wtLevel <= 0) { |
|
wtLevel = 0.0; |
|
} else if (wtLevel >= 100) { |
|
wtLevel = 100.0; |
|
} |
|
DecimalFormat df = new DecimalFormat("0.0"); |
|
String strWtLevel = df.format(wtLevel); |
|
// 更新device_install数据 |
|
deviceInstallService.updateLastValueByOther(addr, strWtLevel, "压变", buildingId); |
|
|
|
nowDataService.saveNowHistoryData2(addr, "压变", strWtLevel, "waterLevel", buildingId); |
|
log.info("压变号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); |
|
nowDataService.proWaterLevel(dateStr, buildingId, addr); //楼栋水位 |
|
log.info("------保存每栋楼小时水位情况" + dateStr + "------"); |
|
} |
|
// }); |
|
} |
|
|
|
// 压变,长度14,18读功能03 |
|
public String analysisPressureOrder4852(final String receiveData, final String registerAddr, final String brand, String buildingId, final String buildingName) { |
|
String result = "fail"; |
|
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); |
|
if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { |
|
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 = ""; |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 |
|
Double wtHeight = 0.0; |
|
if (StringUtils.isBlank(brand)) { |
|
float fdata = ExchangeStringUtil.hexToSingle(checkStr.substring(6, 14));//十六进制转浮点型 |
|
wtHeight = fdata * 1.02; //通过压力求水高 |
|
} else if (brand.equals("澳升") || brand.equals("汝翊")) { |
|
data = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10));//十六进制转整形 |
|
wtHeight = Double.parseDouble(data) / 100 * 0.102; //通过压力求水高 |
|
} |
|
Double tankHeight = buildingService.queryTankHeight(buildingId);//水箱高,从数据库获取 |
|
if (tankHeight == null) { |
|
tankHeight = 2.0; |
|
} |
|
Double wtLevel = wtHeight / tankHeight * 100; //水箱水位 |
|
log.info("------水箱水高:" + wtLevel + "------"); |
|
if (wtLevel <= 0) { |
|
wtLevel = 0.0; |
|
} else if (wtLevel >= 100) { |
|
wtLevel = 100.0; |
|
} |
|
DecimalFormat df = new DecimalFormat("0.0"); |
|
String strWtLevel = df.format(wtLevel); |
|
result = strWtLevel; |
|
// 更新device_install数据 |
|
deviceInstallService.updateLastValueByOther(addr, strWtLevel, "压变", buildingId); |
|
|
|
nowDataService.saveNowHistoryData2(addr, "压变", strWtLevel, "waterLevel", buildingId); |
|
log.info("压变号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); |
|
nowDataService.proWaterLevel(dateStr, buildingId, addr); //楼栋水位 |
|
log.info("------保存每栋楼小时水位情况------" + dateStr); |
|
} |
|
} else { |
|
log.info("压变报文检验失败: " + receiveData); |
|
} |
|
return result; |
|
} |
|
|
|
// 水位开关,长度42,128 |
|
public void analysisRelayOrder485(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { |
|
// threadPoolService.execute(() -> { |
|
String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); |
|
String l1 = ""; |
|
String l2 = ""; |
|
String l3 = ""; |
|
String l4 = ""; |
|
String l5 = ""; |
|
String l6 = ""; |
|
String l7 = ""; |
|
String l8 = ""; |
|
String waterLevelSet = ""; |
|
String addr = ""; |
|
if (brand == null || brand.equals("") || brand.equals("中凯")) { |
|
String checkStr = receiveData.substring(0, receiveData.length() - 4); //减去校验码 |
|
addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); |
|
if (registerAddr != null && !registerAddr.equals("")) { |
|
if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用 |
|
l1 = checkStr.substring(4, 6); |
|
l2 = checkStr.substring(20, 22); |
|
l3 = checkStr.substring(36, 38); |
|
l4 = checkStr.substring(52, 54); |
|
l5 = checkStr.substring(68, 70); |
|
l6 = checkStr.substring(84, 86); |
|
l7 = checkStr.substring(100, 102); |
|
l8 = checkStr.substring(116, 118); |
|
} else if (registerAddr.equals("0012")) { |
|
log.info("时间:" + dateStr + ",水位开关ID:" + addr + ",操作成功! "); |
|
} |
|
} |
|
} else if (brand.equals("远向")) { |
|
String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 |
|
String checkWord = ExchangeStringUtil.getStrCRC16(checkStr); |
|
if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { |
|
addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 |
|
if (checkStr.substring(2, 4).equals("03")) { |
|
if (registerAddr != null && !registerAddr.equals("")) { |
|
// if (registerAddr.equals("0018")){ |
|
l1 = checkStr.substring(6, 10); |
|
l2 = checkStr.substring(10, 14); |
|
l3 = checkStr.substring(14, 18); |
|
l4 = checkStr.substring(18, 22); |
|
l5 = checkStr.substring(22, 26); |
|
l6 = checkStr.substring(26, 30); |
|
l7 = checkStr.substring(30, 34); |
|
l8 = checkStr.substring(34, 38); |
|
// } |
|
} |
|
} else if (checkStr.substring(2, 4).equals("06") || checkStr.substring(2, 4).equals("04")) { |
|
log.info("时间:" + dateStr + ",水位开关ID:" + addr + ",操作成功! "); |
|
} |
|
} else { |
|
log.info("水位开关报文检验失败: " + receiveData); |
|
} |
|
} else if (brand.equals("顶威")) { |
|
String checkStr = receiveData.substring(0, receiveData.length() - 4); //减去校验码 |
|
String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 |
|
if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4, receiveData.length() - 2))) { |
|
//表号,12位 |
|
String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) |
|
+ checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); |
|
meterId = String.format("%012d", Long.parseLong(meterId)); |
|
if (registerAddr != null && !registerAddr.equals("")) { |
|
if (registerAddr.equals("0102")) { |
|
String data = receiveData.substring(26, 28); |
|
data = ExchangeStringUtil.cutThree(data); |
|
data = ExchangeStringUtil.addZeroForNum(data, 2); |
|
if (data.equalsIgnoreCase("00")) {//全闭 |
|
waterLevelSet = "100"; //100% |
|
} else if (data.equalsIgnoreCase("01")) { |
|
waterLevelSet = "90"; //90% |
|
} else if (data.equalsIgnoreCase("03")) { |
|
waterLevelSet = "85"; |
|
} else if (data.equalsIgnoreCase("07")) { |
|
waterLevelSet = "80"; |
|
} else if (data.equalsIgnoreCase("0F")) { |
|
waterLevelSet = "75"; |
|
} else if (data.equalsIgnoreCase("1F")) { |
|
waterLevelSet = "70"; |
|
} else if (data.equalsIgnoreCase("3F")) { |
|
waterLevelSet = "65"; |
|
} else if (data.equalsIgnoreCase("7F")) { |
|
waterLevelSet = "60"; |
|
} else if (data.equalsIgnoreCase("FF")) { //全开 |
|
waterLevelSet = "50"; |
|
} else if (data.equalsIgnoreCase("24")) { |
|
waterLevelSet = "自动"; |
|
} |
|
nowDataService.saveNowHistoryData2(meterId, "水位开关", waterLevelSet, "levelSet", buildingId); |
|
log.info("水位开关号:" + meterId + ",保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equalsIgnoreCase("0407")) { |
|
log.info("时间: " + dateStr + ",继电器ID: " + meterId + ",操作成功! "); |
|
} |
|
} |
|
} else { |
|
log.info("水位开关报文检验失败: " + receiveData); |
|
} |
|
} |
|
if (registerAddr != null && !registerAddr.equals("")) { |
|
if (registerAddr.equals("0017") || registerAddr.equals("0018")) { |
|
if (l1.equals("12") || l1.equals("0001")) { |
|
waterLevelSet = "90"; |
|
} else if (l2.equals("12") || l2.equals("0001")) { |
|
waterLevelSet = "80"; |
|
} else if (l3.equals("12") || l3.equals("0001")) { |
|
waterLevelSet = "70"; |
|
} else if (l4.equals("12") || l4.equals("0001")) { |
|
waterLevelSet = "60"; |
|
} else if (l5.equals("12") || l5.equals("0001")) { |
|
waterLevelSet = "50"; |
|
} else if (l6.equals("12") || l6.equals("0001")) { |
|
waterLevelSet = "40"; |
|
} |
|
//全开或者全关 |
|
if (l1.equals("12") && l2.equals("12") && l3.equals("12") && l4.equals("12") && l5.equals("12") && l6.equals("12")) { |
|
waterLevelSet = "40"; |
|
} else if (l1.equals("11") && l2.equals("11") && l3.equals("11") && l4.equals("11") && l5.equals("11") && l6.equals("11")) { |
|
waterLevelSet = "100"; |
|
} else if (l1.equals("0001") && l2.equals("0001") && l3.equals("0001") && l4.equals("0001") && l5.equals("0001") && l6.equals("0001")) { |
|
waterLevelSet = "40"; |
|
} else if (l1.equals("0000") && l2.equals("0000") && l3.equals("0000") && l4.equals("0000") && l5.equals("0000") && l6.equals("0000")) { |
|
waterLevelSet = "100"; |
|
} |
|
nowDataService.saveNowHistoryData2(addr, "水位开关", waterLevelSet, "levelSet", buildingId); |
|
log.info("水位开关保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equals("0010")) { |
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
publicData.setBuildingId(buildingId); |
|
if (l1.equals("0001")) { //l路,0000表示有输入,0001表示无输入 |
|
publicData.setUseWater("运行"); //供水 |
|
publicData.setBackWater("运行");//回水 |
|
} else { |
|
publicData.setUseWater("不运行"); |
|
publicData.setBackWater("不运行"); |
|
} |
|
log.info("-----------------供水/回水状态:" + l1 + "-----------------"); |
|
if (l2.equals("0001")) { //2路 //补水 |
|
publicData.setUpWater("运行"); |
|
} else { |
|
publicData.setUpWater("不运行"); |
|
} |
|
log.info("-----------------补水状态:" + l2 + "-----------------"); |
|
nowPublicDataService.saveNowHistoryPublicData(publicData); |
|
log.info("-----------------状态保存数据库成功!楼栋名称:" + buildingName + "-----------------"); |
|
} |
|
} |
|
// }); |
|
} |
|
|
|
// 水位开关,长度42,128 |
|
public String analysisRelayOrder4852(final String receiveData, final String registerAddr, final String brand, String buildingId, final String buildingName) { |
|
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss"); |
|
Date date = new Date(); |
|
String dateStr = sdf1.format(date); |
|
String l1 = ""; |
|
String l2 = ""; |
|
String l3 = ""; |
|
String l4 = ""; |
|
String l5 = ""; |
|
String l6 = ""; |
|
String l7 = ""; |
|
String l8 = ""; |
|
String waterLevelSet = ""; |
|
String addr = ""; |
|
if (brand == null || brand.equals("") || brand.equals("中凯")) { |
|
// 检验报文 |
|
String checkStr = receiveData.substring(0, receiveData.length() - 4); //减去校验码 |
|
addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); //地址 |
|
if (registerAddr != null && !registerAddr.equals("")) { |
|
if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用 |
|
l1 = checkStr.substring(4, 6); |
|
l2 = checkStr.substring(20, 22); |
|
l3 = checkStr.substring(36, 38); |
|
l4 = checkStr.substring(52, 54); |
|
l5 = checkStr.substring(68, 70); |
|
l6 = checkStr.substring(84, 86); |
|
l7 = checkStr.substring(100, 102); |
|
l8 = checkStr.substring(116, 118); |
|
} else if (registerAddr.equalsIgnoreCase("0012")) { |
|
log.info("时间:" + dateStr + ",水位开关ID:" + addr + ",操作成功! "); |
|
} |
|
} |
|
} else if (brand.equals("远向")) { |
|
String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 |
|
String checkWord = ExchangeStringUtil.getStrCRC16(checkStr); |
|
if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { |
|
addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2)); |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) { |
|
if (registerAddr != null && !registerAddr.equals("")) { |
|
if (registerAddr.equalsIgnoreCase("0018")) { |
|
l1 = checkStr.substring(6, 10); |
|
l2 = checkStr.substring(10, 14); |
|
l3 = checkStr.substring(14, 18); |
|
l4 = checkStr.substring(18, 22); |
|
l5 = checkStr.substring(22, 26); |
|
l6 = checkStr.substring(26, 30); |
|
l7 = checkStr.substring(30, 34); |
|
l8 = checkStr.substring(34, 38); |
|
} |
|
} |
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("06") || checkStr.substring(2, 4).equalsIgnoreCase("04")) { |
|
log.info("时间:" + dateStr + ",水位开关ID:" + addr + ",操作成功! "); |
|
} |
|
} else { |
|
log.info("水位开关报文检验失败: " + receiveData); |
|
} |
|
} else if (brand.equals("顶威")) { |
|
String checkStr = receiveData.substring(0, receiveData.length() - 4); //减去校验码 |
|
String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 |
|
if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4, receiveData.length() - 2))) { |
|
//表号,12位 |
|
String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) |
|
+ checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); |
|
meterId = String.format("%012d", Long.parseLong(meterId)); |
|
if (registerAddr != null && !registerAddr.equals("")) { |
|
if (registerAddr.equalsIgnoreCase("0102")) { |
|
String data = receiveData.substring(24, 26); |
|
data = ExchangeStringUtil.cutThree(data); |
|
data = ExchangeStringUtil.addZeroForNum(data, 2); |
|
if (data.equalsIgnoreCase("00")) {//全闭 |
|
waterLevelSet = "100"; //100% |
|
} else if (data.equalsIgnoreCase("01")) { |
|
waterLevelSet = "90"; |
|
} else if (data.equalsIgnoreCase("03")) { |
|
waterLevelSet = "85"; |
|
} else if (data.equalsIgnoreCase("07")) { |
|
waterLevelSet = "80"; |
|
} else if (data.equalsIgnoreCase("0F")) { |
|
waterLevelSet = "75"; |
|
} else if (data.equalsIgnoreCase("1F")) { |
|
waterLevelSet = "70"; |
|
} else if (data.equalsIgnoreCase("3F")) { |
|
waterLevelSet = "65"; |
|
} else if (data.equalsIgnoreCase("7F")) { |
|
waterLevelSet = "60"; |
|
} else if (data.equalsIgnoreCase("FF")) { //全开 |
|
waterLevelSet = "50"; |
|
} else if (data.equalsIgnoreCase("24")) { |
|
waterLevelSet = "自动"; |
|
} |
|
nowDataService.saveNowHistoryData2(meterId, "水位开关", waterLevelSet, "levelSet", buildingId); |
|
log.info("水位开关" + meterId + ",保存数据库成功!楼栋名称:" + buildingName); |
|
} else if (registerAddr.equalsIgnoreCase("0407")) { |
|
log.info("时间:" + dateStr + ",继电器ID:" + meterId + ",操作成功! "); |
|
} |
|
} |
|
} else { |
|
log.info("水位开关报文检验失败: " + receiveData); |
|
} |
|
} |
|
if (registerAddr != null && !registerAddr.equals("")) { |
|
if (registerAddr.equals("0017") || registerAddr.equals("0018")) { |
|
if (l1.equals("12") || l1.equals("0001")) { |
|
waterLevelSet = "90"; |
|
} else if (l2.equals("12") || l2.equals("0001")) { |
|
waterLevelSet = "80"; |
|
} else if (l3.equals("12") || l3.equals("0001")) { |
|
waterLevelSet = "70"; |
|
} else if (l4.equals("12") || l4.equals("0001")) { |
|
waterLevelSet = "60"; |
|
} else if (l5.equals("12") || l5.equals("0001")) { |
|
waterLevelSet = "50"; |
|
} else if (l6.equals("12") || l6.equals("0001")) { |
|
waterLevelSet = "40"; |
|
} |
|
//全开或者全关 |
|
if (l1.equals("12") && l2.equals("12") && l3.equals("12") && l4.equals("12") && l5.equals("12") && l6.equals("12")) { |
|
waterLevelSet = "40"; |
|
} else if (l1.equals("11") && l2.equals("11") && l3.equals("11") && l4.equals("11") && l5.equals("11") && l6.equals("11")) { |
|
waterLevelSet = "100"; |
|
} else if (l1.equals("0001") && l2.equals("0001") && l3.equals("0001") && l4.equals("0001") && l5.equals("0001") && l6.equals("0001")) { |
|
waterLevelSet = "40"; |
|
} else if (l1.equals("0000") && l2.equals("0000") && l3.equals("0000") && l4.equals("0000") && l5.equals("0000") && l6.equals("0000")) { |
|
waterLevelSet = "100"; |
|
} |
|
nowDataService.saveNowHistoryData2(addr, "水位开关", waterLevelSet, "levelSet", buildingId); |
|
log.info("水位开关保存数据库成功!楼栋名称:" + buildingName); |
|
} |
|
} |
|
log.info("--------------水位:" + registerAddr + "," + waterLevelSet); |
|
return waterLevelSet; |
|
} |
|
|
|
// 热泵状态处理(水位开关),长度42,128 |
|
public void analysisPumpStateOrder(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { |
|
// threadPoolService.execute(() -> { |
|
String dateStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); |
|
String l1 = ""; |
|
String l2 = ""; |
|
String l3 = ""; |
|
String l4 = ""; |
|
String l5 = ""; |
|
String l6 = ""; |
|
String l7 = ""; |
|
String l8 = ""; |
|
String runState = ""; |
|
String addr = ""; |
|
Map<String, String> map = new HashMap<String, String>(); |
|
if (brand == null || brand.equals("") || brand.equals("顶威")) { |
|
String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文减,去校验码 |
|
String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 |
|
if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4, receiveData.length() - 2))) { |
|
//表号,12位 |
|
addr = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) |
|
+ checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); |
|
addr = addr.replaceAll("^0*", ""); |
|
String data = checkStr.substring(24, 26); //截取数值 |
|
data = ExchangeStringUtil.cutThree(data); |
|
String strStatus = ExchangeStringUtil.hexString2binaryString(data); |
|
strStatus = String.format("%08d", Long.parseLong(strStatus)); |
|
if (strStatus.substring(7, 8).equals("1")) { |
|
l1 = "1"; |
|
} else { |
|
l1 = "0"; |
|
} |
|
if (strStatus.substring(6, 7).equals("1")) { |
|
l2 = "1"; |
|
} else { |
|
l2 = "0"; |
|
} |
|
if (strStatus.substring(5, 6).equals("1")) { |
|
l3 = "1"; |
|
} else { |
|
l3 = "0"; |
|
} |
|
if (strStatus.substring(4, 5).equals("1")) { |
|
l4 = "1"; |
|
} else { |
|
l4 = "0"; |
|
} |
|
if (strStatus.substring(3, 4).equals("1")) { |
|
l5 = "1"; |
|
} else { |
|
l5 = "0"; |
|
} |
|
if (strStatus.substring(2, 3).equals("1")) { |
|
l6 = "1"; |
|
} else { |
|
l6 = "0"; |
|
} |
|
if (strStatus.substring(1, 2).equals("1")) { |
|
l7 = "1"; |
|
} else { |
|
l7 = "0"; |
|
} |
|
if (strStatus.substring(0, 1).equals("1")) { |
|
l8 = "1"; |
|
} else { |
|
l8 = "0"; |
|
} |
|
} |
|
} else if (brand.equals("中凯")) { |
|
String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文,减去校验码 |
|
addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); |
|
//if (registerAddr!=null && !registerAddr.equals("")) { |
|
//if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用 |
|
l1 = checkStr.substring(4, 6); |
|
l2 = checkStr.substring(20, 22); |
|
l3 = checkStr.substring(36, 38); |
|
l4 = checkStr.substring(52, 54); |
|
l5 = checkStr.substring(68, 70); |
|
l6 = checkStr.substring(84, 86); |
|
l7 = checkStr.substring(100, 102); |
|
l8 = checkStr.substring(116, 118); |
|
//} else if (registerAddr.equals("0012")) { |
|
//log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! "); |
|
//} |
|
//} |
|
} else if (brand.equals("远向")) { |
|
String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 |
|
String checkWord = ExchangeStringUtil.getStrCRC16(checkStr); |
|
if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { |
|
addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 |
|
//if (checkStr.substring(2, 4).equals("03")) { |
|
//if (registerAddr!=null && !registerAddr.equals("")){ |
|
l1 = checkStr.substring(6, 10); |
|
l2 = checkStr.substring(10, 14); |
|
l3 = checkStr.substring(14, 18); |
|
l4 = checkStr.substring(18, 22); |
|
l5 = checkStr.substring(22, 26); |
|
l6 = checkStr.substring(26, 30); |
|
l7 = checkStr.substring(30, 34); |
|
l8 = checkStr.substring(34, 38); |
|
//} |
|
//} else if (checkStr.substring(2, 4).equals("06") || checkStr.substring(2, 4).equals("04")) { |
|
//log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! " ); |
|
//} |
|
} else { |
|
log.info("热泵状态报文检验失败: " + receiveData); |
|
} |
|
} |
|
//if (registerAddr!=null && !registerAddr.equals("")){ |
|
//if (registerAddr.equals("0017") || registerAddr.equals("0010")){ |
|
if (l1.equals("12") || l1.equals("0001")) { //正常是0001 |
|
// if (l1.equals("12") || l1.equals("0000") || l1.equals("1")){ |
|
map.put("1", "运行"); |
|
} else { |
|
map.put("1", "不运行"); |
|
} |
|
if (l2.equals("12") || l2.equals("0001")) { |
|
// if (l2.equals("12") || l2.equals("0000") || l2.equals("1")){ |
|
map.put("2", "运行"); |
|
} else { |
|
map.put("2", "不运行"); |
|
} |
|
if (l3.equals("12") || l3.equals("0001")) { |
|
// if (l3.equals("12") || l3.equals("0000") || l3.equals("1")) { |
|
map.put("3", "运行"); |
|
} else { |
|
map.put("3", "不运行"); |
|
} |
|
if (l4.equals("12") || l4.equals("0001")) { |
|
// if (l4.equals("12") || l4.equals("0000") || l4.equals("1")){ |
|
map.put("4", "运行"); |
|
} else { |
|
map.put("4", "不运行"); |
|
} |
|
if (l5.equals("12") || l5.equals("0001")) { |
|
// if (l5.equals("12") || l5.equals("0000") || l5.equals("1")){ |
|
map.put("5", "运行"); |
|
} else { |
|
map.put("5", "不运行"); |
|
} |
|
if (l6.equals("12") || l6.equals("0001")) { |
|
// if (l6.equals("12") || l6.equals("0000") || l6.equals("1")){ |
|
map.put("6", "运行"); |
|
} else { |
|
map.put("6", "不运行"); |
|
} |
|
if (l7.equals("12") || l7.equals("0001")) { |
|
// if (l7.equals("12") || l7.equals("0000") || l7.equals("1")){ |
|
map.put("7", "运行"); |
|
} else { |
|
map.put("7", "不运行"); |
|
} |
|
if (l8.equals("12") || l8.equals("0001")) { |
|
// if (l8.equals("12") || l8.equals("0000") || l8.equals("1")){ |
|
map.put("8", "运行"); |
|
} else { |
|
map.put("8", "不运行"); |
|
} |
|
int count = buildingService.selectPumpCount(buildingId); //楼栋热泵数 |
|
if (count > 0) { |
|
for (Map.Entry<String, String> entry : map.entrySet()) { |
|
addr = entry.getKey(); //获取Key值作为热泵ID |
|
runState = entry.getValue(); |
|
if (addr != null && Integer.valueOf(addr) <= count) { |
|
nowDataService.saveNowHistoryData3(addr, "热泵状态", runState, "runState", buildingId); |
|
nowDataService.proPumpMinutes(buildingId, addr, runState); //计算热泵运行时长 |
|
nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存时间点温度 |
|
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + runState); |
|
} |
|
} |
|
log.info("热泵状态号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); |
|
} |
|
//} |
|
//} |
|
// }); |
|
} |
|
|
|
// 热泵状态处理(水位开关),长度42,128 |
|
public String analysisPumpStateOrder2(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { |
|
String result = "fail"; |
|
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
|
Date date = new Date(); |
|
String dateStr = sdf1.format(date); |
|
String l1 = ""; |
|
String l2 = ""; |
|
String l3 = ""; |
|
String l4 = ""; |
|
String l5 = ""; |
|
String l6 = ""; |
|
String l7 = ""; |
|
String l8 = ""; |
|
String runState = ""; |
|
String addr = ""; |
|
Map<String, String> map = new HashMap<String, String>(); |
|
if (brand == null || brand.equals("") || brand.equals("顶威")) { |
|
String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文减,去校验码 |
|
String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 |
|
if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4, receiveData.length() - 2))) { |
|
//表号,12位 |
|
addr = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) |
|
+ checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); |
|
addr = addr.replaceAll("^0*", ""); |
|
String data = checkStr.substring(24, 26); //截取数值 |
|
data = ExchangeStringUtil.cutThree(data); |
|
String strStatus = ExchangeStringUtil.hexString2binaryString(data); |
|
strStatus = String.format("%08d", Long.parseLong(strStatus)); |
|
if (strStatus.substring(7, 8).equals("1")) { |
|
l1 = "1"; |
|
} else { |
|
l1 = "0"; |
|
} |
|
if (strStatus.substring(6, 7).equals("1")) { |
|
l2 = "1"; |
|
} else { |
|
l2 = "0"; |
|
} |
|
if (strStatus.substring(5, 6).equals("1")) { |
|
l3 = "1"; |
|
} else { |
|
l3 = "0"; |
|
} |
|
if (strStatus.substring(4, 5).equals("1")) { |
|
l4 = "1"; |
|
} else { |
|
l4 = "0"; |
|
} |
|
if (strStatus.substring(3, 4).equals("1")) { |
|
l5 = "1"; |
|
} else { |
|
l5 = "0"; |
|
} |
|
if (strStatus.substring(2, 3).equals("1")) { |
|
l6 = "1"; |
|
} else { |
|
l6 = "0"; |
|
} |
|
if (strStatus.substring(1, 2).equals("1")) { |
|
l7 = "1"; |
|
} else { |
|
l7 = "0"; |
|
} |
|
if (strStatus.substring(0, 1).equals("1")) { |
|
l8 = "1"; |
|
} else { |
|
l8 = "0"; |
|
} |
|
} |
|
} else if (brand.equals("中凯")) { |
|
String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文,减去校验码 |
|
addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); |
|
//if (registerAddr!=null && !registerAddr.equals("")) { |
|
//if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用 |
|
l1 = checkStr.substring(4, 6); |
|
l2 = checkStr.substring(20, 22); |
|
l3 = checkStr.substring(36, 38); |
|
l4 = checkStr.substring(52, 54); |
|
l5 = checkStr.substring(68, 70); |
|
l6 = checkStr.substring(84, 86); |
|
l7 = checkStr.substring(100, 102); |
|
l8 = checkStr.substring(116, 118); |
|
//} else if (registerAddr.equals("0012")) { |
|
//log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! "); |
|
//} |
|
//} |
|
} else if (brand.equals("远向")) { |
|
String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 |
|
String checkWord = ExchangeStringUtil.getStrCRC16(checkStr); |
|
if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { |
|
addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 |
|
//if (checkStr.substring(2, 4).equals("03")) { |
|
//if (registerAddr!=null && !registerAddr.equals("")){ |
|
l1 = checkStr.substring(6, 10); |
|
l2 = checkStr.substring(10, 14); |
|
l3 = checkStr.substring(14, 18); |
|
l4 = checkStr.substring(18, 22); |
|
l5 = checkStr.substring(22, 26); |
|
l6 = checkStr.substring(26, 30); |
|
l7 = checkStr.substring(30, 34); |
|
l8 = checkStr.substring(34, 38); |
|
//} |
|
//} else if (checkStr.substring(2, 4).equals("06") || checkStr.substring(2, 4).equals("04")) { |
|
//log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! " ); |
|
//} |
|
} else { |
|
log.info("热泵状态报文检验失败: " + receiveData); |
|
} |
|
} |
|
//if (registerAddr!=null && !registerAddr.equals("")){ |
|
//if (registerAddr.equals("0017") || registerAddr.equals("0010")){ |
|
if (l1.equals("12") || l1.equals("0001")) { //正常是0001 |
|
// if (l1.equals("12") || l1.equals("0000") || l1.equals("1")){ |
|
map.put("1", "运行"); |
|
} else { |
|
map.put("1", "不运行"); |
|
} |
|
if (l2.equals("12") || l2.equals("0001")) { |
|
// if (l2.equals("12") || l2.equals("0000") || l2.equals("1")){ |
|
map.put("2", "运行"); |
|
} else { |
|
map.put("2", "不运行"); |
|
} |
|
if (l3.equals("12") || l3.equals("0001")) { |
|
// if (l3.equals("12") || l3.equals("0000") || l3.equals("1")) { |
|
map.put("3", "运行"); |
|
} else { |
|
map.put("3", "不运行"); |
|
} |
|
if (l4.equals("12") || l4.equals("0001")) { |
|
// if (l4.equals("12") || l4.equals("0000") || l4.equals("1")){ |
|
map.put("4", "运行"); |
|
} else { |
|
map.put("4", "不运行"); |
|
} |
|
if (l5.equals("12") || l5.equals("0001")) { |
|
// if (l5.equals("12") || l5.equals("0000") || l5.equals("1")){ |
|
map.put("5", "运行"); |
|
} else { |
|
map.put("5", "不运行"); |
|
} |
|
if (l6.equals("12") || l6.equals("0001")) { |
|
// if (l6.equals("12") || l6.equals("0000") || l6.equals("1")){ |
|
map.put("6", "运行"); |
|
} else { |
|
map.put("6", "不运行"); |
|
} |
|
if (l7.equals("12") || l7.equals("0001")) { |
|
// if (l7.equals("12") || l7.equals("0000") || l7.equals("1")){ |
|
map.put("7", "运行"); |
|
} else { |
|
map.put("7", "不运行"); |
|
} |
|
if (l8.equals("12") || l8.equals("0001")) { |
|
// if (l8.equals("12") || l8.equals("0000") || l8.equals("1")){ |
|
map.put("8", "运行"); |
|
} else { |
|
map.put("8", "不运行"); |
|
} |
|
int count = buildingService.selectPumpCount(buildingId); //楼栋热泵数 |
|
if (count > 0) { |
|
for (Map.Entry<String, String> entry : map.entrySet()) { |
|
addr = entry.getKey(); //获取Key值作为热泵ID |
|
runState = entry.getValue(); |
|
if (addr != null && Integer.valueOf(addr) <= count) { |
|
nowDataService.saveNowHistoryData3(addr, "热泵状态", runState, "runState", buildingId); |
|
nowDataService.proPumpMinutes(buildingId, addr, runState); //计算热泵运行时长 |
|
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + runState); |
|
} |
|
} |
|
log.info("热泵状态号" + addr + ",保存数据库成功!楼栋名称:" + buildingName); |
|
result = JSON.toJSONString(map); //map转json字符串 |
|
} |
|
//} |
|
//} |
|
return result; |
|
} |
|
|
|
//状态检测 |
|
public void analysisStateOrder485(final String dataStr, final String registerAddr, final String brand, String buildingId, String buildingName) { |
|
if (dataStr.length() == 30) { |
|
//检验报文 |
|
String checkStr = dataStr.substring(0, dataStr.length() - 4); //减去校验码 |
|
String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 |
|
//返回的校验码与重新生成的校验码进行校验 |
|
if (checkNum.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4, dataStr.length() - 2))) { |
|
//表号,12位 |
|
String meterId = checkStr.substring(12, 14) + checkStr.substring(10, 12) + checkStr.substring(8, 10) |
|
+ checkStr.substring(6, 8) + checkStr.substring(4, 6) + checkStr.substring(2, 4); |
|
meterId = meterId.replaceAll("^0*", ""); |
|
//数值 |
|
String data = checkStr.substring(24, 26); |
|
data = ExchangeStringUtil.cutThree(data); |
|
String strStatus = ExchangeStringUtil.hexString2binaryString(data); |
|
strStatus = String.format("%08d", Long.parseLong(strStatus)); |
|
String backWater; |
|
if (strStatus.substring(7, 8).equals("1")) {//回水 |
|
backWater = "运行"; |
|
} else { |
|
backWater = "不运行"; |
|
} |
|
String hotPump; |
|
if (strStatus.substring(6, 7).equals("1")) {//热泵 |
|
hotPump = "运行"; |
|
} else { |
|
hotPump = "不运行"; |
|
} |
|
String upWater; |
|
if (strStatus.substring(5, 6).equals("1")) {//上水或者补水 |
|
upWater = "运行"; |
|
} else { |
|
upWater = "不运行"; |
|
} |
|
String useWater; |
|
if (strStatus.substring(4, 5).equals("1")) {//用水或者供水 |
|
useWater = "运行"; |
|
} else { |
|
useWater = "不运行"; |
|
} |
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
publicData.setUseWater(useWater); |
|
publicData.setUpWater(upWater); |
|
publicData.setBackWater(backWater); |
|
publicData.setBuildingId(buildingId); |
|
try { |
|
//通过状态检测保存热泵状态 |
|
nowDataService.saveNowHistoryData2(meterId, "状态检测", hotPump, "runState", buildingId); |
|
nowPublicDataService.saveNowHistoryPublicData(publicData); |
|
nowDataService.proPumpMinutes(buildingId, "1", hotPump); //如果只有一台热泵,pumpId为1 |
|
log.info("状态ID:" + meterId + ",回水:" + backWater + ",补水:" + upWater + ",供水:" + useWater + ",热泵:" + hotPump + ",保存数据成功!楼栋:" + buildingName); |
|
} catch (Exception e) { |
|
log.error("解析状态检测异常==>", e); |
|
} |
|
} else { |
|
log.info("状态检测报文检验失败: " + dataStr); |
|
} |
|
} |
|
} |
|
|
|
//时间控制器,长度26、22 |
|
public void analysisTimeSetOrder485(final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { |
|
// threadPoolService.execute(() -> { |
|
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
|
Date date = new Date(); |
|
String dateStr = sdf1.format(date); |
|
// 检验报文 |
|
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))) { |
|
log.info("时控报文检验成功: " + receiveData); |
|
//地址 |
|
String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2)); |
|
log.info("时控号: " + addr); |
|
// System.out.println("时控号: " + addr); |
|
String data = ""; |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 |
|
int rec = receiveData.length(); |
|
|
|
if (rec == 26) { //读时间设置值 |
|
data = checkStr.substring(6, rec - 4); |
|
String curTimeBegin1 = data.substring(0, 2) + ":" + data.substring(2, 4); |
|
String curTimeEnd1 = data.substring(4, 6) + ":" + data.substring(6, 8); |
|
String curTimeBegin2 = data.substring(8, 10) + ":" + data.substring(10, 12); |
|
String curTimeEnd2 = data.substring(12, 14) + ":" + data.substring(14, 16); |
|
|
|
} else if (rec == 22) { //读校对时间 |
|
data = checkStr.substring(8, rec - 4); |
|
String strDate = "20" + data.substring(0, 2) + "-" + data.substring(2, 4) + "-" + data.substring(4, 6); //拼接日期 |
|
String strTime = data.substring(6, 8) + ":" + data.substring(8, 10); //拼接时间 |
|
} |
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("05") || checkStr.substring(2, 4).equalsIgnoreCase("10")) { |
|
log.info("时间: " + dateStr + ",时控ID: " + addr + ",操作成功! "); |
|
// System.out.println("时间: " + dateStr + ",时控ID: " + addr + ",操作成功! "); |
|
} |
|
} |
|
// }); |
|
} |
|
|
|
//时间控制器,长度26、22 |
|
public String analysisTimeSetOrder4852(final String receiveData, final String registerAddr, final String brand, String buildingId, final String buildingName) { |
|
String result = "fail"; |
|
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
|
Date date = new Date(); |
|
String dateStr = sdf1.format(date); |
|
// 去掉空格 |
|
// String receiveData = receiveData1.replace(" ", ""); |
|
// 检验报文 |
|
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))) { |
|
log.info("时控报文检验成功: " + receiveData); |
|
// System.out.println("时控报文检验成功: " + receiveData); |
|
//地址 |
|
String addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2)); |
|
log.info("时控号:" + addr); |
|
// System.out.println("时控号: " + addr); |
|
String data = ""; |
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读 |
|
int rec = receiveData.length(); |
|
|
|
if (rec == 26) { //读时间设置值 |
|
data = checkStr.substring(6, rec - 4); |
|
String curTimeBegin1 = data.substring(0, 2) + ":" + data.substring(2, 4); |
|
String curTimeEnd1 = data.substring(4, 6) + ":" + data.substring(6, 8); |
|
String curTimeBegin2 = data.substring(8, 10) + ":" + data.substring(10, 12); |
|
String curTimeEnd2 = data.substring(12, 14) + ":" + data.substring(14, 16); |
|
} else if (rec == 22) { //读校对时间 |
|
data = checkStr.substring(8, rec - 4); |
|
String strDate = "20" + data.substring(0, 2) + "-" + data.substring(2, 4) + "-" + data.substring(4, 6); //拼接日期 |
|
String strTime = data.substring(6, 8) + ":" + data.substring(8, 10); //拼接时间 |
|
} |
|
result = data; |
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("05") || checkStr.substring(2, 4).equalsIgnoreCase("10")) { |
|
log.info("时间:" + dateStr + ",时控ID:" + addr + ",操作成功! "); |
|
// System.out.println("时间: " + dateStr + ",时控ID: " + addr + ",操作成功! "); |
|
result = "success"; |
|
} |
|
} |
|
return result; |
|
} |
|
|
|
public static int dValue(String lastDate) throws ParseException { |
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
|
Date lastTime = format.parse(lastDate); |
|
long min = lastTime.getTime(); |
|
Calendar calendar = Calendar.getInstance(); |
|
long min1 = calendar.getTimeInMillis(); |
|
long subtract = min1 - min; |
|
// System.out.println("相减值:" + subtract/(1000*60)); |
|
return (int) subtract / (1000 * 60); |
|
} |
|
|
|
// 判断是否存在寄存器地址 |
|
public Boolean queryRegisterAddr(List<String> stringList, String registerAddr) { |
|
boolean flag = false; |
|
for (int i = 0; i < stringList.size(); i++) { |
|
if (stringList.get(i).equalsIgnoreCase(registerAddr)) { |
|
flag = true; |
|
break; |
|
} |
|
} |
|
return flag; |
|
} |
|
}
|
|
|