This commit is contained in:
fuenmao
2026-08-25 13:54:16 +08:00
parent 085bf5e2ab
commit 38801533e9
10 changed files with 196 additions and 30 deletions
@@ -14,4 +14,9 @@ public interface IOnboardingTaskLifecycleService : ITransient
/// 撤销尚未归档的入职任务并使员工链接失效。
/// </summary>
Task Revoke(OnboardingAuditActionInput input);
/// <summary>
/// 删除已撤销的入职任务及其全部关联快照数据。
/// </summary>
Task Delete(BaseIdInput input);
}
@@ -55,6 +55,50 @@ public class OnboardingTaskLifecycleService : IOnboardingTaskLifecycleService
await Log(task, OnboardingAuditAction.Revoke, input.AuditOpinion);
}
/// <summary>
/// 删除已撤销的入职任务及其全部关联快照数据。
/// </summary>
public async Task Delete(BaseIdInput input)
{
var task = await Authorize(input.Id);
if (task.TaskStatus != OnboardingTaskStatus.Revoked)
{
throw Oops.Bah("仅已撤销的任务可以删除");
}
await _db.Ado.BeginTranAsync();
try
{
var taskContractIds = await _db.Queryable<ObTaskContract>()
.Where(x => x.TaskId == task.Id)
.Select(x => x.Id)
.ToListAsync();
if (taskContractIds.Count > 0)
{
await _db.Deleteable<ObTaskContractVariable>()
.Where(x => taskContractIds.Contains(x.TaskContractId))
.ExecuteCommandAsync();
}
await _db.Deleteable<ObTaskContract>().Where(x => x.TaskId == task.Id).ExecuteCommandAsync();
await _db.Deleteable<ObTaskLink>().Where(x => x.TaskId == task.Id).ExecuteCommandAsync();
await _db.Deleteable<ObTaskFormRequirement>().Where(x => x.TaskId == task.Id).ExecuteCommandAsync();
await _db.Deleteable<ObTaskMaterialRequirement>().Where(x => x.TaskId == task.Id).ExecuteCommandAsync();
await _db.Deleteable<ObTaskMaterial>().Where(x => x.TaskId == task.Id).ExecuteCommandAsync();
await _db.Deleteable<ObTaskFormValue>().Where(x => x.TaskId == task.Id).ExecuteCommandAsync();
await _db.Deleteable<ObTaskEmployeeInfo>().Where(x => x.TaskId == task.Id).ExecuteCommandAsync();
await _db.Deleteable<ObTaskAudit>().Where(x => x.TaskId == task.Id).ExecuteCommandAsync();
await _db.Deleteable<ObOnboardingTask>().In(task.Id).ExecuteCommandAsync();
await _db.Ado.CommitTranAsync();
}
catch
{
await _db.Ado.RollbackTranAsync();
throw;
}
}
private async Task<ObOnboardingTask> Authorize(long taskId)
{
var task = await _db.Queryable<ObOnboardingTask>().InSingleAsync(taskId)