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/DmsPermissionResourceMapper.java |  124 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 124 insertions(+), 0 deletions(-)

diff --git a/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsMapper/DmsPermissionResourceMapper.java b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsMapper/DmsPermissionResourceMapper.java
new file mode 100644
index 0000000..c1e542c
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsMapper/DmsPermissionResourceMapper.java
@@ -0,0 +1,124 @@
+package jnpf.dmsMapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import jnpf.dmsEntity.permission.entity.DmsPermissionResourceEntity;
+import jnpf.dmsEntity.permission.vo.DmsPermissionResourceVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+@Mapper
+public interface DmsPermissionResourceMapper extends BaseMapper<DmsPermissionResourceEntity> {
+    String RESOURCE_VIEW_SQL = "SELECT r.id, r.resource_type, "
+            + "CASE r.resource_type WHEN 'FOLDER' THEN f.parent_id WHEN 'DOCUMENT' THEN d.folder_id "
+            + "WHEN 'FILE_VERSION' THEN v.document_id END AS parent_id, "
+            + "CASE r.resource_type WHEN 'FOLDER' THEN f.name WHEN 'DOCUMENT' THEN d.name "
+            + "WHEN 'FILE_VERSION' THEN v.file_name END AS name, "
+            + "CASE r.resource_type WHEN 'DOCUMENT' THEN d.id "
+            + "WHEN 'FILE_VERSION' THEN v.document_id END AS document_id, "
+            + "COALESCE(d.name, version_document.name) AS document_name, "
+            + "COALESCE(d.document_no, version_document.document_no) AS document_no, "
+            + "COALESCE(v.version_no, current_version.version_no) AS version_no, "
+            + "COALESCE(v.version_label, current_version.version_label) AS version_label, "
+            + "COALESCE(v.file_name, current_version.file_name) AS file_name, "
+            + "COALESCE(v.mime_type, current_version.mime_type) AS mime_type, "
+            + "COALESCE(v.size_bytes, current_version.size_bytes) AS size_bytes, "
+            + "COALESCE(v.checksum_sha256, current_version.checksum_sha256) AS checksum_sha256, "
+            + "COALESCE(version_state.lifecycle_status, current_state.lifecycle_status) AS lifecycle_status, "
+            + "COALESCE(version_state.effective_from, current_state.effective_from) AS effective_from, "
+            + "COALESCE(version_state.effective_to, current_state.effective_to) AS effective_to, "
+            + "r.source_type, r.source_id, CASE r.resource_type "
+            + "WHEN 'FOLDER' THEN f.created_at WHEN 'DOCUMENT' THEN current_version.created_at "
+            + "WHEN 'FILE_VERSION' THEN v.created_at ELSE r.created_at END AS created_at "
+            + "FROM public.dms_permission_resources r "
+            + "LEFT JOIN public.dms_folders f ON r.resource_type = 'FOLDER' "
+            + "AND f.tenant_id = r.tenant_id AND f.id = r.id "
+            + "LEFT JOIN public.dms_documents d ON r.resource_type = 'DOCUMENT' "
+            + "AND d.tenant_id = r.tenant_id AND d.id = r.id "
+            + "LEFT JOIN public.dms_file_versions v ON r.resource_type = 'FILE_VERSION' "
+            + "AND v.tenant_id = r.tenant_id AND v.id = r.id "
+            + "LEFT JOIN public.dms_documents version_document ON r.resource_type = 'FILE_VERSION' "
+            + "AND version_document.tenant_id = v.tenant_id AND version_document.id = v.document_id "
+            + "LEFT JOIN public.dms_version_states current_state ON r.resource_type = 'DOCUMENT' "
+            + "AND current_state.tenant_id = r.tenant_id AND current_state.document_id = r.id "
+            + "AND current_state.lifecycle_status = 'EFFECTIVE' "
+            + "AND CURRENT_TIMESTAMP >= current_state.effective_from "
+            + "AND (current_state.effective_to IS NULL OR current_state.effective_to > CURRENT_TIMESTAMP) "
+            + "LEFT JOIN public.dms_file_versions current_version ON current_version.tenant_id = current_state.tenant_id "
+            + "AND current_version.document_id = current_state.document_id "
+            + "AND current_version.id = current_state.file_version_id "
+            + "LEFT JOIN public.dms_version_states version_state ON r.resource_type = 'FILE_VERSION' "
+            + "AND version_state.tenant_id = v.tenant_id AND version_state.document_id = v.document_id "
+            + "AND version_state.file_version_id = v.id ";
+
+    @Select("SELECT uuidv7()")
+    UUID nextUuidV7();
+
+    @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 id, tenant_id, resource_type, source_type, source_id, registered_by, created_at "
+            + "FROM public.dms_permission_resources WHERE tenant_id = #{tenantId} AND id = #{id}")
+    DmsPermissionResourceEntity selectByTenantAndId(@Param("tenantId") String tenantId,
+                                                     @Param("id") UUID id);
+
+    @Select("SELECT id, tenant_id, resource_type, source_type, source_id, registered_by, created_at "
+            + "FROM public.dms_permission_resources WHERE tenant_id = #{tenantId} "
+            + "AND source_type = #{sourceType} AND source_id = #{sourceId}")
+    DmsPermissionResourceEntity selectBySource(@Param("tenantId") String tenantId,
+                                                @Param("sourceType") String sourceType,
+                                                @Param("sourceId") String sourceId);
+
+    @Select({"<script>",
+            "SELECT id, tenant_id, resource_type, source_type, source_id, registered_by, created_at",
+            "FROM public.dms_permission_resources WHERE tenant_id = #{tenantId} AND id IN",
+            "<foreach collection='ids' item='id' open='(' separator=',' close=')'>#{id}</foreach>",
+            "</script>"})
+    List<DmsPermissionResourceEntity> selectByTenantAndIds(@Param("tenantId") String tenantId,
+                                                            @Param("ids") List<UUID> ids);
+
+    @Select(RESOURCE_VIEW_SQL + "WHERE r.tenant_id = #{tenantId} AND r.id = #{id}")
+    DmsPermissionResourceVO selectView(@Param("tenantId") String tenantId, @Param("id") UUID id);
+
+    @Select({"<script>", RESOURCE_VIEW_SQL,
+            "WHERE r.tenant_id = #{tenantId}",
+            "<if test='resourceType != null and resourceType != \"\"'>",
+            "AND r.resource_type = #{resourceType}",
+            "</if>",
+            "<if test='cursorTime != null'>",
+            "AND (r.created_at, r.id) &lt; (#{cursorTime}, #{cursorId})",
+            "</if>",
+            "ORDER BY r.created_at DESC, r.id DESC LIMIT #{limit}",
+            "</script>"})
+    List<DmsPermissionResourceVO> selectPage(@Param("tenantId") String tenantId,
+                                              @Param("resourceType") String resourceType,
+                                              @Param("cursorTime") Date cursorTime,
+                                              @Param("cursorId") UUID cursorId,
+                                              @Param("limit") int limit);
+
+    @Select({"<script>", RESOURCE_VIEW_SQL,
+            "WHERE r.tenant_id = #{tenantId}",
+            "<choose>",
+            "<when test='parentId == null'>",
+            "AND r.resource_type = 'FOLDER' AND f.parent_id IS NULL",
+            "</when>",
+            "<otherwise>",
+            "AND ((r.resource_type = 'FOLDER' AND f.parent_id = #{parentId})",
+            "OR (r.resource_type = 'DOCUMENT' AND d.folder_id = #{parentId})",
+            "OR (r.resource_type = 'FILE_VERSION' AND v.document_id = #{parentId}))",
+            "</otherwise>",
+            "</choose>",
+            "ORDER BY r.resource_type, name, r.id LIMIT #{limit}",
+            "</script>"})
+    List<DmsPermissionResourceVO> selectChildren(@Param("tenantId") String tenantId,
+                                                  @Param("parentId") UUID parentId,
+                                                  @Param("limit") int limit);
+
+}

--
Gitblit v1.8.0