刘光辉
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
128
129
130
131
132
133
134
<?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.DmsApprovedDisableMapper">
<resultMap id="Request" type="jnpf.dmsEntity.storage.approval.DmsDisableRequest">
<result column="id" property="id" typeHandler="jnpf.dmsDatabase.DmsUuidTypeHandler"/>
<result column="batch_id" property="batchId" typeHandler="jnpf.dmsDatabase.DmsUuidTypeHandler"/>
<result column="tenant_id" property="tenantId"/>
<result column="operation" property="operation"/>
<result column="application_id" property="applicationId"/>
<result column="flow_id" property="flowId"/>
<result column="task_id" property="taskId"/>
<result column="source_row_id" property="sourceRowId"/>
<result column="file_id" property="fileId"/>
<result column="business_version_id" property="businessVersionId"/>
<result column="source_file_id" property="sourceFileId"/>
<result column="source_version_id" property="sourceVersionId"/>
<result column="document_id" property="documentId" typeHandler="jnpf.dmsDatabase.DmsUuidTypeHandler"/>
<result column="file_version_id" property="fileVersionId" typeHandler="jnpf.dmsDatabase.DmsUuidTypeHandler"/>
<result column="folder_id" property="folderId" typeHandler="jnpf.dmsDatabase.DmsUuidTypeHandler"/>
<result column="requested_at" property="requestedAt"/>
<result column="approved_at" property="approvedAt"/>
<result column="scheduled_at" property="scheduledAt"/>
<result column="actor_id" property="actorId"/>
<result column="status" property="status"/>
<result column="disabled_at" property="disabledAt"/>
<result column="lease_token" property="leaseToken"/>
<result column="attempts" property="attempts"/>
<result column="last_error" property="lastError"/>
</resultMap>
<sql id="Columns">i.id, i.batch_id, i.tenant_id,
 CASE i.change_type WHEN 'REVOKE' THEN 'yichexiao' ELSE 'yishixiao' END operation,
 b.audit_id application_id, b.flow_id, b.task_id, i.source_row_id, i.file_id, i.business_version_id,
 i.source_file_id, i.source_version_id, i.document_id, i.file_version_id, i.folder_id, i.requested_at,
 b.approved_at, i.scheduled_at, b.actor_id, i.status, i.executed_at disabled_at, b.lease_token, b.attempts, b.last_error</sql>
<sql id="JoinedItems">public.dms_approved_file_items i JOIN public.dms_approved_file_batches b ON b.tenant_id=i.tenant_id AND b.id=i.batch_id</sql>
<sql id="DisableTypes">b.audit_type IN ('chexiao_shenqing','shixiao_shenqing') AND i.change_type IN ('REVOKE','INVALIDATE')</sql>
<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="nativeRows" resultMap="Request">
 SELECT m.f_tenant_id tenant_id, m.f_id application_id, m.f_flow_id flow_id,m.f_flow_task_id task_id,
 COALESCE(NULLIF(t.f_last_modify_user_id,''),NULLIF(t.f_creator_user_id,'')) actor_id,
 c.f_id source_row_id,#{operation} operation,to_jsonb(c)-&gt;&gt;'wenjian_id' file_id,
 to_jsonb(c)-&gt;&gt;'wenjian_banben_id' business_version_id,
 to_jsonb(c)-&gt;&gt;'laiyuan_wenjian_id' source_file_id,to_jsonb(c)-&gt;&gt;'laiyuan_wenjian_banben_id' source_version_id,
 <choose><when test="operation == 'yichexiao'">CAST(to_jsonb(c)-&gt;&gt;'chexiao_shengxiao_shijian' AS timestamp)</when>
 <otherwise>CAST(to_jsonb(c)-&gt;&gt;'shixiao_shengxiao_shijian' AS timestamp)</otherwise></choose> requested_at,
 CAST(z.wenjian_zhongxin_wenjian_id AS uuid) document_id,
 CAST(v.wenjian_zhongxin_banben_id AS uuid) file_version_id,CAST(z.wenjian_mulu_id AS uuid) folder_id
 FROM <include refid="NativeMain"/> m JOIN <include refid="NativeChild"/> 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
 JOIN public.workflow_task t ON t.f_tenant_id=m.f_tenant_id AND t.f_id=m.f_flow_task_id AND t.f_flow_id=m.f_flow_id
 LEFT JOIN public.dms_wenjian_ziyuan z ON z.f_tenant_id=m.f_tenant_id AND z.f_id=to_jsonb(c)-&gt;&gt;'wenjian_id' AND z.f_delete_mark IS NULL
 LEFT JOIN public.dms_wenjian_banben v ON v.f_tenant_id=m.f_tenant_id AND v.f_id=to_jsonb(c)-&gt;&gt;'wenjian_banben_id' AND v.wenjian_id=z.f_id AND v.f_delete_mark IS NULL
 WHERE m.f_tenant_id=#{tenantId} AND m.f_flow_id=#{flowId} AND m.f_flow_task_id=#{taskId}
 AND m.f_flow_state=2 AND m.f_delete_mark IS NULL ORDER BY c.f_id FOR UPDATE OF m,c
