刘光辉
3 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package jnpf.dmsMapper;
 
import jnpf.dmsEntity.permission.entity.DmsFileVersionEntity;
import jnpf.dmsEntity.permission.form.DmsPersonalFolderFileForm;
import jnpf.dmsEntity.permission.vo.DmsPersonalFolderFileVO;
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 java.util.List;
import java.util.UUID;
 
@Mapper
public interface DmsPersonalFolderMapper {
 
    @Select({"<script>",
            "SELECT v.id, v.tenant_id, v.document_id, v.version_no, v.version_label, v.file_name,",
            "v.mime_type, v.size_bytes, v.checksum_sha256, v.prepared_by, v.prepared_on, v.shifou_shoukong,",
            "v.created_by, v.created_at FROM public.dms_file_versions v",
            "JOIN public.dms_version_states s ON s.tenant_id = v.tenant_id",
            "AND s.document_id = v.document_id AND s.file_version_id = v.id",
            "WHERE v.tenant_id = #{tenantId} AND v.id IN",
            "<foreach collection='fileVersionIds' item='id' open='(' separator=',' close=')'>#{id}</foreach>",
            "AND (s.lifecycle_status IN ('EFFECTIVE', 'SUPERSEDED', 'EXPIRED', 'REVOKED', 'OBSOLETE')",
            "OR (s.lifecycle_status = 'INVALIDATED' AND s.approved_at IS NOT NULL))",
            "</script>"})
    List<DmsFileVersionEntity> selectReadableVersions(
            @Param("tenantId") String tenantId,
            @Param("fileVersionIds") List<UUID> fileVersionIds);
 
    @Insert({"<script>",
            "INSERT INTO public.dms_personal_folder_items",
            "(tenant_id, user_id, folder_type, document_id, file_version_id, valid_to)",
            "VALUES",
            "<foreach collection='files' item='file' separator=','>",
            "(#{tenantId}, #{userId}, 'BORROW', #{file.documentId}, #{file.fileVersionId}, #{file.validTo})",
            "</foreach>",
            "ON CONFLICT (tenant_id, user_id, folder_type, file_version_id) DO UPDATE",
            "SET valid_to = EXCLUDED.valid_to",
            "WHERE (EXCLUDED.valid_to IS NULL AND dms_personal_folder_items.valid_to IS NOT NULL)",
            "OR dms_personal_folder_items.valid_to = 'infinity'::TIMESTAMPTZ",
            "OR (EXCLUDED.valid_to IS NOT NULL",
            "AND dms_personal_folder_items.valid_to &lt; EXCLUDED.valid_to)",
            "</script>"})
    int insertBorrowSnapshots(
            @Param("tenantId") String tenantId,
            @Param("userId") String userId,
            @Param("files") List<DmsPersonalFolderFileForm.FileRelation> files);
 
    @Insert({"<script>",
            "INSERT INTO public.dms_personal_folder_items",
            "(tenant_id, user_id, folder_type, document_id, file_version_id, valid_to)",
            "VALUES",
            "<foreach collection='files' item='file' separator=','>",
            "(#{tenantId}, #{userId}, 'DOWNLOAD', #{file.documentId}, #{file.fileVersionId}, #{file.validTo})",
            "</foreach>",
            "ON CONFLICT (tenant_id, user_id, folder_type, file_version_id) DO UPDATE",
            "SET valid_to = EXCLUDED.valid_to",
            "WHERE (EXCLUDED.valid_to IS NULL AND dms_personal_folder_items.valid_to IS NOT NULL)",
            "OR dms_personal_folder_items.valid_to = 'infinity'::TIMESTAMPTZ",
            "OR (EXCLUDED.valid_to IS NOT NULL",
            "AND dms_personal_folder_items.valid_to &lt; EXCLUDED.valid_to)",
            "</script>"})
    int insertDownloadSnapshots(
            @Param("tenantId") String tenantId,
            @Param("userId") String userId,
            @Param("files") List<DmsPersonalFolderFileForm.FileRelation> files);
 
    @Insert("INSERT INTO public.dms_personal_folder_items "
            + "(tenant_id, user_id, folder_type, document_id, file_version_id, valid_to) "
            + "VALUES (#{tenantId}, #{userId}, 'FAVORITE', #{documentId}, #{fileVersionId}, NULL) "
            + "ON CONFLICT (tenant_id, user_id, folder_type, file_version_id) DO NOTHING")
    int insertFavoriteSnapshot(@Param("tenantId") String tenantId,
                               @Param("userId") String userId,
                               @Param("documentId") UUID documentId,
                               @Param("fileVersionId") UUID fileVersionId);
 
    @Select({"<script>", DmsPermissionResourceMapper.RESOURCE_VIEW_SELECT_SQL,
            ", personal_item.valid_to AS valid_to",
            DmsPermissionResourceMapper.RESOURCE_VIEW_FROM_SQL,
            "JOIN public.dms_personal_folder_items personal_item",
            "ON personal_item.tenant_id = r.tenant_id AND personal_item.file_version_id = r.id",
            "WHERE personal_item.tenant_id = #{tenantId}",
            "AND personal_item.user_id = #{userId}",
            "AND personal_item.folder_type = #{folderType}",
            "AND r.resource_type = 'FILE_VERSION'",
            "<if test='keyword != null and keyword != \"\"'>",
            "AND (STRPOS(LOWER(COALESCE(v.file_name, '')), LOWER(#{keyword})) &gt; 0",
            "OR STRPOS(LOWER(COALESCE(version_document.name, '')), LOWER(#{keyword})) &gt; 0",
            "OR STRPOS(LOWER(COALESCE(version_document.document_no, '')), LOWER(#{keyword})) &gt; 0)",
            "</if>",
            "ORDER BY personal_item.added_at DESC, r.id DESC LIMIT #{limit}",
            "</script>"})
    List<DmsPersonalFolderFileVO> selectFiles(@Param("tenantId") String tenantId,
                                               @Param("userId") String userId,
                                               @Param("folderType") String folderType,
                                               @Param("keyword") String keyword,
                                               @Param("limit") int limit);
}