109 lines
4.0 KiB
C#
109 lines
4.0 KiB
C#
namespace SimpleAdmin.Application;
|
|
|
|
/// <summary>
|
|
/// 实现入职业务公司业务能力。
|
|
/// </summary>
|
|
public class OnboardingCompanyService : DbRepository<ObCompany>, IOnboardingCompanyService
|
|
{
|
|
/// <summary>
|
|
/// 分页查询入职业务公司。
|
|
/// </summary>
|
|
public async Task<SqlSugarPagedList<ObCompany>> Page(OnboardingCompanyPageInput input)
|
|
{
|
|
return await Context.Queryable<ObCompany>()
|
|
.WhereIF(!string.IsNullOrWhiteSpace(input.CompanyCode), it => it.CompanyCode.Contains(input.CompanyCode))
|
|
.WhereIF(!string.IsNullOrWhiteSpace(input.CompanyName), it => it.CompanyName.Contains(input.CompanyName))
|
|
.WhereIF(!string.IsNullOrWhiteSpace(input.Status), it => it.Status == input.Status)
|
|
.OrderByIF(!string.IsNullOrWhiteSpace(input.SortField), $"{input.SortField} {input.SortOrder}")
|
|
.OrderBy(it => it.CreateTime)
|
|
.ToPagedListAsync(input.PageNum, input.PageSize);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询全部已启用的入职业务公司。
|
|
/// </summary>
|
|
public Task<List<ObCompany>> ListEnabled()
|
|
{
|
|
return Context.Queryable<ObCompany>()
|
|
.Where(it => it.Status == "enable")
|
|
.OrderBy(it => it.CompanyName)
|
|
.ToListAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询公司详情。
|
|
/// </summary>
|
|
public async Task<ObCompany> Detail(BaseIdInput input)
|
|
{
|
|
return await GetByIdAsync(input.Id) ?? throw Oops.Bah("公司不存在");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 新增入职业务公司。
|
|
/// </summary>
|
|
public async Task Add(OnboardingCompanyAddInput input)
|
|
{
|
|
await EnsureCodeUnique(input.CompanyCode, 0);
|
|
await InsertAsync(input.Adapt<ObCompany>());
|
|
}
|
|
|
|
/// <summary>
|
|
/// 编辑入职业务公司。
|
|
/// </summary>
|
|
public async Task Edit(OnboardingCompanyEditInput input)
|
|
{
|
|
await Detail(new BaseIdInput { Id = input.Id });
|
|
await EnsureCodeUnique(input.CompanyCode, input.Id);
|
|
await UpdateAsync(input.Adapt<ObCompany>());
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除未被岗位、任务或员工引用的公司。
|
|
/// </summary>
|
|
public async Task Delete(BaseIdListInput input)
|
|
{
|
|
if (input.Ids.Count == 0)
|
|
return;
|
|
|
|
var hasPositions = await Context.Queryable<ObPosition>()
|
|
.AnyAsync(it => input.Ids.Contains(it.CompanyId));
|
|
if (hasPositions)
|
|
throw Oops.Bah("公司下仍有岗位,不能删除");
|
|
|
|
var hasDepartments = await Context.Queryable<ObDepartment>()
|
|
.AnyAsync(item => input.Ids.Contains(item.CompanyId));
|
|
if (hasDepartments)
|
|
throw Oops.Bah("公司下仍有部门,不能删除");
|
|
|
|
var hasOnboardingTemplates = await Context.Queryable<ObOnboardingTemplate>()
|
|
.AnyAsync(item => input.Ids.Contains(item.CompanyId));
|
|
if (hasOnboardingTemplates)
|
|
throw Oops.Bah("公司已被入职模板引用,不能删除");
|
|
|
|
var hasContractTemplates = await Context.Queryable<ObContractTemplate>()
|
|
.AnyAsync(item => item.CompanyId.HasValue && input.Ids.Contains(item.CompanyId.Value));
|
|
if (hasContractTemplates)
|
|
throw Oops.Bah("公司已被合同模板引用,不能删除");
|
|
|
|
var hasTasks = await Context.Queryable<ObOnboardingTask>()
|
|
.AnyAsync(it => input.Ids.Contains(it.CompanyId));
|
|
if (hasTasks)
|
|
throw Oops.Bah("公司已有入职任务,不能删除");
|
|
|
|
var hasEmployees = await Context.Queryable<ObEmployee>()
|
|
.AnyAsync(it => input.Ids.Contains(it.CompanyId));
|
|
if (hasEmployees)
|
|
throw Oops.Bah("公司已有正式员工,不能删除");
|
|
|
|
await DeleteByIdsAsync(input.Ids.Cast<object>().ToArray());
|
|
}
|
|
|
|
private async Task EnsureCodeUnique(string code, long id)
|
|
{
|
|
var exists = await Context.Queryable<ObCompany>()
|
|
.AnyAsync(it => it.CompanyCode == code && it.Id != id);
|
|
if (exists)
|
|
throw Oops.Bah("公司编码已存在");
|
|
}
|
|
}
|