</select>
<select id="approvedApplications" resultMap="Request">
 SELECT a.tenant_id,a.application_id,a.flow_id,a.task_id,a.operation
 FROM (
 SELECT f_tenant_id tenant_id,f_id application_id,f_flow_id flow_id,f_flow_task_id task_id,'yichexiao' operation
 FROM public.dms_wenjian_chexiao_tiyi WHERE f_flow_state=2 AND f_delete_mark IS NULL
 UNION ALL
 SELECT f_tenant_id,f_id,f_flow_id,f_flow_task_id,'yishixiao'
 FROM public.dms_wenjian_shixiao_shenqing WHERE f_flow_state=2 AND f_delete_mark IS NULL
 ) a WHERE NOT EXISTS (SELECT 1 FROM public.dms_approved_file_batches r
 WHERE r.tenant_id=a.tenant_id AND r.task_id=a.task_id AND r.audit_type=CASE a.operation WHEN 'yichexiao' THEN 'chexiao_shenqing' ELSE 'shixiao_shenqing' END)
 <if test="after != null">
 AND (COALESCE(a.tenant_id,''),COALESCE(a.task_id,''),a.operation,a.application_id)
 &gt; (COALESCE(#{after.tenantId,jdbcType=VARCHAR},''),COALESCE(#{after.taskId,jdbcType=VARCHAR},''),
       #{after.operation},#{after.applicationId})
 </if>
 ORDER BY COALESCE(a.tenant_id,''),COALESCE(a.task_id,''),a.operation,a.application_id LIMIT #{limit}
</select>
<select id="lock" resultMap="Request">
 SELECT <include refid="Columns"/> FROM <include refid="JoinedItems"/>
 WHERE i.tenant_id=#{tenantId} AND i.id=#{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
 AND <include refid="DisableTypes"/> FOR UPDATE OF b,i
</select>
<select id="dueItems" resultMap="Request">
 SELECT <include refid="Columns"/> FROM <include refid="JoinedItems"/>
 WHERE i.tenant_id=#{tenantId} AND i.batch_id=#{batchId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
 AND <include refid="DisableTypes"/> AND i.status IN ('WAITING','CENTER_APPLIED')
 AND i.scheduled_at &lt;= CURRENT_TIMESTAMP ORDER BY i.scheduled_at,i.id
</select>
<insert id="enqueue">
 INSERT INTO public.dms_approved_file_items
 (id,batch_id,tenant_id,source_key,source_row_id,change_type,file_id,business_version_id,source_file_id,source_version_id,
 document_id,file_version_id,folder_id,requested_at,scheduled_at,status)
 VALUES (#{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler},
 #{batchId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler},#{tenantId},
 CAST(#{batchId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AS text) || ':' || #{sourceRowId},#{sourceRowId},
 CASE WHEN #{operation}='yichexiao' THEN 'REVOKE' ELSE 'INVALIDATE' END,
 #{fileId},#{businessVersionId},#{sourceFileId},#{sourceVersionId},
 #{documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler},
 #{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler},
 #{folderId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler},#{requestedAt},#{scheduledAt},'WAITING')
</insert>
<update id="refreshProgress">
 UPDATE public.dms_approved_file_batches b
 SET status=CASE WHEN p.remaining=0 THEN 'APPLIED' ELSE 'WAITING' END,
 scheduled_at=COALESCE(p.next_date,b.scheduled_at)
 FROM (SELECT count(*) total,count(*) FILTER (WHERE status&lt;&gt;'APPLIED') remaining,
 min(scheduled_at) FILTER (WHERE status&lt;&gt;'APPLIED') next_date
 FROM public.dms_approved_file_items WHERE tenant_id=#{tenantId}
 AND batch_id=#{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
 AND change_type IN ('REVOKE','INVALIDATE')) p
 WHERE b.tenant_id=#{tenantId} AND b.id=#{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
 AND b.audit_type IN ('chexiao_shenqing','shixiao_shenqing') AND b.lease_token=#{leaseToken} AND p.total&gt;0
</update>
 
<select id="validateTarget" resultType="int">
 SELECT count(*) FROM public.dms_wenjian_ziyuan z
 JOIN public.dms_wenjian_banben v ON v.f_tenant_id=z.f_tenant_id AND v.wenjian_id=z.f_id
 AND v.f_id=#{businessVersionId} AND v.f_delete_mark IS NULL
 WHERE z.f_tenant_id=#{tenantId} AND z.f_id=#{fileId} AND z.dangqian_banben_id=#{businessVersionId}
 AND z.wenjian_leixing='zhuwenjian' AND z.biz_status='effective' AND z.f_delete_mark IS NULL
 AND z.wenjian_zhongxin_wenjian_id=CAST(#{documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AS text)
 AND z.wenjian_zhongxin_banben_id=CAST(#{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AS text)
 AND v.wenjian_zhongxin_banben_id=z.wenjian_zhongxin_banben_id
</select>
<select id="candidateExists" resultType="int">
 SELECT count(*) FROM public.dms_wenjian_ziyuan old
 JOIN public.dms_wenjian_banben v ON v.f_tenant_id=old.f_tenant_id AND v.f_id=#{sourceVersionId}
 JOIN public.dms_wenjian_ziyuan fresh ON fresh.f_tenant_id=v.f_tenant_id AND fresh.f_id=v.wenjian_id AND fresh.f_id=#{sourceFileId}
 JOIN public.dms_approved_file_batches b ON b.tenant_id=v.f_tenant_id AND b.audit_id=v.laiyuan_danju_id
 AND b.audit_type=v.laiyuan_danju_leixing AND b.audit_type='xinzeng_shenhe' AND b.status='APPLIED'
 WHERE old.f_tenant_id=#{tenantId} AND old.f_id=#{fileId} AND fresh.f_id&lt;&gt;old.f_id
 AND old.f_delete_mark IS NULL AND fresh.f_delete_mark IS NULL AND v.f_delete_mark IS NULL
 AND old.wenjian_leixing='zhuwenjian' AND fresh.wenjian_leixing='zhuwenjian'
 AND v.wenjian_mingcheng=old.wenjian_mingcheng AND NULLIF(BTRIM(old.wenjian_mingcheng),'') IS NOT NULL
 AND b.activated_at IS NOT NULL AND b.activated_at&lt;=CURRENT_TIMESTAMP
 AND old.f_creator_time&lt;(b.activated_at AT TIME ZONE 'Asia/Shanghai')
</select>
</mapper>