代码优化
This commit is contained in:
+86
-10
@@ -20,6 +20,7 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
.WhereIF(!string.IsNullOrWhiteSpace(input.Keyword),
|
||||
item => item.TemplateCode.Contains(input.Keyword) || item.TemplateName.Contains(input.Keyword))
|
||||
.WhereIF(input.CompanyId.HasValue, item => item.CompanyId == input.CompanyId.Value)
|
||||
.WhereIF(input.DepartmentId.HasValue, item => item.DepartmentId == input.DepartmentId.Value)
|
||||
.WhereIF(!string.IsNullOrWhiteSpace(input.Status), item => item.Status == input.Status);
|
||||
|
||||
if (input.PositionId.HasValue)
|
||||
@@ -62,6 +63,8 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
TemplateName = summary.TemplateName,
|
||||
CompanyId = summary.CompanyId,
|
||||
CompanyName = summary.CompanyName,
|
||||
DepartmentId = summary.DepartmentId,
|
||||
DepartmentName = summary.DepartmentName,
|
||||
Description = summary.Description,
|
||||
Status = summary.Status,
|
||||
CreateTime = summary.CreateTime,
|
||||
@@ -101,6 +104,7 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
TemplateCode = input.TemplateCode.Trim(),
|
||||
TemplateName = input.TemplateName.Trim(),
|
||||
CompanyId = input.CompanyId,
|
||||
DepartmentId = input.DepartmentId,
|
||||
Description = input.Description,
|
||||
Status = input.Status
|
||||
};
|
||||
@@ -149,9 +153,6 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
foreach (var id in input.Ids)
|
||||
await DeleteRelations(id);
|
||||
|
||||
await _db.Deleteable<ObOnboardingTemplate>()
|
||||
.Where(it => input.Ids.Contains(it.Id))
|
||||
.ExecuteCommandAsync();
|
||||
await _db.Updateable<ObOnboardingTemplate>()
|
||||
.SetColumns(it => it.IsDelete == true)
|
||||
.Where(it => input.Ids.Contains(it.Id))
|
||||
@@ -167,7 +168,10 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<List<OnboardingTemplateOutput>> ListEnabled(long companyId, long positionId)
|
||||
public async Task<List<OnboardingTemplateOutput>> ListEnabled(
|
||||
long companyId,
|
||||
long departmentId,
|
||||
long positionId)
|
||||
{
|
||||
var templateIds = await _db.Queryable<ObOnboardingTemplatePosition>()
|
||||
.Where(item => item.PositionId == positionId)
|
||||
@@ -175,6 +179,7 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
.ToListAsync();
|
||||
var templates = await _db.Queryable<ObOnboardingTemplate>()
|
||||
.Where(item => item.CompanyId == companyId
|
||||
&& item.DepartmentId == departmentId
|
||||
&& item.Status == "enable"
|
||||
&& templateIds.Contains(item.Id))
|
||||
.OrderBy(item => item.TemplateName)
|
||||
@@ -187,10 +192,13 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
input.TemplateCode = input.TemplateCode?.Trim();
|
||||
input.TemplateName = input.TemplateName?.Trim();
|
||||
input.PositionIds = input.PositionIds?.Distinct().ToList() ?? new List<long>();
|
||||
input.Contracts = input.Contracts?
|
||||
.GroupBy(item => item.ContractTemplateVersionId)
|
||||
.Select(group => group.First())
|
||||
.ToList() ?? new List<OnboardingTemplateContractInput>();
|
||||
input.Contracts ??= new List<OnboardingTemplateContractInput>();
|
||||
var duplicateContract = input.Contracts
|
||||
.GroupBy(item => item.ContractTemplateId)
|
||||
.FirstOrDefault(group => group.Count() > 1);
|
||||
if (duplicateContract != null)
|
||||
throw Oops.Bah("同一份合同模板在入职模板中只能选择一个版本");
|
||||
|
||||
input.FormFields = input.FormFields?
|
||||
.GroupBy(item => item.FieldId)
|
||||
.Select(group => group.First())
|
||||
@@ -204,10 +212,19 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
throw Oops.Bah("请填写入职模板编码和名称");
|
||||
if (input.CompanyId <= 0)
|
||||
throw Oops.Bah("请选择所属公司");
|
||||
if (input.DepartmentId <= 0)
|
||||
throw Oops.Bah("请选择所属部门");
|
||||
if (input.PositionIds.Count == 0)
|
||||
throw Oops.Bah("请至少选择一个适用岗位");
|
||||
if (input.PositionIds.Any(positionId => positionId <= 0))
|
||||
throw Oops.Bah("适用岗位数据不正确");
|
||||
if (input.Contracts.Count == 0)
|
||||
throw Oops.Bah("请至少选择一份合同文件");
|
||||
if (input.Contracts.Any(item => item.ContractTemplateId <= 0
|
||||
|| item.ContractTemplateVersionId <= 0))
|
||||
{
|
||||
throw Oops.Bah("合同模板或版本数据不正确");
|
||||
}
|
||||
if (input.Status != "enable" && input.Status != "disable")
|
||||
throw Oops.Bah("入职模板状态不正确");
|
||||
if (input.Contracts.Any(item => item.PrintCopies <= 0))
|
||||
@@ -221,12 +238,20 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
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 positionCount = await _db.Queryable<ObPosition>()
|
||||
.CountAsync(item => input.PositionIds.Contains(item.Id)
|
||||
&& item.CompanyId == input.CompanyId
|
||||
&& item.DepartmentId == input.DepartmentId
|
||||
&& item.Status == "enable");
|
||||
if (positionCount != input.PositionIds.Count)
|
||||
throw Oops.Bah("存在不属于该公司或未启用的岗位");
|
||||
throw Oops.Bah("存在未启用或不属于该公司、部门的岗位");
|
||||
|
||||
var versionIds = input.Contracts.Select(item => item.ContractTemplateVersionId).ToList();
|
||||
var versions = await _db.Queryable<ObContractTemplateVersion>()
|
||||
@@ -239,8 +264,43 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
throw Oops.Bah("合同模板与版本不匹配");
|
||||
}
|
||||
|
||||
var contractTemplateIds = input.Contracts
|
||||
.Select(item => item.ContractTemplateId)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
var contractTemplates = await _db.Queryable<ObContractTemplate>()
|
||||
.Where(item => contractTemplateIds.Contains(item.Id))
|
||||
.ToListAsync();
|
||||
if (contractTemplates.Count != contractTemplateIds.Count
|
||||
|| contractTemplates.Any(item => item.CompanyId != input.CompanyId
|
||||
|| item.DepartmentId != input.DepartmentId))
|
||||
{
|
||||
throw Oops.Bah("存在不属于当前公司、部门的合同模板");
|
||||
}
|
||||
|
||||
var contractPositionRelations = await _db.Queryable<ObContractTemplatePosition>()
|
||||
.Where(item => contractTemplateIds.Contains(item.ContractTemplateId))
|
||||
.ToListAsync();
|
||||
var unsupportedContract = contractTemplateIds.FirstOrDefault(contractTemplateId =>
|
||||
{
|
||||
var supportedPositionIds = contractPositionRelations
|
||||
.Where(item => item.ContractTemplateId == contractTemplateId)
|
||||
.Select(item => item.PositionId)
|
||||
.ToHashSet();
|
||||
return input.PositionIds.Any(positionId => !supportedPositionIds.Contains(positionId));
|
||||
});
|
||||
if (unsupportedContract > 0)
|
||||
{
|
||||
var contractName = contractTemplates
|
||||
.First(item => item.Id == unsupportedContract)
|
||||
.TemplateName;
|
||||
throw Oops.Bah($"合同模板“{contractName}”不能覆盖当前选择的全部岗位");
|
||||
}
|
||||
|
||||
if (input.Status == "enable")
|
||||
{
|
||||
if (contractTemplates.Any(item => item.Status != "enable"))
|
||||
throw Oops.Bah("启用入职模板前,请先启用全部合同模板");
|
||||
if (versions.Any(item => item.VersionStatus != ContractTemplateVersionStatus.Enabled))
|
||||
throw Oops.Bah("启用入职模板前,请先启用全部合同版本");
|
||||
}
|
||||
@@ -302,6 +362,9 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
await _db.Deleteable<ObOnboardingTemplateMaterial>()
|
||||
.Where(item => item.OnboardingTemplateId == templateId)
|
||||
.ExecuteCommandAsync();
|
||||
await _db.Deleteable<ObOnboardingTemplateFormField>()
|
||||
.Where(item => item.OnboardingTemplateId == templateId)
|
||||
.ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
private async Task<List<OnboardingTemplateOutput>> BuildOutputs(List<ObOnboardingTemplate> templates)
|
||||
@@ -311,9 +374,19 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
|
||||
var templateIds = templates.Select(item => item.Id).ToList();
|
||||
var companyIds = templates.Select(item => item.CompanyId).Distinct().ToList();
|
||||
var departmentIds = templates
|
||||
.Where(item => item.DepartmentId.HasValue)
|
||||
.Select(item => item.DepartmentId.Value)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
var companies = await _db.Queryable<ObCompany>()
|
||||
.Where(item => companyIds.Contains(item.Id))
|
||||
.ToListAsync();
|
||||
var departments = departmentIds.Count == 0
|
||||
? new List<ObDepartment>()
|
||||
: await _db.Queryable<ObDepartment>()
|
||||
.Where(item => departmentIds.Contains(item.Id))
|
||||
.ToListAsync();
|
||||
var relations = await _db.Queryable<ObOnboardingTemplatePosition>()
|
||||
.Where(item => templateIds.Contains(item.OnboardingTemplateId))
|
||||
.ToListAsync();
|
||||
@@ -338,6 +411,9 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
TemplateName = template.TemplateName,
|
||||
CompanyId = template.CompanyId,
|
||||
CompanyName = companies.FirstOrDefault(item => item.Id == template.CompanyId)?.CompanyName,
|
||||
DepartmentId = template.DepartmentId,
|
||||
DepartmentName = departments
|
||||
.FirstOrDefault(item => item.Id == template.DepartmentId)?.DepartmentName,
|
||||
Description = template.Description,
|
||||
Status = template.Status,
|
||||
CreateTime = template.CreateTime,
|
||||
@@ -353,4 +429,4 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
};
|
||||
}).ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user