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/DmsAccessExclusionMapper.java | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 105 insertions(+), 0 deletions(-)
diff --git a/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsMapper/DmsAccessExclusionMapper.java b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsMapper/DmsAccessExclusionMapper.java
new file mode 100644
index 0000000..e4d3c61
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsMapper/DmsAccessExclusionMapper.java
@@ -0,0 +1,105 @@
+package jnpf.dmsMapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import jnpf.dmsEntity.permission.entity.DmsAccessExclusionEntity;
+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 DmsAccessExclusionMapper extends BaseMapper<DmsAccessExclusionEntity> {
+ String COLUMNS = "id, tenant_id, resource_type, resource_id, user_id, action_code, source_type, "
+ + "source_id, valid_from, valid_to, exclude_reason, excluded_by_type, excluded_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_access_exclusions "
+ + "WHERE tenant_id = #{tenantId} AND source_type = #{sourceType} "
+ + "AND source_id = #{sourceId} ORDER BY id")
+ List<DmsAccessExclusionEntity> selectBySource(@Param("tenantId") String tenantId,
+ @Param("sourceType") String sourceType,
+ @Param("sourceId") String sourceId);
+
+ @Insert({"<script>",
+ "INSERT INTO public.dms_access_exclusions (id, tenant_id, resource_type, resource_id, user_id,",
+ "action_code, source_type, source_id, valid_from, valid_to, exclude_reason, excluded_by_type,",
+ "excluded_by_id) VALUES",
+ "<foreach collection='items' item='item' separator=','>",
+ "(uuidv7(), #{item.tenantId}, #{item.resourceType}, #{item.resourceId}, #{item.userId},",
+ "#{item.actionCode}, #{item.sourceType}, #{item.sourceId}, #{item.validFrom}, #{item.validTo},",
+ "#{item.excludeReason}, #{item.excludedByType}, #{item.excludedById})",
+ "</foreach>",
+ "</script>"})
+ int insertBatch(@Param("items") List<DmsAccessExclusionEntity> items);
+
+ @Select({"<script>",
+ "SELECT ", COLUMNS, " FROM public.dms_access_exclusions",
+ "WHERE tenant_id = #{tenantId} AND id IN",
+ "<foreach collection='ids' item='id' open='(' separator=',' close=')'>#{id}</foreach>",
+ "ORDER BY id FOR UPDATE",
+ "</script>"})
+ List<DmsAccessExclusionEntity> selectByTenantAndIdsForUpdate(@Param("tenantId") String tenantId,
+ @Param("ids") List<UUID> ids);
+
+ @Select({"<script>",
+ "SELECT ", COLUMNS, " FROM public.dms_access_exclusions",
+ "WHERE tenant_id = #{tenantId} AND id IN",
+ "<foreach collection='ids' item='id' open='(' separator=',' close=')'>#{id}</foreach>",
+ "ORDER BY id",
+ "</script>"})
+ List<DmsAccessExclusionEntity> selectByTenantAndIds(@Param("tenantId") String tenantId,
+ @Param("ids") List<UUID> ids);
+
+ @Update({"<script>",
+ "UPDATE public.dms_access_exclusions SET revoked_at = CURRENT_TIMESTAMP,",
+ "revoked_by_type = #{actorType}, revoked_by_id = #{actorId}, revoke_reason = #{reason},",
+ "revision = revision + 1 WHERE tenant_id = #{tenantId} AND revoked_at IS NULL AND id IN",
+ "<foreach collection='ids' item='id' open='(' separator=',' close=')'>#{id}</foreach>",
+ "</script>"})
+ int revokeBatch(@Param("tenantId") String tenantId,
+ @Param("ids") List<UUID> ids,
+ @Param("actorType") String actorType,
+ @Param("actorId") String actorId,
+ @Param("reason") String reason);
+
+ @Select({"<script>",
+ "SELECT ", COLUMNS, " FROM public.dms_access_exclusions",
+ "WHERE tenant_id = #{tenantId}",
+ "<if test='resourceId != null'>AND resource_id = #{resourceId}</if>",
+ "<if test='userId != null and userId != \"\"'>AND user_id = #{userId}</if>",
+ "<if test='cursorTime != null'>",
+ "AND (created_at, id) < (#{cursorTime}, #{cursorId})",
+ "</if>",
+ "ORDER BY created_at DESC, id DESC LIMIT #{limit}",
+ "</script>"})
+ List<DmsAccessExclusionEntity> selectPage(@Param("tenantId") String tenantId,
+ @Param("resourceId") UUID resourceId,
+ @Param("userId") String userId,
+ @Param("cursorTime") Date cursorTime,
+ @Param("cursorId") UUID cursorId,
+ @Param("limit") int limit);
+
+ @Select({"<script>",
+ "SELECT ", COLUMNS, " FROM public.dms_access_exclusions",
+ "WHERE tenant_id = #{tenantId} AND user_id = #{userId} AND action_code = 'READ'",
+ "AND revoked_at IS NULL AND valid_from <= CURRENT_TIMESTAMP",
+ "AND (valid_to IS NULL OR CURRENT_TIMESTAMP < valid_to)",
+ "AND resource_id IN",
+ "<foreach collection='resourceIds' item='id' open='(' separator=',' close=')'>#{id}</foreach>",
+ "ORDER BY resource_type, resource_id, created_at, id",
+ "</script>"})
+ List<DmsAccessExclusionEntity> selectActiveForResourceIds(@Param("tenantId") String tenantId,
+ @Param("userId") String userId,
+ @Param("resourceIds") List<UUID> resourceIds);
+}
--
Gitblit v1.8.0