111
This commit is contained in:
+25
-10
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user