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