代码优化

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,4 +1,4 @@
namespace SimpleAdmin.Application;
namespace SimpleAdmin.Application;
/// <summary>
/// 创建新员工入职任务参数。
@@ -11,11 +11,18 @@ public class OnboardingTaskCreateInput
[IdNotNull(ErrorMessage = "公司Id不能为空")]
public long CompanyId { get; set; }
/// <summary>
/// 入职业务部门 Id。
/// </summary>
[IdNotNull(ErrorMessage = "部门Id不能为空")]
public long DepartmentId { get; set; }
/// <summary>
/// 入职任务所属岗位 Id。
/// </summary>
[IdNotNull(ErrorMessage = "岗位Id不能为空")]
public long PositionId { get; set; }
/// <summary>
/// 本次任务使用的入职模板 Id。
/// </summary>
@@ -89,4 +96,4 @@ public class OnboardingTaskCreatedOutput
/// 员工填写链接过期时间。
/// </summary>
public DateTime ExpiresAt { get; set; }
}
}
@@ -28,18 +28,25 @@ public class OnboardingTaskService : IOnboardingTaskService
if (!companyEnabled)
throw Oops.Bah("公司不存在或未启用");
var departmentEnabled = await _db.Queryable<ObDepartment>()
.AnyAsync(item => item.Id == input.DepartmentId && item.CompanyId == input.CompanyId && item.Status == "enable");
if (!departmentEnabled)
throw Oops.Bah("部门不存在、未启用或不属于该公司");
var positionEnabled = await _db.Queryable<ObPosition>()
.AnyAsync(item => item.Id == input.PositionId
&& item.CompanyId == input.CompanyId
&& item.DepartmentId == input.DepartmentId
&& item.Status == "enable");
if (!positionEnabled)
throw Oops.Bah("岗位不存在、未启用或不属于该公司");
throw Oops.Bah("岗位不存在、未启用或不属于该部门/公司");
var onboardingTemplate = await _db.Queryable<ObOnboardingTemplate>()
.FirstAsync(item => item.Id == input.OnboardingTemplateId
&& item.CompanyId == input.CompanyId
&& item.DepartmentId == input.DepartmentId
&& item.Status == "enable")
?? throw Oops.Bah("入职模板不存在、未启用或不属于该公司");
?? throw Oops.Bah("入职模板不存在、未启用或不属于该公司、部门");
var templateSupportsPosition = await _db.Queryable<ObOnboardingTemplatePosition>()
.AnyAsync(item => item.OnboardingTemplateId == onboardingTemplate.Id
&& item.PositionId == input.PositionId);
@@ -62,6 +69,20 @@ public class OnboardingTaskService : IOnboardingTaskService
var contractTemplates = await _db.Queryable<ObContractTemplate>()
.Where(item => templateIds.Contains(item.Id))
.ToListAsync();
if (contractTemplates.Count != templateIds.Count
|| contractTemplates.Any(item => item.CompanyId != input.CompanyId
|| item.DepartmentId != input.DepartmentId
|| item.Status != "enable"))
{
throw Oops.Bah("入职模板包含未启用或不属于当前公司、部门的合同模板");
}
var contractPositionCount = await _db.Queryable<ObContractTemplatePosition>()
.CountAsync(item => templateIds.Contains(item.ContractTemplateId)
&& item.PositionId == input.PositionId);
if (contractPositionCount != templateIds.Count)
throw Oops.Bah("入职模板包含不适用于当前岗位的合同模板");
var versionIds = contractConfigs.Select(item => item.ContractTemplateVersionId).Distinct().ToList();
var enabledVersionCount = await _db.Queryable<ObContractTemplateVersion>()
.CountAsync(item => versionIds.Contains(item.Id)
@@ -94,6 +115,7 @@ public class OnboardingTaskService : IOnboardingTaskService
Id = taskId,
TaskNo = $"OB{DateTime.Now:yyyyMMddHHmmss}{taskId.ToString()[^4..]}",
CompanyId = input.CompanyId,
DepartmentId = input.DepartmentId,
PositionId = input.PositionId,
OnboardingTemplateId = onboardingTemplate.Id,
AssignedReviewerUserId = input.AssignedReviewerUserId,
@@ -236,6 +258,12 @@ public class OnboardingTaskService : IOnboardingTaskService
if (inputs.Count == 0)
return;
var duplicateContractVersion = contracts
.GroupBy(item => item.TemplateVersionId)
.FirstOrDefault(group => group.Count() > 1);
if (duplicateContractVersion != null)
throw Oops.Bah("入职模板中存在重复的合同版本,请重新保存入职模板后再创建任务");
var contractByVersion = contracts.ToDictionary(item => item.TemplateVersionId);
var contractIds = contracts.Select(item => item.Id).ToList();
var rows = await _db.Queryable<ObTaskContractVariable>()