From 6658683df86d0b94c37f1d17754d17f9aab4dba0 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期二, 12 八月 2025 17:47:33 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs | 203 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 192 insertions(+), 11 deletions(-) diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs index 471d00c..fe0b498 100644 --- a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs @@ -20,7 +20,10 @@ IRepository<DictionaryData> repDictionaryData ) : IRequestHandler<GetTaskInfoQuery, GetTaskInfoQueryResult>, - IRequestHandler<GetTaskInfosQuery, GetTaskInfosQueryResult> + IRequestHandler<GetTaskInfosQuery, GetTaskInfosQueryResult>, + IRequestHandler<GetPersonalApplyTaskInfosQuery, GetPersonalApplyTaskInfosQueryResult>, + IRequestHandler<GetPersonalHireTaskInfosQuery, GetPersonalHireTaskInfosQueryResult>, + IRequestHandler<GetPersonalCancelTaskInfosQuery, GetPersonalCancelTaskInfosQueryResult> { private readonly IRepository<TaskInfo> rep = rep; @@ -34,6 +37,7 @@ /// <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) @@ -45,11 +49,39 @@ .CountAsync(it => it.TaskInfoId == model.Id); if (logier != null && logier.Type == EnumUserType.Personal) { - model.HireStatus = await rep.Change<TaskInfoUser>().AsQueryable().AsNoTracking() + 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 => it.EnterpriseEmployee.HireStatus) + .Select(it => new + { + it.Id, + it.EnterpriseEmployee.HireStatus, + it.EnterpriseEmployee.UserSignContractStatus + }) .FirstOrDefaultAsync(); + if (taskUser != null) + { + model.HireStatus = taskUser.HireStatus; + model.ApplyButton = taskUser.HireStatus == EnumTaskUserHireStatus.Wait + ? GetTaskInfoQueryResultApplyButton.WaitHire + : taskUser.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait + ? GetTaskInfoQueryResultApplyButton.WaitSignContract + : null; + model.HireButton = now <= model.EndTime + ? GetTaskInfoQueryResultHireButton.InProcess + : GetTaskInfoQueryResultHireButton.Completed; + if (model.HireButton == GetTaskInfoQueryResultHireButton.InProcess && model.BeginTime <= now) + { + var submit = await rep.Change<TaskInfoUserSubmit>().AsQueryable().AsNoTracking() + .AnyAsync(it => it.TaskInfoUserId == taskUser.Id && it.CheckReceiveStatus >= EnumTaskUserSubmitCheckReceiveStatus.Wait); + if (!submit) + { + model.HireButton = GetTaskInfoQueryResultHireButton.ApplyCheckReceive; + } + } + } + model.IsCollected = await rep.Change<UserTaskCollect>().AsQueryable().AsNoTracking() + .AnyAsync(it => it.TaskInfoId == request.Id && it.UserId == logier.Id); } return model; } @@ -91,10 +123,6 @@ if (request.GenderLimit.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 => request.HireStatus.Contains(u.EnterpriseEmployee.HireStatus))); } var count = new GetTaskInfosQueryResultObjectData @@ -157,14 +185,167 @@ CheckReceiveStatus = t.CheckReceiveStatus, CreatedTime = t.CreatedTime, RecommendStatus = t.RecommendStatus, - SettlementStatus = t.SettlementStatus, - HireStatus = logier != null - ? t.TaskInfoUsers.Where(it => it.EnterpriseEmployee.UserId == logier.Id).Select(u => u.EnterpriseEmployee.HireStatus).FirstOrDefault() - : null + SettlementStatus = t.SettlementStatus }; 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.EnterpriseEmployee.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.EnterpriseEmployee.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.EnterpriseEmployee.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.EnterpriseEmployee.HireStatus == EnumTaskUserHireStatus.Pass + && tu.ArrangeStatus == EnumTaskUserArrangeStatus.Complete)); + if (request.Status.HasValue) + { + switch (request.Status.Value) + { + case GetPersonalHireTaskInfosQueryStatus.InProcess: + q = q.Where(it => now <= it.EndTime); + break; + case GetPersonalHireTaskInfosQueryStatus.Completed: + q = q.Where(it => it.EndTime < now); + break; + default: + break; + } + } + else + { + q = q.Where(it => + it.TaskInfoUsers.Any(tu => + tu.EnterpriseEmployee.UserId == logier.Id + && (tu.EnterpriseEmployee.HireStatus == EnumTaskUserHireStatus.Wait + || tu.EnterpriseEmployee.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait))); + } + 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.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.EnterpriseEmployee.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); + } } } -- Gitblit v1.9.1