刘光辉
4 小时以前 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
101
102
103
104
105
106
107
108
<?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="jnpf.dmsMapper.DmsDisableApplicationMapper">
    <resultMap id="Occupancy" type="jnpf.dmsEntity.storage.approval.DmsDisableOccupancy">
        <result column="tenant_id" property="tenantId"/><result column="operation" property="operation"/>
        <result column="application_id" property="applicationId"/>
        <result column="creator_user_id" property="creatorUserId"/><result column="flow_id" property="flowId"/>
        <result column="task_id" property="taskId"/><result column="flow_state" property="flowState"/>
        <result column="file_id" property="fileId"/><result column="folder_id" property="folderId"/>
    </resultMap>
    <!-- Compatibility path until technical migration and workflow draft cutover. -->
    <sql id="Applications">
        SELECT m.f_tenant_id tenant_id,m.f_flow_task_id task_id,m.f_flow_id flow_id,to_jsonb(c)-&gt;&gt;'wenjian_id' file_id
        FROM public.dms_wenjian_chexiao_tiyi m JOIN public.dms_wenjian_chexiao_tiyi_zixiang c
          ON c.f_tenant_id=m.f_tenant_id AND c.f_foreign_id=m.f_id AND c.f_delete_mark IS NULL
        WHERE m.f_tenant_id=#{tenantId} AND m.f_delete_mark IS NULL AND m.f_flow_state IN (1,2,3,4,5,6,7,8,9,10)
        UNION ALL
        SELECT m.f_tenant_id,m.f_flow_task_id,m.f_flow_id,to_jsonb(c)-&gt;&gt;'wenjian_id'
        FROM public.dms_wenjian_shixiao_shenqing m JOIN public.dms_wenjian_shixiao_shenqing_zixiang c
          ON c.f_tenant_id=m.f_tenant_id AND c.f_foreign_id=m.f_id AND c.f_delete_mark IS NULL
        WHERE m.f_tenant_id=#{tenantId} AND m.f_delete_mark IS NULL AND m.f_flow_state IN (1,2,3,4,5,6,7,8,9,10)
    </sql>
    <!-- A classification parent is not the main file's dedicated directory. -->
    <sql id="RelatedRecord">
        EXISTS (SELECT 1 FROM public.dms_wenjian_guanxi g
          WHERE g.f_tenant_id=z.f_tenant_id AND g.zhu_wenjian_id=<include refid="MainId"/>
            AND g.guanlian_wenjian_id=z.f_id AND g.guanxi_leixing='jilu'
            AND g.biz_status='effective' AND g.f_delete_mark IS NULL)
    </sql>
    <sql id="MainId">${mainAlias}.file_id</sql>
    <select id="legacyApplicationsForFile" resultMap="Occupancy">
        SELECT DISTINCT a.task_id,a.flow_id FROM public.dms_wenjian_ziyuan z
        JOIN (<include refid="Applications"/>) a ON a.tenant_id=z.f_tenant_id
        WHERE z.f_tenant_id=#{tenantId} AND z.f_id=#{fileId} AND z.f_delete_mark IS NULL
          AND (a.file_id=z.f_id OR <include refid="RelatedRecord"><property name="mainAlias" value="a"/></include>)
    </select>
    <select id="legacyApplicationsForDocument" resultMap="Occupancy">
        SELECT DISTINCT a.task_id,a.flow_id FROM public.dms_wenjian_ziyuan z
        JOIN (<include refid="Applications"/>) a ON a.tenant_id=z.f_tenant_id
        WHERE z.f_tenant_id=#{tenantId}
          AND z.wenjian_zhongxin_wenjian_id=CAST(#{documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AS text)
          AND z.f_delete_mark IS NULL
          AND (a.file_id=z.f_id OR <include refid="RelatedRecord"><property name="mainAlias" value="a"/></include>)
    </select>
    <sql id="StillOccupied">o.active=true</sql>
    <sql id="FixedOccupied">
        EXISTS (SELECT 1 FROM public.dms_file_operation_occupancies o
          WHERE o.tenant_id=z.f_tenant_id AND (o.file_id=z.f_id OR <include refid="RelatedRecord"><property name="mainAlias" value="o"/></include>)
          AND <include refid="StillOccupied"/>)
    </sql>
    <select id="pendingForFile" resultType="int">
        SELECT count(*) FROM public.dms_wenjian_ziyuan z WHERE z.f_tenant_id=#{tenantId} AND z.f_id=#{fileId}
        AND z.f_delete_mark IS NULL AND <include refid="FixedOccupied"/>
    </select>
    <select id="pendingForDocument" resultType="int">
        SELECT count(*) FROM public.dms_wenjian_ziyuan z WHERE z.f_tenant_id=#{tenantId}
        AND z.wenjian_zhongxin_wenjian_id=CAST(#{documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AS text)
        AND z.f_delete_mark IS NULL AND <include refid="FixedOccupied"/>
    </select>
    <select id="conflictingFiles" resultType="int">
        SELECT count(*) FROM public.dms_wenjian_ziyuan z WHERE z.f_tenant_id=#{tenantId}
        AND z.f_id IN <foreach collection="fileIds" item="id" open="(" separator="," close=")">#{id}</foreach>
        AND EXISTS (SELECT 1 FROM public.dms_file_operation_occupancies o
          WHERE o.tenant_id=z.f_tenant_id AND (o.file_id=z.f_id OR <include refid="RelatedRecord"><property name="mainAlias" value="o"/></include>)
          AND (#{taskId,jdbcType=VARCHAR} IS NULL OR o.task_id&lt;&gt;#{taskId,jdbcType=VARCHAR})
          AND <include refid="StillOccupied"/>)
    </select>
    <sql id="NativeMain"><choose><when test="operation == 'yichexiao'">public.dms_wenjian_chexiao_tiyi</when><otherwise>public.dms_wenjian_shixiao_shenqing</otherwise></choose></sql>
    <sql id="NativeChild"><choose><when test="operation == 'yichexiao'">public.dms_wenjian_chexiao_tiyi_zixiang</when><otherwise>public.dms_wenjian_shixiao_shenqing_zixiang</otherwise></choose></sql>
    <select id="application" resultMap="Occupancy">
        SELECT f_tenant_id tenant_id,f_id application_id,f_flow_id flow_id,f_flow_task_id task_id,f_flow_state flow_state,
               <choose>
                   <when test="operation == 'yichexiao'">tiyi_ren_id</when>
                   <otherwise>shenqing_ren_id</otherwise>
               </choose> creator_user_id
        FROM <include refid="NativeMain"/> WHERE f_tenant_id=#{tenantId} AND f_flow_task_id=#{taskId} AND f_delete_mark IS NULL
    </select>
    <select id="applicationFiles" resultMap="Occupancy">
        SELECT to_jsonb(c)-&gt;&gt;'wenjian_id' file_id,z.wenjian_zhongxin_wenjian_id folder_id
        FROM <include refid="NativeChild"/> c LEFT JOIN public.dms_wenjian_ziyuan z
          ON z.f_tenant_id=c.f_tenant_id AND z.f_id=to_jsonb(c)-&gt;&gt;'wenjian_id'
          AND z.f_delete_mark IS NULL AND z.wenjian_leixing='zhuwenjian' AND z.biz_status='effective'
        WHERE c.f_tenant_id=#{tenantId} AND c.f_foreign_id=#{applicationId} AND c.f_delete_mark IS NULL
        ORDER BY c.f_id
    </select>
    <select id="selectedFiles" resultMap="Occupancy">
        SELECT z.f_id file_id,z.wenjian_zhongxin_wenjian_id folder_id FROM public.dms_wenjian_ziyuan z
        WHERE z.f_tenant_id=#{tenantId} AND z.f_delete_mark IS NULL AND z.wenjian_leixing='zhuwenjian'
          AND z.biz_status='effective'
          AND NULLIF(z.wenjian_zhongxin_wenjian_id,'') IS NOT NULL AND z.f_id IN
          <foreach collection="fileIds" item="id" open="(" separator="," close=")">#{id}</foreach>
    </select>
    <insert id="occupy">
        INSERT INTO public.dms_file_operation_occupancies
          (tenant_id,operation,application_id,flow_id,task_id,file_id,folder_id,active)
        VALUES (#{tenantId},#{operation},#{applicationId},#{flowId},#{taskId},#{fileId},#{folderId},true)
        ON CONFLICT (tenant_id,task_id,operation,file_id) DO UPDATE
          SET folder_id=EXCLUDED.folder_id,active=true,released_at=NULL
    </insert>
    <update id="releaseTask">
        UPDATE public.dms_file_operation_occupancies SET active=false,released_at=CURRENT_TIMESTAMP
        WHERE tenant_id=#{tenantId} AND task_id=#{taskId} AND operation=#{operation} AND active=true
    </update>
    <update id="releaseFile">
        UPDATE public.dms_file_operation_occupancies SET active=false,released_at=CURRENT_TIMESTAMP
        WHERE tenant_id=#{tenantId} AND task_id=#{taskId} AND operation=#{operation} AND file_id=#{fileId} AND active=true
    </update>
</mapper>