From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master
---
jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsMapper/DmsFilePermissionMapper.java | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 111 insertions(+), 0 deletions(-)
diff --git a/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsMapper/DmsFilePermissionMapper.java b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsMapper/DmsFilePermissionMapper.java
new file mode 100644
index 0000000..24ef870
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsMapper/DmsFilePermissionMapper.java
@@ -0,0 +1,111 @@
+package jnpf.dmsMapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import jnpf.dmsEntity.permission.entity.DmsFilePermissionEntity;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+@Mapper
+public interface DmsFilePermissionMapper extends BaseMapper<DmsFilePermissionEntity> {
+ String COLUMNS = "id, tenant_id, resource_type, resource_id, resource_scope, principal_type, "
+ + "principal_id, include_child_orgs, action_code, source_type, source_id, valid_from, "
+ + "valid_to, max_use_count, used_count, grant_reason, granted_by_type, granted_by_id, "
+ + "revoked_at, revoked_by_type, revoked_by_id, revoke_reason, revision, created_at, updated_at";
+
+ @Select("SELECT 1 FROM (SELECT pg_advisory_xact_lock(hashtextextended(#{tenantId} || ':' "
+ + "|| #{sourceType} || ':' || #{sourceId}, 0))) advisory_lock")
+ Integer lockSource(@Param("tenantId") String tenantId,
+ @Param("sourceType") String sourceType,
+ @Param("sourceId") String sourceId);
+
+ @Select("SELECT " + COLUMNS + " FROM public.dms_file_permissions "
+ + "WHERE tenant_id = #{tenantId} AND source_type = #{sourceType} "
+ + "AND source_id = #{sourceId} ORDER BY id")
+ List<DmsFilePermissionEntity> selectBySource(@Param("tenantId") String tenantId,
+ @Param("sourceType") String sourceType,
+ @Param("sourceId") String sourceId);
+
+ @Select("INSERT INTO public.dms_file_permissions (id, tenant_id, resource_type, resource_id, "
+ + "resource_scope, principal_type, principal_id, include_child_orgs, action_code, "
+ + "source_type, source_id, valid_from, valid_to, max_use_count, grant_reason, "
+ + "granted_by_type, granted_by_id) VALUES (uuidv7(), #{p.tenantId}, #{p.resourceType}, "
+ + "#{p.resourceId}, #{p.resourceScope}, #{p.principalType}, #{p.principalId}, "
+ + "#{p.includeChildOrgs}, #{p.actionCode}, #{p.sourceType}, #{p.sourceId}, "
+ + "#{p.validFrom}, #{p.validTo}, #{p.maxUseCount}, #{p.grantReason}, "
+ + "#{p.grantedByType}, #{p.grantedById}) RETURNING " + COLUMNS)
+ DmsFilePermissionEntity insertReturning(@Param("p") DmsFilePermissionEntity permission);
+
+ @Select({"<script>",
+ "SELECT ", COLUMNS, " FROM public.dms_file_permissions",
+ "WHERE tenant_id = #{tenantId} AND action_code IN",
+ "<foreach collection='actionCodes' item='action' open='(' separator=',' close=')'>#{action}</foreach>",
+ "AND revoked_at IS NULL AND valid_from <= CURRENT_TIMESTAMP",
+ "AND (valid_to IS NULL OR CURRENT_TIMESTAMP < valid_to)",
+ "AND (max_use_count IS NULL OR used_count < max_use_count)",
+ "AND resource_id IN",
+ "<foreach collection='resourceIds' item='id' open='(' separator=',' close=')'>#{id}</foreach>",
+ "ORDER BY CASE WHEN max_use_count IS NULL THEN 0 ELSE 1 END,",
+ "CASE WHEN max_use_count IS NOT NULL THEN valid_to END ASC NULLS LAST, created_at, id",
+ "</script>"})
+ List<DmsFilePermissionEntity> selectCandidates(@Param("tenantId") String tenantId,
+ @Param("actionCodes") List<String> actionCodes,
+ @Param("resourceIds") List<UUID> resourceIds);
+
+ @Select({"<script>",
+ "SELECT ", COLUMNS, " FROM public.dms_file_permissions",
+ "WHERE tenant_id = #{tenantId} AND resource_id IN",
+ "<foreach collection='resourceIds' item='id' open='(' separator=',' close=')'>#{id}</foreach>",
+ "ORDER BY created_at DESC, id DESC LIMIT #{limit}",
+ "</script>"})
+ List<DmsFilePermissionEntity> selectForResourceIds(@Param("tenantId") String tenantId,
+ @Param("resourceIds") List<UUID> resourceIds,
+ @Param("limit") int limit);
+
+ @Select("SELECT " + COLUMNS + " FROM public.dms_file_permissions "
+ + "WHERE tenant_id = #{tenantId} AND id = #{id}")
+ DmsFilePermissionEntity selectByTenantAndId(@Param("tenantId") String tenantId,
+ @Param("id") UUID id);
+
+ @Select("SELECT " + COLUMNS + " FROM public.dms_file_permissions "
+ + "WHERE tenant_id = #{tenantId} AND id = #{id} FOR UPDATE")
+ DmsFilePermissionEntity selectByTenantAndIdForUpdate(@Param("tenantId") String tenantId,
+ @Param("id") UUID id);
+
+ @Update("UPDATE public.dms_file_permissions SET revoked_at = CURRENT_TIMESTAMP, "
+ + "revoked_by_type = #{actorType}, revoked_by_id = #{actorId}, revoke_reason = #{reason}, "
+ + "revision = revision + 1 WHERE tenant_id = #{tenantId} AND id = #{id} "
+ + "AND revoked_at IS NULL")
+ int revoke(@Param("tenantId") String tenantId,
+ @Param("id") UUID id,
+ @Param("actorType") String actorType,
+ @Param("actorId") String actorId,
+ @Param("reason") String reason);
+
+ @Select({"<script>",
+ "SELECT ", COLUMNS, " FROM public.dms_file_permissions",
+ "WHERE tenant_id = #{tenantId}",
+ "<if test='resourceId != null'>AND resource_id = #{resourceId}</if>",
+ "<if test='principalType != null and principalType != \"\"'>",
+ "AND principal_type = #{principalType}",
+ "</if>",
+ "<if test='principalId != null and principalId != \"\"'>AND principal_id = #{principalId}</if>",
+ "<if test='cursorTime != null'>",
+ "AND (created_at, id) < (#{cursorTime}, #{cursorId})",
+ "</if>",
+ "ORDER BY created_at DESC, id DESC LIMIT #{limit}",
+ "</script>"})
+ List<DmsFilePermissionEntity> selectPage(@Param("tenantId") String tenantId,
+ @Param("resourceId") UUID resourceId,
+ @Param("principalType") String principalType,
+ @Param("principalId") String principalId,
+ @Param("cursorTime") Date cursorTime,
+ @Param("cursorId") UUID cursorId,
+ @Param("limit") int limit);
+}
--
Gitblit v1.8.0