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
|
{
|
/// <summary>
|
/// C端人员查询处理器
|
/// </summary>
|
public class GetPersonalUserInfosQueryHandler(
|
IRepository<User> rep
|
) :
|
IRequestHandler<GetPersonalUserInfosQuery, GetPersonalUserInfosQueryResult>,
|
IRequestHandler<GetPersonalUserInfoSignContractsQuery, GetPersonalUserInfoSignContractsQueryResult>
|
{
|
private readonly IRepository<User> rep = rep;
|
|
/// <summary>
|
/// 查询C端人员分页列表数据
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<GetPersonalUserInfosQueryResult> 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.HireStatus == EnumTaskUserHireStatus.Pass && 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<GetPersonalUserInfosQueryResult, GetPersonalUserInfosQueryResultItem>(s, cancellationToken);
|
return result;
|
}
|
|
/// <summary>
|
/// 查询C端人员签约详情分页列表数据
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public Task<GetPersonalUserInfoSignContractsQueryResult> Handle(GetPersonalUserInfoSignContractsQuery request, CancellationToken cancellationToken)
|
{
|
var q = rep.Change<EnterpriseEmployee>().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.HireStatus == EnumTaskUserHireStatus.Pass && tu.HireTime.HasValue)
|
.Select(tu => tu.HireTime)
|
.FirstOrDefault(),
|
UserSignContractStatus = it.UserSignContractStatus,
|
EnterpriseSignContractStatus = it.EnterpriseSignContractStatus,
|
EnterpriseSignContractTime = it.EnterpriseSignContractTime,
|
ContractUrl = it.Contracts
|
.Where(c => c.EnterpriseSignContractStatus == it.EnterpriseSignContractStatus)
|
.Select(c => c.Url)
|
.FirstOrDefault(),
|
});
|
return request.PageModel.GetPagedListAsync<GetPersonalUserInfoSignContractsQueryResult, GetPersonalUserInfoSignContractsQueryResultItem>(q, cancellationToken);
|
}
|
}
|
}
|