刘光辉
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?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.DmsRevocationMapper">
    <resultMap id="Target" type="jnpf.dmsEntity.center.DmsInvalidationTarget">
        <result column="document_id" property="documentId" typeHandler="jnpf.dmsDatabase.DmsUuidTypeHandler"/>
        <result column="file_version_id" property="fileVersionId" typeHandler="jnpf.dmsDatabase.DmsUuidTypeHandler"/>
        <result column="effective_from" property="effectiveFrom"/>
        <result column="effective_to" property="effectiveTo"/>
    </resultMap>
    <select id="lockRequest" resultMap="jnpf.dmsMapper.DmsApprovedDisableMapper.Request">
        SELECT <include refid="jnpf.dmsMapper.DmsApprovedDisableMapper.Columns"/>
        FROM <include refid="jnpf.dmsMapper.DmsApprovedDisableMapper.JoinedItems"/>
        WHERE i.tenant_id=#{command.tenantId} AND i.id=#{command.requestId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
          AND i.change_type='REVOKE' AND b.audit_type='chexiao_shenqing'
        FOR UPDATE OF b,i
    </select>
    <select id="executionTime" resultType="java.util.Date">
        SELECT date_trunc('milliseconds', CURRENT_TIMESTAMP)
    </select>
    <select id="validLease" resultType="boolean">
        SELECT EXISTS (SELECT 1 FROM public.dms_approved_file_batches b
          WHERE b.tenant_id=#{row.tenantId} AND b.id=#{row.batchId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND b.lease_token=#{token}
            AND b.lease_until &gt; clock_timestamp() AND b.approved_at &lt;= CURRENT_TIMESTAMP
            AND #{row.scheduledAt} &lt;= CURRENT_TIMESTAMP)
    </select>
    <select id="approvedSource" resultType="boolean">
        WITH approved AS (SELECT c.f_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
          JOIN public.workflow_task t ON t.f_tenant_id=m.f_tenant_id AND t.f_id=m.f_flow_task_id
          JOIN public.dms_file_operation_occupancies o ON o.tenant_id=m.f_tenant_id
            AND o.task_id=m.f_flow_task_id AND o.application_id=m.f_id AND o.file_id=c.wenjian_id
            AND o.operation='yichexiao' AND o.active=true
          WHERE m.f_tenant_id=#{row.tenantId} AND m.f_id=#{row.applicationId}
            AND m.f_flow_task_id=#{row.taskId} AND m.f_flow_id=#{row.flowId}
            AND m.f_flow_state=2 AND m.f_delete_mark IS NULL
            AND c.f_id=#{row.sourceRowId} AND c.f_delete_mark IS NULL
            AND c.wenjian_id=#{row.fileId} AND c.wenjian_banben_id=#{row.businessVersionId}
            AND c.chexiao_shengxiao_shijian IS NOT DISTINCT FROM #{row.requestedAt}
            AND c.chexiao_zhixing_shijian IS NULL
            AND (o.folder_id=CAST(#{row.documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AS text)
              OR EXISTS (SELECT 1 FROM public.dms_documents legacy_document
                WHERE legacy_document.tenant_id=o.tenant_id
                  AND legacy_document.id=#{row.documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
                  AND legacy_document.folder_id=#{row.folderId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
                  AND o.folder_id=CAST(legacy_document.folder_id AS text)))
            AND t.f_status=2 AND t.f_end_time=#{row.approvedAt} AND t.f_delete_mark IS NULL
            AND (t.f_flow_id=#{row.flowId} OR t.f_template_id=#{row.flowId})
            AND NOT EXISTS (SELECT 1 FROM public.dms_file_operation_occupancies other
              WHERE other.tenant_id=o.tenant_id AND other.file_id=o.file_id AND other.active=true AND other.task_id&lt;&gt;o.task_id)
          LIMIT 2 FOR UPDATE OF m,c,t,o NOWAIT) SELECT count(*)=1 FROM approved
    </select>
    <sql id="Directory">d.tenant_id=#{command.tenantId}
        AND (d.id=#{command.mainDocumentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} OR d.main_document_id=#{command.mainDocumentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler})</sql>
    <select id="lockDocuments" resultType="java.util.UUID">
        SELECT d.id FROM public.dms_documents d WHERE <include refid="Directory"/>
        ORDER BY d.id LIMIT 1001 FOR UPDATE NOWAIT
    </select>
    <select id="validDirectory" resultType="boolean">
        SELECT EXISTS (SELECT 1 FROM public.dms_documents d
          WHERE d.tenant_id=#{command.tenantId} AND d.id=#{command.mainDocumentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND d.main_document_id IS NULL)
          AND NOT EXISTS (SELECT 1 FROM public.dms_documents d WHERE <include refid="Directory"/>
            AND d.access_status &lt;&gt; 'enabled')
    </select>
    <select id="hasPendingVersions" resultType="boolean">
        SELECT EXISTS (SELECT 1 FROM public.dms_documents d
          JOIN public.dms_version_states s ON s.tenant_id=d.tenant_id AND s.document_id=d.id
          WHERE <include refid="Directory"/> AND s.lifecycle_status IN ('PENDING_APPROVAL','PENDING_EFFECTIVE'))
          OR EXISTS (SELECT 1 FROM public.dms_documents d
            JOIN public.dms_approved_file_items i ON i.tenant_id=d.tenant_id AND i.document_id=d.id
            JOIN public.dms_approved_file_batches b ON b.tenant_id=i.tenant_id AND b.id=i.batch_id
            WHERE <include refid="Directory"/> AND i.change_type IN ('CREATE','REVISE','REUSE','RETIRE')
              AND b.status &lt;&gt; 'APPLIED')
    </select>
    <select id="currentTargets" resultMap="Target">
        SELECT s.document_id,s.file_version_id,s.effective_from,s.effective_to FROM public.dms_documents d
          JOIN public.dms_version_states s ON s.tenant_id=d.tenant_id AND s.document_id=d.id
          JOIN public.dms_file_versions v ON v.tenant_id=s.tenant_id AND v.id=s.file_version_id
        WHERE <include refid="Directory"/> AND s.lifecycle_status IN ('EFFECTIVE','EXPIRED')
          AND s.effective_from &lt;= CURRENT_TIMESTAMP
          AND NOT EXISTS (SELECT 1 FROM public.dms_file_versions newer
            WHERE newer.tenant_id=v.tenant_id AND newer.document_id=v.document_id AND newer.version_no &gt; v.version_no)
        ORDER BY d.id LIMIT 1001
    </select>
    <update id="revokeVersion">
        UPDATE public.dms_version_states SET lifecycle_status='REVOKED',effective_to=LEAST(effective_to,CAST(#{at} AS timestamptz)),
          status_reason='撤销申请 ' || CAST(#{command.requestId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AS text),
          status_changed_by=#{command.actorId},revision=revision+1
        WHERE tenant_id=#{command.tenantId} AND document_id=#{target.documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
          AND file_version_id=#{target.fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND lifecycle_status IN ('EFFECTIVE','EXPIRED')
          AND approved_at IS NOT NULL AND effective_from &lt; #{at}
    </update>
    <update id="markDocuments">
        UPDATE public.dms_documents d SET access_status='disable',disable_reason='yichexiao',
          disabled_at=#{at},disable_request_id=#{command.requestId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
        WHERE <include refid="Directory"/> AND access_status='enabled'
    </update>
    <update id="disableResource">
        UPDATE public.dms_wenjian_ziyuan SET biz_status='disabled',jinyong_laiyuan='yichexiao',
          youxiao_qi_zhi=LEAST(youxiao_qi_zhi,CAST(#{at} AS timestamptz) AT TIME ZONE 'Asia/Shanghai'),
          f_last_modify_user_id=#{row.actorId},f_last_modify_time=CAST(#{at} AS timestamptz) AT TIME ZONE 'Asia/Shanghai'
        WHERE f_tenant_id=#{row.tenantId} AND f_id=#{resource.id}
          AND dangqian_banben_id=#{resource.currentVersionId} AND f_delete_mark IS NULL
          AND (biz_status='effective' OR (biz_status='disabled' AND jinyong_laiyuan='yidaoqi'))
    </update>
    <update id="revokeBusinessVersion">
        UPDATE public.dms_wenjian_banben SET biz_status='revoked',chexiao_zhixing_shijian=#{at},
          f_last_modify_user_id=#{row.actorId},f_last_modify_time=CAST(#{at} AS timestamptz) AT TIME ZONE 'Asia/Shanghai'
        WHERE f_tenant_id=#{row.tenantId} AND f_id=#{resource.currentVersionId} AND wenjian_id=#{resource.id}
          AND wenjian_zhongxin_banben_id=#{resource.centerVersionId} AND biz_status IN ('effective','expired') AND f_delete_mark IS NULL
    </update>
    <update id="recordExecution">
        UPDATE public.dms_wenjian_chexiao_tiyi_zixiang
        SET chexiao_zhixing_shijian=#{at}
        WHERE f_tenant_id=#{row.tenantId} AND f_id=#{row.sourceRowId} AND f_foreign_id=#{row.applicationId}
          AND wenjian_id=#{row.fileId} AND wenjian_banben_id=#{row.businessVersionId}
          AND f_delete_mark IS NULL AND chexiao_zhixing_shijian IS NULL
    </update>
    <update id="complete">
        UPDATE public.dms_approved_file_items i SET status='APPLIED',executed_at=#{at}
        WHERE i.tenant_id=#{row.tenantId} AND i.id=#{row.id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND i.status='WAITING'
          AND i.change_type='REVOKE' AND i.scheduled_at &lt;= #{at}
          AND EXISTS (SELECT 1 FROM public.dms_approved_file_batches b
            WHERE b.tenant_id=i.tenant_id AND b.id=i.batch_id AND b.lease_token=#{token}
              AND b.lease_until &gt; clock_timestamp())
    </update>
</mapper>