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 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 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 ""; } }