Kaynağa Gözat

feat:首页页面相关接口实现

HMY 9 ay önce
ebeveyn
işleme
ac2b339c1b

+ 18 - 0
admin/src/main/java/com/dcs/hnyz/controller/AlarmEventController.java

@@ -111,4 +111,22 @@ public class AlarmEventController extends BaseController
     {
         return toAjax(alarmEventService.deleteAlarmEventByAlarmIds(alarmIds));
     }
+
+    /**
+     * 获取最新告警信息
+     */
+    @ApiOperation("获取最新n条告警信息")
+    @GetMapping("/latest/{alarmCount}")
+    public AjaxResult getLatestAlarm(@ApiParam("告警信息数量") @PathVariable("alarmCount") Integer alarmCount){
+        return success(alarmEventService.getLatestAlarm(alarmCount));
+    }
+
+    /**
+     * 近七日告警数量
+     */
+    @ApiOperation("近七日告警数量")
+    @GetMapping("/weeklyCount")
+    public AjaxResult getAlarmEventWeeklyCount(){
+        return success(alarmEventService.getAlarmEventWeeklyCount());
+    }
 }

+ 10 - 9
admin/src/main/java/com/dcs/hnyz/controller/EquipmentController.java

@@ -9,14 +9,7 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import com.dcs.common.annotation.Log;
 import com.dcs.common.core.controller.BaseController;
 import com.dcs.common.core.domain.AjaxResult;
@@ -139,7 +132,7 @@ public class EquipmentController extends BaseController
      */
     @PostMapping("/getEquipmentTreeByDataType")
     @ApiOperation(value = "获取数据图表页面所需设备名list(树状)")
-    public AjaxResult getEquipmentNameList(@ApiParam("数据类型 bool,data,string") String dataType) {
+    public AjaxResult getEquipmentNameList(@RequestParam("dataType") @ApiParam("数据类型 bool,data,string") String dataType) {
         return success(equipmentService.getEquipmentNameList(dataType));
     }
 
@@ -152,5 +145,13 @@ public class EquipmentController extends BaseController
         return success(equipmentService.getEquipmentSensorTree());
     }
 
+    /**
+     * 获取首页顶部区域的统计数据
+     */
+    @GetMapping("/getDashboardStats")
+    @ApiOperation(value = "获取首页顶部区域的统计数据")
+    public AjaxResult getDashboardStats() {
+        return success(equipmentService.getDashboardStats());
+    }
 
 }

+ 20 - 0
admin/src/main/java/com/dcs/hnyz/service/IAlarmEventService.java

@@ -1,6 +1,8 @@
 package com.dcs.hnyz.service;
 
 import java.util.List;
+import java.util.Map;
+
 import com.dcs.hnyz.domain.AlarmEvent;
 
 /**
@@ -58,4 +60,22 @@ public interface IAlarmEventService
      * @return 结果
      */
     public int deleteAlarmEventByAlarmId(Long alarmId);
+
+    /**
+     * 获取今日告警数量以及相比昨天告警变化量
+     * @return
+     */
+    Map<String,Object> getAlarmQuantity();
+
+    /**
+     * 获取最新n条告警信息
+     * @return
+     */
+    List<AlarmEvent> getLatestAlarm(Integer alarmCount);
+
+    /**
+     * 近七日告警数量
+     * @return
+     */
+    List<Map<String,Object>> getAlarmEventWeeklyCount();
 }

+ 6 - 0
admin/src/main/java/com/dcs/hnyz/service/IEquipmentParamService.java

@@ -92,4 +92,10 @@ public interface IEquipmentParamService
      * @return
      */
     List<EquipmentParam> selectEquipmentParamListByDataType(List<String> dataTypes);
+
+    /**
+     * 获取设备注册数量以及今日变化量
+     * @return
+     */
+    Map<String,Object> getRegisterQuantity();
 }

