id, tenant_id, flow_id, task_id, audit_id, audit_type, source_digest, approval_render_snapshot::text AS approval_render_snapshot, actor_id, approved_at, scheduled_at, effective_to, activated_at, status, attempts, next_attempt_at, lease_token, lease_until, last_errorbatch_id, tenant_id, source_key, source_row_id, change_type, file_id, business_version_id, document_id, file_version_id, base_file_version_id, checksum_sha256, storage_receipt::text AS storage_receipt, shifou_shoukong, read_access_scope::text AS read_access_scopeINSERT INTO public.dms_approved_file_batches (id, tenant_id, flow_id, task_id, audit_id, audit_type, source_digest, approval_render_snapshot, actor_id, approved_at, scheduled_at, effective_to, activated_at, status) VALUES (#{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}, #{tenantId}, #{flowId}, #{taskId}, #{auditId}, #{auditType}, #{sourceDigest}, CAST(#{approvalRenderSnapshot,jdbcType=VARCHAR} AS jsonb), #{actorId}, #{approvedAt}, #{scheduledAt}, #{effectiveTo}, #{activatedAt}, #{status})
INSERT INTO public.dms_approved_file_items
(batch_id, tenant_id, source_key, source_row_id, change_type, file_id, business_version_id,
document_id, file_version_id, base_file_version_id, checksum_sha256, shifou_shoukong, read_access_scope)
VALUES (#{batchId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}, #{tenantId},
#{sourceKey}, #{sourceRowId}, #{changeType}, #{fileId}, #{businessVersionId},
#{documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler},
#{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler},
#{baseFileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler},
#{checksumSha256}, #{shifouShoukong}, COALESCE(CAST(#{readAccessScope,jdbcType=VARCHAR} AS jsonb), '[]'::jsonb))
UPDATE public.dms_approved_file_items i
SET document_id=#{item.documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler},
file_version_id=#{item.fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
WHERE i.tenant_id=#{item.tenantId} AND i.batch_id=#{item.batchId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
AND i.source_key=#{item.sourceKey} AND i.checksum_sha256 IS NULL
AND i.document_id=#{oldDocumentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
AND i.file_version_id=#{oldVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
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.status='REGISTERING')
UPDATE public.dms_approved_file_items i SET storage_receipt=CAST(#{receipt} AS jsonb)
WHERE i.tenant_id=#{tenantId} AND i.batch_id=#{batchId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
AND i.source_key=#{sourceKey} AND i.storage_receipt IS NULL
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.status='REGISTERING'
AND b.lease_token=#{token} AND b.lease_until > CURRENT_TIMESTAMP)
UPDATE public.dms_approved_file_batches SET status = 'WAITING'
WHERE tenant_id = #{tenantId} AND id = #{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND status = 'REGISTERING'
UPDATE public.dms_approved_file_items SET checksum_sha256 = #{checksum}
WHERE tenant_id = #{tenantId} AND batch_id = #{batchId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND source_key = #{sourceKey}
AND checksum_sha256 IS NULL
UPDATE public.dms_approved_file_batches SET status = 'EFFECTIVE', activated_at = CURRENT_TIMESTAMP
WHERE tenant_id = #{tenantId} AND id = #{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND status IN ('WAITING','FAILED') AND scheduled_at <= CURRENT_TIMESTAMP
UPDATE public.dms_approved_file_batches SET status = 'APPLIED'
WHERE tenant_id = #{tenantId} AND id = #{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND status = 'EFFECTIVE'
UPDATE public.dms_approved_file_batches SET status = 'FAILED'
WHERE tenant_id = #{tenantId} AND id = #{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND status = 'WAITING'
INSERT INTO public.dms_approved_file_batches
(id,tenant_id,flow_id,task_id,audit_id,audit_type,actor_id,approved_at,status)
SELECT gen_random_uuid(), a.tenant_id, a.flow_id, a.task_id, a.audit_id, a.audit_type,
COALESCE(NULLIF(t.f_last_modify_user_id,''),t.f_creator_user_id), t.f_end_time, 'PREPARING'
FROM (
SELECT f_tenant_id tenant_id,f_flow_id flow_id,f_flow_task_id task_id,f_id audit_id,'xinzeng_shenhe' audit_type
FROM public.dms_wenjian_xinzeng_shenhe
WHERE f_flow_state=2 AND f_delete_mark IS NULL AND shengxiao_wenjian_banben_id IS NULL AND banben_shengxiao_shijian IS NULL
UNION ALL
SELECT f_tenant_id,f_flow_id,f_flow_task_id,f_id,'xiuding_shenhe'
FROM public.dms_wenjian_xiuding_shenhe
WHERE f_flow_state=2 AND f_delete_mark IS NULL AND shengxiao_wenjian_banben_id IS NULL AND banben_shengxiao_shijian IS NULL
UNION ALL
SELECT f_tenant_id,f_flow_id,f_flow_task_id,f_id,'wailai_wenjian_xinzeng_shenhe'
FROM public.dms_wailai_wenjian_xinzeng_shenhe
WHERE f_flow_state=2 AND f_delete_mark IS NULL AND shengxiao_wenjian_banben_id IS NULL
AND banben_shengxiao_shijian IS NULL AND wenjian_id IS NULL
AND NULLIF(btrim(biz_files),'') IS NOT NULL
AND NULLIF(btrim(banbenhao),'') IS NOT NULL
AND NULLIF(btrim(wenjian_mulu_id),'') IS NOT NULL
) a JOIN public.workflow_task t ON t.f_tenant_id=a.tenant_id AND t.f_id=a.task_id
AND (t.f_flow_id=a.flow_id OR t.f_template_id=a.flow_id)
WHERE t.f_status=2 AND t.f_end_time IS NOT NULL AND t.f_delete_mark IS NULL
AND COALESCE(NULLIF(t.f_last_modify_user_id,''),NULLIF(t.f_creator_user_id,'')) IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM public.dms_approved_file_batches b
WHERE b.tenant_id=a.tenant_id AND b.task_id=a.task_id AND b.audit_type=a.audit_type)
ORDER BY t.f_end_time, a.task_id LIMIT 100
ON CONFLICT (tenant_id,task_id,audit_type) DO NOTHING
INSERT INTO public.dms_approved_file_batches
(id,tenant_id,flow_id,task_id,audit_id,audit_type,actor_id,approved_at,status)
VALUES (#{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler},#{tenantId},#{flowId},#{taskId},#{auditId},#{auditType},#{actorId},#{approvedAt},'PREPARING')
ON CONFLICT (tenant_id,task_id,audit_type) DO NOTHING
UPDATE public.dms_approved_file_batches SET scheduled_at=#{scheduledAt}, effective_to=#{effectiveTo}
WHERE tenant_id=#{tenantId} AND id=#{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
AND status='REGISTERING' AND source_digest=#{sourceDigest}
UPDATE public.dms_approved_file_batches SET source_digest=#{sourceDigest}, scheduled_at=#{scheduledAt},
effective_to=#{effectiveTo}, audit_id=#{auditId},
approval_render_snapshot=CAST(#{approvalRenderSnapshot,jdbcType=VARCHAR} AS jsonb), status='REGISTERING'
WHERE tenant_id=#{tenantId} AND id=#{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND status='PREPARING'
status <> 'APPLIED'
AND next_attempt_at <= CURRENT_TIMESTAMP
AND (lease_until IS NULL OR lease_until <= CURRENT_TIMESTAMP)
AND (status <> 'WAITING' OR scheduled_at <= CURRENT_TIMESTAMP)
UPDATE public.dms_approved_file_batches
SET lease_token=#{token}, lease_until=CURRENT_TIMESTAMP + INTERVAL '10 minutes', attempts=attempts+1
WHERE tenant_id=#{tenantId} AND id=#{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND
UPDATE public.dms_approved_file_batches SET lease_token=NULL,lease_until=NULL,
last_error=#{error,jdbcType=VARCHAR},
attempts=CASE WHEN #{error,jdbcType=VARCHAR} IS NULL THEN 0 ELSE attempts END,
next_attempt_at=CASE WHEN #{error,jdbcType=VARCHAR} IS NULL AND status='WAITING' THEN scheduled_at
ELSE CURRENT_TIMESTAMP + (#{delay} * INTERVAL '1 second') END
WHERE tenant_id=#{tenantId} AND id=#{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND lease_token=#{token}