| | |
| | | IRepository<DictionaryData> repDictionaryData |
| | | ) : |
| | | IRequestHandler<GetTaskInfoQuery, GetTaskInfoQueryResult>, |
| | | IRequestHandler<GetTaskInfosQuery, PagedListQueryResult<GetTaskInfosQueryResultItem>> |
| | | IRequestHandler<GetTaskInfosQuery, GetTaskInfosQueryResult> |
| | | |
| | | { |
| | | private readonly IRepository<TaskInfo> rep = rep; |
| | |
| | | /// <returns></returns> |
| | | public async Task<GetTaskInfoQueryResult> Handle(GetTaskInfoQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | var model = await TaskInfoRepository.GetQueryable(rep) |
| | | .Where(it => it.Id == request.Id) |
| | | .ProjectToType<GetTaskInfoQueryResult>() |
| | | .FirstOrDefaultAsync(cancellationToken); |
| | | .GetDetail<TaskInfo, GetTaskInfoQueryResult>(cancellationToken); |
| | | model.TaskCount = await rep.AsQueryable().AsNoTracking() |
| | | .Where(it => it.EnterpriseId == model.EnterpriseId && it.ReleaseStatus == EnumTaskReleaseStatus.Stopped) |
| | | .Where(it => it.EnterpriseId == model.EnterpriseId && it.ReleaseStatus == EnumTaskReleaseStatus.InProcess) |
| | | .CountAsync(); |
| | | model.ApplyCount = await rep.Change<TaskInfoUser>().AsQueryable().AsNoTracking() |
| | | .CountAsync(it => it.TaskInfoId == model.Id); |
| | | if (logier.Type == EnumUserType.Personal) |
| | | { |
| | | model.HireStatus = await rep.Change<TaskInfoUser>().AsQueryable().AsNoTracking() |
| | | .Where(it => it.TaskInfoId == model.Id && it.UserId == logier.Id) |
| | | .Select(it => it.HireStatus) |
| | | .FirstOrDefaultAsync(); |
| | | } |
| | | return model; |
| | | } |
| | | |
| | |
| | | /// <param name="request"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public Task<PagedListQueryResult<GetTaskInfosQueryResultItem>> Handle(GetTaskInfosQuery request, CancellationToken cancellationToken) |
| | | public async Task<GetTaskInfosQueryResult> Handle(GetTaskInfosQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var q = TaskInfoRepository.GetQueryable(rep); |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | var q = TaskInfoRepository.GetQueryable(rep, true, logier); |
| | | 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 => it.GenderLimit == request.GenderLimit); |
| | | } |
| | | if (request.HireStatus.IsNotNull() && logier.Type == EnumUserType.Personal) |
| | | { |
| | | q = q.Where(it => it.TaskInfoUsers.Any(u => u.UserId == logier.Id && request.HireStatus.Contains(u.HireStatus))); |
| | | } |
| | | |
| | | var count = new GetTaskInfosQueryResultObjectData |
| | | { |
| | | WaitAssignCount = await q.CountAsync(it => it.ReleaseStatus == EnumTaskReleaseStatus.InProcess && 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.RecommendStatus.HasValue) |
| | | { |
| | | q = q.Where(it => it.RecommendStatus == request.RecommendStatus); |
| | | } |
| | | if (request.CheckReceiveStatus.HasValue) |
| | | { |
| | | q = q.Where(it => it.CheckReceiveStatus == request.CheckReceiveStatus); |
| | | } |
| | | var s = from t in q |
| | | select new GetTaskInfosQueryResultItem |
| | |
| | | AddressDetail = t.AddressDetail, |
| | | Latitude = t.Latitude, |
| | | Longitude = t.Longitude, |
| | | UserCount = t.Users.Count(), |
| | | UserCount = t.TaskInfoUsers.Count(), |
| | | Status = t.Status, |
| | | BeginTime = t.BeginTime, |
| | | EndTime = t.EndTime, |
| | |
| | | CheckReceiveStatus = t.CheckReceiveStatus, |
| | | CreatedTime = t.CreatedTime, |
| | | RecommendStatus = t.RecommendStatus, |
| | | SettlementStatus = t.SettlementStatus |
| | | SettlementStatus = t.SettlementStatus, |
| | | HireStatus = logier != null |
| | | ? t.TaskInfoUsers.Where(it => it.UserId == logier.Id).Select(u => u.HireStatus).FirstOrDefault() |
| | | : null |
| | | }; |
| | | return request.PageModel.GetPagedListAsync(s, cancellationToken); |
| | | var result = await request.PageModel.GetPagedListAsync<GetTaskInfosQueryResult, GetTaskInfosQueryResultItem>(s, cancellationToken); |
| | | result.ObjectData = count; |
| | | return result; |
| | | } |
| | | } |
| | | } |