zhaowenyu
2025-12-02 1ced64b627c79dcb51be852a7974f8743460df79
Merge remote-tracking branch 'origin/dev' into dev
5 files added
1 files modified
138 ■■■■■ changed files
ard-admin/src/main/java/com/ard/web/controller/data/ArdStatisticsController.java 26 ●●●●● patch | view | raw | blame | history
ard-admin/src/main/java/com/ard/web/controller/monitor/SysUserOnlineController.java 49 ●●●●● patch | view | raw | blame | history
ard-system/src/main/java/com/ard/data/statistics/domain/ArdStatisticsCountResult.java 9 ●●●●● patch | view | raw | blame | history
ard-system/src/main/java/com/ard/data/statistics/mapper/ArdStatisticsMapper.java 10 ●●●●● patch | view | raw | blame | history
ard-system/src/main/java/com/ard/data/statistics/service/ArdStatisticsService.java 19 ●●●●● patch | view | raw | blame | history
ard-system/src/main/resources/mapper/data/ArdStatisticsMapper.xml 25 ●●●●● patch | view | raw | blame | history
ard-admin/src/main/java/com/ard/web/controller/data/ArdStatisticsController.java
New file
@@ -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());
    }
}
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);
    }
    /**
     * 强退用户
ard-system/src/main/java/com/ard/data/statistics/domain/ArdStatisticsCountResult.java
New file
@@ -0,0 +1,9 @@
package com.ard.data.statistics.domain;
import lombok.Data;
@Data
public class ArdStatisticsCountResult {
    private String name;
    private Integer count;
}
ard-system/src/main/java/com/ard/data/statistics/mapper/ArdStatisticsMapper.java
New file
@@ -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();
}
ard-system/src/main/java/com/ard/data/statistics/service/ArdStatisticsService.java
New file
@@ -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();
    }
}
ard-system/src/main/resources/mapper/data/ArdStatisticsMapper.xml
New file
@@ -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>