diff --git a/jeecg-module-abnormal-alarm/pom.xml b/jeecg-module-abnormal-alarm/pom.xml
index ca43b195..00247819 100644
--- a/jeecg-module-abnormal-alarm/pom.xml
+++ b/jeecg-module-abnormal-alarm/pom.xml
@@ -11,12 +11,22 @@
jeecg-module-abnormal-alarm
+
+ 5.8.19
+
+
org.jeecgframework.boot
jeecg-boot-base-core
+
+
\ No newline at end of file
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 b56a8882..0754205c 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
@@ -4,6 +4,7 @@ import org.jeecg.common.api.QueryRequest;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.AlarmLog;
import org.jeecg.modules.service.IAlarmLogService;
+import org.jeecg.modules.vo.AlarmVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -14,9 +15,22 @@ public class AlarmLogController {
@Autowired
private IAlarmLogService alarmLogService;
+ @GetMapping("viewAll")
+ public Result viewAll(@RequestBody AlarmVo alarmVo){ return alarmLogService.viewAll(alarmVo); }
+
@GetMapping("findPage")
- public Result findPage(QueryRequest queryRequest, AlarmLog alarmLog){
- return alarmLogService.findPage(queryRequest, alarmLog);
+ public Result findPage(@RequestBody AlarmVo alarmVo){
+ return alarmLogService.findPage(alarmVo);
+ }
+
+ @GetMapping("typeAlarms")
+ public Result typeAlarms(@RequestBody AlarmVo alarmVo){
+ return alarmLogService.typeAlarms(alarmVo);
+ }
+
+ @GetMapping("ruleTop")
+ public Result ruleTop5(@RequestBody AlarmVo alarmVo){
+ return alarmLogService.ruleTop5(alarmVo);
}
@GetMapping("findInfo")
@@ -38,7 +52,4 @@ public class AlarmLogController {
public Result deleteById(String id){
return alarmLogService.deleteById(id);
}
-
-
-
}
diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/dto/TypeDto.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/dto/TypeDto.java
new file mode 100644
index 00000000..0705453d
--- /dev/null
+++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/dto/TypeDto.java
@@ -0,0 +1,13 @@
+package org.jeecg.modules.dto;
+
+import lombok.Data;
+
+@Data
+public class TypeDto {
+ // 1.资源类型 Server|Database|Email
+ // 2.规则名
+ private String name;
+ // 1.报警量
+ // 2.规则使用量
+ private Integer value;
+}
diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/entity/AlarmHistory.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/entity/AlarmHistory.java
index 4158a87c..bc8ce841 100644
--- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/entity/AlarmHistory.java
+++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/entity/AlarmHistory.java
@@ -19,4 +19,5 @@ public class AlarmHistory {
private String operator;
+ private String sourceType;
}
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 a1577f43..602bd02f 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
@@ -1,7 +1,24 @@
package org.jeecg.modules.mapper;
+import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.dto.TypeDto;
+import org.jeecg.modules.entity.AlarmHistory;
import org.jeecg.modules.entity.AlarmLog;
+import org.jeecg.modules.vo.AlarmVo;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
public interface AlarmLogMapper extends BaseMapper {
+
+ List oneDay(Map params);
+
+ List oneMoreDay(Map params);
+ List findPage(Map params);
+
+ List typeAlarms(Map params);
+
+ List ruleTop5(Map params);
}
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
new file mode 100644
index 00000000..ceca8246
--- /dev/null
+++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmLogMapper.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmLogService.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmLogService.java
index 21c9ac89..02984b2f 100644
--- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmLogService.java
+++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmLogService.java
@@ -4,10 +4,17 @@ import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.QueryRequest;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.AlarmLog;
+import org.jeecg.modules.vo.AlarmVo;
public interface IAlarmLogService extends IService {
- Result findPage(QueryRequest queryRequest, AlarmLog alarmLog);
+ Result viewAll(AlarmVo alarmVo);
+
+ Result findPage(AlarmVo alarmVo);
+
+ Result typeAlarms(AlarmVo alarmVo);
+
+ Result ruleTop5(AlarmVo alarmVo);
Result findInfo(String id);
diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmLogServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmLogServiceImpl.java
index b74c9a83..cc2719ed 100644
--- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmLogServiceImpl.java
+++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmLogServiceImpl.java
@@ -1,32 +1,183 @@
package org.jeecg.modules.service.impl;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.jeecg.common.api.QueryRequest;
import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.dto.TypeDto;
+import org.jeecg.modules.entity.AlarmHistory;
import org.jeecg.modules.entity.AlarmLog;
import org.jeecg.modules.mapper.AlarmLogMapper;
import org.jeecg.modules.service.IAlarmLogService;
+import org.jeecg.modules.vo.AlarmVo;
import org.springframework.stereotype.Service;
-import java.util.Objects;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
@Service("alarmLogService")
public class AlarmLogServiceImpl extends ServiceImpl implements IAlarmLogService {
+ /**
+ * 总体统计柱状图
+ * @param alarmVo
+ * @return
+ */
@Override
- public Result findPage(QueryRequest queryRequest, AlarmLog alarmLog) {
- Result result = new Result();
- Page page = new Page<>(queryRequest.getPageNo(), queryRequest.getPageSize());
- LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
- Page alarmLogPage = this.baseMapper.selectPage(page, queryWrapper);
- result.setSuccess(true);
- result.setResult(alarmLogPage);
- return result;
+ public Result viewAll(AlarmVo alarmVo) {
+ String startDate = alarmVo.getStartDate();
+ String endDate = alarmVo.getEndDate();
+ Map params = BeanUtil.beanToMap(alarmVo);
+ List allDate;
+ /* 选择日期为同一天 按照小时划分 0-23小时 */
+ if (startDate.equals(endDate)){
+ allDate = baseMapper.oneDay(params);
+ Map> groupTime = allDate.stream()
+ .sorted(Comparator.comparing(Date::getHours))
+ .collect(Collectors.groupingBy(Date::getHours));
+ Map statistic = new HashMap<>();
+ 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);
+ }
+ }
+ // 返回x轴和y轴数据
+ Set xData = statistic.keySet();
+ Collection YData = statistic.values();
+ Map result = new HashMap<>();
+ result.put("xData",xData);
+ result.put("yData",YData);
+ return Result.OK(result);
+ }
+ /* 选择日期不是同一天 按照天划分(可以跨月选择,但不包括跨年) */
+ else {
+ allDate = baseMapper.oneMoreDay(params);
+
+ Map statistic = new HashMap<>();
+ // 通过mounth分组
+ Map> groupMounth = allDate.stream()
+ .sorted(Comparator.comparing(Date::getMonth))
+ .collect(Collectors.groupingBy(Date::getMonth));
+ // 通过day分组
+ for (Map.Entry> entry : groupMounth.entrySet()) {
+ Integer mounth = entry.getKey() + 1;// 当前月份
+ List allDay = entry.getValue(); // 当前月份有报警的day
+ Map> groupDay = allDay.stream()
+ .sorted(Comparator.comparing(Date::getDate))
+ .collect(Collectors.groupingBy(Date::getDate));
+ for (Map.Entry> entryDay : groupDay.entrySet()) {
+ Integer day = entryDay.getKey(); // 当前是几号
+ Integer count = entryDay.getValue().size();
+ statistic.put(dateStr(mounth,day),count);
+ }
+ }
+ // 列举startDate和endDate之间所有日期(已考虑闰年情况)
+ LocalDate start = LocalDate.parse(startDate);
+ LocalDate end = LocalDate.parse(endDate);
+ List dateList = new ArrayList<>();
+ LocalDate current = start;
+ while (!current.isAfter(end)) {
+ dateList.add(current);
+ current = current.plusDays(1);
+ }
+ List allDateStr = dateList.stream()
+ .map(item -> {
+ // 2023-06-15 格式截取为 06-15
+ String dateStr = item
+ .format(DateTimeFormatter.ISO_LOCAL_DATE)
+ .substring(5);
+ return dateStr;
+ })
+ .collect(Collectors.toList());
+ // 将startDate和endDate中没有预警信息的day设置为0
+ for (String dateStr : allDateStr) {
+ if (!allDateStr.contains(dateStr)){
+ statistic.put(dateStr,0);
+ }
+ }
+ // 返回x轴和y轴数据
+ Set xData = statistic.keySet();
+ Collection YData = statistic.values();
+ Map result = new HashMap<>();
+ result.put("xData",xData);
+ result.put("yData",YData);
+ return Result.OK(result);
+ }
+ }
+
+ /**
+ * 报警信息分页列表
+ * @param alarmVo
+ * @return
+ */
+ @Override
+ public Result findPage(AlarmVo alarmVo) {
+ Integer pageNo = alarmVo.getPageNo();
+ Integer pageSize = alarmVo.getPageSize();
+ Page page = new Page<>(pageNo,pageSize);
+ Integer pageStart = (pageNo - 1) * pageSize;
+ alarmVo.setPageStart(pageStart);
+ Map params = BeanUtil.beanToMap(alarmVo);
+ List alarmHistories = baseMapper.findPage(params);
+ // 当前页数据
+ page.setRecords(alarmHistories);
+ // 数据总条数
+ page.setTotal(this.count());
+ return Result.OK(page);
+ }
+
+ /**
+ * ALARM ANALYSIS -> Monitor Type Alarms
+ * @return
+ */
+ @Override
+ public Result typeAlarms(AlarmVo alarmVo) {
+ /* 饼图数据 */
+ // 警报类型-警报数
+ Map params = BeanUtil.beanToMap(alarmVo);
+ List typeAlarms = baseMapper.typeAlarms(params);
+ // 警报总数
+ Integer total = typeAlarms.stream().mapToInt(TypeDto::getValue).sum();
+ Map result = new HashMap<>();
+ result.put("pieData",typeAlarms);
+ result.put("pieTotal",total);
+ return Result.OK(result);
+ }
+
+ /**
+ * ALARM ANALYSIS -> Alarms Rule Top5
+ * @return
+ */
+ @Override
+ public Result ruleTop5(AlarmVo alarmVo) {
+ /* 柱状图数据 */
+ Map params = BeanUtil.beanToMap(alarmVo);
+ List ruleTop5 = baseMapper.ruleTop5(params);
+ // x轴数据
+ List xData = ruleTop5.stream()
+ .map(TypeDto::getName)
+ .collect(Collectors.toList());
+ // y轴数据
+ List yData = ruleTop5.stream()
+ .map(TypeDto::getValue)
+ .collect(Collectors.toList());
+ Map result = new HashMap<>();
+ result.put("xData",xData);
+ result.put("yData",yData);
+ return Result.OK(result);
}
@Override
@@ -88,4 +239,36 @@ public class AlarmLogServiceImpl extends ServiceImpl i
return result;
}
+ private String timeStr(Integer time){
+ if (time < 10){
+ return "0" + time + ":00";
+ }
+ return time + ":00";
+ }
+
+ private String dateStr(Integer mounth,Integer day){
+ StringBuilder sb = new StringBuilder();
+ if (mounth < 10){
+ sb.append("0").append(mounth).append("-");
+ }else {
+ sb.append(mounth).append("-");
+ }
+ if (day < 10){
+ sb.append("0").append(day);
+ }else {
+ sb.append(day);
+ }
+ return sb.toString();
+ }
+
+ public static void main(String[] args) throws ParseException {
+ List allDate = new ArrayList<>();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ Date date1 = sdf.parse("2013-04-29");
+ Date date2 = sdf.parse("2013-04-29");
+ Date date3 = sdf.parse("2013-05-01");
+ Date date4 = sdf.parse("2013-05-02");
+ allDate.addAll(Arrays.asList(date1,date2,date3,date4));
+ }
+
}
diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/vo/AlarmVo.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/vo/AlarmVo.java
new file mode 100644
index 00000000..c3e3a8ed
--- /dev/null
+++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/vo/AlarmVo.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.vo;
+
+import lombok.Data;
+import org.jeecg.common.api.QueryRequest;
+import java.io.Serializable;
+
+@Data
+public class AlarmVo extends QueryRequest implements Serializable {
+ private String name;
+ private String type;
+ private String startDate;
+ private String endDate;
+ private Integer pageStart;
+}