select task_id, task_no, ar_bill_id, selection_mode, request_payload, snapshot_create_time, last_source_bill_id, total_count, processed_count, success_count, total_amount, status, error_message, request_token, create_by, create_user_id, create_time, started_at, heartbeat_time, finished_at from ar_bill_generate_task insert into ar_bill_generate_task (task_no, ar_bill_id, selection_mode, request_payload, snapshot_create_time, last_source_bill_id, total_count, processed_count, success_count, total_amount, status, error_message, request_token, create_by, create_user_id, create_time, started_at, heartbeat_time, finished_at) values (#{taskNo}, #{arBillId}, #{selectionMode}, #{requestPayload}, #{snapshotCreateTime}, #{lastSourceBillId}, #{totalCount}, #{processedCount}, #{successCount}, #{totalAmount}, #{status}, #{errorMessage}, #{requestToken}, #{createBy}, #{createUserId}, sysdate(), #{startedAt}, #{heartbeatTime}, #{finishedAt}) update ar_bill_generate_task set status = 'RUNNING', started_at = coalesce(started_at, #{startedAt}), heartbeat_time = #{startedAt} where task_id = #{taskId} and status = 'WAITING' update ar_bill_generate_task set total_count = #{totalCount}, heartbeat_time = sysdate() where task_id = #{taskId} and status = 'RUNNING' update ar_bill_generate_task set last_source_bill_id = #{lastSourceBillId}, processed_count = #{processedCount}, success_count = #{successCount}, total_amount = #{totalAmount}, heartbeat_time = #{heartbeatTime} where task_id = #{taskId} and status = 'RUNNING' update ar_bill_generate_task set status = 'SUCCESS', finished_at = #{finishedAt}, heartbeat_time = #{finishedAt} where task_id = #{taskId} and status = 'RUNNING' update ar_bill_generate_task set status = 'FAILED', error_message = #{errorMessage}, finished_at = #{finishedAt}, heartbeat_time = #{finishedAt} where task_id = #{taskId} and status in ('WAITING', 'RUNNING', 'CANCEL_REQUESTED') update ar_bill_generate_task set status = 'CANCEL_REQUESTED', heartbeat_time = sysdate() where task_id = #{taskId} and status in ('WAITING', 'RUNNING') update ar_bill_generate_task set status = 'CANCELED', error_message = '用户取消账单生成', finished_at = #{finishedAt}, heartbeat_time = #{finishedAt} where task_id = #{taskId} and status in ('WAITING', 'RUNNING', 'CANCEL_REQUESTED') update ar_bill_generate_task set status = 'WAITING', error_message = '任务执行节点已重启,已自动恢复等待处理', heartbeat_time = null where status = 'RUNNING' and heartbeat_time < #{expiredBefore}