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,
|
IRepository<DictionaryData> repDictionaryData
|
) :
|
IRequestHandler<GetTaskInfoQuery, GetTaskInfoQueryResult>,
|
IRequestHandler<GetTaskInfosQuery, GetTaskInfosQueryResult>
|
|
{
|
private readonly IRepository<TaskInfo> rep = rep;
|
private readonly IRepository<DictionaryData> repDictionaryData = repDictionaryData;
|
|
/// <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 async Task<GetTaskInfosQueryResult> 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<GetTaskInfosQueryResult, GetTaskInfosQueryResultItem>(s, cancellationToken);
|
result.Count = count;
|
return result;
|
}
|
}
|
}
|