From 2762806c3cc4773115c80f0b5b568d6d4c7ae514 Mon Sep 17 00:00:00 2001 From: pengjie <17373303529@163.com> Date: Wed, 3 Jan 2024 13:34:49 +0800 Subject: [PATCH] =?UTF-8?q?AI=E9=A2=84=E8=AD=A6=E7=BB=9F=E8=AE=A1=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recognition/AirecognitionApplication.java | 2 + .../controller/DeviceAlarmController.java | 73 ++++++++++++++----- .../enterprise/entity/DeviceAlarm.java | 7 ++ .../enterprise/mapper/DeviceAlarmMapper.java | 4 +- .../mapper/xml/DeviceAlarmMapper.xml | 10 +++ .../service/IDeviceAlarmService.java | 2 + .../service/impl/DeviceAlarmServiceImpl.java | 7 +- .../redis/Constant/CacheConstants.java | 5 ++ .../com/xmgl/recognition/task/AlarmTask.java | 33 ++++++++- .../com/xmgl/recognition/util/FileUtil.java | 1 + 10 files changed, 122 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/xmgl/recognition/AirecognitionApplication.java b/src/main/java/com/xmgl/recognition/AirecognitionApplication.java index 3a26862..968f7b3 100644 --- a/src/main/java/com/xmgl/recognition/AirecognitionApplication.java +++ b/src/main/java/com/xmgl/recognition/AirecognitionApplication.java @@ -4,9 +4,11 @@ import cn.xuyanwu.spring.file.storage.EnableFileStorage; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; @MapperScan({"com.xmgl.*.*.*.mapper"}) @EnableFileStorage +@EnableScheduling @SpringBootApplication public class AirecognitionApplication { diff --git a/src/main/java/com/xmgl/recognition/modules/enterprise/controller/DeviceAlarmController.java b/src/main/java/com/xmgl/recognition/modules/enterprise/controller/DeviceAlarmController.java index 4c0a73f..bd83e55 100644 --- a/src/main/java/com/xmgl/recognition/modules/enterprise/controller/DeviceAlarmController.java +++ b/src/main/java/com/xmgl/recognition/modules/enterprise/controller/DeviceAlarmController.java @@ -10,6 +10,8 @@ import com.xmgl.recognition.modules.admin.entity.Algorithm; import com.xmgl.recognition.modules.admin.entity.SystemDictData; import com.xmgl.recognition.modules.admin.service.IAlgorithmService; import com.xmgl.recognition.modules.admin.service.ISystemDictDataService; +import com.xmgl.recognition.redis.Constant.CacheConstants; +import com.xmgl.recognition.redis.lock.RedisRepository; import com.xmgl.recognition.util.CommonUtil; import com.xmgl.recognition.util.ParamEnum; import io.swagger.annotations.Api; @@ -71,6 +73,9 @@ public class DeviceAlarmController { @Autowired private IAlgorithmService algorithmService; + @Autowired + private RedisRepository redisRepository; + /** * 分页列表查询 * @@ -114,6 +119,27 @@ public class DeviceAlarmController { return result; } + /** + * 处理预警信息 + * @return + */ + @OperLog(operModul = "设备报警管理", operType = "修改", operDesc = "处理预警信息") + @ApiOperation(value = "处理预警信息", notes = "处理预警信息", httpMethod = "POST") + @ApiImplicitParam(name = "id", value = "设备报警ID", paramType = "query", required = true, dataType = "Integer") + @PostMapping(value = "/updateState") + public Result updateState(@ApiIgnore @RequestBody Map map) { + Result result = new Result(); + DeviceAlarm deviceAlarm = deviceAlarmService.getById(MapUtils.getString(map, "id")); + if (deviceAlarm == null) { + result.error500("未找到对应实体"); + } else { + deviceAlarm.setState(1); + deviceAlarmService.updateById(deviceAlarm); + result.setSuccess(true); + } + return result; + } + /** * 设备报警统计 * @return @@ -125,10 +151,11 @@ public class DeviceAlarmController { Result> result = new Result>(); Map resultMap = new HashMap<>(); List deviceAlarmList = deviceAlarmService.getList(Wrappers.lambdaQuery() - .between(DeviceAlarm::getReportTime, DateUtil.beginOfDay(new Date()), DateUtil.endOfDay(new Date()))); + .between(DeviceAlarm::getReportTime, DateUtil.beginOfDay(new Date()), DateUtil.endOfDay(new Date())) + .orderByDesc(DeviceAlarm::getReportTime)); List algorithms = algorithmService.list(); deviceAlarmList.stream().forEach(d -> { - List algorithmList = algorithms.stream().filter(a -> a.getRemark().equals(d.getType())).collect(Collectors.toList()); + List algorithmList = algorithms.stream().filter(a -> a.getRemark().equals(d.getType().toString())).collect(Collectors.toList()); d.setTypeName(algorithmList.size() > 0 ? algorithmList.get(0).getTitle() : ""); }); resultMap.put("deviceAlarmList", deviceAlarmList); @@ -154,7 +181,7 @@ public class DeviceAlarmController { public Result>> queryByType(@ApiIgnore @RequestBody Map map) { Result>> result = new Result>>(); Integer day = MapUtils.getInteger(map, "day"); - List list = deviceAlarmService.list(Wrappers.lambdaQuery() + List list = deviceAlarmService.queryListForType(Wrappers.lambdaQuery() .between(DeviceAlarm::getReportTime, DateUtil.offsetDay(new Date(), -day), DateUtil.endOfDay(new Date()))); Map> collect = list.stream().collect(Collectors.groupingBy(l -> l.getType())); Map resultMap = collect.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().size())); @@ -163,15 +190,16 @@ public class DeviceAlarmController { algorithms.stream().forEach(s -> { Map map1 = new HashMap<>(); map1.put("type", s.getTitle()); - map1.put("num", resultMap.get(s.getRemark())); + Integer num = resultMap.get(Integer.parseInt(s.getRemark())); + map1.put("num", num == null ? 0 : num); resultList.add(map1); }); - /*resultMap.entrySet().stream().forEach(r -> { - Map map1 = new HashMap<>(); - map1.put("type", CommonUtil.getDictValue(systemDictData, r.getKey())); - map1.put("num", r.getValue()); - resultList.add(map1); - });*/ + resultList.sort(new Comparator>() { + @Override + public int compare(Map o1, Map o2) { + return Integer.parseInt(o1.get("num").toString()) - (Integer.parseInt(o2.get("num").toString())); + } + }.reversed()); result.setSuccess(true); result.setResult(resultList); return result; @@ -193,7 +221,7 @@ public class DeviceAlarmController { Date beginTime = new Date(); if (type == 1) { beginTime = DateUtil.beginOfDay(new Date()); - list = deviceAlarmService.list(Wrappers.lambdaQuery() + list = deviceAlarmService.getList(Wrappers.lambdaQuery() .between(DeviceAlarm::getReportTime, beginTime, new Date())); } else { if (type == 2) { @@ -204,8 +232,10 @@ public class DeviceAlarmController { day = 30; } beginTime = DateUtil.offsetDay(new Date(), -day); - list = deviceAlarmService.list(Wrappers.lambdaQuery() - .between(DeviceAlarm::getReportTime, beginTime, new Date())); + if (type == 2) { + list = deviceAlarmService.getList(Wrappers.lambdaQuery() + .between(DeviceAlarm::getReportTime, beginTime, new Date())); + } } List> resultList = new ArrayList<>(); if (type <= 2) { @@ -224,14 +254,23 @@ public class DeviceAlarmController { resultList.add(resultMap); } } else { + List objList = redisRepository.getList(CacheConstants.DEVICE_ALARM); for (int i = 0; i < 31; i++) { - Map resultMap = new HashMap<>(); DateTime dateTime = DateUtil.offsetDay(beginTime, i); - if (DateUtil.compare(dateTime, new Date()) >= 0) { + if (DateUtil.compare(dateTime, DateUtil.offsetDay(beginTime, day)) >= 0) { break; } - resultMap.put("time", dateTime.toDateStr()); - resultMap.put("num", list.stream().filter(l -> new SimpleDateFormat("yyyy-MM-dd").format(l.getReportTime()).equals(dateTime.toDateStr())).count()); + Map resultMap = new HashMap<>(); + Map cacheMap = new HashMap<>(); + String dateStr = dateTime.toDateStr(); + resultMap.put("num", 0); + for (Object s : objList) { + cacheMap = (Map) s; + if (cacheMap.get("time").equals(dateStr)) { + resultMap.put("num", cacheMap.get("num")); + } + } + resultMap.put("time", dateStr); resultList.add(resultMap); } } diff --git a/src/main/java/com/xmgl/recognition/modules/enterprise/entity/DeviceAlarm.java b/src/main/java/com/xmgl/recognition/modules/enterprise/entity/DeviceAlarm.java index b30dcf1..d787978 100644 --- a/src/main/java/com/xmgl/recognition/modules/enterprise/entity/DeviceAlarm.java +++ b/src/main/java/com/xmgl/recognition/modules/enterprise/entity/DeviceAlarm.java @@ -95,6 +95,13 @@ public class DeviceAlarm implements Serializable { @ApiModelProperty(value = "位置") private String address; + /** + * 状态(1:已阅; 0:未阅) + */ + @Excel(name = "状态(1:已阅; 0:未阅)", width = 15) + @ApiModelProperty(value = "状态(1:已阅; 0:未阅)") + private Integer state; + /** * 设备名称 */ diff --git a/src/main/java/com/xmgl/recognition/modules/enterprise/mapper/DeviceAlarmMapper.java b/src/main/java/com/xmgl/recognition/modules/enterprise/mapper/DeviceAlarmMapper.java index 91e9fb8..b927578 100644 --- a/src/main/java/com/xmgl/recognition/modules/enterprise/mapper/DeviceAlarmMapper.java +++ b/src/main/java/com/xmgl/recognition/modules/enterprise/mapper/DeviceAlarmMapper.java @@ -25,5 +25,7 @@ public interface DeviceAlarmMapper extends BaseMapper { Page pageList(Page page, @Param(Constants.WRAPPER) Wrapper wrapper); - List pageList(@Param(Constants.WRAPPER) Wrapper wrapper); + List getList(@Param(Constants.WRAPPER) Wrapper wrapper); + + List queryListForType(@Param(Constants.WRAPPER) Wrapper wrapper); } diff --git a/src/main/java/com/xmgl/recognition/modules/enterprise/mapper/xml/DeviceAlarmMapper.xml b/src/main/java/com/xmgl/recognition/modules/enterprise/mapper/xml/DeviceAlarmMapper.xml index 3dfb787..a01c61b 100644 --- a/src/main/java/com/xmgl/recognition/modules/enterprise/mapper/xml/DeviceAlarmMapper.xml +++ b/src/main/java/com/xmgl/recognition/modules/enterprise/mapper/xml/DeviceAlarmMapper.xml @@ -6,4 +6,14 @@ SELECT a.*, d.code as deviceName FROM device_alarm a LEFT JOIN device d ON a.device_code = d.`code` ${ew.customSqlSegment} + + + + \ No newline at end of file diff --git a/src/main/java/com/xmgl/recognition/modules/enterprise/service/IDeviceAlarmService.java b/src/main/java/com/xmgl/recognition/modules/enterprise/service/IDeviceAlarmService.java index 9bb4e40..b2779f7 100644 --- a/src/main/java/com/xmgl/recognition/modules/enterprise/service/IDeviceAlarmService.java +++ b/src/main/java/com/xmgl/recognition/modules/enterprise/service/IDeviceAlarmService.java @@ -21,4 +21,6 @@ public interface IDeviceAlarmService extends IService { Page pageList(Map map); List getList(Wrapper wrapper); + + List queryListForType(Wrapper wrapper); } diff --git a/src/main/java/com/xmgl/recognition/modules/enterprise/service/impl/DeviceAlarmServiceImpl.java b/src/main/java/com/xmgl/recognition/modules/enterprise/service/impl/DeviceAlarmServiceImpl.java index 132bf22..9cf35c6 100644 --- a/src/main/java/com/xmgl/recognition/modules/enterprise/service/impl/DeviceAlarmServiceImpl.java +++ b/src/main/java/com/xmgl/recognition/modules/enterprise/service/impl/DeviceAlarmServiceImpl.java @@ -55,6 +55,11 @@ public class DeviceAlarmServiceImpl extends ServiceImpl getList(Wrapper wrapper) { - return baseMapper.pageList(wrapper); + return baseMapper.getList(wrapper); + } + + @Override + public List queryListForType(Wrapper wrapper) { + return baseMapper.queryListForType(wrapper); } } diff --git a/src/main/java/com/xmgl/recognition/redis/Constant/CacheConstants.java b/src/main/java/com/xmgl/recognition/redis/Constant/CacheConstants.java index 2834058..c778df9 100644 --- a/src/main/java/com/xmgl/recognition/redis/Constant/CacheConstants.java +++ b/src/main/java/com/xmgl/recognition/redis/Constant/CacheConstants.java @@ -18,6 +18,11 @@ public interface CacheConstants { */ String USER_DETAILS = "user_details:"; + /** + * 设备预警信息 + */ + String DEVICE_ALARM = "device_alarm"; + /** * 角色信息缓存 */ diff --git a/src/main/java/com/xmgl/recognition/task/AlarmTask.java b/src/main/java/com/xmgl/recognition/task/AlarmTask.java index 7aa1fe1..d0f3f59 100644 --- a/src/main/java/com/xmgl/recognition/task/AlarmTask.java +++ b/src/main/java/com/xmgl/recognition/task/AlarmTask.java @@ -1,5 +1,6 @@ package com.xmgl.recognition.task; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; @@ -10,14 +11,17 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.xmgl.recognition.modules.admin.entity.Device; import com.xmgl.recognition.modules.admin.service.IDeviceService; +import com.xmgl.recognition.modules.enterprise.entity.DeviceAlarm; +import com.xmgl.recognition.modules.enterprise.service.IDeviceAlarmService; +import com.xmgl.recognition.redis.Constant.CacheConstants; +import com.xmgl.recognition.redis.lock.RedisRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.stereotype.Repository; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; /** * @description: 预警信息统计定时任务 @@ -29,6 +33,12 @@ public class AlarmTask { @Autowired private IDeviceService deviceService; + @Autowired + private RedisRepository redisRepository; + + @Autowired + private IDeviceAlarmService deviceAlarmService; + /** * ,每分钟检查设备在线状态 */ @@ -48,4 +58,21 @@ public class AlarmTask { } log.info("=========定时检查设备在线任务执行成功========"); } + + /** + * ,统计报警信息 + */ + @Scheduled(cron = "0 0 1 * * ?") + private void deviceAlarmStat() { + DateTime dateTime = DateUtil.offsetDay(new Date(), -1); + Map map = new HashMap<>(); + map.put("time", dateTime.toDateStr()); + map.put("num", deviceAlarmService.count(Wrappers.lambdaQuery() + .between(DeviceAlarm::getReportTime, DateUtil.beginOfDay(dateTime), DateUtil.endOfDay(dateTime)))); + long num = redisRepository.leftPush(CacheConstants.DEVICE_ALARM, map); + if (num > 31) { + redisRepository.rightPop(CacheConstants.DEVICE_ALARM); + } + log.info("=========定时检查设备在线任务执行成功========"); + } } diff --git a/src/main/java/com/xmgl/recognition/util/FileUtil.java b/src/main/java/com/xmgl/recognition/util/FileUtil.java index cf427e3..5610298 100644 --- a/src/main/java/com/xmgl/recognition/util/FileUtil.java +++ b/src/main/java/com/xmgl/recognition/util/FileUtil.java @@ -51,6 +51,7 @@ public class FileUtil { * @return */ public static MultipartFile base64toMultipart(String data, String fileName) { + data = "data:image/jpeg;base64," + data; String[] baseStrs = data.split(","); //BASE64Decoder decoder = new BASE64Decoder(); //byte[] b = decoder.decodeBuffer(baseStrs[1]);