forked from toolchaintechnologycenter/spdm-backend
214 lines
8.5 KiB
XML
214 lines
8.5 KiB
XML
<?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.sdm.data.dao.FileStorageMapper">
|
||
<select id="getdefaultNodeNameByNodeSize" resultType="java.lang.String">
|
||
select
|
||
originalName
|
||
from
|
||
(
|
||
select
|
||
file_metadata_info.originalName,
|
||
SUM(dirSize.totalSize) AS totalSize
|
||
from
|
||
(
|
||
select
|
||
fs.dirId ,
|
||
SUM(fs.fileSize) AS totalSize
|
||
from
|
||
file_storage fs
|
||
where
|
||
fs.dirId
|
||
in(select id from file_metadata_info fmi where fmi.relatedResourceUuidOwnType = #{queryNodeType} and fmi.tenantId = #{tenantId} )
|
||
group by
|
||
fs.dirId) dirSize
|
||
left join file_metadata_info ON
|
||
dirSize.dirId = file_metadata_info.id
|
||
where file_metadata_info.tenantId = #{tenantId}
|
||
group by
|
||
file_metadata_info.originalName
|
||
order by
|
||
totalSize DESC
|
||
) tmp
|
||
LIMIT #{limitNum}
|
||
</select>
|
||
|
||
<select id="selectNodeSizeByNodeType" resultType="com.sdm.data.model.dto.NodeSizeDTO">
|
||
SELECT
|
||
dirId,
|
||
SUM(fileSize) AS totalSize
|
||
FROM file_storage
|
||
WHERE
|
||
file_storage.tenantId = #{tenantId}
|
||
and
|
||
dirId IN
|
||
<foreach collection="directoryIds" item="id" open="(" separator="," close=")">
|
||
#{id}
|
||
</foreach>
|
||
|
||
<if test="intervalMonths != null and intervalMonths > 0">
|
||
AND createTime >= DATE_SUB(NOW(), INTERVAL #{intervalMonths} MONTH)
|
||
</if>
|
||
GROUP BY dirId;
|
||
</select>
|
||
|
||
<select id="statDirStorageByTargetYm" resultType="com.sdm.data.model.dto.NodeSizeDTO">
|
||
<!-- 1. 统计:目标年月之前的历史累计存储(不包含目标年月) -->
|
||
SELECT
|
||
dirId,
|
||
'BEFORE' AS statDimension, -- 示例:BEFORE_202410
|
||
SUM(fileSize) AS totalSize -- 总占用字节数(原始单位)
|
||
FROM file_storage
|
||
WHERE
|
||
file_storage.tenantId = #{tenantId}
|
||
and
|
||
dirId IN
|
||
<foreach collection="dirIds" item="dirId" open="(" separator="," close=")">
|
||
#{dirId}
|
||
</foreach>
|
||
AND createYearMonth < #{targetYm}
|
||
GROUP BY dirId
|
||
|
||
UNION ALL
|
||
|
||
<!-- 2. 统计:目标年月的当月增量存储(仅包含目标年月) -->
|
||
SELECT
|
||
dirId,
|
||
'INCREMENT' AS statDimension, -- 示例:INCREMENT_202410
|
||
SUM(fileSize) AS totalSize
|
||
FROM file_storage
|
||
WHERE
|
||
file_storage.tenantId = #{tenantId}
|
||
and
|
||
dirId IN
|
||
<foreach collection="dirIds" item="dirId" open="(" separator="," close=")">
|
||
#{dirId}
|
||
</foreach>
|
||
AND createYearMonth = #{targetYm}
|
||
GROUP BY dirId
|
||
</select>
|
||
|
||
<select id="getTotalFileSizeByCreator" resultType="com.sdm.data.model.dto.UserTotalFileSizeDTO">
|
||
SELECT
|
||
userId,
|
||
SUM(fileSize) AS totalSize
|
||
FROM file_storage
|
||
WHERE tenantId = #{tenantId}
|
||
<if test="userIds != null and userIds.size() > 0">
|
||
AND userId IN
|
||
<foreach collection="userIds" item="userId" open="(" separator="," close=")">
|
||
#{userId}
|
||
</foreach>
|
||
</if>
|
||
<if test="intervalMonths != null and intervalMonths > 0">
|
||
AND createTime >= DATE_SUB(NOW(), INTERVAL #{intervalMonths} MONTH)
|
||
</if>
|
||
GROUP BY userId
|
||
ORDER BY totalSize DESC
|
||
<!-- 只有没传 IDs 时才限制前 10 -->
|
||
<if test="userIds == null or userIds.size() == 0">
|
||
LIMIT 10
|
||
</if>
|
||
</select>
|
||
|
||
|
||
<select id="getTotalFileSizeByCreatorAndTargetYm" resultType="com.sdm.data.model.dto.UserTotalFileSizeDTO">
|
||
WITH TargetUsers AS (
|
||
<choose>
|
||
<when test="userIds != null and userIds.size() > 0">
|
||
<!-- 直接使用传入的 ID -->
|
||
<foreach collection="userIds" item="uid" open="SELECT " separator=" UNION ALL SELECT " close="">
|
||
#{uid} as userId
|
||
</foreach>
|
||
</when>
|
||
<otherwise>
|
||
<!-- 先查出累计最大的前10人 ID -->
|
||
SELECT userId
|
||
FROM file_storage
|
||
WHERE tenantId = #{tenantId}
|
||
AND createYearMonth <= #{targetYm}
|
||
GROUP BY userId
|
||
ORDER BY SUM(fileSize) DESC
|
||
LIMIT 10
|
||
</otherwise>
|
||
</choose>
|
||
)
|
||
<!-- 使用交叉连接/条件聚合,一次扫描完成统计 -->
|
||
SELECT
|
||
t.userId,
|
||
s.statDimension,
|
||
s.totalSize
|
||
FROM TargetUsers t
|
||
INNER JOIN (
|
||
-- 1. 历史累计 (内部先 SUM)
|
||
SELECT userId, 'BEFORE' as statDimension, SUM(fileSize) as totalSize
|
||
FROM file_storage
|
||
WHERE tenantId = #{tenantId} AND createYearMonth < #{targetYm}
|
||
GROUP BY userId
|
||
|
||
UNION ALL
|
||
|
||
-- 2. 当月增量 (内部先 SUM)
|
||
SELECT userId, 'INCREMENT' as statDimension, SUM(fileSize) as totalSize
|
||
FROM file_storage
|
||
WHERE tenantId = #{tenantId} AND createYearMonth = #{targetYm}
|
||
GROUP BY userId
|
||
) s ON t.userId = s.userId
|
||
</select>
|
||
|
||
<select id="selectBigFiles" resultType="com.sdm.data.model.entity.FileStorage">
|
||
SELECT
|
||
distinct
|
||
file_storage.fileName,file_storage.fileId,file_storage.userGroupId,file_storage.userId,file_storage.fileSuffix,file_storage.updateTime
|
||
FROM file_metadata_info
|
||
inner join file_storage on file_storage.fileId = file_metadata_info.id
|
||
<where>
|
||
file_metadata_info.id is not null
|
||
and file_metadata_info.isLatest = #{queryBigFileReq.isLatest}
|
||
and file_metadata_info.tenantId = #{tenantId}
|
||
and file_storage.tenantId = #{tenantId}
|
||
and file_metadata_info.deletedAt IS NULL
|
||
<if test="queryBigFileReq.approveTypeList != null and queryBigFileReq.approveTypeList.size()>0">
|
||
AND file_metadata_info.approveType IN
|
||
<foreach collection="queryBigFileReq.approveTypeList" item="approveType" open="(" separator="," close=")">
|
||
#{approveType}
|
||
</foreach>
|
||
</if>
|
||
|
||
<if test="queryBigFileReq.dirIds != null and queryBigFileReq.dirIds.size()>0">
|
||
AND file_storage.dirId IN
|
||
<foreach collection="queryBigFileReq.dirIds" item="dirId" open="(" separator="," close=")">
|
||
#{dirId}
|
||
</foreach>
|
||
</if>
|
||
|
||
<if test="queryBigFileReq.fileSuffix != null and queryBigFileReq.fileSuffix != ''">
|
||
AND file_storage.fileSuffix = #{queryBigFileReq.fileSuffix}
|
||
</if>
|
||
<if test="queryBigFileReq.fileIds != null and queryBigFileReq.fileIds.size()>0">
|
||
AND file_storage.fileId IN
|
||
<foreach collection="queryBigFileReq.fileIds" item="fileId" open="(" separator="," close=")">
|
||
#{fileId}
|
||
</foreach>
|
||
</if>
|
||
<if test="queryBigFileReq.fileName != null and queryBigFileReq.fileName != ''">
|
||
AND file_storage.fileName LIKE CONCAT('%', #{queryBigFileReq.fileName}, '%')
|
||
</if>
|
||
<if test="queryBigFileReq.startTime != null">
|
||
AND file_storage.createTime >= #{queryBigFileReq.startTime}
|
||
</if>
|
||
<if test="queryBigFileReq.endTime != null">
|
||
AND file_storage.createTime <= #{queryBigFileReq.endTime}
|
||
</if>
|
||
<if test="fileSizeInBytes != null">
|
||
AND file_storage.fileSize > #{fileSizeInBytes}
|
||
</if>
|
||
<if test="queryBigFileReq.uploadUserId != null and queryBigFileReq.uploadUserId.size()>0">
|
||
AND file_storage.userId IN
|
||
<foreach collection="queryBigFileReq.uploadUserId" item="userId" open="(" separator="," close=")">
|
||
#{userId}
|
||
</foreach>
|
||
</if>
|
||
order by file_storage.updateTime desc
|
||
</where>
|
||
</select>
|
||
</mapper> |