namespace SimpleAdmin.Application; /// /// 实现入职业务岗位业务能力。 /// public class OnboardingPositionService : DbRepository, IOnboardingPositionService { /// /// 分页查询入职业务岗位。 /// public async Task> Page(OnboardingPositionPageInput input) { return await Context.Queryable() .WhereIF(input.CompanyId.HasValue, it => it.CompanyId == input.CompanyId.Value) .WhereIF( !string.IsNullOrWhiteSpace(input.PositionName), it => it.PositionName.Contains(input.PositionName) || it.PositionCode.Contains(input.PositionName)) .WhereIF(!string.IsNullOrWhiteSpace(input.Status), it => it.Status == input.Status) .OrderByIF(!string.IsNullOrWhiteSpace(input.SortField), $"{input.SortField} {input.SortOrder}") .OrderBy(it => it.PositionName) .ToPagedListAsync(input.PageNum, input.PageSize); } /// /// 查询指定公司下全部已启用岗位。 /// public Task> ListEnabled(long companyId) { return Context.Queryable() .Where(it => it.CompanyId == companyId && it.Status == "enable") .OrderBy(it => it.PositionName) .ToListAsync(); } /// /// 查询岗位详情。 /// public async Task Detail(BaseIdInput input) { return await GetByIdAsync(input.Id) ?? throw Oops.Bah("岗位不存在"); } /// /// 新增入职业务岗位。 /// public async Task Add(OnboardingPositionAddInput input) { await EnsureCompanyExists(input.CompanyId); await EnsureCodeUnique(input.CompanyId, input.PositionCode, 0); await InsertAsync(input.Adapt()); } /// /// 编辑入职业务岗位。 /// public async Task Edit(OnboardingPositionEditInput input) { await Detail(new BaseIdInput { Id = input.Id }); await EnsureCompanyExists(input.CompanyId); await EnsureCodeUnique(input.CompanyId, input.PositionCode, input.Id); await UpdateAsync(input.Adapt()); } /// /// 删除未被任务或正式员工引用的岗位。 /// public async Task Delete(BaseIdListInput input) { if (input.Ids.Count == 0) return; var hasTasks = await Context.Queryable() .AnyAsync(it => input.Ids.Contains(it.PositionId)); if (hasTasks) throw Oops.Bah("岗位已有入职任务,不能删除"); var hasEmployees = await Context.Queryable() .AnyAsync(it => input.Ids.Contains(it.PositionId)); if (hasEmployees) throw Oops.Bah("岗位已有正式员工,不能删除"); await DeleteByIdsAsync(input.Ids.Cast().ToArray()); } private async Task EnsureCompanyExists(long companyId) { var exists = await Context.Queryable().AnyAsync(it => it.Id == companyId); if (!exists) throw Oops.Bah("所属公司不存在或已删除"); } private async Task EnsureCodeUnique(long companyId, string code, long id) { var exists = await Context.Queryable() .AnyAsync(it => it.CompanyId == companyId && it.PositionCode == code && it.Id != id); if (exists) throw Oops.Bah("该公司下岗位编码已存在"); } }