From 1ced64b627c79dcb51be852a7974f8743460df79 Mon Sep 17 00:00:00 2001
From: zhaowenyu <35589726@qq.com>
Date: Tue, 02 Dec 2025 16:29:39 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev
---
ard-system/src/main/java/com/ard/data/statistics/domain/ArdStatisticsCountResult.java | 9 +++
ard-admin/src/main/java/com/ard/web/controller/data/ArdStatisticsController.java | 26 ++++++++
ard-admin/src/main/java/com/ard/web/controller/monitor/SysUserOnlineController.java | 49 +++++++++++++++
ard-system/src/main/resources/mapper/data/ArdStatisticsMapper.xml | 25 ++++++++
ard-system/src/main/java/com/ard/data/statistics/mapper/ArdStatisticsMapper.java | 10 +++
ard-system/src/main/java/com/ard/data/statistics/service/ArdStatisticsService.java | 19 ++++++
6 files changed, 136 insertions(+), 2 deletions(-)
diff --git a/ard-admin/src/main/java/com/ard/web/controller/data/ArdStatisticsController.java b/ard-admin/src/main/java/com/ard/web/controller/data/ArdStatisticsController.java
new file mode 100644
index 0000000..8695066
--- /dev/null
+++ b/ard-admin/src/main/java/com/ard/web/controller/data/ArdStatisticsController.java
@@ -0,0 +1,26 @@
+package com.ard.web.controller.data;
+
+import com.ard.common.core.domain.AjaxResult;
+import com.ard.data.statistics.service.ArdStatisticsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@Api(tags = "统计接口")
+@RestController
+@RequestMapping("/data/statistics")
+public class ArdStatisticsController {
+
+ @Resource
+ private ArdStatisticsService service;
+
+ @ApiOperation("获取统计数量")
+ @GetMapping("/counts")
+ public AjaxResult getCounts() {
+ return AjaxResult.success(service.getCounts());
+ }
+}
diff --git a/ard-admin/src/main/java/com/ard/web/controller/monitor/SysUserOnlineController.java b/ard-admin/src/main/java/com/ard/web/controller/monitor/SysUserOnlineController.java
index 504a20b..1cc4a66 100644
--- a/ard-admin/src/main/java/com/ard/web/controller/monitor/SysUserOnlineController.java
+++ b/ard-admin/src/main/java/com/ard/web/controller/monitor/SysUserOnlineController.java
@@ -39,8 +39,8 @@
private RedisCache redisCache;
@PreAuthorize("@ss.hasPermi('monitor:online:list')")
- @GetMapping("/list")
- public TableDataInfo list(String ipaddr, String userName)
+ @GetMapping("/list1")
+ public TableDataInfo list1(String ipaddr, String userName)
{
Collection<String> keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
@@ -68,6 +68,51 @@
userOnlineList.removeAll(Collections.singleton(null));
return getDataTable(userOnlineList);
}
+ @PreAuthorize("@ss.hasPermi('monitor:online:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(String ipaddr, String userName)
+ {
+ startPage(); // ❗ Ruoyi 分页
+
+ Collection<String> keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
+ List<SysUserOnline> resultList = new ArrayList<>();
+
+ boolean searchIp = StringUtils.isNotEmpty(ipaddr);
+ boolean searchName = StringUtils.isNotEmpty(userName);
+
+ for (String key : keys)
+ {
+ LoginUser loginUser = redisCache.getCacheObject(key);
+ if (loginUser == null || loginUser.getUser() == null)
+ continue;
+
+ // 转换成 SysUserOnline
+ SysUserOnline onlineUser = userOnlineService.loginUserToUserOnline(loginUser);
+ if (onlineUser == null) continue;
+
+ boolean match = true;
+
+ // ⭐ IP 模糊匹配
+ if (searchIp)
+ {
+ String userIp = loginUser.getIpaddr();
+ match = userIp != null && userIp.contains(ipaddr);
+ }
+
+ // ⭐ 用户名模糊匹配
+ if (match && searchName)
+ {
+ String nick = loginUser.getUsername();
+ match = nick != null && nick.contains(userName);
+ }
+
+ if (match)
+ resultList.add(onlineUser);
+ }
+
+ Collections.reverse(resultList);
+ return getDataTable(resultList);
+ }
/**
* 强退用户
diff --git a/ard-system/src/main/java/com/ard/data/statistics/domain/ArdStatisticsCountResult.java b/ard-system/src/main/java/com/ard/data/statistics/domain/ArdStatisticsCountResult.java
new file mode 100644
index 0000000..370c80d
--- /dev/null
+++ b/ard-system/src/main/java/com/ard/data/statistics/domain/ArdStatisticsCountResult.java
@@ -0,0 +1,9 @@
+package com.ard.data.statistics.domain;
+
+import lombok.Data;
+
+@Data
+public class ArdStatisticsCountResult {
+ private String name;
+ private Integer count;
+}
diff --git a/ard-system/src/main/java/com/ard/data/statistics/mapper/ArdStatisticsMapper.java b/ard-system/src/main/java/com/ard/data/statistics/mapper/ArdStatisticsMapper.java
new file mode 100644
index 0000000..72d2908
--- /dev/null
+++ b/ard-system/src/main/java/com/ard/data/statistics/mapper/ArdStatisticsMapper.java
@@ -0,0 +1,10 @@
+package com.ard.data.statistics.mapper;
+
+import com.ard.data.statistics.domain.ArdStatisticsCountResult;
+import java.util.List;
+
+
+public interface ArdStatisticsMapper {
+
+ List<ArdStatisticsCountResult> getAllCounts();
+}
diff --git a/ard-system/src/main/java/com/ard/data/statistics/service/ArdStatisticsService.java b/ard-system/src/main/java/com/ard/data/statistics/service/ArdStatisticsService.java
new file mode 100644
index 0000000..c8f707b
--- /dev/null
+++ b/ard-system/src/main/java/com/ard/data/statistics/service/ArdStatisticsService.java
@@ -0,0 +1,19 @@
+package com.ard.data.statistics.service;
+
+import com.ard.data.statistics.domain.ArdStatisticsCountResult;
+import com.ard.data.statistics.mapper.ArdStatisticsMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class ArdStatisticsService {
+
+ @Resource
+ private ArdStatisticsMapper mapper;
+
+ public List<ArdStatisticsCountResult> getCounts() {
+ return mapper.getAllCounts();
+ }
+}
diff --git a/ard-system/src/main/resources/mapper/data/ArdStatisticsMapper.xml b/ard-system/src/main/resources/mapper/data/ArdStatisticsMapper.xml
new file mode 100644
index 0000000..f487d07
--- /dev/null
+++ b/ard-system/src/main/resources/mapper/data/ArdStatisticsMapper.xml
@@ -0,0 +1,25 @@
+<?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.ard.data.statistics.mapper.ArdStatisticsMapper">
+
+ <select id="getAllCounts" resultType="ArdStatisticsCountResult">
+ SELECT 'serverCount' AS name, COUNT(*) AS count FROM ard_server
+ UNION ALL
+ SELECT 'uavCount' AS name, COUNT(*) AS count FROM ard_drone
+ UNION ALL
+ SELECT 'cameraCount' AS name, COUNT(*) AS count FROM ard_camera
+ UNION ALL
+ SELECT 'dockCount' AS name, COUNT(*) AS count FROM manage_device where domain = 3
+ UNION ALL
+ SELECT 'noFlyZoneCount' AS name, COUNT(*) AS count FROM ard_no_fly_zone
+ UNION ALL
+ SELECT 'mapCount' AS name, COUNT(*) AS count FROM ard_map
+ UNION ALL
+ SELECT 'modelCount' AS name, COUNT(*) AS count FROM ard_model
+ UNION ALL
+ SELECT 'tilesCount' AS name, COUNT(*) AS count FROM ard_tile
+ </select>
+
+</mapper>
--
Gitblit v1.9.3