From bf17ad2051de62b9b49fb72bf6ae14d23bfef62b Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期四, 11 九月 2025 10:20:20 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs | 347 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 335 insertions(+), 12 deletions(-) diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs index 418cb1d..e237a65 100644 --- a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs @@ -20,7 +20,14 @@ IRepository<DictionaryData> repDictionaryData ) : IRequestHandler<GetTaskInfoQuery, GetTaskInfoQueryResult>, - IRequestHandler<GetTaskInfosQuery, GetTaskInfosQueryResult> + IRequestHandler<GetOpenTaskInfosQuery, GetTaskInfosQueryResult>, + IRequestHandler<GetTaskInfosQuery, GetTaskInfosQueryResult>, + IRequestHandler<GetPersonalApplyTaskInfosQuery, GetPersonalApplyTaskInfosQueryResult>, + IRequestHandler<GetPersonalHireTaskInfosQuery, GetPersonalHireTaskInfosQueryResult>, + IRequestHandler<GetPersonalCancelTaskInfosQuery, GetPersonalCancelTaskInfosQueryResult>, + IRequestHandler<GetSettlementTasksQuery, GetSettlementTasksQueryResult>, + IRequestHandler<GetSettlementTaskQuery, GetSettlementTaskQueryResult>, + IRequestHandler<GetTaskSelectQuery, List<SelectOption<Guid, GetTaskSelectQueryOption>>> { private readonly IRepository<TaskInfo> rep = rep; @@ -34,14 +41,68 @@ /// <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.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> @@ -52,7 +113,8 @@ /// <returns></returns> 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)); @@ -63,7 +125,7 @@ } 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()) { @@ -81,10 +143,14 @@ { q = q.Where(it => it.GenderLimit == request.GenderLimit); } - - var count = new GetTaskInfosQueryResultCount + if (logier != null && logier.Type == EnumUserType.Personal && request.IsCollected == true) { - WaitAssignCount = await q.CountAsync(it => it.Status == EnumTaskStatus.Wait), + 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), @@ -92,7 +158,14 @@ 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) { @@ -102,12 +175,18 @@ { 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 { 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, @@ -130,7 +209,7 @@ 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, @@ -138,11 +217,255 @@ 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, + }; var result = await request.PageModel.GetPagedListAsync<GetTaskInfosQueryResult, GetTaskInfosQueryResultItem>(s, cancellationToken); - result.Count = count; + 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; + } + + /// <summary> + /// 鏌ヨ浠诲姟閫夋嫨鍣ㄦ暟鎹� + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<List<SelectOption<Guid, GetTaskSelectQueryOption>>> Handle(GetTaskSelectQuery request, CancellationToken cancellationToken) + { + return await request.GetSelect<TaskInfo, Guid, GetTaskSelectQueryOption>( + it => it.Id, + it => it.Name, + q => + { + q = TaskInfoRepository.GetQueryable(rep, true); + if (request.Keywords.IsNotNull()) + { + q = q.Where(it => + it.Code.Contains(request.Keywords) + || it.Name.Contains(request.Keywords)); + } + return q; + }, + cancellationToken); + } } } -- Gitblit v1.9.1