From 619981daefbf8d9cc988f0b53404b6270fd1d27c Mon Sep 17 00:00:00 2001 From: nieziyan Date: Tue, 20 Jun 2023 15:12:05 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat=EF=BC=9A=E9=82=AE=E4=BB=B6=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/base/entity/SysEmailLog.java | 14 +- .../controller/AlarmLogController.java | 4 +- .../controller/SysEmailLogController.java | 176 ++++++++++++++++++ .../jeecg/modules/mapper/AlarmLogMapper.java | 3 +- .../modules/mapper/SysEmailLogMapper.java | 7 + .../modules/mapper/xml/AlarmLogMapper.xml | 6 +- .../modules/mapper/xml/SysEmailLogMapper.xml | 5 + .../modules/mapper/xml/sysDatabaseMapper.xml | 2 +- .../service/impl/AlarmLogServiceImpl.java | 102 +++------- 9 files changed, 224 insertions(+), 95 deletions(-) create mode 100644 jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/SysEmailLogMapper.xml diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/SysEmailLog.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/SysEmailLog.java index 3d29f926..c6086d6c 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/SysEmailLog.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/SysEmailLog.java @@ -9,6 +9,7 @@ import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; +import java.time.LocalDateTime; import java.util.Date; @Data @@ -30,22 +31,11 @@ public class SysEmailLog implements Serializable { @TableField(value = "receive_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date receiveTime; + private LocalDateTime receiveTime; @TableField(value = "create_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; - @TableField(value = "create_by") - private String createBy; - - @TableField(value = "update_time") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - - @TableField(value = "update_by") - private String updateBy; - } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmLogController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmLogController.java index 16ed0341..e5f84f53 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmLogController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmLogController.java @@ -36,13 +36,13 @@ public class AlarmLogController { @GetMapping("findInfo") @ApiOperation(value = "查询报警日志信息详情", notes = "查询报警日志信息详情") - public Result findPage(String id){ + public Result findInfo(String id){ return alarmLogService.findInfo(id); } @PostMapping("create") @ApiOperation(value = "新增报警日志", notes = "新增报警日志") - public Result findPage(@RequestBody AlarmLog alarmLog){ + public Result create(@RequestBody AlarmLog alarmLog){ return alarmLogService.create(alarmLog); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailLogController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailLogController.java index cfc763da..85308be0 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailLogController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailLogController.java @@ -1,4 +1,180 @@ package org.jeecg.modules.controller; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.util.RedisUtil; +import org.jeecg.modules.base.entity.SysEmailLog; +import org.jeecg.modules.service.ISysEmailLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("sysEmailLog") +@Api(value = "邮箱日志", tags = "邮箱日志") public class SysEmailLogController { + @Autowired + private ISysEmailLogService sysEmailLogService; + + @Autowired + private RedisUtil redisUtil; + + /** + * 邮箱服务器连接状态 正常/断开 + * + * @param emailId 电子邮件id + */ + @GetMapping("status") + public Result status(@RequestParam("emailId") String emailId){ + String key = "email_satus"; + Boolean emailSatus = (Boolean) redisUtil.hget(key, emailId); + return Result.OK(emailSatus == null ? false : emailSatus); + } + + @GetMapping("space") + public Result space(@RequestParam("emailId") String emailId){ + return null; + } + + /** + * 分别获取今天、昨天、过去一周邮件量 + * + * @param emailId 电子邮件id + */ + @GetMapping("total") + public Result totalEmail(@RequestParam("emailId") String emailId){ + // 当日邮件量 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysEmailLog::getEmailId,emailId); + LocalDate today = LocalDate.now(); + String todayStart = today + " 00:00:00"; + String todayEnd = today + " 23:59:59"; + wrapper.between(SysEmailLog::getReceiveTime,todayStart,todayEnd); + Long todayCount = sysEmailLogService.count(wrapper); + // 昨日邮件量 + wrapper.clear(); + wrapper.eq(SysEmailLog::getEmailId,emailId); + LocalDate yesterday = LocalDate.now().minusDays(1); + String yesterdayStart = yesterday + " 00:00:00"; + String yesterdayEnd = yesterday + " 23:59:59"; + wrapper.between(SysEmailLog::getReceiveTime,yesterdayStart,yesterdayEnd); + Long yesterdayCount = sysEmailLogService.count(wrapper); + // 过去一周邮件量 + wrapper.clear(); + wrapper.eq(SysEmailLog::getEmailId,emailId); + LocalDate passWeek = LocalDate.now().minusWeeks(1); + String weekStart = passWeek + " 00:00:00"; + wrapper.between(SysEmailLog::getReceiveTime,weekStart,todayEnd); + Long weekCount = sysEmailLogService.count(wrapper); + + Map result = new HashMap<>(); + result.put("today",todayCount); + result.put("yesterday",yesterdayCount); + result.put("week",weekCount); + return Result.OK(result); + } + + /** + * 今天邮件接收量 按小时划分 + * + * @param emailId 电子邮件id + */ + @GetMapping("today") + public Result today(@RequestParam("emailId") String emailId){ + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysEmailLog::getEmailId,emailId); + LocalDate today = LocalDate.now(); + String todayStart = today + " 00:00:00"; + String todayEnd = today + " 23:59:59"; + wrapper.between(SysEmailLog::getReceiveTime,todayStart,todayEnd); + List emailLogs = sysEmailLogService.list(wrapper); + List allTime = emailLogs.stream() + .map(SysEmailLog::getReceiveTime) + .collect(Collectors.toList()); + // 按照小时分组 + Map statistic = new TreeMap<>(); + Map> groupTime = allTime.stream() + .collect(Collectors.groupingBy(LocalDateTime::getHour)); + for (int i = 0; i < 24; i++) { + if(groupTime.containsKey(i)){ + Integer count = groupTime.get(i).size(); + statistic.put(timeStr(i),count); + }else { + statistic.put(timeStr(i),0); + } + } + return Result.OK(statistic); + } + + /** + * 根据日期筛选(折线图) + * + * @param emailId 电子邮件id + */ + @GetMapping("analysis") + public Result analysis(@RequestParam("emailId") String emailId, + @RequestParam("startDate") String startDate, + @RequestParam("endDate") String endDate){ + String startStr = startDate + " 00:00:00"; + String endStr = endDate + " 23:59:59"; + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysEmailLog::getEmailId,emailId); + wrapper.between(SysEmailLog::getReceiveTime,startStr,endStr); + Set xData = new HashSet<>(); + Collection yData = new ArrayList<>(); + Map statistic = new TreeMap<>(); + Map result = new HashMap<>(); + List allDate = sysEmailLogService.listObjs(wrapper, + emailLog -> ((SysEmailLog) emailLog).getReceiveTime()); + if (CollUtil.isEmpty(allDate)){ + result.put("xData",xData); + result.put("yData",yData); + return Result.OK(result); + } + + /* 支持跨年跨月选择 */ + // 通过年月日进行分组 例:2023-06-06 + DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE; + Map> group = allDate.stream() + .collect(Collectors.groupingBy(datetime -> datetime.format(formatter))); + + // 列举出startDate-endDate中所有日期(包括闰年) + // 没有邮件的日期,对应的值设置为0 + LocalDate start = LocalDate.parse(startDate); + LocalDate end = LocalDate.parse(endDate); + while (!start.isAfter(end)) { + String key = start.format(formatter); + if (group.containsKey(key)){ + Integer count = group.get(key).size(); + statistic.put(key,count); + }else { + statistic.put(key,0); + } + start = start.plusDays(1); + } + // 返回结果 + xData = statistic.keySet(); + yData = statistic.values(); + result.put("xData",xData); + result.put("yData",yData); + return Result.OK(result); + } + + private String timeStr(Integer time){ + if (time < 10){ + return "0" + time + ":00"; + } + return time + ":00"; + } } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/AlarmLogMapper.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/AlarmLogMapper.java index 4be954c9..689520b2 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/AlarmLogMapper.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/AlarmLogMapper.java @@ -7,13 +7,14 @@ import org.jeecg.modules.entity.AlarmHistory; import org.jeecg.modules.entity.AlarmLog; import org.jeecg.modules.vo.AlarmVo; +import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.Map; public interface AlarmLogMapper extends BaseMapper { - List rangeDay(Map params); + List rangeDay(Map params); List findPage(Map params); List typeAlarms(Map params); diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/SysEmailLogMapper.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/SysEmailLogMapper.java index fb25392b..674ed114 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/SysEmailLogMapper.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/SysEmailLogMapper.java @@ -3,5 +3,12 @@ package org.jeecg.modules.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.jeecg.modules.base.entity.SysEmailLog; +/** + * 系统邮件日志 + * + * @author nieziyan + * @date 2023-06-19 + */ public interface SysEmailLogMapper extends BaseMapper { + } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmLogMapper.xml b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmLogMapper.xml index 64f9b6b2..e6913a5c 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmLogMapper.xml +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmLogMapper.xml @@ -1,11 +1,11 @@ - SELECT - l.alarm_start_date + l.alarm_start_date FROM - alarm_log l + alarm_log l INNER JOIN alarm_rule r ON l.rule_id = r.ID diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/SysEmailLogMapper.xml b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/SysEmailLogMapper.xml new file mode 100644 index 00000000..b05d4dd6 --- /dev/null +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/SysEmailLogMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/sysDatabaseMapper.xml b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/sysDatabaseMapper.xml index 66c94989..5be1a952 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/sysDatabaseMapper.xml +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/sysDatabaseMapper.xml @@ -1,6 +1,6 @@ - +