using FlexJobApi.Core;
|
using Furion.DatabaseAccessor;
|
using Furion.FriendlyException;
|
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.FlexJobServer.Application
|
{
|
/// <summary>
|
/// 任务查询处理器
|
/// </summary>
|
public class TaskInfoQueryHandler(
|
IRepository<TaskInfo> rep
|
) :
|
IRequestHandler<GetTaskInfoQuery, GetTaskInfoQueryResult>,
|
IRequestHandler<GetTaskInfosQuery, PagedListQueryResult<GetTaskInfosQueryResultItem>>
|
|
{
|
private readonly IRepository<TaskInfo> rep = rep;
|
|
/// <summary>
|
/// 查询任务详情
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<GetTaskInfoQueryResult> Handle(GetTaskInfoQuery request, CancellationToken cancellationToken)
|
{
|
var model = await TaskInfoRepository.GetQueryable(rep)
|
.Where(it => it.Id == request.Id)
|
.ProjectToType<GetTaskInfoQueryResult>()
|
.FirstOrDefaultAsync(cancellationToken);
|
model.TaskCount = await rep.AsQueryable().AsNoTracking()
|
.Where(it => it.EnterpriseId == model.EnterpriseId && it.ReleaseStatus == EnumTaskReleaseStatus.Stopped)
|
.CountAsync();
|
return model;
|
}
|
|
/// <summary>
|
/// 查询任务分页列表
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public Task<PagedListQueryResult<GetTaskInfosQueryResultItem>> Handle(GetTaskInfosQuery request, CancellationToken cancellationToken)
|
{
|
var q = TaskInfoRepository.GetQueryable(rep);
|
if (request.Keywords.IsNotNull())
|
{
|
q = q.Where(it => it.Name.Contains(request.Keywords));
|
}
|
if (request.BeginTime.HasValue && request.EndTime.HasValue)
|
{
|
q = q.Where(it => request.BeginTime <= it.BeginTime && it.BeginTime <= request.EndTime);
|
}
|
if (request.CityCode.IsNotNull())
|
{
|
q = q.Where(it => it.CityCode == request.CityCode);
|
}
|
if (request.SettlementCycle.HasValue)
|
{
|
q = q.Where(it => it.SettlementCycle == request.SettlementCycle);
|
}
|
if (request.BenefitCodes.IsNotNull())
|
{
|
q = q.Where(it => it.Benefits.Any(b => request.BenefitCodes.Contains(b.BenefitCode)));
|
}
|
if (request.GenderLimit.HasValue)
|
{
|
q = q.Where(it => it.GenderLimit == request.GenderLimit);
|
}
|
if (request.Status.HasValue)
|
{
|
q = q.Where(it => it.Status == request.Status);
|
}
|
if (request.ReleaseStatus.HasValue)
|
{
|
q = q.Where(it => it.ReleaseStatus == request.ReleaseStatus);
|
}
|
if (request.RecommendStatus.HasValue)
|
{
|
q = q.Where(it => it.RecommendStatus == request.RecommendStatus);
|
}
|
var s = from t in q
|
join tu in rep.Change<TaskInfoUser>().AsQueryable().AsNoTracking() on t.Id equals tu.TaskInfoId into tug
|
select new GetTaskInfosQueryResultItem
|
{
|
Id = t.Id,
|
Name = t.Name,
|
Code = t.Code,
|
BillingMethod = t.BillingMethod,
|
ServiceFee = t.ServiceFee,
|
SettlementCycle = t.SettlementCycle,
|
GenderLimit = t.GenderLimit,
|
UserCount = tug.Count(),
|
Status = t.Status,
|
BeginTime = t.BeginTime,
|
EndTime = t.EndTime,
|
ReleaseStatus = t.ReleaseStatus,
|
CheckReceiveStatus = t.CheckReceiveStatus,
|
CreatedTime = t.CreatedTime,
|
RecommendStatus = t.RecommendStatus,
|
SettlementStatus = t.SettlementStatus
|
};
|
return request.PageModel.GetPagedListAsync(s, cancellationToken);
|
}
|
}
|
}
|