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 TaskUserSubmitQueryHandler( IRepository repTaskInfo, IRepository repTaskInfoUser) : IRequestHandler, IRequestHandler { private readonly IRepository repTaskInfo = repTaskInfo; private readonly IRepository repTaskInfoUser = repTaskInfoUser; /// /// 查询验收任务分页列表 /// /// /// /// public async Task Handle(GetCheckReceiveTasksQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var q = repTaskInfo.AsQueryable().AsNoTracking() .OrderBy(it => it.CreatedTime) .AsQueryable(); if (logier.Type == EnumUserType.Personal) { q = q.Where(it => it.TaskInfoUsers.Any(tu => tu.EnterpriseEmployee.UserId == logier.Id)); } else if (logier.Type == EnumUserType.Enterprise) { q = q.Where(it => it.EnterpriseId == logier.EnterpriseId); } if (logier.ClientType == EnumClientType.Wxmp) { if (request.CheckReceiveStatus == null) { throw Oops.Oh(EnumErrorCodeType.s400, "请选择验收状态"); } if (request.Date == null) { throw Oops.Oh(EnumErrorCodeType.s400, "请选择日期"); } q = q.Where(it => it.TaskInfoUsers.Any(tu => tu.EnterpriseEmployee.UserId == logier.Id && tu.Submits.Any(s => s.Date.Date == request.Date.Value.Date && (request.CheckReceiveStatus == EnumTaskCheckReceiveStatus.WaitSubmit ? s.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit : request.CheckReceiveStatus == EnumTaskCheckReceiveStatus.WaitCheckReceive ? s.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive : (s.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.Success || s.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.Fail))))); } else { if (request.CheckReceiveTimeBegin.HasValue && request.CheckReceiveTimeEnd.HasValue) { q = q.Where(it => request.CheckReceiveTimeBegin <= it.LastCheckReceiveTime && it.LastCheckReceiveTime <= request.CheckReceiveTimeEnd); } if (request.CheckReceiveStatus.HasValue) { q = q.Where(it => it.CheckReceiveStatus == request.CheckReceiveStatus); } } var s = q.ProjectToType(); return await request.PageModel.GetPagedListAsync(s, cancellationToken); } /// /// 查询验收任务详情 /// /// /// /// public async Task Handle(GetCheckReceiveTaskQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var q = repTaskInfoUser.AsQueryable().AsNoTracking() .OrderBy(it => it.CreatedTime) .Where(it => it.TaskInfoId == request.TaskInfoId); if (logier.Type == EnumUserType.Personal) { q = q.Where(it => it.EnterpriseEmployee.UserId == logier.Id); } else if (logier.Type == EnumUserType.Enterprise) { q = q.Where(it => it.TaskInfo.EnterpriseId == logier.EnterpriseId); } var s = q.Select(it => new GetCheckReceiveTaskQueryResultItem { Id = it.TaskInfoId, TaskInfoCode = it.TaskInfo.Code, TaskInfoName = it.TaskInfo.Name, Avatar = it.EnterpriseEmployee.User.Avatar, Name = it.EnterpriseEmployee.User.Name, Identity = it.EnterpriseEmployee.User.Identity, Age = it.EnterpriseEmployee.User.Age, Gender = it.EnterpriseEmployee.User.Gender, ContactPhoneNumber = it.EnterpriseEmployee.User.ContactPhoneNumber, IsReal = it.EnterpriseEmployee.User.IsReal, RealMethod = it.EnterpriseEmployee.User.RealMethod, CheckReceiveStatus = it.CheckReceiveStatus, LastSubmitTime = it.LastSubmitTime, }); var result = await request.PageModel.GetPagedListAsync(s, cancellationToken); return result; } } }