| | |
| | | import com.moral.api.entity.Device; |
| | | import com.moral.api.entity.Sensor; |
| | | import com.moral.api.entity.UnitConversion; |
| | | import com.moral.api.utils.AdjustDataUtils; |
| | | import com.moral.api.utils.UnitConvertUtils; |
| | | import com.moral.api.websocket.SingleDeviceServer; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | continue; |
| | | //取出基本信息 |
| | | Device device = socket.getDeviceAlarmInfo(); |
| | | Map<String, Object> adjustFormula = socket.getAdjustFormula(); |
| | | Map<String, Object> regionAqi = socket.getRegionAqi(); |
| | | //补偿数据 |
| | | if(adjustFormula!=null&®ionAqi!=null) |
| | | message = AdjustDataUtils.adjust(message,adjustFormula,regionAqi); |
| | | //创建最终消息对象 |
| | | Map<String, Object> resultMessgae = new HashMap<>(); |
| | | //拼接单位 |
| | |
| | | String showUnitKey = sensor.getShowUnitKey(); |
| | | String unitKey = sensor.getUnitKey(); |
| | | String unit = sensor.getUnit(); |
| | | //如果消息中没有该因子则退出循环 |
| | | Object value = message.get(code); |
| | | //对数据保留两位小数,并且向下取整 |
| | | /*if(value==null) 源代码 |
| | | if(value==null) |
| | | continue; |
| | | Double sourceDataD = Double.valueOf(String.valueOf(value));*/ |
| | | //测试代码使用,给臭气一个固定值 start |
| | | Double sourceDataD = null; |
| | | if (value != null) { |
| | | sourceDataD = Double.valueOf(String.valueOf(value)); |
| | | }else{ |
| | | sourceDataD = 5.00d; |
| | | } |
| | | //测试代码使用,给臭气一个固定值 end |
| | | Double sourceDataD = Double.valueOf(String.valueOf(value)); |
| | | BigDecimal bg = new BigDecimal(sourceDataD); |
| | | bg = bg.setScale(2, BigDecimal.ROUND_FLOOR); |
| | | String sourceData = bg.toString(); |
| | | //数据补偿 |
| | | //单位转换 |
| | | if (!unitKey.equals(showUnitKey)) {//如果源单位和显示单位不同,则进行单位转换 |
| | | String formula = sensor.getFormula(); |
| | |
| | | * @param aqiMap 设备所在地区对应的墨迹aqi数据 |
| | | * @return Map<String, Object> 校准后数据 |
| | | * */ |
| | | public Map<String, Object> adjust(Map<String, Object> deviceData, Map<String, Object> adjustFormula, Map<String, Object> aqiMap) { |
| | | public static Map<String, Object> adjust(Map<String, Object> deviceData, Map<String, Object> adjustFormula, Map<String, Object> aqiMap) { |
| | | try { |
| | | Date time = DateUtils.getDate((String) deviceData.get("DataTime"), DateUtils.yyyyMMddHHmmss_EN); |
| | | long finalTime = DateUtils.dataToTimeStampTime(time, DateUtils.HH_mm_ss_EN).getTime(); |
| | |
| | | |
| | | private Map<String, Object> regionAqi; |
| | | |
| | | private Map<String,Object> adjustFormula; |
| | | |
| | | @OnOpen |
| | | public void onOpen(Session session, @PathParam("mac") String mac) throws Exception { |
| | | this.session = session; |
| | | this.mac = mac; |
| | | this.deviceAlarmInfo = (Device) redisTemplate.opsForHash().get(RedisConstants.DEVICE_INFO, mac); |
| | | this.unitConversions = redisTemplate.opsForList().range(RedisConstants.UNIT_CONVERSION, 0, -1); |
| | | this.adjustFormula = redisTemplate.opsForHash().entries("adjust_"+mac); |
| | | //获取设备地区对应的AQI用于补偿使用 |
| | | Map<String, Object> deviceInfo = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.DEVICE, mac); |
| | | Map<String, Object> monitorPointMap = (Map<String, Object>) deviceInfo.get("monitorPoint"); |
| | | String areaCode = String.valueOf(monitorPointMap.get("areaCode")); |
| | | String cityCode = String.valueOf(monitorPointMap.get("cityCode")); |
| | | try { |
| | | this.regionAqi = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.AQI_DATA, areaCode); |
| | | this.regionAqi = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.CITY_AQI, areaCode); |
| | | if (ObjectUtils.isEmpty(this.regionAqi)) |
| | | this.regionAqi = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.AQI_DATA, cityCode); |
| | | } catch (Exception e) { |