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}