| | |
| | | /// 任务查询处理器 |
| | | /// </summary> |
| | | public class TaskInfoQueryHandler( |
| | | IRepository<TaskInfo> rep |
| | | IRepository<TaskInfo> rep, |
| | | IRepository<DictionaryData> repDictionaryData |
| | | ) : |
| | | IRequestHandler<GetTaskInfoQuery, GetTaskInfoQueryResult>, |
| | | IRequestHandler<GetTaskInfosQuery, PagedListQueryResult<GetTaskInfosQueryResultItem>> |
| | | IRequestHandler<GetOpenTaskInfosQuery, GetTaskInfosQueryResult>, |
| | | IRequestHandler<GetTaskInfosQuery, GetTaskInfosQueryResult>, |
| | | IRequestHandler<GetPersonalApplyTaskInfosQuery, GetPersonalApplyTaskInfosQueryResult>, |
| | | IRequestHandler<GetPersonalHireTaskInfosQuery, GetPersonalHireTaskInfosQueryResult>, |
| | | IRequestHandler<GetPersonalCancelTaskInfosQuery, GetPersonalCancelTaskInfosQueryResult>, |
| | | IRequestHandler<GetSettlementTasksQuery, GetSettlementTasksQueryResult>, |
| | | IRequestHandler<GetSettlementTaskQuery, GetSettlementTaskQueryResult> |
| | | |
| | | { |
| | | private readonly IRepository<TaskInfo> rep = rep; |
| | | private readonly IRepository<DictionaryData> repDictionaryData = repDictionaryData; |
| | | |
| | | /// <summary> |
| | | /// 查询任务详情 |
| | |
| | | /// <returns></returns> |
| | | public async Task<GetTaskInfoQueryResult> Handle(GetTaskInfoQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var now = DateTime.Now; |
| | | 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 != null && logier.Type == EnumUserType.Personal) |
| | | { |
| | | var taskUser = await rep.Change<TaskInfoUser>().AsQueryable().AsNoTracking() |
| | | .Include(it => it.EnterpriseEmployee) |
| | | .Where(it => it.TaskInfoId == model.Id && it.EnterpriseEmployee.UserId == logier.Id) |
| | | .Select(it => new |
| | | { |
| | | it.Id, |
| | | it.HireStatus, |
| | | it.EnterpriseEmployeeId, |
| | | it.EnterpriseEmployee.UserSignContractStatus |
| | | }) |
| | | .FirstOrDefaultAsync(); |
| | | if (taskUser != null) |
| | | { |
| | | model.EnterpriseEmployeeId = taskUser.EnterpriseEmployeeId; |
| | | model.HireStatus = taskUser.HireStatus; |
| | | model.ApplyButton = taskUser.HireStatus == EnumTaskUserHireStatus.Wait |
| | | ? GetTaskInfoQueryResultApplyButton.WaitHire |
| | | : taskUser.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait |
| | | ? GetTaskInfoQueryResultApplyButton.WaitSignContract |
| | | : null; |
| | | model.HireButton = now < model.BeginTime |
| | | ? GetTaskInfoQueryResultHireButton.Wait |
| | | : model.BeginTime <= now && now <= model.EndTime |
| | | ? GetTaskInfoQueryResultHireButton.InProcess |
| | | : GetTaskInfoQueryResultHireButton.Completed; |
| | | if (model.HireButton == GetTaskInfoQueryResultHireButton.InProcess) |
| | | { |
| | | var submit = await rep.Change<TaskInfoUserSubmit>().AsQueryable().AsNoTracking() |
| | | .AnyAsync(it => it.TaskInfoUserId == taskUser.Id && it.CheckReceiveStatus >= EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive); |
| | | if (!submit) |
| | | { |
| | | model.HireButton = GetTaskInfoQueryResultHireButton.ApplyCheckReceive; |
| | | } |
| | | } |
| | | } |
| | | model.IsCollected = await rep.Change<TaskUserCollect>().AsQueryable().AsNoTracking() |
| | | .AnyAsync(it => it.TaskInfoId == request.Id && it.UserId == logier.Id); |
| | | } |
| | | return model; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 查询开放任务分页列表 |
| | | /// </summary> |
| | | /// <param name="request"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public Task<GetTaskInfosQueryResult> Handle(GetOpenTaskInfosQuery request, CancellationToken cancellationToken) |
| | | { |
| | | return Handle(request.Adapt<GetTaskInfosQuery>(), cancellationToken); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <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 => request.BeginTime <= it.BeginTime && it.BeginTime <= request.EndTime); |
| | | q = q.Where(it => request.BeginTime <= it.CreatedTime && it.CreatedTime <= request.EndTime); |
| | | } |
| | | if (request.CityCode.IsNotNull()) |
| | | { |
| | |
| | | { |
| | | q = q.Where(it => it.GenderLimit == request.GenderLimit); |
| | | } |
| | | if (logier != null && logier.Type == EnumUserType.Personal && request.IsCollected == true) |
| | | { |
| | | q = q.Where(it => it.TaskUserCollects.Any(c => c.UserId == logier.Id)); |
| | | } |
| | | |
| | | 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.Status == EnumTaskStatus.Wait) |
| | | { |
| | | q = q.Where(it => it.ReleaseStatus == EnumTaskReleaseStatus.InProcess && it.Status == EnumTaskStatus.Wait); |
| | | } |
| | | else |
| | | { |
| | | q = q.Where(it => it.Status == request.Status); |
| | | } |
| | | } |
| | | if (request.ReleaseStatus.HasValue) |
| | | { |
| | |
| | | { |
| | | q = q.Where(it => it.RecommendStatus == request.RecommendStatus); |
| | | } |
| | | q = q.CustomOrderBy(request.PageModel.OrderInput); |
| | | if (request.CheckReceiveStatus.HasValue) |
| | | { |
| | | q = q.Where(it => it.CheckReceiveStatus == request.CheckReceiveStatus); |
| | | } |
| | | var s = from t in q |
| | | join tu in rep.Change<TaskInfoUser>().AsQueryable().AsNoTracking() on t.Id equals tu.TaskInfoId into tug |
| | | select new GetTaskInfosQueryResultItem |
| | | { |
| | | Id = t.Id, |
| | | Name = t.Name, |
| | | Code = t.Code, |
| | | EnterpriseName = t.Enterprise.EnterpriseName, |
| | | UserName = t.Enterprise.Users.Where(u => u.Id == t.CreatedUserId).Select(u => u.UserName).FirstOrDefault(), |
| | | 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, |
| | | UserCount = tug.Count(), |
| | | 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.TaskInfoUsers.Count(), |
| | | Status = t.Status, |
| | | BeginTime = t.BeginTime, |
| | | EndTime = t.EndTime, |
| | |
| | | CheckReceiveStatus = t.CheckReceiveStatus, |
| | | CreatedTime = t.CreatedTime, |
| | | RecommendStatus = t.RecommendStatus, |
| | | SettlementStatus = t.SettlementStatus |
| | | RecommendTime = t.RecommendTime, |
| | | SettlementStatus = t.SettlementStatus, |
| | | HireStatus = logier != null && logier.Type == EnumUserType.Personal |
| | | ? t.TaskInfoUsers |
| | | .Where(tu => tu.EnterpriseEmployee.UserId == logier.Id) |
| | | .Select(tu => tu.HireStatus as EnumTaskUserHireStatus?) |
| | | .FirstOrDefault() |
| | | : null, |
| | | |
| | | }; |
| | | return request.PageModel.GetPagedListAsync(s, cancellationToken); |
| | | var result = await request.PageModel.GetPagedListAsync<GetTaskInfosQueryResult, GetTaskInfosQueryResultItem>(s, cancellationToken); |
| | | result.ObjectData = count; |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 我的报名分页列表 |
| | | /// </summary> |
| | | /// <param name="request"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public async Task<GetPersonalApplyTaskInfosQueryResult> Handle(GetPersonalApplyTaskInfosQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | var q = TaskInfoRepository.GetQueryable(rep, true, logier); |
| | | if (request.Status.HasValue) |
| | | { |
| | | switch (request.Status.Value) |
| | | { |
| | | case GetPersonalApplyTaskInfosQueryStatus.WaitHire: |
| | | q = q.Where(it => |
| | | it.TaskInfoUsers.Any(tu => |
| | | tu.EnterpriseEmployee.UserId == logier.Id |
| | | && tu.HireStatus == EnumTaskUserHireStatus.Wait)); |
| | | break; |
| | | case GetPersonalApplyTaskInfosQueryStatus.WaitSignContract: |
| | | q = q.Where(it => |
| | | it.TaskInfoUsers.Any(tu => |
| | | tu.EnterpriseEmployee.UserId == logier.Id |
| | | && tu.EnterpriseEmployee.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait)); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | q = q.Where(it => |
| | | it.TaskInfoUsers.Any(tu => |
| | | tu.EnterpriseEmployee.UserId == logier.Id |
| | | && (tu.HireStatus == EnumTaskUserHireStatus.Wait |
| | | || tu.EnterpriseEmployee.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait))); |
| | | } |
| | | var s = q.Select(it => new GetPersonalApplyTaskInfosQueryResultItem |
| | | { |
| | | Id = it.Id, |
| | | Name = it.Name, |
| | | BeginTime = it.BeginTime, |
| | | EndTime = it.EndTime, |
| | | BillingMethod = it.BillingMethod, |
| | | ServiceFee = it.ServiceFee, |
| | | SettlementCycle = it.SettlementCycle, |
| | | Benefits = it.Benefits.Select(it => new GetTaskInfoQueryResultBenefit |
| | | { |
| | | BenefitCode = it.BenefitCode, |
| | | BenefitContent = it.Benefit.Content |
| | | }).ToList(), |
| | | AddressName = it.AddressName, |
| | | Status = it.TaskInfoUsers.Any(it => |
| | | it.EnterpriseEmployee.UserId == logier.Id |
| | | && it.HireStatus == EnumTaskUserHireStatus.Wait) |
| | | ? GetPersonalApplyTaskInfosQueryStatus.WaitHire |
| | | : GetPersonalApplyTaskInfosQueryStatus.WaitSignContract |
| | | }); |
| | | return await request.PageModel.GetPagedListAsync<GetPersonalApplyTaskInfosQueryResult, GetPersonalApplyTaskInfosQueryResultItem>(s, cancellationToken); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 我的已录用分页列表 |
| | | /// </summary> |
| | | /// <param name="request"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public async Task<GetPersonalHireTaskInfosQueryResult> Handle(GetPersonalHireTaskInfosQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var now = DateTime.Now; |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | var q = TaskInfoRepository.GetQueryable(rep, true, logier).Where(it => |
| | | it.TaskInfoUsers.Any(tu => |
| | | tu.EnterpriseEmployee.UserId == logier.Id |
| | | && tu.ArrangeStatus == EnumTaskUserArrangeStatus.Complete)); |
| | | if (request.Status.HasValue) |
| | | { |
| | | switch (request.Status.Value) |
| | | { |
| | | case GetPersonalHireTaskInfosQueryStatus.Wait: |
| | | q = q.Where(it => now < it.BeginTime); |
| | | break; |
| | | case GetPersonalHireTaskInfosQueryStatus.InProcess: |
| | | q = q.Where(it => it.BeginTime <= now && now <= it.EndTime); |
| | | break; |
| | | case GetPersonalHireTaskInfosQueryStatus.Completed: |
| | | q = q.Where(it => it.EndTime < now); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | var s = q.Select(it => new GetPersonalHireTaskInfosQueryResultItem |
| | | { |
| | | Id = it.Id, |
| | | Name = it.Name, |
| | | BeginTime = it.BeginTime, |
| | | EndTime = it.EndTime, |
| | | BillingMethod = it.BillingMethod, |
| | | ServiceFee = it.ServiceFee, |
| | | SettlementCycle = it.SettlementCycle, |
| | | Benefits = it.Benefits.Select(it => new GetTaskInfoQueryResultBenefit |
| | | { |
| | | BenefitCode = it.BenefitCode, |
| | | BenefitContent = it.Benefit.Content |
| | | }).ToList(), |
| | | AddressName = it.AddressName, |
| | | Status = now < it.BeginTime |
| | | ? GetPersonalHireTaskInfosQueryStatus.Wait |
| | | : it.BeginTime <= now && now <= it.EndTime |
| | | ? GetPersonalHireTaskInfosQueryStatus.InProcess |
| | | : GetPersonalHireTaskInfosQueryStatus.Completed |
| | | }); |
| | | return await request.PageModel.GetPagedListAsync<GetPersonalHireTaskInfosQueryResult, GetPersonalHireTaskInfosQueryResultItem>(s, cancellationToken); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 我的已取消分页列表 |
| | | /// </summary> |
| | | /// <param name="request"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public async Task<GetPersonalCancelTaskInfosQueryResult> Handle(GetPersonalCancelTaskInfosQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var now = DateTime.Now; |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | var q = TaskInfoRepository.GetQueryable(rep, true, logier).Where(it => |
| | | it.TaskInfoUsers.Any(tu => |
| | | tu.EnterpriseEmployee.UserId == logier.Id |
| | | && (tu.HireStatus == EnumTaskUserHireStatus.Refuse |
| | | || tu.EnterpriseEmployee.UserSignContractStatus == EnumTaskUserSignContractStatus.Refuse |
| | | || tu.EnterpriseEmployee.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Refuse))); |
| | | var s = q.Select(it => new GetPersonalCancelTaskInfosQueryResultItem |
| | | { |
| | | Id = it.Id, |
| | | Name = it.Name, |
| | | BeginTime = it.BeginTime, |
| | | EndTime = it.EndTime, |
| | | BillingMethod = it.BillingMethod, |
| | | ServiceFee = it.ServiceFee, |
| | | SettlementCycle = it.SettlementCycle, |
| | | Benefits = it.Benefits.Select(it => new GetTaskInfoQueryResultBenefit |
| | | { |
| | | BenefitCode = it.BenefitCode, |
| | | BenefitContent = it.Benefit.Content |
| | | }).ToList(), |
| | | AddressName = it.AddressName, |
| | | }); |
| | | return await request.PageModel.GetPagedListAsync<GetPersonalCancelTaskInfosQueryResult, GetPersonalCancelTaskInfosQueryResultItem>(s, cancellationToken); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 查询结算任务分页列表数据 |
| | | /// </summary> |
| | | /// <param name="request"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public async Task<GetSettlementTasksQueryResult> Handle(GetSettlementTasksQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | var q = TaskInfoRepository.GetQueryable(rep, true, logier) |
| | | .Where(it => it.SettlementOrderStatus.HasValue); |
| | | if (request.Keywords.IsNotNull()) |
| | | { |
| | | q = q.Where(it => |
| | | it.Name.Contains(request.Keywords) |
| | | || it.Code.Contains(request.Keywords)); |
| | | } |
| | | if (request.SettlementOrderStatus.HasValue) |
| | | { |
| | | q = q.Where(it => it.SettlementOrderStatus == request.SettlementOrderStatus); |
| | | } |
| | | if (request.SettlementStatus.HasValue) |
| | | { |
| | | q = q.Where(it => it.SettlementStatus == request.SettlementStatus); |
| | | } |
| | | var s = q |
| | | .Select(it=>new GetSettlementTasksQueryResultItem |
| | | { |
| | | Id = it.Id, |
| | | Name = it.Name, |
| | | Code = it.Code, |
| | | SettlementOrderStatus = it.SettlementOrderStatus, |
| | | SettlementOrderName = it.SettlementOrderName, |
| | | SettlementOrderTime = it.SettlementOrderTime, |
| | | ActualSettlementAmount = it.ActualSettlementAmount, |
| | | SettlementAmount = it.SettlementAmount, |
| | | SettlementStatus = it.SettlementStatus, |
| | | SettlementTime = it.SettlementTime, |
| | | SettlementRemark = it.SettlementRemark, |
| | | SettlementUserCount = it.SettlementUserCount |
| | | }); |
| | | return await request.PageModel.GetPagedListAsync<GetSettlementTasksQueryResult, GetSettlementTasksQueryResultItem>(s, cancellationToken); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 查询结算单详情 |
| | | /// </summary> |
| | | /// <param name="request"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public Task<GetSettlementTaskQueryResult> Handle(GetSettlementTaskQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | var model = TaskInfoRepository.GetQueryable(rep, true, logier) |
| | | .Where(it => it.Id == request.Id) |
| | | .GetDetail<TaskInfo, GetSettlementTaskQueryResult>(); |
| | | return model; |
| | | } |
| | | } |
| | | } |