From 2e0bf4423c235802791012e1fb0817d2c9156b2a Mon Sep 17 00:00:00 2001 From: cjl <276999030@qq.com> Date: Wed, 30 Aug 2023 09:28:16 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into cjl --- screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java | 10 + screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java | 3 screen-manage/src/main/java/com/moral/api/controller/TestController.java | 10 ++ screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java | 68 +++++++----- screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java | 1 screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java | 3 screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java | 14 ++ screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java | 158 +++++++++++++++++++++++++++++++ screen-job/src/main/resources/mapper/HistoryHourlyMapper.xml | 10 ++ screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java | 22 ++++ 10 files changed, 267 insertions(+), 32 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java index 74d4260..bd62813 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java @@ -359,8 +359,14 @@ Map<String,Object> historyHourlyMap = new HashMap<>(); historyHourlyMap.put("mac",mac); JSONObject value = JSONObject.parseObject(historyFiveMinutely.getValue()); - Double sensorValue = Double.parseDouble(value.get(sensorCode).toString()); - historyHourlyMap.put(sensorCode,sensorValue); + if (value.get(sensorCode)==null){ + historyHourlyMap.put(sensorCode,0.0); + }else { + Double sensorValue = Double.parseDouble(value.get(sensorCode).toString()); + historyHourlyMap.put(sensorCode,sensorValue); + } +// Double sensorValue = Double.parseDouble(value.get(sensorCode).toString()); +// historyHourlyMap.put(sensorCode,sensorValue); Date time = historyFiveMinutely.getTime(); String timeStr = DateUtils.dateToDateString(time, DateUtils.yyyy_MM_dd_HH_mm_ss_EN); historyHourlyMap.put("time",timeStr); diff --git a/screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java b/screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java index 3ac14a0..59b1e87 100644 --- a/screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java +++ b/screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java @@ -30,6 +30,9 @@ void insertHistoryHourlyComplete(@Param("list") List<Map<String, Object>> list, @Param("timeUnits") String timeUnits); + + void insertHistoryHourlyAvg(@Param("list") List<Map<String, Object>> list, @Param("timeUnits") String timeUnits); + } diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java b/screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java index 4c248b4..b65b3d3 100644 --- a/screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java +++ b/screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java @@ -43,5 +43,8 @@ void dateToChangShu(String time); + //������������������������������ + void dateInsertHistoryHourlyAvg(); + } diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java index 97432ce..89b410e 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java @@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.config.mybatis.MybatisPlusConfig; import com.moral.api.config.rest.Crc16Utils; +import com.moral.api.entity.Device; import com.moral.api.entity.HistoryHourly; import com.moral.api.entity.Sensor; +import com.moral.api.mapper.DeviceMapper; import com.moral.api.mapper.HistoryHourlyMapper; import com.moral.api.mapper.HistoryMinutelyMapper; import com.moral.api.service.HistoryHourlyService; @@ -58,6 +60,9 @@ private String dateChangShu; @Autowired private HistoryHourlyMapper historyHourlyMapper; + + @Autowired + private DeviceMapper deviceMapper; @Autowired private RedisTemplate redisTemplate; @@ -239,6 +244,7 @@ //��������������� historyHourlyMapper.insertHistoryHourly(insertData); + } @Override @@ -461,6 +467,158 @@ log.info("������������"); } + /** + * ������������������������������ + */ + @Override + public void dateInsertHistoryHourlyAvg() { + QueryWrapper<Device> wrapper = new QueryWrapper<>(); + wrapper.select("mac"); + wrapper.eq("organization_id",71); + wrapper.eq("is_delete",Constants.NOT_DELETE); + List<Device> devices = deviceMapper.selectList(wrapper); + ArrayList<String> macs = new ArrayList<>(); + for (Device device : devices) { + macs.add(device.getMac()); + } + //������������������yyyy-MM-dd HH:mm + String format = DateUtils.yyyy_MM_dd_HH_EN; + Date now = new Date(); + + //������������������������������ + Map<String, Object> params = new HashMap<>(); + //������������ + Date start = DateUtils.dataToTimeStampTime(DateUtils.addHours(now, -1), format); + //������������ + Date end = DateUtils.dataToTimeStampTime(now, format); +// String start1= "2023-08-18 03:00:00"; +// String end1 = "2023-08-18 04:00:00"; +// Date date1 = DateUtils.getDate(start1, DateUtils.yyyy_MM_dd_HH_mm_ss_EN); +// Date date2 = DateUtils.getDate(end1, DateUtils.yyyy_MM_dd_HH_mm_ss_EN); + + params.put("start", start); + params.put("end", end); + params.put("macs",macs); + //������������������������������ + String timeUnits = DateUtils.dateToDateString(start, DateUtils.yyyyMM_EN); + params.put("timeUnits", timeUnits); + + //������ + QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>(); + sensorQueryWrapper.select("code", "lower", "upper").eq("is_delete", Constants.NOT_DELETE); + List<Sensor> sensors = sensorService.list(sensorQueryWrapper); + // ������������������������������������������������ + List<Map<String, Object>> hourlyData = historyMinutelyMapper.getHistoryMinutelyData(params); + if (ObjectUtils.isEmpty(hourlyData)) { + return; + } + //���mac������ + Map<String, List<Map<String, Object>>> data = hourlyData.parallelStream() + .collect(Collectors.groupingBy(o -> (String) o.get("mac"))); + //��������������������������� + List<Map<String, Object>> insertData = new ArrayList<>(); + data.forEach((key, value) -> { + Map<String, Object> historyHourly = new HashMap<>(); + historyHourly.put("mac", key); + historyHourly.put("time",start); + + Map<String, Object> jsonMap = new HashMap<>(); + Map<String, Object> map = new HashMap<>(); + map.put("data", value); + map.put("type", "hour"); + + for (Sensor sensor : sensors) { + String sensorCode = sensor.getCode(); + + //��������������� + if (sensorCode.equals(Constants.SENSOR_CODE_WIND_DIR)) { + if (sensor.getUpper() != null) { + map.put("windDirUpper", sensor.getUpper()); + } + if (sensor.getLower() != null) { + map.put("windDirLower", sensor.getLower()); + } + } + + //��������������� + if (sensorCode.equals(Constants.SENSOR_CODE_WIND_SPEED)) { + if (sensor.getUpper() != null) { + map.put("windSpeedUpper", sensor.getUpper()); + } + if (sensor.getLower() != null) { + map.put("windSpeedLower", sensor.getLower()); + } + } + } + + //��������������������������� + Map<String, Object> windDirAvg = AmendUtils.getWindDirAvg(map); + if (!ObjectUtils.isEmpty(windDirAvg)) { + jsonMap.putAll(windDirAvg); + } + + //������������������������������������ + sensors.forEach(sensor -> { + String sensorCode = sensor.getCode(); + Double upper = sensor.getUpper(); + Double lower = sensor.getLower(); + AtomicInteger size = new AtomicInteger(); + DoubleStream optionalDouble = value.parallelStream() + .flatMapToDouble(v -> { + Map<String, Object> dataValue = JSONObject.parseObject((String) v.get("value"), Map.class); + Object sensorValue = dataValue.get(sensorCode); + //������������������������ + Object flag = dataValue.get(sensorCode + "-" + Constants.MARKER_BIT_KEY); + if (!Constants.MARKER_BIT_TRUE.equals(flag)) { + return null; + } + + if (ObjectUtils.isEmpty(sensorValue)) { + return null; + } + + //������������������ + if (Constants.SENSOR_CODE_WIND_DIR.equals(sensorCode)) { + return null; + } + + //������������������������������������ + double aDouble = Double.parseDouble(sensorValue.toString()); + if (!ObjectUtils.isEmpty(upper)) { + if (aDouble < upper) { + return null; + } + } + if (!ObjectUtils.isEmpty(lower)) { + if (aDouble > lower) { + return null; + } + } + size.getAndIncrement(); + return DoubleStream.of(aDouble); + }); + OptionalDouble average = optionalDouble.average(); + if (average.isPresent()) { + //��������������������� + double sciCal = AmendUtils.sciCal(average.getAsDouble(), 4); + jsonMap.put(sensorCode, sciCal); + //��������� + if (size.get() >= 45) { + jsonMap.put(sensorCode + "-" + Constants.MARKER_BIT_KEY, Constants.MARKER_BIT_TRUE); + } else { + jsonMap.put(sensorCode + "-" + Constants.MARKER_BIT_KEY, Constants.MARKER_BIT_FALSE); + } + } + }); + historyHourly.put("version", value.get(0).get("version")); + historyHourly.put("value", JSONObject.toJSONString(jsonMap)); + insertData.add(historyHourly); + }); + //��������������� + historyHourlyMapper.insertHistoryHourlyAvg(insertData,timeUnits); + + } + private String strList(String startTime,String mn,String msg){ String qn = "QN="+ startTime + "001;ST=22;CN=2061;PW=123456;MN="+mn.toUpperCase()+";CP=&&DataTime="+startTime+";"; Map<String, Object> data = JSON.parseObject(msg, Map.class); diff --git a/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java b/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java index 635efde..4c7b3a7 100644 --- a/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java +++ b/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java @@ -116,4 +116,18 @@ } return ReturnT.SUCCESS; } + + //������������������������ + @XxlJob("dateInsertHistoryHourlyAvg") + public ReturnT dateInsertHistoryHourlyAvg(){ + try { + historyHourlyService.dateInsertHistoryHourlyAvg(); + } catch (Exception e) { + e.printStackTrace(); + return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); + } + return ReturnT.SUCCESS; + } + + } diff --git a/screen-job/src/main/resources/mapper/HistoryHourlyMapper.xml b/screen-job/src/main/resources/mapper/HistoryHourlyMapper.xml index 56024a1..6818460 100644 --- a/screen-job/src/main/resources/mapper/HistoryHourlyMapper.xml +++ b/screen-job/src/main/resources/mapper/HistoryHourlyMapper.xml @@ -56,4 +56,14 @@ (#{item.mac}, #{item.time}, #{item.value}) </foreach> </insert> + + + <insert id="insertHistoryHourlyAvg"> + INSERT INTO + history_hourly_${timeUnits} + VALUES + <foreach collection="list" item="item" separator=","> + (#{item.mac}, #{item.time}, #{item.value}, #{item.version}) + </foreach> + </insert> </mapper> \ No newline at end of file diff --git a/screen-manage/src/main/java/com/moral/api/controller/TestController.java b/screen-manage/src/main/java/com/moral/api/controller/TestController.java index 35bd368..6f45837 100644 --- a/screen-manage/src/main/java/com/moral/api/controller/TestController.java +++ b/screen-manage/src/main/java/com/moral/api/controller/TestController.java @@ -12,7 +12,9 @@ import com.moral.api.service.SysDictDataService; import com.moral.api.service.TestService; import com.moral.api.service.impl.SensorServiceImpl; +import com.moral.api.util.AdjustDataUtils; import com.moral.api.util.CacheUtils; +import com.moral.api.util.CompareFieldUtils; import com.moral.constant.Constants; import com.moral.constant.KafkaConstants; import com.moral.constant.RedisConstants; @@ -211,6 +213,8 @@ private SensorService sensorService; @Autowired SysDictDataMapper sysDictDataMapper; + @Autowired + private AdjustDataUtils adjustDataUtils; @ApiOperation(value = "������������", notes = "������������") @ApiImplicitParams({ @@ -218,6 +222,12 @@ }) @RequestMapping(value = "getSensor", method = RequestMethod.GET) public void getSensor() { + HashMap<String, Object> map = new HashMap<>(); + map.put("time","1692364996898"); + map.put("mac","p5dnd7a0391986"); + HashMap<String, Object> map1 = new HashMap<>(); + HashMap<String, Object> map2 = new HashMap<>(); + Map<String, Object> adjust = adjustDataUtils.adjust(map, map1, map2, "2"); QueryWrapper<Sensor> queryWrapper = new QueryWrapper<>(); queryWrapper.select("code").eq("is_delete", Constants.NOT_DELETE); List<Object> list = sensorService.listObjs(queryWrapper); diff --git a/screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java b/screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java index c21f1fb..431132d 100644 --- a/screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java +++ b/screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java @@ -1,5 +1,6 @@ package com.moral.api.kafka.consumer; +import com.alibaba.fastjson.JSONObject; import com.moral.api.service.*; import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.consumer.ConsumerRecord; @@ -10,6 +11,9 @@ import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -98,6 +102,24 @@ //������������ // data.remove("time"); data.remove("entryTime"); + Map<String, Object> deviceByMac = deviceService.getDeviceByMac(mac.toString()); + HashMap<String, Object> map = (HashMap<String, Object>) deviceByMac.get("organization"); + String id = map.get("id").toString(); + if (id.equals("71")){ + log.warn(id, msg); + return; + } +// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// String format = dateFormat.format(new Date().getTime()); +// //������������ +// String substring = format.substring(0, 4); +// +// String substring1 = time.toString().substring(0, 4); +// +// String replace = time.toString().replace(substring1, substring); +// +// data.put("DataTime",replace); + Iterator<Map.Entry<String, Object>> iterator = data.entrySet().iterator(); Map<String, Object> newMap = new HashMap<>(); Map.Entry<String, Object> next; diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java index 71646df..8643c9a 100644 --- a/screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java +++ b/screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java @@ -57,7 +57,6 @@ String format1 = dateFormat.format(l); Date time = DateUtils.getDate(format1, DateUtils.yyyy_MM_dd_HH_mm_ss_EN); - // Date time = DateUtils.getDate((String) data.remove("DataTime"), DateUtils.yyyyMMddHHmmss_EN); String yearAndMonth = DateUtils.dateToDateString(DateUtils.addHours(time, -1), DateUtils.yyyyMM_EN); diff --git a/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java b/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java index eda029a..8d59d01 100644 --- a/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java +++ b/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java @@ -126,35 +126,45 @@ if (ObjectUtils.isEmpty(map)){ return deviceData; } - if (ObjectUtils.isEmpty(aqiMap.get("a21005"))){ - JSONObject jsonObject = JSONObject.parseObject(map.get("value").toString()); - String a21005 = jsonObject.get("a21005").toString(); - deviceData.put("a21005",Double.parseDouble(a21005)); - } - if (ObjectUtils.isEmpty(aqiMap.get("a21026"))){ - JSONObject jsonObject = JSONObject.parseObject(map.get("value").toString()); - String a21026 = jsonObject.get("a21026").toString(); - deviceData.put("a21026",Double.parseDouble(a21026)); - } - if (ObjectUtils.isEmpty(aqiMap.get("a21004"))){ - JSONObject jsonObject = JSONObject.parseObject(map.get("value").toString()); - String a21004 = jsonObject.get("a21004").toString(); - deviceData.put("a21004",Double.parseDouble(a21004)); - } - if (ObjectUtils.isEmpty(aqiMap.get("a34002"))){ - JSONObject jsonObject = JSONObject.parseObject(map.get("value").toString()); - String a34002 = jsonObject.get("a34002").toString(); - deviceData.put("a34002",Double.parseDouble(a34002)); - } - if (ObjectUtils.isEmpty(aqiMap.get("a34004"))){ - JSONObject jsonObject = JSONObject.parseObject(map.get("value").toString()); - String a34004 = jsonObject.get("a34004").toString(); - deviceData.put("a34004",Double.parseDouble(a34004)); - } - if (ObjectUtils.isEmpty(aqiMap.get("a05024"))){ - JSONObject jsonObject = JSONObject.parseObject(map.get("value").toString()); - String a05024 = jsonObject.get("a05024").toString(); - deviceData.put("a05024",Double.parseDouble(a05024)); + JSONObject jsonObject = JSONObject.parseObject(map.get("value").toString()); + if (ObjectUtils.isEmpty(aqiMap)){ + deviceData.put("a21005",Double.parseDouble(jsonObject.get("a21005").toString())); + deviceData.put("a21026",Double.parseDouble(jsonObject.get("a21026").toString())); + deviceData.put("a21004",Double.parseDouble(jsonObject.get("a21004").toString())); + deviceData.put("a34002",Double.parseDouble(jsonObject.get("a34002").toString())); + deviceData.put("a34004",Double.parseDouble(jsonObject.get("a34004").toString())); + deviceData.put("a05024",Double.parseDouble(jsonObject.get("a05024").toString())); + }else { + if (ObjectUtils.isEmpty(aqiMap.get("a21005"))){ + + String a21005 = jsonObject.get("a21005").toString(); + deviceData.put("a21005",Double.parseDouble(a21005)); + } + if (ObjectUtils.isEmpty(aqiMap.get("a21026"))){ +// JSONObject jsonObject = JSONObject.parseObject(map.get("value").toString()); + String a21026 = jsonObject.get("a21026").toString(); + deviceData.put("a21026",Double.parseDouble(a21026)); + } + if (ObjectUtils.isEmpty(aqiMap.get("a21004"))){ +// JSONObject jsonObject = JSONObject.parseObject(map.get("value").toString()); + String a21004 = jsonObject.get("a21004").toString(); + deviceData.put("a21004",Double.parseDouble(a21004)); + } + if (ObjectUtils.isEmpty(aqiMap.get("a34002"))){ +// JSONObject jsonObject = JSONObject.parseObject(map.get("value").toString()); + String a34002 = jsonObject.get("a34002").toString(); + deviceData.put("a34002",Double.parseDouble(a34002)); + } + if (ObjectUtils.isEmpty(aqiMap.get("a34004"))){ +// JSONObject jsonObject = JSONObject.parseObject(map.get("value").toString()); + String a34004 = jsonObject.get("a34004").toString(); + deviceData.put("a34004",Double.parseDouble(a34004)); + } + if (ObjectUtils.isEmpty(aqiMap.get("a05024"))){ +// JSONObject jsonObject = JSONObject.parseObject(map.get("value").toString()); + String a05024 = jsonObject.get("a05024").toString(); + deviceData.put("a05024",Double.parseDouble(a05024)); + } } } -- Gitblit v1.8.0