using FlexJobApi.Core;
using Furion.DatabaseAccessor;
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
) :
IRequestHandler
{
private readonly IRepository rep = rep;
///
/// 查询C端人员分页列表数据
///
///
///
///
public async Task Handle(GetPersonalUserInfosQuery request, CancellationToken cancellationToken)
{
var logier = JwtUtils.GetCurrentLogier();
var q = rep.AsQueryable().AsNoTracking();
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.Any(e =>
e.HireStatus == EnumTaskUserHireStatus.Pass
&& e.HireTime.HasValue
&& request.HireTimeBegin <= e.HireTime
&& e.HireTime <= request.HireTimeEnd));
}
if (request.SignContractBegin.HasValue && request.SignContractEnd.HasValue)
{
q = q.Where(it =>
it.EnterpriseEmployees.Any(e =>
e.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass
&& e.UserSignContractTime.HasValue
&& request.SignContractBegin <= e.UserSignContractTime
&& e.UserSignContractTime <= request.SignContractEnd
|| 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,
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
.OrderByDescending(e => e.HireTime)
.Where(e => e.HireStatus == EnumTaskUserHireStatus.Pass && e.HireTime.HasValue)
.Select(e => e.HireTime)
.FirstOrDefault(),
SignContractTime = it.EnterpriseEmployees
.OrderByDescending(e => e.EnterpriseSignContractTime > e.UserSignContractTime ? e.EnterpriseSignContractTime : e.UserSignContractTime)
.Where(e => e.HireStatus == EnumTaskUserHireStatus.Pass && e.HireTime.HasValue)
.Select(e => e.HireTime)
.FirstOrDefault(),
});
var result = await request.PageModel.GetPagedListAsync(s, cancellationToken);
return result;
}
}
}