调整
This commit is contained in:
+6
-1
@@ -45,13 +45,18 @@ public interface IOnboardingContractTemplateService : ITransient
|
||||
/// </summary>
|
||||
Task SetVersionStatus(OnboardingContractVersionStatusInput input);
|
||||
|
||||
/// <summary>
|
||||
/// 删除未被入职模板或任务使用的合同版本。
|
||||
/// </summary>
|
||||
Task DeleteVersion(BaseIdInput input);
|
||||
|
||||
/// <summary>
|
||||
/// 分页查询指定模板版本自动识别出的变量。
|
||||
/// </summary>
|
||||
Task<SqlSugarPagedList<ObTemplateVariable>> VariablePage(OnboardingTemplateVariablePageInput input);
|
||||
|
||||
/// <summary>
|
||||
/// 编辑并确认草稿模板版本中的变量定义。
|
||||
/// 编辑并确认模板版本中的变量定义。
|
||||
/// </summary>
|
||||
Task EditVariable(OnboardingTemplateVariableEditInput input);
|
||||
}
|
||||
+79
-24
@@ -11,6 +11,7 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
{
|
||||
_fileService = fileService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 分页查询合同模板主档案。
|
||||
/// </summary>
|
||||
@@ -55,34 +56,92 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除未被版本、适用范围或任务合同引用的模板。
|
||||
/// 删除未被入职模板或任务合同引用的模板(级联删除未使用的版本和变量)。
|
||||
/// </summary>
|
||||
public async Task Delete(BaseIdListInput input)
|
||||
{
|
||||
if (input.Ids.Count == 0)
|
||||
return;
|
||||
|
||||
var hasVersions = await Context.Queryable<ObContractTemplateVersion>()
|
||||
.AnyAsync(it => input.Ids.Contains(it.TemplateId));
|
||||
if (hasVersions)
|
||||
throw Oops.Bah("模板已有版本,不能删除");
|
||||
|
||||
var hasScopes = await Context.Queryable<ObContractScope>()
|
||||
.AnyAsync(it => input.Ids.Contains(it.TemplateId));
|
||||
if (hasScopes)
|
||||
throw Oops.Bah("模板已配置旧版适用范围,不能删除");
|
||||
|
||||
var hasOnboardingTemplates = await Context.Queryable<ObOnboardingTemplateContract>()
|
||||
.AnyAsync(it => input.Ids.Contains(it.ContractTemplateId));
|
||||
if (hasOnboardingTemplates)
|
||||
throw Oops.Bah("模板已被入职模板引用,不能删除");
|
||||
throw Oops.Bah("模板已被入职模板引用,不能删除,请先在入职模板中移除关联");
|
||||
|
||||
var hasContracts = await Context.Queryable<ObTaskContract>()
|
||||
.AnyAsync(it => input.Ids.Contains(it.TemplateId));
|
||||
if (hasContracts)
|
||||
throw Oops.Bah("模板已生成入职合同,不能删除");
|
||||
throw Oops.Bah("模板已生成入职任务合同,不能删除,可改为停用");
|
||||
|
||||
await DeleteByIdsAsync(input.Ids.Cast<object>().ToArray());
|
||||
var versionIds = await Context.Queryable<ObContractTemplateVersion>()
|
||||
.Where(it => input.Ids.Contains(it.TemplateId))
|
||||
.Select(it => it.Id)
|
||||
.ToListAsync();
|
||||
|
||||
await Context.Ado.BeginTranAsync();
|
||||
try
|
||||
{
|
||||
if (versionIds.Count > 0)
|
||||
{
|
||||
await Context.Deleteable<ObTemplateVariable>()
|
||||
.Where(it => versionIds.Contains(it.TemplateVersionId))
|
||||
.ExecuteCommandAsync();
|
||||
await Context.Deleteable<ObContractTemplateVersion>()
|
||||
.In(versionIds)
|
||||
.ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
await Context.Deleteable<ObContractScope>()
|
||||
.Where(it => input.Ids.Contains(it.TemplateId))
|
||||
.ExecuteCommandAsync();
|
||||
|
||||
await DeleteByIdsAsync(input.Ids.Cast<object>().ToArray());
|
||||
await Context.Ado.CommitTranAsync();
|
||||
}
|
||||
catch
|
||||
{
|
||||
await Context.Ado.RollbackTranAsync();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除未被入职模板或任务使用的合同版本。
|
||||
/// </summary>
|
||||
public async Task DeleteVersion(BaseIdInput input)
|
||||
{
|
||||
var version = await Context.Queryable<ObContractTemplateVersion>().InSingleAsync(input.Id)
|
||||
?? throw Oops.Bah("合同版本不存在");
|
||||
|
||||
var isUsedInOnboardingTemplate = await Context.Queryable<ObOnboardingTemplateContract>()
|
||||
.AnyAsync(it => it.ContractTemplateVersionId == version.Id);
|
||||
if (isUsedInOnboardingTemplate)
|
||||
throw Oops.Bah("该版本已被入职模板引用,不能删除,请先在入职模板中移除关联");
|
||||
|
||||
var isUsedInTask = await Context.Queryable<ObTaskContract>()
|
||||
.AnyAsync(it => it.TemplateVersionId == version.Id);
|
||||
if (isUsedInTask)
|
||||
throw Oops.Bah("该版本已用于实际入职任务,不能删除,可改为停用");
|
||||
|
||||
await Context.Ado.BeginTranAsync();
|
||||
try
|
||||
{
|
||||
await Context.Deleteable<ObTemplateVariable>()
|
||||
.Where(it => it.TemplateVersionId == version.Id)
|
||||
.ExecuteCommandAsync();
|
||||
await Context.Deleteable<ObContractScope>()
|
||||
.Where(it => it.TemplateVersionId == version.Id)
|
||||
.ExecuteCommandAsync();
|
||||
await Context.Deleteable<ObContractTemplateVersion>()
|
||||
.In(version.Id)
|
||||
.ExecuteCommandAsync();
|
||||
await Context.Ado.CommitTranAsync();
|
||||
}
|
||||
catch
|
||||
{
|
||||
await Context.Ado.RollbackTranAsync();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -183,7 +242,7 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
.ToPagedListAsync(input.PageNum, input.PageSize);
|
||||
}
|
||||
/// <summary>
|
||||
/// 编辑草稿模板版本中自动识别出的变量,不允许修改 DOCX 占位符编码。
|
||||
/// 编辑模板版本中自动识别出的变量,不允许修改 DOCX 占位符编码。
|
||||
/// </summary>
|
||||
public async Task EditVariable(OnboardingTemplateVariableEditInput input)
|
||||
{
|
||||
@@ -194,7 +253,11 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
if (!string.Equals(variable.VariableCode, input.VariableCode, StringComparison.Ordinal))
|
||||
throw Oops.Bah("DOCX 占位符编码由系统识别,不能修改");
|
||||
|
||||
await EnsureVersionDraft(input.TemplateVersionId);
|
||||
var isUsedInTask = await Context.Queryable<ObTaskContract>()
|
||||
.AnyAsync(it => it.TemplateVersionId == input.TemplateVersionId);
|
||||
if (isUsedInTask)
|
||||
throw Oops.Bah("该版本已生成实际入职任务合同,变量配置已锁定");
|
||||
|
||||
var entity = input.Adapt<ObTemplateVariable>();
|
||||
entity.VariableCode = variable.VariableCode;
|
||||
await Context.Updateable(entity).ExecuteCommandAsync();
|
||||
@@ -255,12 +318,4 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
if (exists)
|
||||
throw Oops.Bah("模板编码已存在");
|
||||
}
|
||||
|
||||
private async Task EnsureVersionDraft(long versionId)
|
||||
{
|
||||
var version = await Context.Queryable<ObContractTemplateVersion>().InSingleAsync(versionId)
|
||||
?? throw Oops.Bah("模板版本不存在");
|
||||
if (version.VersionStatus != ContractTemplateVersionStatus.Draft)
|
||||
throw Oops.Bah("只有草稿版本可维护变量");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user