中央热水项目
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.

128 lines
5.9 KiB

package com.mh.user.strategy;
import com.alibaba.fastjson2.JSON;
import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
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;
import java.util.HashMap;
import java.util.Map;
/**
* @author LJF
* @version 1.0
* @project CHWS
* @description 温度变送器策略
* @date 2024-03-18 09:51:17
*/
@Slf4j
public class TempTransStrategy 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 TempTransStrategy INSTANCE = new TempTransStrategy();
}
private TempTransStrategy() {
// 防止外部直接实例化
}
public static TempTransStrategy getInstance() {
return TempTransStrategy.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补位
str = str + "0300280008"; //读8路温度
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord;
} catch (Exception e) {
log.info("生成多路温度变送器指令出错!" + str, e);
}
}
return str.toUpperCase();
}
@Override
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) {
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;
}
//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) {
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, deviceCodeParamEntity.getDeviceName());
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);
result = JSON.toJSONString(map); //map转json字符串
}
}
return result;
}
@Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity) {
return "";
}
}