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 TaskUserSubmitQueryHandler(
|
IRepository<TaskInfo> repTaskInfo,
|
IRepository<TaskInfoUser> repTaskInfoUser) :
|
IRequestHandler<GetCheckReceiveTaskQuery, GetCheckReceiveTaskQueryResult>,
|
IRequestHandler<GetCheckReceiveTaskUserQuery, GetCheckReceiveTaskUserQueryResult>
|
{
|
private readonly IRepository<TaskInfo> repTaskInfo = repTaskInfo;
|
private readonly IRepository<TaskInfoUser> repTaskInfoUser = repTaskInfoUser;
|
|
/// <summary>
|
/// 查询验收任务分页列表
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<GetCheckReceiveTaskQueryResult> Handle(GetCheckReceiveTaskQuery 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.DateBegin == null || request.DateEnd == null)
|
{
|
throw Oops.Oh(EnumErrorCodeType.s400, "请选择日期");
|
}
|
q = q.Where(it =>
|
it.TaskInfoUsers.Any(tu =>
|
tu.Submits.Any(s =>
|
request.DateBegin.Value.Date <= s.Date.Date
|
&& s.Date.Date <= request.DateEnd.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.DateBegin.HasValue && request.DateEnd.HasValue)
|
{
|
q = q.Where(it =>
|
it.TaskInfoUsers.Any(tu =>
|
tu.Submits.Any(s =>
|
request.DateBegin.Value.Date <= s.Date.Date
|
&& s.Date.Date <= request.DateEnd.Value.Date)));
|
}
|
if (request.CheckReceiveStatus.HasValue)
|
{
|
q = q.Where(it => it.CheckReceiveStatus == request.CheckReceiveStatus);
|
}
|
}
|
var s = q.ProjectToType<GetCheckReceiveTaskQueryResultItem>();
|
return await request.PageModel.GetPagedListAsync<GetCheckReceiveTaskQueryResult, GetCheckReceiveTaskQueryResultItem>(s, cancellationToken);
|
}
|
|
/// <summary>
|
/// 查询验收分页列表
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<GetCheckReceiveTaskUserQueryResult> Handle(GetCheckReceiveTaskUserQuery request, CancellationToken cancellationToken)
|
{
|
var logier = JwtUtils.GetCurrentLogier();
|
var q = repTaskInfoUser.AsQueryable().AsNoTracking()
|
.OrderBy(it => it.CreatedTime)
|
.AsQueryable();
|
|
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);
|
}
|
if (request.TaskInfoId.HasValue)
|
{
|
q = q.Where(it => it.TaskInfoId == request.TaskInfoId);
|
}
|
if (request.Keywords.IsNotNull())
|
{
|
q = q.Where(it =>
|
it.EnterpriseEmployee.User.Name.Contains(request.Keywords)
|
|| it.EnterpriseEmployee.User.ContactPhoneNumber.Contains(request.Keywords)
|
|| it.EnterpriseEmployee.User.Identity.Contains(request.Keywords));
|
}
|
if (logier.ClientType == EnumClientType.Wxmp)
|
{
|
if (request.CheckReceiveStatus == null)
|
{
|
throw Oops.Oh(EnumErrorCodeType.s400, "请选择验收状态");
|
}
|
if (request.DateBegin == null || request.DateEnd == null)
|
{
|
throw Oops.Oh(EnumErrorCodeType.s400, "请选择日期");
|
}
|
q = q.Where(it => it.Submits.Any(s =>
|
request.DateBegin.Value.Date <= s.Date.Date
|
&& s.Date.Date <= request.DateEnd.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.DateBegin.HasValue && request.DateEnd.HasValue)
|
{
|
q = q.Where(it => it.Submits.Any(s =>
|
request.DateBegin.Value.Date <= s.Date.Date
|
&& s.Date.Date <= request.DateEnd.Value.Date));
|
}
|
if (request.CheckReceiveStatus.HasValue)
|
{
|
q = q.Where(it => it.CheckReceiveStatus == request.CheckReceiveStatus);
|
}
|
}
|
var s = q.Select(it => new GetCheckReceiveTaskUserQueryResultItem
|
{
|
Id = it.TaskInfoId,
|
TaskName = it.TaskInfo.Name,
|
BeginTime = it.TaskInfo.BeginTime,
|
EndTime = it.TaskInfo.EndTime,
|
AddressName = it.TaskInfo.AddressName,
|
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,
|
CheckReceiveStatus = logier.ClientType == EnumClientType.Wxmp && request.DateBegin.HasValue && request.DateEnd.HasValue
|
? it.Submits
|
.Where(s =>
|
request.DateBegin.Value.Date <= s.Date.Date
|
&& s.Date.Date <= request.DateEnd.Value.Date)
|
.Select(s =>
|
s.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit
|
? EnumTaskCheckReceiveStatus.WaitSubmit
|
: s.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive
|
? EnumTaskCheckReceiveStatus.WaitCheckReceive
|
: EnumTaskCheckReceiveStatus.Completed)
|
.FirstOrDefault()
|
: it.CheckReceiveStatus,
|
LastSubmitTime = it.LastSubmitTime,
|
});
|
return await request.PageModel.GetPagedListAsync<GetCheckReceiveTaskUserQueryResult, GetCheckReceiveTaskUserQueryResultItem>(s, cancellationToken);
|
}
|
}
|
}
|