<?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 > clock_timestamp() AND b.approved_at <= CURRENT_TIMESTAMP
|
AND #{row.scheduledAt} <= 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<>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 <> '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 <> '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 <= 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 > 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 < #{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 <= #{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 > clock_timestamp())
|
</update>
|
</mapper>
|