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, IRepository repDictionaryData ) : IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; private readonly IRepository repDictionaryData = repDictionaryData; /// /// 查询任务详情 /// /// /// /// 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 async 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.EnterpriseId.HasValue) { q = q.Where(it => it.EnterpriseId == request.EnterpriseId); } 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); } var count = new GetTaskInfosQueryResultCount { WaitAssignCount = await q.CountAsync(it => it.Status == EnumTaskStatus.Wait), CompletedAssignCount = await q.CountAsync(it => it.Status == EnumTaskStatus.Complete), InProcessReleaseCount = await q.CountAsync(it => it.ReleaseStatus == EnumTaskReleaseStatus.InProcess), StoppedReleaseCount = await q.CountAsync(it => it.ReleaseStatus == EnumTaskReleaseStatus.Stopped), }; 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 select new GetTaskInfosQueryResultItem { Id = t.Id, Name = t.Name, Code = t.Code, BillingMethod = t.BillingMethod, ServiceFee = t.ServiceFee, SettlementCycle = t.SettlementCycle, Benefits = t.Benefits.Select(it => new GetTaskInfoQueryResultBenefit { BenefitCode = it.BenefitCode, BenefitContent = it.Benefit.Content }).ToList(), GenderLimit = t.GenderLimit, CredentialLimits = t.CredentialLimits.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 = t.Users.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 }; var result = await request.PageModel.GetPagedListAsync(s, cancellationToken); } } }