From 548e3c340da68d88122a90584d1e781e60f5f02e Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期一, 11 八月 2025 18:15:43 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumesQuery.cs | 16 ++ FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs | 34 +++++ FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml | 8 + FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs | 16 ++ FlexJobApi.Core/FlexJobApi.Core.xml | 108 +++++++++++++++++ FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/SetTaskUserHireCommand.cs | 36 ++++++ FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs | 13 + FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs | 15 ++ FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumeQuery.cs | 62 ++++++++++ 9 files changed, 301 insertions(+), 7 deletions(-) diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index 7ecbd15..424fbbf 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/FlexJobApi.Core/FlexJobApi.Core.xml @@ -3009,7 +3009,7 @@ </member> <member name="T:FlexJobApi.Core.GetAreaSelectQuery"> <summary> - 鏌ヨ鏁版嵁瀛楀吀閫夋嫨鍣� + 鏌ヨ鍦板尯閫夋嫨鍣� </summary> </member> <member name="P:FlexJobApi.Core.GetAreaSelectQuery.MaxDeep"> @@ -3682,6 +3682,11 @@ 鍦ㄦ嫑宀椾綅鏁伴噺 </summary> </member> + <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.ApplyCount"> + <summary> + 鎶ュ悕浜烘暟 + </summary> + </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.Name"> <summary> 浠诲姟鍚嶇О @@ -3795,6 +3800,11 @@ <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.ReleaseStatus"> <summary> 鍙戝竷鐘舵�� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.HireStatus"> + <summary> + 褰曠敤鐘舵�� </summary> </member> <member name="T:FlexJobApi.Core.GetTaskInfoQueryResultBenefit"> @@ -4106,9 +4116,34 @@ 鏄惁鏀惰棌 </summary> </member> + <member name="T:FlexJobApi.Core.SetTaskUserHireCommand"> + <summary> + 浠诲姟褰曠敤 + </summary> + </member> + <member name="P:FlexJobApi.Core.SetTaskUserHireCommand.Id"> + <summary> + 浠诲姟Id + </summary> + </member> + <member name="P:FlexJobApi.Core.SetTaskUserHireCommand.UserIds"> + <summary> + 浜哄憳Id + </summary> + </member> + <member name="P:FlexJobApi.Core.SetTaskUserHireCommand.HireStatus"> + <summary> + 褰曠敤鐘舵�� + </summary> + </member> <member name="T:FlexJobApi.Core.BindWxmpUserInfoCommand"> <summary> 缁戝畾寰俊灏忕▼搴忕敤鎴蜂俊鎭� + </summary> + </member> + <member name="P:FlexJobApi.Core.BindWxmpUserInfoCommand.AccessToken"> + <summary> + 璁块棶浠ょ墝 </summary> </member> <member name="P:FlexJobApi.Core.BindWxmpUserInfoCommand.EncryptedData"> @@ -6164,6 +6199,11 @@ 鐢熸椿鐓� </summary> </member> + <member name="P:FlexJobApi.Core.GetUserResumeQueryResult.TaskInfoUsers"> + <summary> + 缁忓巻 + </summary> + </member> <member name="T:FlexJobApi.Core.GetUserResumeQueryResultExpectJob"> <summary> 鏌ヨ鐢ㄦ埛绠�鍘�-缁撴灉 @@ -6244,9 +6284,64 @@ 鐓х墖 </summary> </member> + <member name="T:FlexJobApi.Core.GetUserResumeQueryResultExperience"> + <summary> + 鏌ヨ鐢ㄦ埛绠�鍘�-缁撴灉-缁忓巻 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetUserResumeQueryResultExperience.SignContractTime"> + <summary> + 绛剧害鏃堕棿 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetUserResumeQueryResultExperience.EnterpriseName"> + <summary> + 浼佷笟鍏ㄧО + </summary> + </member> + <member name="P:FlexJobApi.Core.GetUserResumeQueryResultExperience.Name"> + <summary> + 浠诲姟鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.GetUserResumeQueryResultExperience.TaskInfo"> + <summary> + 浠诲姟 + </summary> + </member> + <member name="T:FlexJobApi.Core.GetUserResumeQueryResultTaskInfo"> + <summary> + 鏌ヨ鐢ㄦ埛绠�鍘�-缁撴灉-缁忓巻 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetUserResumeQueryResultTaskInfo.Enterprise"> + <summary> + 浼佷笟 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetUserResumeQueryResultTaskInfo.Name"> + <summary> + 浠诲姟鍚嶇О + </summary> + </member> + <member name="T:FlexJobApi.Core.GetUserResumeQueryResultTaskInfoEnterprise"> + <summary> + 鏌ヨ鐢ㄦ埛绠�鍘�-缁撴灉-缁忓巻 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetUserResumeQueryResultTaskInfoEnterprise.EnterpriseName"> + <summary> + 浼佷笟鍏ㄧО + </summary> + </member> <member name="T:FlexJobApi.Core.GetUserResumesQuery"> <summary> 鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetUserResumesQuery.TaskInfoId"> + <summary> + 浠诲姟Id </summary> </member> <member name="P:FlexJobApi.Core.GetUserResumesQuery.UserExpectJobs"> @@ -6304,6 +6399,12 @@ 濮撳悕 </summary> </member> + <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.ContactPhoneNumber"> + <summary> + 鎵嬫満鍙� + </summary> + <remarks>鑱旂郴鐢佃瘽</remarks> + </member> <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.Gender"> <summary> 鎬у埆 @@ -6354,6 +6455,11 @@ 宸ヤ綔缁忛獙 </summary> </member> + <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.HireStatus"> + <summary> + 褰曠敤鐘舵�� + </summary> + </member> <member name="T:FlexJobApi.Core.GetUserResumeWorkExperienceQuery"> <summary> 鏌ヨ鐢ㄦ埛绠�鍘�-宸ヤ綔缁忛獙 diff --git a/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/SetTaskUserHireCommand.cs b/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/SetTaskUserHireCommand.cs new file mode 100644 index 0000000..dfe355e --- /dev/null +++ b/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/SetTaskUserHireCommand.cs @@ -0,0 +1,36 @@ +锘縰sing MediatR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 浠诲姟褰曠敤 + /// </summary> + [Resource([EnumResourceController.TaskUser])] + public class SetTaskUserHireCommand : IRequest<int> + { + public SetTaskUserHireCommand() + { + UserIds = []; + } + + /// <summary> + /// 浠诲姟Id + /// </summary> + public Guid Id { get; set; } + + /// <summary> + /// 浜哄憳Id + /// </summary> + public List<Guid> UserIds { get; set; } + + /// <summary> + /// 褰曠敤鐘舵�� + /// </summary> + public EnumTaskUserHireStatus HireStatus { get; set; } + } +} diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs index af6affd..d58bef9 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs @@ -50,9 +50,20 @@ public string EnterpriseEnterpriseName { get; set; } /// <summary> + /// 鑱旂郴鐢佃瘽 + /// </summary> + [JsonProperty("contactPhoneNumber")] + public string EnterpriseContactPhoneNumber { get; set; } + + /// <summary> /// 鍦ㄦ嫑宀椾綅鏁伴噺 /// </summary> public int TaskCount { get; set; } + + /// <summary> + /// 鎶ュ悕浜烘暟 + /// </summary> + public int ApplyCount { get; set; } /// <summary> /// 浠诲姟鍚嶇О @@ -168,6 +179,11 @@ /// 鍙戝竷鐘舵�� /// </summary> public EnumTaskReleaseStatus ReleaseStatus { get; set; } + + /// <summary> + /// 褰曠敤鐘舵�� + /// </summary> + public EnumTaskUserHireStatus? HireStatus { get; set; } } diff --git a/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumeQuery.cs b/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumeQuery.cs index 84ee30a..261d847 100644 --- a/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumeQuery.cs +++ b/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumeQuery.cs @@ -33,6 +33,7 @@ UserExpectJobs = []; UserCredentials = []; Photos = []; + TaskInfoUsers = []; } /// <summary> @@ -179,6 +180,11 @@ [AdaptIgnore] [JsonProperty("photos")] public List<string> PhotoImgs => Photos.Select(it => it.Img).ToList(); + + /// <summary> + /// 缁忓巻 + /// </summary> + public List<GetUserResumeQueryResultExperience> TaskInfoUsers { get; set; } } /// <summary> @@ -263,4 +269,60 @@ /// </summary> public string Img { get; set; } } + + /// <summary> + /// 鏌ヨ鐢ㄦ埛绠�鍘�-缁撴灉-缁忓巻 + /// </summary> + public class GetUserResumeQueryResultExperience + { + /// <summary> + /// 绛剧害鏃堕棿 + /// </summary> + public DateTime? SignContractTime { get; set; } + + /// <summary> + /// 浼佷笟鍏ㄧО + /// </summary> + public string EnterpriseName => TaskInfo.Enterprise.EnterpriseName; + + /// <summary> + /// 浠诲姟鍚嶇О + /// </summary> + public string Name => TaskInfo.Name; + + /// <summary> + /// 浠诲姟 + /// </summary> + [JsonIgnore, SwaggerIgnore] + public GetUserResumeQueryResultTaskInfo TaskInfo { get; set; } + } + + /// <summary> + /// 鏌ヨ鐢ㄦ埛绠�鍘�-缁撴灉-缁忓巻 + /// </summary> + public class GetUserResumeQueryResultTaskInfo + { + /// <summary> + /// 浼佷笟 + /// </summary> + public GetUserResumeQueryResultTaskInfoEnterprise Enterprise { get; set; } + + /// <summary> + /// 浠诲姟鍚嶇О + /// </summary> + public string Name { get; set; } + + } + + /// <summary> + /// 鏌ヨ鐢ㄦ埛绠�鍘�-缁撴灉-缁忓巻 + /// </summary> + public class GetUserResumeQueryResultTaskInfoEnterprise + { + /// <summary> + /// 浼佷笟鍏ㄧО + /// </summary> + public string EnterpriseName { get; set; } + + } } diff --git a/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumesQuery.cs b/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumesQuery.cs index e87dd4d..de06013 100644 --- a/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumesQuery.cs +++ b/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumesQuery.cs @@ -20,6 +20,11 @@ } /// <summary> + /// 浠诲姟Id + /// </summary> + public Guid? TaskInfoId { get; set; } + + /// <summary> /// 鏈熸湜宀椾綅缂栧彿 /// </summary> public List<string> UserExpectJobs { get; set; } @@ -80,6 +85,12 @@ public string Name { get; set; } /// <summary> + /// 鎵嬫満鍙� + /// </summary> + /// <remarks>鑱旂郴鐢佃瘽</remarks> + public string ContactPhoneNumber { get; set; } + + /// <summary> /// 鎬у埆 /// </summary> public EnumUserGender? Gender { get; set; } @@ -130,5 +141,10 @@ /// </summary> public string WorkExperience { get; set; } + /// <summary> + /// 褰曠敤鐘舵�� + /// </summary> + public EnumTaskUserHireStatus? HireStatus { get; set; } + } } diff --git a/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml b/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml index b295f1a..57c3cb0 100644 --- a/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml +++ b/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml @@ -99,5 +99,13 @@ <param name="cancellationToken"></param> <returns></returns> </member> + <member name="M:FlexJobApi.FlexJobServer.Application.TaskUserCommandHandler.Handle(FlexJobApi.Core.SetTaskUserHireCommand,System.Threading.CancellationToken)"> + <summary> + 浠诲姟褰曠敤 + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> </members> </doc> diff --git a/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs b/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs index 0f9abe1..16f86d1 100644 --- a/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs @@ -18,7 +18,8 @@ IRepository<UserTaskCollect> repUserTaskCollect ) : IRequestHandler<CollectTaskCommand, int>, - IRequestHandler<ApplyTaskCommand, int> + IRequestHandler<ApplyTaskCommand, int>, + IRequestHandler<SetTaskUserHireCommand, int> { private readonly IRepository<TaskInfoUser> rep = rep; private readonly IRepository<UserTaskCollect> repUserTaskCollect = repUserTaskCollect; @@ -82,5 +83,36 @@ } return addIds.Count; } + + /// <summary> + /// 浠诲姟褰曠敤 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<int> Handle(SetTaskUserHireCommand request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + var entities = await rep.AsQueryable() + .Where(it => + it.TaskInfo.EnterpriseId == logier.Id + && it.TaskInfoId == request.Id + && request.UserIds.Contains(it.UserId) + && it.HireStatus != request.HireStatus) + .ToListAsync(cancellationToken); + if (entities.IsNotNull()) + { + foreach (var entity in entities) + { + entity.HireStatus = request.HireStatus; + if (entity.HireStatus == EnumTaskUserHireStatus.Pass) + { + entity.SignContractStatus = EnumTaskUserSignContractStatus.Pass; + } + } + await rep.UpdateAsync(entities); + } + return entities.Count; + } } } diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs index 016884a..af45201 100644 --- a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs @@ -34,13 +34,22 @@ /// <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.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; } diff --git a/FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs b/FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs index 961938c..f693340 100644 --- a/FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs +++ b/FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs @@ -39,6 +39,10 @@ { var logier = JwtUtils.GetCurrentLogier(); var q = rep.AsQueryable().AsNoTracking(); + if (request.TaskInfoId.HasValue) + { + q = q.Where(it => it.TaskInfoUsers.Any(tu => tu.TaskInfoId == request.TaskInfoId)); + } if (request.UserExpectJobs.IsNotNull()) { q = q.Where(it => @@ -81,9 +85,12 @@ PersonalIdentityContent = it.PersonalIdentity.Content, EducationalBackgroundCode = it.EducationalBackgroundCode, EducationalBackgroundContent = it.EducationalBackground.Content, - TaskCount = it.TaskInfoUsers.Count(tu => tu.SignContractStatus == EnumTaskUserSignContractStatus.Pass), + TaskCount = it.TaskInfoUsers.Count(tu => tu.HireStatus == EnumTaskUserHireStatus.Pass), WorkSeniority = it.WorkSeniority, - WorkExperience = it.WorkExperience + WorkExperience = it.WorkExperience, + HireStatus = request.TaskInfoId.HasValue + ? it.TaskInfoUsers.Where(it => it.TaskInfoId == request.TaskInfoId).Select(it => it.HireStatus as EnumTaskUserHireStatus?).FirstOrDefault() + : null }); var result = await request.PageModel.GetPagedListAsync<GetUserResumesQueryResult, GetUserResumesQueryResultItem>(s, cancellationToken); return result; @@ -103,8 +110,10 @@ request.UserId = logier.Id; } if (request.UserId == null) throw Oops.Oh(EnumErrorCodeType.s400, "璇烽�夋嫨鐢ㄦ埛"); - var model = await request.UserId.Value + var model = await rep.AsQueryable().AsNoTracking() + .Where(it => it.Id == request.UserId) .GetDetail<User, GetUserResumeQueryResult>(cancellationToken); + model.TaskInfoUsers = model.TaskInfoUsers.Where(it => it.SignContractTime.HasValue).ToList(); model.TaskCount = await rep.Change<TaskInfoUser>().AsQueryable().AsNoTracking() .Where(it => it.UserId == model.Id && it.HireStatus == EnumTaskUserHireStatus.Pass) .CountAsync(); -- Gitblit v1.9.1