From 6f4e852b84c577454a4876f83c7085bd360fe4fb Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Tue, 17 Aug 2021 17:07:02 +0800 Subject: [PATCH] 特殊设备数据insert --- screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java | 2 screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java | 24 -- screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java | 10 screen-manage/src/main/java/com/moral/api/mapper/SpecialDeviceMapper.java | 6 screen-manage/src/main/java/com/moral/api/controller/DeviceController.java | 25 ++ screen-manage/src/main/resources/mapper/HistorySecondSpecialMapper.xml | 14 + screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java | 59 ++++++- screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java | 2 screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java | 8 screen-common/src/main/java/com/moral/constant/Constants.java | 24 +- screen-job/src/main/java/com/moral/api/task/JudgeOffLineDeviceTask.java | 2 screen-common/src/main/java/com/moral/util/AmendUtils.java | 14 screen-common/src/main/java/com/moral/constant/RedisConstants.java | 11 + screen-common/src/main/java/com/moral/util/DateUtils.java | 6 screen-common/src/main/java/com/moral/constant/KafkaConstants.java | 14 screen-manage/src/main/java/com/moral/api/service/DeviceService.java | 3 screen-manage/src/main/java/com/moral/api/service/HistorySecondSpecialService.java | 21 ++ screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java | 33 +++ screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java | 6 screen-manage/src/main/java/com/moral/api/mapper/HistorySecondSpecialMapper.java | 16 ++ screen-job/src/main/java/com/moral/api/task/HistoryAqiInsertTask.java | 2 screen-manage/src/main/resources/mapper/SpecialDeviceMapper.xml | 8 + screen-manage/src/main/java/com/moral/api/entity/HistorySecondSpecial.java | 55 ++++++ screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java | 6 screen-job/src/main/java/com/moral/api/task/CreateTableTask.java | 4 screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondSpecialServiceImpl.java | 81 ++++++++++ 26 files changed, 364 insertions(+), 92 deletions(-) diff --git a/screen-common/src/main/java/com/moral/constant/Constants.java b/screen-common/src/main/java/com/moral/constant/Constants.java index 3efa08b..a7ec5d1 100644 --- a/screen-common/src/main/java/com/moral/constant/Constants.java +++ b/screen-common/src/main/java/com/moral/constant/Constants.java @@ -120,11 +120,6 @@ public static final String UN_ADJUST = "unadjust"; /* - * ��������������������� - * */ - public static final String TRANSITION = "transition"; - - /* * ��������������������� * */ public static final String DEVICE_STATE_OFFLINE = "0"; @@ -184,14 +179,25 @@ */ public static final String NULL_VALUE = "N/V"; - //������������������������,������ + /* + * ������������������������,������ + * */ public static final String MARKER_BIT_TRUE = "N"; - //������������������������,��������������� + /* + * ������������������������,��������������� + * */ public static final String MARKER_BIT_FALSE = "H"; - //������������������������������������������key������ - public static final String MARKER_BIT_KEY = "-Flag"; + /* + * ������������������������������������������key������ + * */ + public static final String MARKER_BIT_KEY = "Flag"; + + /* + * ������������������������ + * */ + public static final String SENSOR_CODE_SPECIAL_BATCH = "a00000"; } diff --git a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java index 2b3a9f2..2dd9fdc 100644 --- a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java +++ b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java @@ -3,29 +3,29 @@ public class KafkaConstants { /** - * ������������������ + * ������������������������������ */ public static final String TOPIC_MINUTE = "minute_data"; /** - * ������������������ + * ������������������������������ */ public static final String TOPIC_HOUR = "hour_data"; /* - * ��������������� + * ��������������������������� * */ public static final String TOPIC_SECOND = "second_data"; /** - * ��������������������� + * ��������������������������������������������������� */ - public static final String GROUP_HOUR = "hour"; + public static final String TOPIC_SECOND_SPECIAL = "second_data_special"; /** - * ��������������������� + * ��������������������������� */ - public static final String GROUP_MINUTE = "minute"; + public static final String GROUP_INSERT = "insert"; /** * ��������������������������������� diff --git a/screen-common/src/main/java/com/moral/constant/RedisConstants.java b/screen-common/src/main/java/com/moral/constant/RedisConstants.java index e2b5bff..e449781 100644 --- a/screen-common/src/main/java/com/moral/constant/RedisConstants.java +++ b/screen-common/src/main/java/com/moral/constant/RedisConstants.java @@ -46,7 +46,7 @@ /* * ������������������������ * */ - public static final String ADJUST = "adjust_"; + public static final String ADJUST = "adjust"; /* * redis������������key @@ -69,5 +69,14 @@ * */ public static final String DATA_FIVE_MINUTES = "data_five_minutes"; + /* + * ��������������������������������������������������������������� + * ���������������hash + * key���mac + * value���SpecialDevice + * ���������������Map<String,Device> + * */ + public static final String SPECIAL_DEVICE_INFO = "special_device_alarm_info"; + } diff --git a/screen-common/src/main/java/com/moral/util/AmendUtils.java b/screen-common/src/main/java/com/moral/util/AmendUtils.java index 7c15de8..4a9104a 100644 --- a/screen-common/src/main/java/com/moral/util/AmendUtils.java +++ b/screen-common/src/main/java/com/moral/util/AmendUtils.java @@ -60,7 +60,7 @@ Double o3 = Double.parseDouble(dataValue.get(Constants.SENSOR_CODE_O3).toString()); //O3��������������� - Object flag = dataValue.get(Constants.SENSOR_CODE_O3 + Constants.MARKER_BIT_KEY); + Object flag = dataValue.get(Constants.SENSOR_CODE_O3 + "-" + Constants.MARKER_BIT_KEY); //������������������������������ if (!Constants.MARKER_BIT_TRUE.equals(flag)) { continue; @@ -123,8 +123,8 @@ Map<String, Object> dataValue = JSONObject.parseObject((String) map.get("value"), Map.class); Object wind = dataValue.get(Constants.SENSOR_CODE_WIND_DIR); Object speed = dataValue.get(Constants.SENSOR_CODE_WIND_SPEED); - Object flagDir = dataValue.get(Constants.SENSOR_CODE_WIND_DIR + Constants.MARKER_BIT_KEY); - Object flagSpeed = dataValue.get(Constants.SENSOR_CODE_WIND_SPEED + Constants.MARKER_BIT_KEY); + Object flagDir = dataValue.get(Constants.SENSOR_CODE_WIND_DIR + "-" + Constants.MARKER_BIT_KEY); + Object flagSpeed = dataValue.get(Constants.SENSOR_CODE_WIND_SPEED + "-" + Constants.MARKER_BIT_KEY); if (!Constants.MARKER_BIT_TRUE.equals(flagDir) || !Constants.MARKER_BIT_TRUE.equals(flagSpeed)) { continue; } @@ -186,9 +186,9 @@ if ("hour".equals(type)) { //���������>=45���,������������ N,<45���H H:��������������� if (size >= 45) { - result.put(Constants.SENSOR_CODE_WIND_DIR + Constants.MARKER_BIT_KEY, Constants.MARKER_BIT_TRUE); + result.put(Constants.SENSOR_CODE_WIND_DIR + "-" + Constants.MARKER_BIT_KEY, Constants.MARKER_BIT_TRUE); } else { - result.put(Constants.SENSOR_CODE_WIND_DIR + Constants.MARKER_BIT_KEY, Constants.MARKER_BIT_FALSE); + result.put(Constants.SENSOR_CODE_WIND_DIR + "-" + Constants.MARKER_BIT_KEY, Constants.MARKER_BIT_FALSE); } } } @@ -224,7 +224,7 @@ for (Map<String, Object> dataMap : list) { Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class); Object o = dataValue.get(Constants.SENSOR_CODE_CO); - Object flag = dataValue.get(Constants.SENSOR_CODE_CO + Constants.MARKER_BIT_KEY); + Object flag = dataValue.get(Constants.SENSOR_CODE_CO + "-" + Constants.MARKER_BIT_KEY); if (!Constants.MARKER_BIT_TRUE.equals(flag)) { continue; } @@ -262,7 +262,7 @@ for (Map<String, Object> dataMap : list) { Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class); Object o = dataValue.get(Constants.SENSOR_CODE_O3); - Object flag = dataValue.get(Constants.SENSOR_CODE_O3 + Constants.MARKER_BIT_KEY); + Object flag = dataValue.get(Constants.SENSOR_CODE_O3 + "-" + Constants.MARKER_BIT_KEY); if (!Constants.MARKER_BIT_TRUE.equals(flag)) { continue; } diff --git a/screen-common/src/main/java/com/moral/util/DateUtils.java b/screen-common/src/main/java/com/moral/util/DateUtils.java index 51034a8..9084e65 100644 --- a/screen-common/src/main/java/com/moral/util/DateUtils.java +++ b/screen-common/src/main/java/com/moral/util/DateUtils.java @@ -1358,7 +1358,7 @@ /* * ������������������������������������ - * ������time=2021-08-04 ��������������������������������������� + * ������time=2021-08-04 ���������������������������������������2021-08-04 00���2021-08-04 01��������� * time=2021-08 ��������������������������������� * */ public static List<String> getTimeLag(String time) { @@ -1406,9 +1406,5 @@ StringBuilder stringBuffer = new StringBuilder(dateString); stringBuffer.replace(15, 16, String.valueOf(i)); return getDate(stringBuffer.toString(), yyyy_MM_dd_HH_mm_EN); - } - - public static void main(String[] args) { - System.out.println(getTimeLag("2021")); } } diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java index 5409221..10fa56c 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java @@ -149,7 +149,7 @@ 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); + Object flag = dataValue.get(sensorCode + "-" + Constants.MARKER_BIT_KEY); if (!Constants.MARKER_BIT_TRUE.equals(flag)) { return null; } 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 f1a0a96..ae9d97a 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 @@ -135,7 +135,7 @@ 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); + Object flag = dataValue.get(sensorCode + "-" + Constants.MARKER_BIT_KEY); if (!Constants.MARKER_BIT_TRUE.equals(flag)) { return null; } 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 797334b..a02a67f 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 @@ -163,7 +163,7 @@ 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); + Object flag = dataValue.get(sensorCode + "-" + Constants.MARKER_BIT_KEY); if (!Constants.MARKER_BIT_TRUE.equals(flag)) { return null; } @@ -199,9 +199,9 @@ jsonMap.put(sensorCode, sciCal); //��������� if (size.get() >= 45) { - jsonMap.put(sensorCode + Constants.MARKER_BIT_KEY, Constants.MARKER_BIT_TRUE); + jsonMap.put(sensorCode + "-" + Constants.MARKER_BIT_KEY, Constants.MARKER_BIT_TRUE); } else { - jsonMap.put(sensorCode + Constants.MARKER_BIT_KEY, Constants.MARKER_BIT_FALSE); + jsonMap.put(sensorCode + "-" + Constants.MARKER_BIT_KEY, Constants.MARKER_BIT_FALSE); } } }); diff --git a/screen-job/src/main/java/com/moral/api/task/CreateTableTask.java b/screen-job/src/main/java/com/moral/api/task/CreateTableTask.java index 2fab184..c8f4795 100644 --- a/screen-job/src/main/java/com/moral/api/task/CreateTableTask.java +++ b/screen-job/src/main/java/com/moral/api/task/CreateTableTask.java @@ -32,7 +32,7 @@ historyMinutelyService.createTable(timeUnits + "_" + Constants.UN_ADJUST); } catch (Exception e) { XxlJobHelper.log(e.getMessage()); - return ReturnT.FAIL; + return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); } return ReturnT.SUCCESS; } @@ -45,7 +45,7 @@ historyFiveMinutelyService.createTable(timeUnits); } catch (Exception e) { XxlJobHelper.log(e.getMessage()); - return ReturnT.FAIL; + return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); } return ReturnT.SUCCESS; } diff --git a/screen-job/src/main/java/com/moral/api/task/HistoryAqiInsertTask.java b/screen-job/src/main/java/com/moral/api/task/HistoryAqiInsertTask.java index 97a984e..b4b1bff 100644 --- a/screen-job/src/main/java/com/moral/api/task/HistoryAqiInsertTask.java +++ b/screen-job/src/main/java/com/moral/api/task/HistoryAqiInsertTask.java @@ -21,7 +21,7 @@ historyAqiService.insertHistoryAqi(); } catch (Exception e) { XxlJobHelper.log(e.getMessage()); - return ReturnT.FAIL; + return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); } return ReturnT.SUCCESS; } 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 0ef79d9..79bcfe9 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 @@ -37,7 +37,7 @@ historyFiveMinutelyService.insertHistoryFiveMinutely(); } catch (Exception e) { XxlJobHelper.log(e.getMessage()); - return ReturnT.FAIL; + return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); } return ReturnT.SUCCESS; } @@ -61,7 +61,7 @@ historyWeeklyService.insertHistoryWeekly(); } catch (Exception e) { XxlJobHelper.log(e.getMessage()); - return ReturnT.FAIL; + return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); } return ReturnT.SUCCESS; } @@ -73,7 +73,7 @@ historyMonthlyService.insertHistoryMonthly(); } catch (Exception e) { XxlJobHelper.log(e.getMessage()); - return ReturnT.FAIL; + return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); } return ReturnT.SUCCESS; } @@ -85,7 +85,7 @@ historyHourlyService.insertHistoryHourly(); } catch (Exception e) { XxlJobHelper.log(e.getMessage()); - return ReturnT.FAIL; + return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); } return ReturnT.SUCCESS; } diff --git a/screen-job/src/main/java/com/moral/api/task/JudgeOffLineDeviceTask.java b/screen-job/src/main/java/com/moral/api/task/JudgeOffLineDeviceTask.java index aa5d7a6..4c6e1be 100644 --- a/screen-job/src/main/java/com/moral/api/task/JudgeOffLineDeviceTask.java +++ b/screen-job/src/main/java/com/moral/api/task/JudgeOffLineDeviceTask.java @@ -21,7 +21,7 @@ deviceService.judgeOffLineDevice(); } catch (Exception e) { XxlJobHelper.log(e.getMessage()); - return ReturnT.FAIL; + return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); } return ReturnT.SUCCESS; } diff --git a/screen-manage/src/main/java/com/moral/api/controller/DeviceController.java b/screen-manage/src/main/java/com/moral/api/controller/DeviceController.java index a373700..474e18d 100644 --- a/screen-manage/src/main/java/com/moral/api/controller/DeviceController.java +++ b/screen-manage/src/main/java/com/moral/api/controller/DeviceController.java @@ -19,8 +19,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.Device; +import com.moral.api.entity.SpecialDevice; import com.moral.api.entity.Version; import com.moral.api.service.DeviceService; +import com.moral.api.service.SpecialDeviceService; import com.moral.api.service.VersionService; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; @@ -39,6 +41,9 @@ @Autowired private VersionService versionService; + @Autowired + private SpecialDeviceService specialDeviceService; + @ApiOperation(value = "������������", notes = "������������") @ApiImplicitParams({ @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String") @@ -53,10 +58,14 @@ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } - //������mac��������������� + //������mac���������������,��������������������������������������������� QueryWrapper<Device> queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("mac", device.getMac()); - if (deviceService.count(queryWrapper) > 0) { + queryWrapper.eq("mac", device.getMac()).eq("is_delete", Constants.NOT_DELETE); + + QueryWrapper<SpecialDevice> specialDeviceQueryWrapper = new QueryWrapper<>(); + queryWrapper.eq("mac", device.getMac()).eq("is_delete", Constants.NOT_DELETE); + + if (deviceService.getOne(queryWrapper) != null || specialDeviceService.getOne(specialDeviceQueryWrapper) != null) { return ResultMessage.fail(ResponseCodeEnum.MAC_IS_EXIST.getCode(), ResponseCodeEnum.MAC_IS_EXIST.getMsg()); } deviceService.insert(device); @@ -88,10 +97,14 @@ ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } if (device.getMac() != null) { - //������mac��������������� + //������mac���������������,��������������������������������������������� QueryWrapper<Device> queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("mac", device.getMac()); - if (deviceService.getOne(queryWrapper) != null) { + queryWrapper.eq("mac", device.getMac()).eq("is_delete", Constants.NOT_DELETE); + + QueryWrapper<SpecialDevice> specialDeviceQueryWrapper = new QueryWrapper<>(); + queryWrapper.eq("mac", device.getMac()).eq("is_delete", Constants.NOT_DELETE); + + if (deviceService.getOne(queryWrapper) != null || specialDeviceService.getOne(specialDeviceQueryWrapper) != null) { return ResultMessage.fail(ResponseCodeEnum.MAC_IS_EXIST.getCode(), ResponseCodeEnum.MAC_IS_EXIST.getMsg()); } } diff --git a/screen-manage/src/main/java/com/moral/api/entity/HistorySecondSpecial.java b/screen-manage/src/main/java/com/moral/api/entity/HistorySecondSpecial.java new file mode 100644 index 0000000..d173893 --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/entity/HistorySecondSpecial.java @@ -0,0 +1,55 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * ������������������������ + * </p> + * + * @author moral + * @since 2021-08-12 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class HistorySecondSpecial extends Model<HistorySecondSpecial> { + + private static final long serialVersionUID = 1L; + + /** + * ������mac + */ + private String mac; + + /** + * ������������ + */ + private Date time; + + /** + * ������ + */ + private String value; + + /** + * ���������������������id + */ + private Integer organizationId; + + /** + * ������������ + */ + private Date batch; + + + @Override + protected Serializable pkVal() { + return null; + } + +} diff --git a/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java index 55f3f67..04e47cb 100644 --- a/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java +++ b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java @@ -7,7 +7,7 @@ import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.support.Acknowledgment; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; +import org.springframework.util.ObjectUtils; import java.util.HashMap; import java.util.Iterator; @@ -17,9 +17,13 @@ import com.moral.api.service.DeviceService; import com.moral.api.service.HistoryHourlyService; import com.moral.api.service.HistoryMinutelyService; +import com.moral.api.service.HistorySecondSpecialService; import com.moral.constant.KafkaConstants; import com.moral.constant.RedisConstants; +/* + * ������������������ + * */ @Component @Slf4j public class KafkaConsumer { @@ -36,16 +40,19 @@ @Autowired private RedisTemplate redisTemplate; + @Autowired + private HistorySecondSpecialService historySecondSpecialService; + //������������ - @KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, groupId = KafkaConstants.GROUP_MINUTE, containerFactory = "kafkaListenerContainerFactory") + @KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, groupId = KafkaConstants.GROUP_INSERT, containerFactory = "kafkaListenerContainerFactory") public void listenMinute(ConsumerRecord<String, String> record, Acknowledgment ack) { String msg = record.value(); try { - Map<String, Object> data = JSON.parseObject(msg, HashMap.class); + Map<String, Object> data = JSON.parseObject(msg, Map.class); Object mac = data.get("mac"); Object time = data.get("DataTime"); Object ver = data.get("ver"); - if (StringUtils.isEmpty(ver) || StringUtils.isEmpty(time) || StringUtils.isEmpty(mac)) { + if (ObjectUtils.isEmpty(ver) || ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { log.warn("some properties is null, param{}", msg); ack.acknowledge(); return; @@ -77,15 +84,15 @@ } //������������ - @KafkaListener(topics = KafkaConstants.TOPIC_HOUR, groupId = KafkaConstants.GROUP_HOUR, containerFactory = "kafkaListenerContainerFactory") + @KafkaListener(topics = KafkaConstants.TOPIC_HOUR, groupId = KafkaConstants.GROUP_INSERT, containerFactory = "kafkaListenerContainerFactory") public void listenHour(ConsumerRecord<String, String> record, Acknowledgment ack) { String msg = record.value(); try { - Map<String, Object> data = JSON.parseObject(msg, HashMap.class); + Map<String, Object> data = JSON.parseObject(msg, Map.class); Object mac = data.get("mac"); Object time = data.get("DataTime"); Object ver = data.get("ver"); - if (StringUtils.isEmpty(ver) || StringUtils.isEmpty(time) || StringUtils.isEmpty(mac)) { + if (ObjectUtils.isEmpty(ver) || ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { log.warn("some properties is null, param{}", msg); ack.acknowledge(); return; @@ -118,24 +125,54 @@ //������������������������������������������������������ @KafkaListener(topics = KafkaConstants.TOPIC_SECOND, groupId = KafkaConstants.GROUP_STATE, containerFactory = "kafkaListenerContainerFactory") - public void listenSecond(ConsumerRecord<String, String> record, Acknowledgment ack) { + public void listenSecond(ConsumerRecord<String, String> record) { String msg = record.value(); try { - Map<String, Object> data = JSON.parseObject(msg, HashMap.class); + Map<String, Object> data = JSON.parseObject(msg, Map.class); Object mac = data.get("mac"); Object time = data.get("DataTime"); Object ver = data.get("ver"); - if (StringUtils.isEmpty(ver) || StringUtils.isEmpty(time) || StringUtils.isEmpty(mac)) { + if (ObjectUtils.isEmpty(ver) || ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { log.warn("some properties is null, param{}", msg); - ack.acknowledge(); return; } + //������������ + data.remove("time"); + data.remove("entryTime"); + data.remove("ver"); + //������������ data = deviceService.adjustDeviceData(data); //������redis redisTemplate.opsForHash().put(RedisConstants.DATA_SECOND, mac, data); //��������������������������� deviceService.judgeDeviceState(data); + } catch (Exception e) { + log.error("param{}" + msg); + } + } + + //��������������������� + @KafkaListener(topics = KafkaConstants.TOPIC_SECOND_SPECIAL, groupId = KafkaConstants.GROUP_INSERT, containerFactory = "kafkaListenerContainerFactory") + public void listenSecondSpecial(ConsumerRecord<String, String> record, Acknowledgment ack) { + String msg = record.value(); + try { + Map<String, Object> data = JSON.parseObject(msg, Map.class); + Object mac = data.get("mac"); + Object time = data.get("DataTime"); + Object ver = data.get("ver"); + if (ObjectUtils.isEmpty(ver) || ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { + log.warn("some properties is null, param{}", msg); + ack.acknowledge(); + return; + } + + //������������ + data.remove("time"); + data.remove("entryTime"); + data.remove("ver"); + + historySecondSpecialService.insertHistorySecond(data); ack.acknowledge(); } catch (Exception e) { log.error("param{}" + msg); diff --git a/screen-manage/src/main/java/com/moral/api/mapper/HistorySecondSpecialMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/HistorySecondSpecialMapper.java new file mode 100644 index 0000000..ebd2af7 --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/mapper/HistorySecondSpecialMapper.java @@ -0,0 +1,16 @@ +package com.moral.api.mapper; + +import com.moral.api.entity.HistorySecondSpecial; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * ������������������������ Mapper ������ + * </p> + * + * @author moral + * @since 2021-08-12 + */ +public interface HistorySecondSpecialMapper extends BaseMapper<HistorySecondSpecial> { + +} diff --git a/screen-manage/src/main/java/com/moral/api/mapper/SpecialDeviceMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/SpecialDeviceMapper.java index 82bc9e6..0936cd6 100644 --- a/screen-manage/src/main/java/com/moral/api/mapper/SpecialDeviceMapper.java +++ b/screen-manage/src/main/java/com/moral/api/mapper/SpecialDeviceMapper.java @@ -1,14 +1,14 @@ package com.moral.api.mapper; +import com.moral.api.entity.Organization; import com.moral.api.entity.SpecialDevice; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; -import java.util.Map; /** * <p> - * Mapper ������ + * Mapper ������ * </p> * * @author moral @@ -18,4 +18,6 @@ List<SpecialDevice> querySpecialDeviceUnitAlarmInfo(); + Organization selectOrgByMac(String mac); + } diff --git a/screen-manage/src/main/java/com/moral/api/service/DeviceService.java b/screen-manage/src/main/java/com/moral/api/service/DeviceService.java index 0d3fa02..e22ba74 100644 --- a/screen-manage/src/main/java/com/moral/api/service/DeviceService.java +++ b/screen-manage/src/main/java/com/moral/api/service/DeviceService.java @@ -58,6 +58,9 @@ //������������������ Map<String, Object> adjustDeviceData(Map<String, Object> deviceData); + //������������������������ + Map<String, Object> adjustSpecialDeviceData(Map<String, Object> deviceData); + //��������������������������� void judgeDeviceState(Map<String, Object> data); diff --git a/screen-manage/src/main/java/com/moral/api/service/HistorySecondSpecialService.java b/screen-manage/src/main/java/com/moral/api/service/HistorySecondSpecialService.java new file mode 100644 index 0000000..97fb89c --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/service/HistorySecondSpecialService.java @@ -0,0 +1,21 @@ +package com.moral.api.service; + +import java.util.Map; + +import com.moral.api.entity.HistorySecondSpecial; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * ������������������������ ��������� + * </p> + * + * @author moral + * @since 2021-08-12 + */ +public interface HistorySecondSpecialService extends IService<HistorySecondSpecial> { + + //���������insert + void insertHistorySecond(Map<String, Object> data); + +} diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java index c7916b7..9339dc2 100644 --- a/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java +++ b/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java @@ -84,6 +84,9 @@ private VersionSensorUnitMapper versionSensorUnitMapper; @Autowired + private SpecialDeviceMapper specialDeviceMapper; + + @Autowired private AdjustDataUtils adjustDataUtils; /* @@ -177,7 +180,7 @@ insertOrganizationUnitAlarm(newOrgId, newVersionId); } //���redis��������������������� - delDeviceInfoFromRedis(mac); + delDeviceInfoFromRedis(oldDevice.getMac()); Map<String, Object> deviceInfo = selectDeviceInfoById(deviceId); //������������������redis setDeviceInfoToRedis(mac, deviceInfo); @@ -186,7 +189,7 @@ //������������������ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); StringBuilder content = new StringBuilder(); - content.append("������������������").append(mac).append("���"); + content.append("������������������" + oldDevice.getMac()).append("==>").append(mac).append("���"); Field[] fields = Device.class.getDeclaredFields(); for (Field field : fields) { if (field.getName().equals("id")) { @@ -405,7 +408,7 @@ @Override public Map<String, Object> getDeviceByMac(String mac) { Map<String, Object> deviceInfo = getDeviceInfoFromRedis(mac); - if (deviceInfo == null) { + if (ObjectUtils.isEmpty(deviceInfo)) { QueryWrapper<Device> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("mac", mac).eq("is_delete", Constants.NOT_DELETE); Device device = deviceMapper.selectOne(queryWrapper); @@ -419,9 +422,9 @@ @Override public Map<String, Object> adjustDeviceData(Map<String, Object> deviceData) { - String mac = deviceData.get("mac").toString(); + String mac = deviceData.remove("mac").toString(); //���redis������������������ - Map<String, Object> adjustFormula = redisTemplate.opsForHash().entries(RedisConstants.ADJUST + mac); + Map<String, Object> adjustFormula = redisTemplate.opsForHash().entries(RedisConstants.ADJUST + "_" + mac); if (!ObjectUtils.isEmpty(adjustFormula)) { Map<String, Object> deviceInfo = getDeviceByMac(mac); Map<String, Object> monitorPoint = (Map<String, Object>) deviceInfo.get("monitorPoint"); @@ -434,6 +437,26 @@ } return adjustDataUtils.adjust(deviceData, adjustFormula, ObjectUtils.isEmpty(aqiMap) ? null : aqiMap); } + deviceData.remove("DataTime"); + return deviceData; + } + + @Override + public Map<String, Object> adjustSpecialDeviceData(Map<String, Object> deviceData) { + String mac = deviceData.remove("mac").toString(); + //���redis������������������ + Map<String, Object> adjustFormula = redisTemplate.opsForHash().entries(RedisConstants.ADJUST + "_" + mac); + if (!ObjectUtils.isEmpty(adjustFormula)) { + Organization organization = specialDeviceMapper.selectOrgByMac(mac); + Integer areaCode = organization.getAreaCode(); + Integer cityCode = organization.getCityCode(); + Map<String, Object> aqiMap = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.AQI_DATA, areaCode); + if (ObjectUtils.isEmpty(aqiMap)) { + aqiMap = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.AQI_DATA, cityCode); + } + return adjustDataUtils.adjust(deviceData, adjustFormula, ObjectUtils.isEmpty(aqiMap) ? null : aqiMap); + } + deviceData.remove("DataTime"); return deviceData; } 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 34659ae..e555273 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 @@ -37,11 +37,12 @@ @Override @Transactional public void insertHistoryHourly(Map<String, Object> data) { + Integer version = (Integer) data.remove("ver"); Map<String, Object> dataAdjust = new HashMap<>(data); String mac = data.remove("mac").toString(); Date time = DateUtils.getDate((String) data.remove("DataTime"), DateUtils.yyyyMMddHHmmss_EN); - Integer version = (Integer) data.remove("ver"); + Map<String, Object> result = new HashMap<>(); result.put("mac", mac); result.put("time", time); @@ -53,9 +54,6 @@ //������������ dataAdjust = deviceService.adjustDeviceData(dataAdjust); - dataAdjust.remove("mac"); - dataAdjust.remove("DataTime"); - dataAdjust.remove("ver"); HistoryHourly historyHourly = new HistoryHourly(); historyHourly.setMac(mac); diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java index ccd2c8a..4481338 100644 --- a/screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java +++ b/screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java @@ -28,38 +28,28 @@ @Transactional public void insertHistoryMinutely(Map<String, Object> data) { Map<String, Object> result = new HashMap<>(); + Object ver = data.remove("ver"); + Map<String, Object> dataAdjust = new HashMap<>(data); + Object mac = data.remove("mac"); + result.put("mac", mac); - result.put("version", data.remove("ver")); + result.put("version", ver); + Date time = DateUtils.getDate((String) data.remove("DataTime"), DateUtils.yyyyMMddHHmmss_EN); result.put("time", time); result.put("value", JSONObject.toJSONString(data)); String timeUnits = DateUtils.dateToDateString(time, DateUtils.yyyyMM_EN); - result.put("timeUnits", tableSuffix(timeUnits, Constants.UN_ADJUST)); + result.put("timeUnits", timeUnits + "_" + Constants.UN_ADJUST); //��������������������������� historyMinutelyMapper.insertHistoryMinutely(result); //������������ dataAdjust = deviceService.adjustDeviceData(dataAdjust); - dataAdjust.remove("mac"); - dataAdjust.remove("DataTime"); - dataAdjust.remove("ver"); result.put("timeUnits", timeUnits); result.put("value", JSONObject.toJSONString(dataAdjust)); historyMinutelyMapper.insertHistoryMinutely(result); - - - } - - //��������� - private String tableSuffix(String... keys) { - StringBuilder key = new StringBuilder(keys[0]); - for (int i = 1; i < keys.length; i++) { - key.append("_"); - key.append(keys[i]); - } - return key.toString(); } } diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondSpecialServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondSpecialServiceImpl.java new file mode 100644 index 0000000..47905d9 --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondSpecialServiceImpl.java @@ -0,0 +1,81 @@ +package com.moral.api.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.moral.api.entity.Device; +import com.moral.api.entity.HistorySecondSpecial; +import com.moral.api.entity.Sensor; +import com.moral.api.entity.SpecialDevice; +import com.moral.api.mapper.HistorySecondSpecialMapper; +import com.moral.api.service.DeviceService; +import com.moral.api.service.HistorySecondSpecialService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.moral.constant.Constants; +import com.moral.constant.RedisConstants; +import com.moral.util.DateUtils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * <p> + * ������������������������ ��������������� + * </p> + * + * @author moral + * @since 2021-08-12 + */ +@Service +public class HistorySecondSpecialServiceImpl extends ServiceImpl<HistorySecondSpecialMapper, HistorySecondSpecial> implements HistorySecondSpecialService { + + @Autowired + private HistorySecondSpecialMapper historySecondSpecialMapper; + + @Autowired + private DeviceService deviceService; + + @Autowired + private RedisTemplate redisTemplate; + + @Override + public void insertHistorySecond(Map<String, Object> data) { + Date batchTime = DateUtils.getDate((String) data.remove(Constants.SENSOR_CODE_SPECIAL_BATCH), DateUtils.yyyyMMddHHmmss_EN); + Date time = DateUtils.getDate((String) data.get("DataTime"), DateUtils.yyyyMMddHHmmss_EN); + String mac = data.get("mac").toString(); + + //������mac���redis��������������� + SpecialDevice specialDevice = (SpecialDevice) redisTemplate.opsForHash().get(RedisConstants.SPECIAL_DEVICE_INFO, mac); + List<Sensor> sensors = specialDevice.getVersion().getSensors(); + //������������ + data = data.entrySet().stream() + .filter(m -> { + boolean flag = false; + String key = m.getKey(); + if (!"mac".equals(key) && !"DataTime".equals(key)) { + for (Sensor sensor : sensors) { + if (sensor.getCode().equals(key)) { + flag = true; + break; + } + } + return flag; + } + return true; + }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + //������������ + data = deviceService.adjustSpecialDeviceData(data); + + HistorySecondSpecial historySecondSpecial = new HistorySecondSpecial(); + historySecondSpecial.setMac(mac); + historySecondSpecial.setTime(time); + historySecondSpecial.setValue(JSONObject.toJSONString(data)); + historySecondSpecial.setBatch(batchTime); + historySecondSpecialMapper.insert(historySecondSpecial); + } +} 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 ed7bf99..86f21fc 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 @@ -21,17 +21,17 @@ @Component public class AdjustDataUtils { /** - * @param deviceData ������������ + * @param deviceData ������������ * @param adjustFormula ������������ - * @param aqiMap ���������������������������������aqi������ + * @param aqiMap ���������������������������������aqi������ * @return Map<String, Object> ��������������� - * */ + */ public 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); + Date time = DateUtils.getDate((String) deviceData.remove("DataTime"), DateUtils.yyyyMMddHHmmss_EN); long finalTime = DateUtils.dataToTimeStampTime(time, DateUtils.HH_mm_ss_EN).getTime(); for (String key : deviceData.keySet()) { - if (!key.equals("mac") && !key.equals("time") && !key.equals("DataTime") && !key.equals("ver") && !key.contains("Flag")) { + if (!key.contains("Flag")) { //��������� Object measuredValue = deviceData.get(key); //������������������������ diff --git a/screen-manage/src/main/resources/mapper/HistorySecondSpecialMapper.xml b/screen-manage/src/main/resources/mapper/HistorySecondSpecialMapper.xml new file mode 100644 index 0000000..059231b --- /dev/null +++ b/screen-manage/src/main/resources/mapper/HistorySecondSpecialMapper.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.moral.api.mapper.HistorySecondSpecialMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.HistorySecondSpecial"> + <result column="mac" property="mac"/> + <result column="time" property="time"/> + <result column="value" property="value"/> + <result column="organization_id" property="organizationId"/> + <result column="batch" property="batch"/> + </resultMap> + +</mapper> \ No newline at end of file diff --git a/screen-manage/src/main/resources/mapper/SpecialDeviceMapper.xml b/screen-manage/src/main/resources/mapper/SpecialDeviceMapper.xml index 82d3e45..5bb04ba 100644 --- a/screen-manage/src/main/resources/mapper/SpecialDeviceMapper.xml +++ b/screen-manage/src/main/resources/mapper/SpecialDeviceMapper.xml @@ -63,4 +63,12 @@ where d.`is_delete` = 0; </select> + + <select id="selectOrgByMac" resultType="com.moral.api.entity.Organization"> + SELECT area_code, city_code + FROM organization + WHERE organization_id = + (SELECT organization_id FROM special_device WHERE mac = #{mac}) + </select> + </mapper> \ No newline at end of file -- Gitblit v1.8.0