package com.gzlh.utils; import cn.hutool.json.JSONUtil; import com.gzlh.bus.SysConfig; import com.gzlh.config.ModuleEnum; import com.gzlh.config.SystemObject; import com.gzlh.config.dto.CaputreSetting; import com.gzlh.config.dto.SerialSetting; import com.gzlh.device.capture.brand.CaptureBrandType; import com.gzlh.device.electron.brand.ElectronBrandType; import com.gzlh.device.led.brand.LedBrandType; import com.gzlh.device.weighbridge.brand.WeighbridgeBrandType; import com.gzlh.entity.DeviceStatus; import org.springframework.util.StringUtils; import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; public class DeviceCache { private static DeviceStatus deviceStatus = new DeviceStatus(); private static Map<String, Date> plcTimeMap = new ConcurrentHashMap<String, Date>(); static boolean interrupt = false; static String plcStatus = null; public static void setPlcStatus(String status) { plcStatus = status; } public static String getPlcStatus() { return plcStatus; } public static void putTime(String k, Date v) { plcTimeMap.put(k, v); } public static Date getTime(String k) { return plcTimeMap.get(k); } public static void resetTimeMap() { plcTimeMap = new ConcurrentHashMap<String, Date>(); ; } public static String getDeviceStatusJson() { if (StringUtils.isEmpty(deviceStatus.getChannelCode())) { deviceStatusInit(); } return JSONUtil.toJsonStr(deviceStatus); } public static void deviceStatusInit() { SerialSetting serialSetting = SysConfig.serialSetting; deviceStatus.setChannelCode(SysConfig.channelSetting.getChannelCode()); deviceStatus.setChannelName(SysConfig.channelSetting.getChannelName()); CaputreSetting caputreSetting = SysConfig.caputreSetting; if (caputreSetting.isEnable()) { DeviceStatus.Device capture = new DeviceStatus.Device(caputreSetting.getHost(), caputreSetting.getPort(), CaptureBrandType.getBrandByCode(caputreSetting.getBrand()), ModuleEnum.CAPTURE_MODULE.getModuleZh()); deviceStatus.getDeviceList().add(capture); } if (serialSetting.getPlc().getEnable()) { DeviceStatus.Device plc = new DeviceStatus.Device(serialSetting.getHost(), serialSetting.getPlc().getPort(), "smart 200", ModuleEnum.PLC_MODULE.getModuleZh()); deviceStatus.getDeviceList().add(plc); } if (serialSetting.getLed().getEnable()) { DeviceStatus.Device led = new DeviceStatus.Device(serialSetting.getHost(), serialSetting.getLed().getPort(), LedBrandType.getBrandByCode(serialSetting.getLed().getBrand()), ModuleEnum.LED_MODULE.getModuleZh()); deviceStatus.getDeviceList().add(led); } if (serialSetting.getWeighbridge().getEnable()) { DeviceStatus.Device weighbridge = new DeviceStatus.Device(serialSetting.getHost(), serialSetting.getWeighbridge().getPort(), WeighbridgeBrandType.getBrandByCode(serialSetting.getWeighbridge().getBrand()), ModuleEnum.WEIGHBRIDGE_MODULE.getModuleZh()); deviceStatus.getDeviceList().add(weighbridge); } if (serialSetting.getElectron().getEnable()) { DeviceStatus.Device electron = new DeviceStatus.Device(serialSetting.getHost(), serialSetting.getElectron().getPort(), ElectronBrandType.getBrandByCode(serialSetting.getElectron().getBrand()), ModuleEnum.ELECTRON_MODULE.getModuleZh()); deviceStatus.getDeviceList().add(electron); } } public static DeviceStatus getDeviceStatus() { return deviceStatus; } public static Map<String, Date> getTimeMap() { return plcTimeMap; } public static boolean isInterrupt() { return interrupt; } public static void setInterrupt(boolean interrupt) { DeviceCache.interrupt = interrupt; } public static void changeDeviceStatus(String name, int status) { List<DeviceStatus.Device> devices = DeviceCache.getDeviceStatus().getDeviceList(); if (devices.stream().anyMatch(device -> device.getName().equalsIgnoreCase(name))) { devices.stream().filter(device -> device.getName().equalsIgnoreCase(name)) .map(e -> e.setStatus(status)).collect(Collectors.toList()); } } }