添加文件统计信息

This commit is contained in:
2026-07-15 17:09:56 +08:00
parent e4045c20b8
commit a13b10762b
7 changed files with 140 additions and 2 deletions
@@ -52,10 +52,11 @@ public enum AppCache implements BaseCacheEnum {
SYS_CACHE_ADDR("sys:cache:addr:", 60 * 60L),
// 天气缓存
SYS_CACHE_HOME_WEATHER("sys:cache:home:weather:", 30 * 60L),
// 文件存储统计缓存
SYS_CACHE_FILE_STATS("sys:cache:file-stats", 60 * 60L),
// 系统账号密码错误次数
COUNT_SYS_USER_PASSWD_ERR("count:sys-user:passwd-err:", -1L)
;
COUNT_SYS_USER_PASSWD_ERR("count:sys-user:passwd-err:", -1L);
/**
* 系统缓存前缀
@@ -22,6 +22,7 @@ import xtools.app.sys.model.dto.req.SysFileAddReq;
import xtools.app.sys.model.dto.req.SysFileChangeReq;
import xtools.app.sys.model.dto.req.SysFilePageReq;
import xtools.app.sys.model.dto.req.SysFileUpdateReq;
import xtools.app.sys.model.dto.resp.SysFileBucketStatsResp;
import xtools.app.sys.model.dto.resp.SysFileResp;
import xtools.app.sys.service.SysFileService;
import xtools.boot.api.model.dto.Result;
@@ -29,6 +30,8 @@ import xtools.boot.api.model.dto.page.PageReq;
import xtools.boot.api.model.dto.page.PageResp;
import xtools.boot.api.model.dto.req.IdListReq;
import java.util.List;
/**
* <p>Title : SysFileController</p>
* <p>Description : 系统文件表 Controller</p>
@@ -113,4 +116,20 @@ public class SysFileController implements SysFileApi {
return sysFileService.changeDataTypeByIds(req);
}
/**
* 获取统计信息
*
* @param refresh 是否刷新缓存
* @return 统计信息
*/
@Operation(summary = "获取统计信息")
@GetMapping("stats/{refresh}")
public Result<List<SysFileBucketStatsResp>> getStats(
@Schema(description = "是否刷新缓存")
@PathVariable Boolean refresh
) {
return sysFileService.getStats(refresh);
// return Result.ok(List.of());
}
}
@@ -2,8 +2,11 @@ package xtools.app.sys.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import xtools.app.sys.model.dto.resp.SysFileBucketStatsResp;
import xtools.app.sys.model.entity.SysFile;
import java.util.List;
/**
* <p>Title : SysFileMapper</p>
* <p>Description : 系统文件表 Mapper 接口</p>
@@ -16,4 +19,11 @@ import xtools.app.sys.model.entity.SysFile;
@Mapper
public interface SysFileMapper extends BaseMapper<SysFile> {
/**
* 查询每个桶的存储统计
*
* @return 桶存储统计列表
*/
List<SysFileBucketStatsResp> selectBucketStats();
}
@@ -0,0 +1,43 @@
package xtools.app.sys.model.dto.resp;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* <p>Title : SysFileBucketStatsResp</p>
* <p>Description : 文件桶统计响应对象</p>
* <p>Company : org.xujun</p>
*
* @author : xujun
* @version : 1.0.0
* @date : 2026-07-15
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysFileBucketStatsResp implements Serializable {
/**
* 桶名称
*/
@Schema(description = "桶名称")
private String bucket;
/**
* 文件数量
*/
@Schema(description = "文件数量")
private Long fileCount;
/**
* 文件大小
*/
@Schema(description = "文件大小")
private Long fileSize;
}
@@ -2,11 +2,14 @@ package xtools.app.sys.service;
import xtools.app.sys.api.SysFileApi;
import xtools.app.sys.model.dto.req.SysFilePageReq;
import xtools.app.sys.model.dto.resp.SysFileBucketStatsResp;
import xtools.app.sys.model.dto.resp.SysFileResp;
import xtools.boot.api.model.dto.Result;
import xtools.boot.api.model.dto.page.PageReq;
import xtools.boot.api.model.dto.page.PageResp;
import java.util.List;
/**
* <p>Title : SysFileService</p>
* <p>Description : 系统文件表 Service</p>
@@ -26,6 +29,14 @@ public interface SysFileService extends SysFileApi {
*/
Result<PageResp<SysFileResp>> page(PageReq<SysFilePageReq> pageReq);
/**
* 获取统计信息
*
* @param refresh 是否刷新缓存
* @return 统计信息
*/
Result<List<SysFileBucketStatsResp>> getStats(Boolean refresh);
/**
* 定时任务
*/
@@ -1,5 +1,6 @@
package xtools.app.sys.service.impl;
import com.alibaba.fastjson2.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,12 +10,14 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import xtools.app.common.cache.enums.AppCache;
import xtools.app.common.task.enums.TaskType;
import xtools.app.sys.convert.SysFileConvert;
import xtools.app.sys.model.dto.req.SysFileAddReq;
import xtools.app.sys.model.dto.req.SysFileChangeReq;
import xtools.app.sys.model.dto.req.SysFilePageReq;
import xtools.app.sys.model.dto.req.SysFileUpdateReq;
import xtools.app.sys.model.dto.resp.SysFileBucketStatsResp;
import xtools.app.sys.model.dto.resp.SysFileResp;
import xtools.app.sys.model.entity.SysFile;
import xtools.app.sys.service.SysFileService;
@@ -27,6 +30,7 @@ import xtools.boot.api.model.dto.Result;
import xtools.boot.api.model.dto.page.PageReq;
import xtools.boot.api.model.dto.page.PageResp;
import xtools.boot.api.model.dto.req.IdListReq;
import xtools.boot.cache.redis.base.RedisService;
import xtools.boot.db.mybatisplus.utils.QueryUtils;
import xtools.boot.log.LogBus;
import xtools.boot.log.enums.LogBusBaseType;
@@ -72,6 +76,9 @@ public class SysFileServiceImpl implements SysFileService, BaseParams {
@Resource
private StorageConfig storageConfig;
@Resource
private RedisService redisService;
/**
* 分页查询
*
@@ -183,6 +190,38 @@ public class SysFileServiceImpl implements SysFileService, BaseParams {
return Result.ok(changeDataType(req.getIdList(), req.getDataType()));
}
/**
* 获取统计信息
*
* @param refresh 是否刷新缓存
* @return 统计信息
*/
@Override
public Result<List<SysFileBucketStatsResp>> getStats(Boolean refresh) {
if (Objects.isNull(refresh)) {
refresh = Boolean.FALSE;
}
AppCache cacheParam = AppCache.SYS_CACHE_FILE_STATS;
String key = cacheParam.key();
List<SysFileBucketStatsResp> dataList = null;
if (refresh) {
redisService.del(key);
} else {
JSONArray array = redisService.get(key, JSONArray.class);
if (CollectionUtils.isNotEmpty(array)) {
dataList = array.toJavaList(SysFileBucketStatsResp.class);
}
}
if (CollectionUtils.isNotEmpty(dataList)) {
return Result.ok(dataList);
}
dataList = sysFileBaseService.getBaseMapper().selectBucketStats();
if (CollectionUtils.isNotEmpty(dataList)) {
redisService.set(key, dataList, cacheParam.expireTime());
}
return Result.ok(dataList);
}
/**
* 获取分页数据
*
@@ -0,0 +1,15 @@
<?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="xtools.app.sys.mapper.SysFileMapper">
<!-- 查询每个桶的存储统计 -->
<select id="selectBucketStats" resultType="xtools.app.sys.model.dto.resp.SysFileBucketStatsResp">
SELECT bucket,
COUNT(*) AS fileCount,
IFNULL(SUM(file_size), 0) AS fileSize
FROM sys_file
GROUP BY bucket
ORDER BY fileSize DESC
</select>
</mapper>