This commit is contained in:
fuenmao
2026-09-09 14:57:41 +08:00
parent c015bc356c
commit 95b14b198a
27 changed files with 2069 additions and 52 deletions
@@ -92,12 +92,22 @@ public class OnboardingTemplateService : IOnboardingTemplateService
NormalizeAndValidateInput(input);
await ValidateReferences(input);
var templateId = input.Id ?? global::SimpleAdmin.Core.Utils.CommonUtils.GetSingleId();
var codeExists = await _db.Queryable<ObOnboardingTemplate>()
.AnyAsync(item => item.TemplateCode == input.TemplateCode && item.Id != templateId);
if (codeExists)
var codeOwner = await _db.Queryable<ObOnboardingTemplate>()
.ClearFilter()
.FirstAsync(item => item.TemplateCode == input.TemplateCode
&& (!input.Id.HasValue || item.Id != input.Id.Value));
if (codeOwner != null && !codeOwner.IsDelete)
throw Oops.Bah("入职模板编码已存在");
if (input.Id.HasValue && codeOwner != null && codeOwner.IsDelete)
throw Oops.Bah("该入职模板编码属于一条已删除记录,请通过新增模板重新启用该编码");
// 新增时如果编码命中历史软删除记录,复用原 Id 并恢复,避免唯一索引直接抛 500。
var isRestore = !input.Id.HasValue && codeOwner != null && codeOwner.IsDelete;
var templateId = isRestore
? codeOwner.Id
: input.Id ?? global::SimpleAdmin.Core.Utils.CommonUtils.GetSingleId();
var entity = new ObOnboardingTemplate
{
Id = templateId,
@@ -106,15 +116,17 @@ public class OnboardingTemplateService : IOnboardingTemplateService
CompanyId = input.CompanyId,
DepartmentId = input.DepartmentId,
Description = input.Description,
Status = input.Status
Status = input.Status,
IsDelete = false
};
await _db.Ado.BeginTranAsync();
try
{
if (input.Id.HasValue)
if (input.Id.HasValue || isRestore)
{
var exists = await _db.Queryable<ObOnboardingTemplate>().AnyAsync(item => item.Id == templateId);
var exists = isRestore || await _db.Queryable<ObOnboardingTemplate>()
.AnyAsync(item => item.Id == templateId);
if (!exists)
throw Oops.Bah("入职模板不存在");
await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
@@ -189,7 +201,10 @@ public class OnboardingTemplateService : IOnboardingTemplateService
private static void NormalizeAndValidateInput(OnboardingTemplateSaveInput input)
{
input.TemplateCode = input.TemplateCode?.Trim();
input.TemplateCode = OnboardingCodeValidator.Normalize(
input.TemplateCode,
"入职模板编码",
100);
input.TemplateName = input.TemplateName?.Trim();
input.PositionIds = input.PositionIds?.Distinct().ToList() ?? new List<long>();
input.Contracts ??= new List<OnboardingTemplateContractInput>();
@@ -208,8 +223,8 @@ public class OnboardingTemplateService : IOnboardingTemplateService
.Select(group => group.First())
.ToList() ?? new List<OnboardingTemplateMaterialInput>();
if (string.IsNullOrWhiteSpace(input.TemplateCode) || string.IsNullOrWhiteSpace(input.TemplateName))
throw Oops.Bah("请填写入职模板编码和名称");
if (string.IsNullOrWhiteSpace(input.TemplateName))
throw Oops.Bah("请填写入职模板名称");
if (input.CompanyId <= 0)
throw Oops.Bah("请选择所属公司");
if (input.DepartmentId <= 0)