+ 6 - 0
admin/src/main/java/com/dcs/hnyz/service/IEquipmentService.java

@@ -82,4 +82,10 @@ public interface IEquipmentService
      * @return
      */
     List<Map<String,Object>> getEquipmentSensorTree();
+
+    /**
+     * 获取首页顶部区域的统计数据
+     * @return
+     */
+    Map<String,Object> getDashboardStats();
 }

+ 6 - 0
admin/src/main/java/com/dcs/hnyz/service/IFlowService.java

@@ -3,6 +3,7 @@ package com.dcs.hnyz.service;
 import com.dcs.hnyz.domain.Flow;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 流程Service接口
@@ -72,4 +73,9 @@ public interface IFlowService
      * @return
      */
     List<Flow> getFlowList(Long equipmentId,String flowType);
+
+    /**
+     * 获取目前流程数量以及今日流程变化
+     * */
+    Map<String,Object> getFlowQuantity();
 }

+ 62 - 19
admin/src/main/java/com/dcs/hnyz/service/impl/AlarmEventServiceImpl.java

@@ -1,8 +1,16 @@
 package com.dcs.hnyz.service.impl;
 
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.dcs.common.utils.DateUtils;
+import com.dcs.hnyz.domain.Flow;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.dcs.hnyz.mapper.AlarmEventMapper;
@@ -11,43 +19,40 @@ import com.dcs.hnyz.service.IAlarmEventService;
 
 /**
  * 告警中心管理Service业务层处理
- * 
+ *
  * @author hmy
  * @date 2025-04-30
  */
 @Service
