代码优化
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
namespace SimpleAdmin.Application;
|
||||
namespace SimpleAdmin.Application;
|
||||
|
||||
/// <summary>
|
||||
/// 实现入职审核业务能力。
|
||||
/// 实现入职任务审核与退回业务能力。
|
||||
/// </summary>
|
||||
public class OnboardingAuditService : IOnboardingAuditService
|
||||
{
|
||||
@@ -47,8 +47,17 @@ public class OnboardingAuditService : IOnboardingAuditService
|
||||
var employee = employeeInfo.Adapt<ObEmployee>();
|
||||
employee.Id = global::SimpleAdmin.Core.Utils.CommonUtils.GetSingleId();
|
||||
employee.CompanyId = task.CompanyId;
|
||||
employee.DepartmentId = task.DepartmentId;
|
||||
employee.PositionId = task.PositionId;
|
||||
employee.DepartmentName = employeeInfo.OnboardingDepartment;
|
||||
if (task.DepartmentId.HasValue)
|
||||
{
|
||||
var dept = await _db.Queryable<ObDepartment>().InSingleAsync(task.DepartmentId.Value);
|
||||
employee.DepartmentName = dept?.DepartmentName ?? employeeInfo.OnboardingDepartment;
|
||||
}
|
||||
else
|
||||
{
|
||||
employee.DepartmentName = employeeInfo.OnboardingDepartment;
|
||||
}
|
||||
employee.College = employeeInfo.GraduatedSchool;
|
||||
employee.BirthDate = ParseDate(employeeInfo.Birthday);
|
||||
employee.ContactAddress = employeeInfo.CurrentAddress;
|
||||
@@ -68,13 +77,26 @@ public class OnboardingAuditService : IOnboardingAuditService
|
||||
await _db.Ado.BeginTranAsync();
|
||||
try
|
||||
{
|
||||
var updatedRows = await _db.Updateable<ObOnboardingTask>()
|
||||
.SetColumns(item => new ObOnboardingTask
|
||||
{
|
||||
EmployeeId = employee.Id,
|
||||
TaskStatus = OnboardingTaskStatus.Approved,
|
||||
AuditedAt = DateTime.Now
|
||||
})
|
||||
.Where(item => item.Id == task.Id
|
||||
&& item.TaskStatus == OnboardingTaskStatus.Reviewing
|
||||
&& item.EmployeeId == null)
|
||||
.ExecuteCommandAsync();
|
||||
if (updatedRows != 1)
|
||||
throw Oops.Bah("该入职任务已被其他审核人处理,请刷新后查看");
|
||||
|
||||
await _snapshotService.Build(task.Id, employeeInfo);
|
||||
await _db.Insertable(employee).ExecuteCommandAsync();
|
||||
|
||||
task.EmployeeId = employee.Id;
|
||||
task.TaskStatus = OnboardingTaskStatus.Approved;
|
||||
task.AuditedAt = DateTime.Now;
|
||||
await _db.Updateable(task).ExecuteCommandAsync();
|
||||
await WriteAudit(task, OnboardingAuditAction.Approve, input.AuditOpinion);
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
@@ -96,10 +118,34 @@ public class OnboardingAuditService : IOnboardingAuditService
|
||||
}
|
||||
|
||||
var task = await GetAuditableTask(input.TaskId);
|
||||
task.TaskStatus = OnboardingTaskStatus.Rejected;
|
||||
task.RejectReason = input.AuditOpinion;
|
||||
await _db.Updateable(task).ExecuteCommandAsync();
|
||||
await WriteAudit(task, OnboardingAuditAction.Reject, input.AuditOpinion);
|
||||
await _db.Ado.BeginTranAsync();
|
||||
try
|
||||
{
|
||||
var auditedAt = DateTime.Now;
|
||||
var updatedRows = await _db.Updateable<ObOnboardingTask>()
|
||||
.SetColumns(item => new ObOnboardingTask
|
||||
{
|
||||
TaskStatus = OnboardingTaskStatus.Rejected,
|
||||
AuditedAt = auditedAt,
|
||||
RejectReason = input.AuditOpinion
|
||||
})
|
||||
.Where(item => item.Id == task.Id
|
||||
&& item.TaskStatus == OnboardingTaskStatus.Reviewing)
|
||||
.ExecuteCommandAsync();
|
||||
if (updatedRows != 1)
|
||||
throw Oops.Bah("该入职任务已被其他审核人处理,请刷新后查看");
|
||||
|
||||
task.TaskStatus = OnboardingTaskStatus.Rejected;
|
||||
task.AuditedAt = auditedAt;
|
||||
task.RejectReason = input.AuditOpinion;
|
||||
await WriteAudit(task, OnboardingAuditAction.Reject, input.AuditOpinion);
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
catch
|
||||
{
|
||||
await _db.Ado.RollbackTranAsync();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<ObOnboardingTask> GetAuditableTask(long taskId)
|
||||
@@ -113,19 +159,8 @@ public class OnboardingAuditService : IOnboardingAuditService
|
||||
|
||||
var config = await _config.GetByConfigKey(CateGoryConst.CONFIG_BIZ_DEFINE, "onboard.reviewer.userIds")
|
||||
?? throw Oops.Bah("请配置入职审核人");
|
||||
using var configJson = global::System.Text.Json.JsonDocument.Parse(config.ConfigValue);
|
||||
// 审核人由全局配置与公司专属配置合并得出,不依赖独立业务表。
|
||||
var reviewerIds = new List<long>();
|
||||
if (configJson.RootElement.TryGetProperty("all", out var allReviewers))
|
||||
{
|
||||
reviewerIds.AddRange(allReviewers.EnumerateArray().Select(item => item.GetInt64()));
|
||||
}
|
||||
|
||||
if (configJson.RootElement.TryGetProperty("company", out var companyReviewers)
|
||||
&& companyReviewers.TryGetProperty(task.CompanyId.ToString(), out var reviewers))
|
||||
{
|
||||
reviewerIds.AddRange(reviewers.EnumerateArray().Select(item => item.GetInt64()));
|
||||
}
|
||||
var reviewerIds = OnboardingReviewerConfigParser.Parse(config.ConfigValue, task.CompanyId);
|
||||
|
||||
if (!reviewerIds.Contains(UserManager.UserId))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user