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 { /// /// C端人员查询处理器 /// public class GetPersonalUserInfosQueryHandler( IRepository rep, IRepository repUserBankCard ) : IRequestHandler, IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; private readonly IRepository repUserBankCard = repUserBankCard; /// /// 查询C端人员分页列表数据 /// /// /// /// public async Task Handle(GetPersonalUserInfosQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var q = rep.AsQueryable().AsNoTracking() .Where(it => it.Type == EnumUserType.Personal); if (request.Keywords.IsNotNull()) { q = q.Where(it => it.Name.Contains(request.Keywords) || it.ContactPhoneNumber.Contains(request.Keywords) || it.Identity.Contains(request.Keywords) || it.EnterpriseEmployees.Any(e => e.Enterprise.EnterpriseName.Contains(request.Keywords))); } if (request.HireTimeBegin.HasValue && request.HireTimeEnd.HasValue) { q = q.Where(it => it.EnterpriseEmployees.SelectMany(ee => ee.TaskInfoUsers).Any(tu => tu.HireStatus == EnumTaskUserHireStatus.Pass && tu.HireTime.HasValue && request.HireTimeBegin <= tu.HireTime && tu.HireTime <= request.HireTimeEnd)); } if (request.SignContractBegin.HasValue && request.SignContractEnd.HasValue) { q = q.Where(it => it.EnterpriseEmployees.Any(e => e.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass && e.EnterpriseSignContractTime.HasValue && request.SignContractBegin <= e.EnterpriseSignContractTime && e.EnterpriseSignContractTime <= request.SignContractEnd)); } if (request.IsReal.HasValue) { q = q.Where(it => it.IsReal == request.IsReal); } var s = q.Select(it => new GetPersonalUserInfosQueryResultItem { Id = it.Id, Name = it.Name, ContactPhoneNumber = it.ContactPhoneNumber, Identity = it.Identity, IdentityImg = it.UserAuth.IdentityImg, IdentityBackImg = it.UserAuth.IdentityBackImg, Gender = it.Gender, Age = it.Age, ProvinceCode = it.ProvinceCode, ProvinceContent = it.Province.Content, CityCode = it.CityCode, CityContent = it.City.Content, Enterprises = it.EnterpriseEmployees.Select(e => e.Enterprise.EnterpriseName).ToList(), IsReal = it.IsReal, RealTime = it.RealTime, HireTime = it.EnterpriseEmployees .SelectMany(ee => ee.TaskInfoUsers) .OrderByDescending(e => e.HireTime) .Where(e => e.HireTime.HasValue) .Select(e => e.HireTime) .FirstOrDefault(), SignContractTime = it.EnterpriseEmployees .OrderByDescending(e => e.EnterpriseSignContractTime) .Where(e => e.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass && e.EnterpriseSignContractTime.HasValue) .Select(e => e.EnterpriseSignContractTime) .FirstOrDefault(), }); var result = await request.PageModel.GetPagedListAsync(s, cancellationToken); return result; } /// /// 查询C端人员签约详情分页列表数据 /// /// /// /// public Task Handle(GetPersonalUserInfoSignContractsQuery request, CancellationToken cancellationToken) { var q = rep.Change().AsQueryable().AsNoTracking() .Where(it => it.UserId == request.Id) .Select(it => new GetPersonalUserInfoSignContractsQueryResultItem { Id = it.Id, EnterpriseName = it.Enterprise.EnterpriseName, ApplyTime = it.TaskInfoUsers .OrderBy(tu => tu.CreatedTime) .Select(tu => tu.CreatedTime as DateTimeOffset?) .FirstOrDefault(), HireStatus = it.TaskInfoUsers.Any(tu => tu.HireStatus == EnumTaskUserHireStatus.Pass) ? EnumTaskUserHireStatus.Pass : it.TaskInfoUsers.Any(tu => tu.HireStatus == EnumTaskUserHireStatus.Refuse) ? EnumTaskUserHireStatus.Refuse : EnumTaskUserHireStatus.Wait, HireTime = it.TaskInfoUsers .OrderBy(tu => tu.HireTime) .Where(tu => tu.HireTime.HasValue) .Select(tu => tu.HireTime) .FirstOrDefault(), UserSignContractStatus = it.UserSignContractStatus, EnterpriseSignContractStatus = it.EnterpriseSignContractStatus, EnterpriseSignContractTime = it.EnterpriseSignContractTime, ContractUrl = it.ContractUrl }); return request.PageModel.GetPagedListAsync(q, cancellationToken); } /// /// 查询个人用户银行卡信息 /// /// /// /// public Task Handle(GetPersonalUserBankCardQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var model = repUserBankCard.AsQueryable().AsNoTracking() .Where(it => it.UserId == logier.Id) .ProjectToType() .FirstOrDefaultAsync(); return model; } } }