-public class AlarmEventServiceImpl implements IAlarmEventService 
-{
+public class AlarmEventServiceImpl implements IAlarmEventService {
     @Autowired
     private AlarmEventMapper alarmEventMapper;
 
     /**
      * 查询告警中心管理
-     * 
+     *
      * @param alarmId 告警中心管理主键
      * @return 告警中心管理
      */
     @Override
-    public AlarmEvent selectAlarmEventByAlarmId(Long alarmId)
-    {
+    public AlarmEvent selectAlarmEventByAlarmId(Long alarmId) {
         return alarmEventMapper.selectById(alarmId);
     }
 
     /**
      * 查询告警中心管理列表
-     * 
+     *
      * @param alarmEvent 告警中心管理
      * @return 告警中心管理
      */
     @Override
-    public List<AlarmEvent> selectAlarmEventList(AlarmEvent alarmEvent)
-    {
+    public List<AlarmEvent> selectAlarmEventList(AlarmEvent alarmEvent) {
         return alarmEventMapper.selectAlarmEventList(alarmEvent);
     }
 
     /**
      * 新增告警中心管理
-     * 
+     *
      * @param alarmEvent 告警中心管理
      * @return 结果
      */
@@ -59,38 +64,76 @@ public class AlarmEventServiceImpl implements IAlarmEventService
 
     /**
      * 修改告警中心管理
-     * 
+     *
      * @param alarmEvent 告警中心管理
      * @return 结果
      */
     @Override
-    public int updateAlarmEvent(AlarmEvent alarmEvent)
-    {
+    public int updateAlarmEvent(AlarmEvent alarmEvent) {
 //        alarmEvent.setUpdateTime(DateUtils.getNowDate());
         return alarmEventMapper.updateById(alarmEvent);
     }
 
     /**
      * 批量删除告警中心管理
-     * 
+     *
      * @param alarmIds 需要删除的告警中心管理主键
      * @return 结果
      */
     @Override
-    public int deleteAlarmEventByAlarmIds(Long[] alarmIds)
-    {
+    public int deleteAlarmEventByAlarmIds(Long[] alarmIds) {
         return alarmEventMapper.deleteBatchIds(Arrays.asList(alarmIds));
     }
 
     /**
      * 删除告警中心管理信息
-     * 
+     *
      * @param alarmId 告警中心管理主键
      * @return 结果
      */
     @Override
-    public int deleteAlarmEventByAlarmId(Long alarmId)
-    {
+    public int deleteAlarmEventByAlarmId(Long alarmId) {
         return alarmEventMapper.deleteById(alarmId);
     }
+
+    @Override
+    public Map<String, Object> getAlarmQuantity() {
+        Map<String, Object> map = new HashMap<>();
+        LocalDate today = LocalDate.now();
+        LocalDateTime startOfDay = today.atStartOfDay();
+        LocalDateTime yesterdayStart = today.minusDays(1).atStartOfDay();
+        //查询今日告警数量
+        LambdaQueryWrapper<AlarmEvent> w = new LambdaQueryWrapper<>();
+        w.ge(AlarmEvent::getCreateTime, startOfDay);
+        int alarmNum_today = Math.toIntExact(alarmEventMapper.selectCount(w));
+        map.put("value", alarmNum_today);
+        //昨日告警数量
+        LambdaQueryWrapper<AlarmEvent> w1 = new LambdaQueryWrapper<>();
+        w1.lt(AlarmEvent::getCreateTime, startOfDay);
+        w1.ge(AlarmEvent::getCreateTime, yesterdayStart);
+        int alarmNum_yesterday = Math.toIntExact(alarmEventMapper.selectCount(w1));
+        //今日流程数量变化
+        map.put("trend", alarmNum_today - alarmNum_yesterday);
+        return map;
+    }
+
+    @Override
+    public List<AlarmEvent> getLatestAlarm(Integer alarmCount) {
+        if (alarmCount == null) {
+            alarmCount = 5;
+        }
+        LambdaQueryWrapper<AlarmEvent> w = new LambdaQueryWrapper<>();
+        w.orderByDesc(AlarmEvent::getCreateTime);
+        return alarmEventMapper.selectList(w.last("LIMIT " + alarmCount));
+    }
+
+    @Override
+    public List<Map<String, Object>> getAlarmEventWeeklyCount() {
+        LocalDateTime sevenDaysAgo = LocalDateTime.now().minusDays(7);
+        QueryWrapper<AlarmEvent> wrapper = new QueryWrapper<>();
+        wrapper.select("alarm_type, COUNT(*) AS alarmCount")
+                .ge("occur_time", sevenDaysAgo)
+                .groupBy("alarm_type");
+        return alarmEventMapper.selectMaps(wrapper);
+    }
 }

+ 19 - 0
admin/src/main/java/com/dcs/hnyz/service/impl/EquipmentParamServiceImpl.java

@@ -16,6 +16,8 @@ import com.dcs.hnyz.service.IEquipmentService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -282,4 +284,21 @@ public class EquipmentParamServiceImpl implements IEquipmentParamService {
         return equipmentParamMapper.selectList(wrapper);
     }
 
+    @Override
+    public Map<String, Object> getRegisterQuantity() {
+        Map<String, Object> map = new HashMap<>();
+        //查询目前传感器数量
+        int sensorNum_now= Math.toIntExact(equipmentParamMapper.selectCount(null));
+        map.put("value",sensorNum_now);
+        //昨日传感器数量
+        LocalDate today = LocalDate.now();
+        LocalDateTime startOfDay = today.atStartOfDay();
+        LambdaQueryWrapper<EquipmentParam> w=new LambdaQueryWrapper<>();
+        w.lt(EquipmentParam::getCreateTime, startOfDay);
+        int sensorNum_yesterday = Math.toIntExact(equipmentParamMapper.selectCount(w));
+        //今日传感器数量变化
+        map.put("trend",sensorNum_now-sensorNum_yesterday);
+        return map;
+    }
+
 }

+ 35 - 0
admin/src/main/java/com/dcs/hnyz/service/impl/EquipmentServiceImpl.java

@@ -1,5 +1,7 @@
 package com.dcs.hnyz.service.impl;
 
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -10,6 +12,7 @@ import com.dcs.hnyz.domain.EquipmentParam;
 import com.dcs.hnyz.domain.vo.EquipmentFormVO;
 import com.dcs.hnyz.enums.DeviceTypeEnum;
 import com.dcs.hnyz.service.IEquipmentParamService;
+import com.dcs.hnyz.service.IFlowService;
 import org.springframework.stereotype.Service;
 import com.dcs.hnyz.mapper.EquipmentMapper;
 import com.dcs.hnyz.domain.Equipment;
@@ -43,6 +46,9 @@ public class EquipmentServiceImpl implements IEquipmentService
     @Resource
     private IEquipmentParamService equipmentParamService;
 
+    @Resource
+    private AlarmEventServiceImpl alarmEventService;
+
     /**
      * 查询设备管理
      * 
@@ -191,6 +197,35 @@ public class EquipmentServiceImpl implements IEquipmentService
         return buildRegisterTree(paramList, equipmentList);
     }
 
+    @Override
+    public Map<String, Object> getDashboardStats() {
+        Map<String, Object> data = new HashMap<>();
+        //设备数量以及今日变化量
+        data.put("device", getEquipmentQuantity());
+        //寄存器数量以及今日变化量
+        data.put("register", equipmentParamService.getRegisterQuantity());
+        data.put("flow",flowService.getFlowQuantity());
+        data.put("alarm", alarmEventService.getAlarmQuantity());
+        return data;
+    }
+
+    private Map<String, Object> getEquipmentQuantity() {
+        Map<String, Object> map = new HashMap<>();
+        //目前设备数量
+        int deviceNum_now= Math.toIntExact(equipmentMapper.selectCount(null));
+        map.put("value", deviceNum_now);
+        //昨日设备数量
+        LocalDate today = LocalDate.now();
+        LocalDateTime startOfDay = today.atStartOfDay();
+        LambdaQueryWrapper<Equipment> w = new LambdaQueryWrapper<>();
+        w.lt(Equipment::getCreateTime, startOfDay);
+        int deviceNum_yesterday = Math.toIntExact(equipmentMapper.selectCount(w));
+        //今日变化量
+        map.put("trend",deviceNum_now - deviceNum_yesterday);
+        return map;
+    }
+
+
     /**
      * 构建设备名树状list
      * @param paramList

+ 21 - 3
admin/src/main/java/com/dcs/hnyz/service/impl/FlowServiceImpl.java

@@ -3,6 +3,7 @@ package com.dcs.hnyz.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.dcs.common.enums.GeneralStatus;
 import com.dcs.hnyz.domain.Equipment;
+import com.dcs.hnyz.domain.EquipmentParam;
 import com.dcs.hnyz.domain.Flow;
 import com.dcs.hnyz.mapper.FlowMapper;
 import com.dcs.hnyz.service.IEquipmentService;
@@ -10,9 +11,9 @@ import com.dcs.hnyz.service.IFlowService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.*;
 
 /**
  * 流程Service业务层处理
@@ -132,4 +133,21 @@ public class FlowServiceImpl implements IFlowService
         }
         return list;
     }
+
+    @Override
+    public Map<String, Object> getFlowQuantity() {
+        Map<String, Object> map = new HashMap<>();
+        //查询目前流程数量
+        int flowNum_now= Math.toIntExact(flowMapper.selectCount(null));
+        map.put("value",flowNum_now);
+        //昨日流程数量
+        LocalDate today = LocalDate.now();
+        LocalDateTime startOfDay = today.atStartOfDay();
+        LambdaQueryWrapper<Flow> w=new LambdaQueryWrapper<>();
+        w.lt(Flow::getCreateTime, startOfDay);
+        int flowNum_yesterday = Math.toIntExact(flowMapper.selectCount(w));
+        //今日流程数量变化
+        map.put("trend",flowNum_now-flowNum_yesterday);
+        return map;
+    }
 }

+ 10 - 0
admin/src/main/java/com/dcs/web/controller/monitor/SysLogininforController.java

@@ -3,6 +3,7 @@ package com.dcs.web.controller.monitor;
 import com.dcs.common.annotation.Log;
 import com.dcs.common.core.controller.BaseController;
 import com.dcs.common.core.domain.AjaxResult;
+import com.dcs.common.core.page.PageDomain;
 import com.dcs.common.core.page.TableDataInfo;
 import com.dcs.common.enums.BusinessType;
 import com.dcs.common.utils.poi.ExcelUtil;
@@ -14,7 +15,10 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 系统访问记录
@@ -75,4 +79,10 @@ public class SysLogininforController extends BaseController
         passwordService.clearLoginRecordCache(userName);
         return success();
     }
+
+    @GetMapping("/latest")
+    public AjaxResult getLatestRunLogs(@RequestParam(defaultValue = "5") int count) {
+        List<Map<String, Object>> result = logininforService.getLatestRunLogs(count);
+        return AjaxResult.success(result);
+    }
 }

+ 8 - 0
system/src/main/java/com/dcs/system/mapper/SysLogininforMapper.java

@@ -2,6 +2,7 @@ package com.dcs.system.mapper;
 
 import java.util.List;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dcs.system.domain.SysLogininfor;
 
 /**
@@ -40,4 +41,11 @@ public interface SysLogininforMapper
      * @return 结果
      */
     public int cleanLogininfor();
+
+    /**
+     * 查询最新登录日志
+     * @param count
+     * @return
+     */
+    List<SysLogininfor> selectLatestRunLogs(int count);
 }

+ 8 - 0
system/src/main/java/com/dcs/system/service/ISysLogininforService.java

@@ -1,6 +1,7 @@
 package com.dcs.system.service;
 
 import java.util.List;
+import java.util.Map;
 
 import com.dcs.system.domain.SysLogininfor;
 
@@ -38,4 +39,11 @@ public interface ISysLogininforService
      * 清空系统登录日志
      */
     public void cleanLogininfor();
+
+    /**
+     * 获取系统登录日志
+     * @param count
+     * @return
+     */
+    List<Map<String, Object>> getLatestRunLogs(int count);
 }

+ 17 - 0
system/src/main/java/com/dcs/system/service/impl/SysLogininforServiceImpl.java

@@ -1,7 +1,11 @@
 package com.dcs.system.service.impl;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.dcs.system.domain.SysLogininfor;
 import com.dcs.system.mapper.SysLogininforMapper;
 import com.dcs.system.service.ISysLogininforService;
@@ -63,4 +67,17 @@ public class SysLogininforServiceImpl implements ISysLogininforService
     {
         logininforMapper.cleanLogininfor();
     }
+
+    @Override
+    public List<Map<String, Object>> getLatestRunLogs(int count) {
+        List<SysLogininfor> list = logininforMapper.selectLatestRunLogs(count);
+
+        return list.stream().map(log -> {
+            Map<String, Object> map = new HashMap<>();
+            map.put("time", log.getLoginTime());
+            map.put("message",log.getUserName()+' ' +log.getMsg());
+            return map;
+        }).collect(Collectors.toList());
+    }
+
 }

+ 7 - 1
system/src/main/resources/mapper/system/SysLogininforMapper.xml

@@ -42,7 +42,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</where>
 		order by info_id desc
 	</select>
-	
+	<select id="selectLatestRunLogs" resultType="com.dcs.system.domain.SysLogininfor" parameterType="int">
+		SELECT info_id, user_name, status, ipaddr, login_location, browser, os, msg, login_time
+		FROM sys_logininfor
+		ORDER BY login_time DESC
+			LIMIT #{count}
+	</select>
+
 	<delete id="deleteLogininforByIds" parameterType="Long">
  		delete from sys_logininfor where info_id in
  		<foreach collection="array" item="infoId" open="(" separator="," close=")">