添加文件统计信息
This commit is contained in:
+19
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+10
@@ -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();
|
||||
|
||||
}
|
||||
|
||||
+43
@@ -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;
|
||||
}
|
||||
+11
@@ -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);
|
||||
|
||||
/**
|
||||
* 定时任务
|
||||
*/
|
||||
|
||||
+39
@@ -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>
|
||||
Reference in New Issue
Block a user