From b441506b6e6d9f82cb95df627a6c58ff16b5e236 Mon Sep 17 00:00:00 2001 From: cjl <276999030@qq.com> Date: Thu, 12 Oct 2023 16:59:11 +0800 Subject: [PATCH] fix:尘负荷数据调整 --- screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java | 104 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 98 insertions(+), 6 deletions(-) diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java index 03e64dc..f8f56b9 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java @@ -1,9 +1,16 @@ package com.moral.api.service.impl; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.googlecode.aviator.AviatorEvaluator; +import com.googlecode.aviator.Expression; +import com.moral.api.entity.Device; +import com.moral.api.service.DeviceService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; import java.util.*; @@ -26,6 +33,8 @@ @Service public class HistoryFiveMinutelyServiceImpl implements HistoryFiveMinutelyService { + @Value("${result.device.list}") + private String deviceList; @Autowired private HistoryFiveMinutelyMapper historyFiveMinutelyMapper; @@ -37,6 +46,9 @@ @Autowired private RedisTemplate redisTemplate; + + @Autowired + private DeviceService deviceService; @Override public void createTable(String timeUnits) { @@ -73,7 +85,7 @@ if (fiveMinutelyData.size() == 0) { return; } - + listDistDeviceState(params); //���mac������ Map<String, List<Map<String, Object>>> data = fiveMinutelyData.parallelStream() .collect(Collectors.groupingBy(o -> (String) o.get("mac"))); @@ -163,6 +175,7 @@ //��������������������� double sciCal = AmendUtils.sciCal(average.getAsDouble(), 4); jsonMap.put(sensorCode, sciCal); + } }); @@ -171,6 +184,7 @@ jsonMap.put("dataTime", DateUtils.dateToDateString(start)); redisTemplate.opsForHash().put(RedisConstants.DATA_FIVE_MINUTES, key, jsonMap); insertData.add(dataMap); + judgeDeviceState(key,jsonMap); }); //5��������������� @@ -178,6 +192,83 @@ //��������������� historyFiveMinutelyMapper.insertHistoryFiveMinutely(insertData, insertTimeUnits); } + + // ������������������ + private void judgeDeviceState(String mac,Map<String, Object> dataMap){ + Device device = (Device) redisTemplate.opsForHash().get(RedisConstants.DEVICE_INFO, mac); + List<Sensor> sensors = device.getVersion().getSensors(); + Expression expression; + int state = 1; + for (Sensor sensor : sensors) { + //������������������ + String alarmLevel = sensor.getAlarmLevel(); + if (StringUtils.isEmpty(alarmLevel)) { + continue; + } + List<Object> list = JSONObject.parseObject(alarmLevel, List.class); + String sensorCode = sensor.getCode(); + //������������ + String formula = sensor.getFormula(); + + //��������������������������������������������������������������� + if (dataMap.get(sensorCode) != null) { + String sensorValue = String.valueOf(dataMap.get(sensorCode)); + double value = Double.parseDouble(sensorValue); + if (formula != null) { + //������������������ + sensorValue = formula.replace("{0}", sensorValue); + expression = AviatorEvaluator.compile(sensorValue); + value = Double.parseDouble(expression.execute().toString()); + } + int sensorState = judgeState(list, value); + if (sensorState > state) { + state = sensorState; + } + } + } + //������������������ + Device devices = new Device(); + devices.setId(device.getId()); + devices.setState(String.valueOf(state)); + deviceService.updateById(devices); + } + + + private int judgeState(List<Object> levels, Double data) { + int state = 1; + for (int i = levels.size() - 1; i >= 0; i--) { + Double level = Double.parseDouble(levels.get(i).toString()); + if (data >= level) { + state = i + 2; + break; + } + } + return state; + } + + private void listDistDeviceState(Map<String, Object> params){ + QueryWrapper<Device> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("is_delete",Constants.NOT_DELETE); + //������������������������ + List<Device> devices = deviceService.list(queryWrapper); + List<String> macOldList = devices.stream().map(Device::getMac).collect(Collectors.toList()); + List<String> macList = historyMinutelyMapper.getHistoryMinutelyMacData(params); + if(!CollectionUtils.isEmpty(macOldList)){ + List<String> listDictDevice = Arrays.asList(deviceList.split(",")); + List<String> list2 = macOldList.stream().filter(e -> !listDictDevice.contains(e)).collect(Collectors.toList()); + List<String> list3 = list2.stream().filter(e -> !macList.contains(e)).collect(Collectors.toList()); + List<Integer> idList = devices.stream().filter(e->list3.contains(e.getMac())).map(Device::getId).collect(Collectors.toList()); + for(Integer i : idList){ + Device device = new Device(); + device.setId(i); + device.setState(Constants.DEVICE_STATE_OFFLINE); + deviceService.updateById(device); + } + } + } + + + @Override public void insertHistoryFiveMinutely(String yz, String mac) { @@ -196,15 +287,15 @@ //������������������������������ String timeUnits = DateUtils.dateToDateString(start, DateUtils.yyyyMM_EN); params.put("timeUnits", timeUnits); - if(!StringUtils.isEmpty(mac)){ + /*if(!StringUtils.isEmpty(mac)){ params.put("macs", Arrays.asList(mac)); - } + }*/ //������ QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>(); sensorQueryWrapper.select("code", "lower", "upper").eq("is_delete", Constants.NOT_DELETE); - if(!StringUtils.isEmpty(yz)){ + /*if(!StringUtils.isEmpty(yz)){ sensorQueryWrapper.eq("code",yz); - } + }*/ List<Sensor> sensors = sensorService.list(sensorQueryWrapper); //���������������������5������������������ @@ -212,7 +303,7 @@ if (fiveMinutelyData.size() == 0) { return; } - + listDistDeviceState(params); //���mac������ Map<String, List<Map<String, Object>>> data = fiveMinutelyData.parallelStream() .collect(Collectors.groupingBy(o -> (String) o.get("mac"))); @@ -310,6 +401,7 @@ jsonMap.put("dataTime", DateUtils.dateToDateString(start)); // redisTemplate.opsForHash().put(RedisConstants.DATA_FIVE_MINUTES, key, jsonMap); //insertData.add(dataMap); + judgeDeviceState(key,jsonMap); System.out.println(dataMap); }); -- Gitblit v1.8.0