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