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 { /// /// 任务查询处理器 /// 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.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.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.Include(it => it.Province).Include(it => it.City) join tu in rep.Change().AsQueryable().AsNoTracking() on t.Id equals tu.TaskInfoId into tug join tb in rep.Change().AsQueryable().AsNoTracking().Include(it => it.Benefit) on t.Id equals tb.TaskInfoId into tbg join tc in rep.Change().AsQueryable().AsNoTracking().Include(it => it.Type) on t.Id equals tc.TaskInfoId into tcg select new GetTaskInfosQueryResultItem { Id = t.Id, Name = t.Name, Code = t.Code, BillingMethod = t.BillingMethod, ServiceFee = t.ServiceFee, SettlementCycle = t.SettlementCycle, Benefits = tbg.Select(it => new GetTaskInfoQueryResultBenefit { BenefitCode = it.BenefitCode, BenefitContent = it.Benefit.Content }).ToList(), GenderLimit = t.GenderLimit, CredentialLimits = tcg.Select(it => new GetTaskInfoQueryResultCredentialLimit { TypeCode = it.TypeCode, TypeContent = it.Type.Content }).ToList(), ProvinceCode = t.ProvinceCode, ProvinceContent =t.Province.Content, CityCode = t.CityCode, CityContent = t.City.Content, AddressName = t.AddressName, AddressDetail = t.AddressDetail, Latitude = t.Latitude, Longitude = t.Longitude, 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); } } }