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.Application { /// /// 任务查询处理器 /// public class TaskInfoQueryHandler( IRepository rep ) : IRequestHandler, IRequestHandler> { private readonly IRepository rep = rep; /// /// 查询任务详情 /// /// /// /// public async Task Handle(GetTaskInfoQuery request, CancellationToken cancellationToken) { var model = await TaskInfoRepository.GetQueryable(rep) .Where(it => it.Id == request.Id) .ProjectToType() .FirstOrDefaultAsync(cancellationToken); model.EnterpriseName = await rep.Change().AsQueryable().AsNoTracking() .Where(it => it.EnterpriseAuthId == model.EnterpriseId) .Select(it => it.EnterpriseAuth.EnterpriseName) .FirstOrDefaultAsync(); model.TaskCount = await rep.AsQueryable().AsNoTracking() .Where(it => it.EnterpriseId == model.EnterpriseId && it.ReleaseStatus == EnumTaskReleaseStatus.Stopped) .CountAsync(); return model; } /// /// 查询任务分页列表 /// /// /// /// public Task> 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.Time.HasValue) { q = q.Where(it => it.BeginTime <= request.Time && request.Time <= it.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().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 }; return request.PageModel.GetPagedListAsync(s, cancellationToken); } } }