代码优化

This commit is contained in:
fuenmao
2026-08-27 11:09:20 +08:00
parent 658869b3a7
commit ae8167a566
46 changed files with 2051 additions and 204 deletions
@@ -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))
{