using FlexJobApi.Core; using Furion.DatabaseAccessor; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.UserServer.Application { /// /// 灵工查询处理器 /// public class EnterpriseEmployeeQueryHandler( IRepository rep ) : IRequestHandler, IRequestHandler, IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; /// /// 查询灵工分页列表数据 /// /// /// /// public async Task Handle(GetEnterpriseEmployeesQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var q = rep.AsQueryable().AsNoTracking() .OrderBy(it => it.CreatedTime) .Where(it => it.EnterpriseId == logier.EnterpriseId); if (request.Keywords.IsNotNull()) { q = q.Where(it => it.Name.Contains(request.Keywords) || it.ContactPhoneNumber.Contains(request.Keywords) || it.Identity.Contains(request.Keywords)); } if (request.CreatedTimeStart.HasValue && request.CreatedTimeEnd.HasValue) { q = q.Where(it => it.CreatedTime >= request.CreatedTimeStart.Value && it.CreatedTime <= request.CreatedTimeEnd.Value); } if (request.SignContractTimeStart.HasValue && request.SignContractTimeEnd.HasValue) { q = q.Where(it => it.UserSignContractTime >= request.SignContractTimeStart.Value && it.UserSignContractTime <= request.SignContractTimeEnd.Value || it.EnterpriseSignContractTime >= request.SignContractTimeStart.Value && it.EnterpriseSignContractTime <= request.SignContractTimeEnd.Value); } if (request.HireStatus.HasValue) { q = q.Where(it => it.TaskInfoUsers.Any(tu => tu.HireStatus == request.HireStatus)); } if (request.IsReal.HasValue) { q = q.Where(it => (it.UserId.HasValue && it.User.IsReal) == request.IsReal.Value); } if (request.UserSignContractStatus.HasValue && logier.ClientType == EnumClientType.Wxmp) { if (logier.ClientType == EnumClientType.Wxmp) { switch (request.UserSignContractStatus.Value) { case EnumTaskUserSignContractStatus.Wait: q = q.Where(it => it.UserSignContractStatus == null || it.UserSignContractStatus == request.UserSignContractStatus); break; case EnumTaskUserSignContractStatus.Pass: q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass); break; case EnumTaskUserSignContractStatus.Stop: q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); break; default: q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); break; } } else { q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); } } if (request.EnterpriseSignContractStatus.HasValue) { q = q.Where(it => it.EnterpriseSignContractStatus == request.EnterpriseSignContractStatus); } var s = q.Select(it => new GetEnterpriseEmployeesQueryResultItem { Id = it.Id, Avatar = it.User.Avatar, Name = it.Name, Identity = it.Identity, Gender = it.Gender, Age = it.Age, ContactPhoneNumber = it.ContactPhoneNumber, UserIsReal = it.User.IsReal == true, RealMethod = it.User.RealMethod, PersonalIdentityCode = it.User.PersonalIdentityCode, PersonalIdentityContent = it.User.PersonalIdentity.Content, EducationalBackgroundCode = it.User.EducationalBackgroundCode, EducationalBackgroundContent = it.User.EducationalBackground.Content, TaskCount = it.User.EnterpriseEmployees.SelectMany(ee => ee.TaskInfoUsers).Count(tu => tu.HireStatus == EnumTaskUserHireStatus.Pass), WorkSeniority = it.User.WorkSeniority, WorkExperience = it.User.WorkExperience, HireStatus = it.TaskInfoUsers.Any(tu => tu.HireStatus == EnumTaskUserHireStatus.Pass) ? EnumTaskUserHireStatus.Pass : it.TaskInfoUsers.Any(tu => tu.HireStatus == EnumTaskUserHireStatus.Refuse) ? EnumTaskUserHireStatus.Refuse : EnumTaskUserHireStatus.Wait, UserSignContractStatus = it.UserSignContractStatus, HireTime = it.TaskInfoUsers .OrderBy(tu => tu.HireTime) .Where(tu => tu.HireStatus == EnumTaskUserHireStatus.Pass && tu.HireTime.HasValue) .Select(tu => tu.HireTime) .FirstOrDefault(), UserRealTime = it.User.RealTime, UserSignContractTime = it.UserSignContractTime, EnterpriseSignContractStatus = it.EnterpriseSignContractStatus, EnterpriseSignContractTime = it.EnterpriseSignContractTime }); return await request.PageModel.GetPagedListAsync(s, cancellationToken); } /// /// 查询灵工详情 /// /// /// /// public async Task Handle(GetEnterpriseEmployeeQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var model = await rep.AsQueryable().AsNoTracking() .Where(it => it.Id == request.Id) .GetDetail(cancellationToken); if (request.TaskInfoId.HasValue) { model.ApplyTime = await rep.Change().AsQueryable().AsNoTracking() .Where(it => it.TaskInfoId == request.TaskInfoId && it.EnterpriseEmployeeId == request.Id) .Select(it => it.CreatedTime as DateTimeOffset?) .FirstOrDefaultAsync(cancellationToken); } else if (logier.Type == EnumUserType.Enterprise) { model.ApplyTime = await rep.Change().AsQueryable().AsNoTracking() .OrderBy(it => it.CreatedTime) .Where(it => it.TaskInfo.EnterpriseId == logier.EnterpriseId && it.EnterpriseEmployeeId == request.Id) .Select(it => it.CreatedTime as DateTimeOffset?) .FirstOrDefaultAsync(cancellationToken); } return model; } /// /// 查询个人用户签约列表 /// /// /// /// public async Task Handle(GetPersonalUserElectronSignsQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var q = rep.AsQueryable().AsNoTracking() .Where(it => it.UserId == logier.Id); if (request.UserSignContractStatus.HasValue) { if (request.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass) { q = q.Where(it => it.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass); } else { q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus.Value); } } else { q = q.Where(it => it.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait || it.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass || it.UserSignContractStatus == EnumTaskUserSignContractStatus.Stop); } var s = q.Select(it => new GetPersonalUserElectronSignsQueryResultItem { Id = it.Id, EnterpriseName = it.Enterprise.EnterpriseName, UserSignContractStatus = it.UserSignContractStatus, }); return await request.PageModel.GetPagedListAsync(s, cancellationToken); } /// /// 查询个人用户签约详情 /// /// /// /// public async Task Handle(GetPersonalUserElectronSignQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var q = rep.AsQueryable().AsNoTracking() .Where(it => it.UserId == logier.Id); if (request.Id.HasValue) { q = q.Where(it => it.Id == request.Id); } if (request.Code.IsNotNull()) { q = q.Where(it => it.ContractTemplate.Code == request.Code); } var model = await q.GetDetail(); return model; } } }