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_error 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, storage_receipt::text AS storage_receipt, shifou_shoukong, read_access_scope::text AS read_access_scope INSERT 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}