9 changed files with 503 additions and 96 deletions
@ -0,0 +1,43 @@ |
|||||||
|
package com.mh.user.factory; |
||||||
|
|
||||||
|
import com.mh.user.entity.DeviceCodeParamEntity; |
||||||
|
import com.mh.user.strategy.DeviceStrategy; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project CHWS |
||||||
|
* @description 回水温度控制器 |
||||||
|
* @date 2024-03-18 16:53:35 |
||||||
|
*/ |
||||||
|
public class BackTempControl implements Device { |
||||||
|
|
||||||
|
private DeviceStrategy strategy; |
||||||
|
|
||||||
|
private static class SingletonHolder { |
||||||
|
private static final BackTempControl INSTANCE = new BackTempControl(); |
||||||
|
} |
||||||
|
|
||||||
|
private BackTempControl() { |
||||||
|
// 防止外部直接实例化
|
||||||
|
} |
||||||
|
|
||||||
|
public static BackTempControl getInstance() { |
||||||
|
return BackTempControl.SingletonHolder.INSTANCE; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setStrategy(DeviceStrategy strategy) { |
||||||
|
this.strategy = strategy; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String createOrders(DeviceCodeParamEntity deviceCodeParamEntity) { |
||||||
|
return strategy.createOrders(deviceCodeParamEntity); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr) { |
||||||
|
return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,103 @@ |
|||||||
|
package com.mh.user.strategy; |
||||||
|
|
||||||
|
import com.mh.user.constants.Constant; |
||||||
|
import com.mh.user.entity.DeviceCodeParamEntity; |
||||||
|
import com.mh.user.entity.NowPublicDataEntity; |
||||||
|
import com.mh.user.service.BuildingService; |
||||||
|
import com.mh.user.service.NowDataService; |
||||||
|
import com.mh.user.service.NowPublicDataService; |
||||||
|
import com.mh.user.utils.ExchangeStringUtil; |
||||||
|
import com.mh.user.utils.SpringBeanUtil; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.context.ApplicationContext; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project CHWS |
||||||
|
* @description 回水温度控制器策略 |
||||||
|
* @date 2024-03-18 09:51:17 |
||||||
|
*/ |
||||||
|
@Slf4j |
||||||
|
public class BackTempControlStrategy implements DeviceStrategy { |
||||||
|
|
||||||
|
|
||||||
|
// 调用service
|
||||||
|
ApplicationContext context = SpringBeanUtil.getApplicationContext(); |
||||||
|
NowDataService nowDataService = context.getBean(NowDataService.class); |
||||||
|
|
||||||
|
NowPublicDataService nowPublicDataService = context.getBean(NowPublicDataService.class); |
||||||
|
|
||||||
|
BuildingService buildingService = context.getBean(BuildingService.class); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private static class SingletonHolder { |
||||||
|
private static final BackTempControlStrategy INSTANCE = new BackTempControlStrategy(); |
||||||
|
} |
||||||
|
|
||||||
|
private BackTempControlStrategy() { |
||||||
|
// 防止外部直接实例化
|
||||||
|
} |
||||||
|
|
||||||
|
public static BackTempControlStrategy getInstance() { |
||||||
|
return BackTempControlStrategy.SingletonHolder.INSTANCE; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String createOrders(DeviceCodeParamEntity deviceCodeParamEntity) { |
||||||
|
String deviceAddr = deviceCodeParamEntity.getDeviceAddr(); |
||||||
|
String registerAddr = deviceCodeParamEntity.getRegisterAddr(); |
||||||
|
String str = ""; |
||||||
|
if (deviceAddr != null && deviceAddr.length() > 0) { |
||||||
|
try { |
||||||
|
str = ExchangeStringUtil.decToHex(deviceAddr); |
||||||
|
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
|
||||||
|
String funCode = ExchangeStringUtil.addZeroForNum(deviceCodeParamEntity.getFunCode(), 2); |
||||||
|
if ("03".equals(funCode)) { |
||||||
|
registerAddr = ExchangeStringUtil.addZeroForNum(registerAddr, 4); //寄存器地址
|
||||||
|
str = str + funCode + registerAddr + "0001"; |
||||||
|
} else if ("06".equals(funCode)) { |
||||||
|
str = str + funCode + registerAddr |
||||||
|
+ ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(deviceCodeParamEntity.getDataValue()), 4); |
||||||
|
} |
||||||
|
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
||||||
|
str = str + checkWord; |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("生成回水温控指令出错!" + str, e); |
||||||
|
} |
||||||
|
} |
||||||
|
return str.toUpperCase(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr) { |
||||||
|
String result = Constant.FAIL; |
||||||
|
String checkStr = dataStr.substring(0, dataStr.length() - 4); |
||||||
|
String checkWord = ExchangeStringUtil.getStrCRC16(checkStr);//生成校验码
|
||||||
|
if (!checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { |
||||||
|
log.info("回水温控报文检验失败: " + dataStr); |
||||||
|
return result; |
||||||
|
} |
||||||
|
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); |
||||||
|
nowDataService.saveNowHistoryData2(addr, "回水温控", String.valueOf(fdata), "waterTemp", buildingId); |
||||||
|
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); |
||||||
|
return String.valueOf(fdata); |
||||||
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) {// 写
|
||||||
|
result = Constant.SUCCESS; |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue