<?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)->>'wenjian_id' file_id,
|
to_jsonb(c)->>'wenjian_banben_id' business_version_id,
|
to_jsonb(c)->>'laiyuan_wenjian_id' source_file_id,to_jsonb(c)->>'laiyuan_wenjian_banben_id' source_version_id,
|
<choose><when test="operation == 'yichexiao'">CAST(to_jsonb(c)->>'chexiao_shengxiao_shijian' AS timestamp)</when>
|
<otherwise>CAST(to_jsonb(c)->>'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)->>'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)->>'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)
|
> (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 <= 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<>'APPLIED') remaining,
|
min(scheduled_at) FILTER (WHERE status<>'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>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<>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<=CURRENT_TIMESTAMP
|
AND old.f_creator_time<(b.activated_at AT TIME ZONE 'Asia/Shanghai')
|
</select>
|
</mapper>
|