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;
}
}
}