From 2fe93fe5c23f983b406ce77e5ec0778b578314bb Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期二, 12 八月 2025 16:58:00 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs              |   43 ++++++++++++++
 FlexJobApi.Core/Enums/Tasks/EnumTaskCheckReceiveStatus.cs                           |    6 +
 FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs          |   31 +++++++++
 FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetCheckReceiveTaskInfosQuery.cs |   79 ++++++++++++++++++++++++++
 4 files changed, 156 insertions(+), 3 deletions(-)

diff --git a/FlexJobApi.Core/Enums/Tasks/EnumTaskCheckReceiveStatus.cs b/FlexJobApi.Core/Enums/Tasks/EnumTaskCheckReceiveStatus.cs
index 8fb8d6a..23790e2 100644
--- a/FlexJobApi.Core/Enums/Tasks/EnumTaskCheckReceiveStatus.cs
+++ b/FlexJobApi.Core/Enums/Tasks/EnumTaskCheckReceiveStatus.cs
@@ -12,9 +12,13 @@
     public enum EnumTaskCheckReceiveStatus
     {
         /// <summary>
+        /// 寰呮彁浜�
+        /// </summary>
+        WaitSubmit = 10,
+        /// <summary>
         /// 寰呴獙鏀�
         /// </summary>
-        Wait = 10,
+        WaitCheckReceive = 10,
         /// <summary>
         /// 宸查獙鏀�
         /// </summary>
diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetCheckReceiveTaskInfosQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetCheckReceiveTaskInfosQuery.cs
new file mode 100644
index 0000000..5ba7f83
--- /dev/null
+++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetCheckReceiveTaskInfosQuery.cs
@@ -0,0 +1,79 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 鏌ヨ楠屾敹浠诲姟鍒嗛〉鍒楄〃
+    /// </summary>
+    [Resource([EnumResourceController.Task])]
+    public class GetCheckReceiveTaskInfosQuery : PagedListQuery<GetCheckReceiveTaskInfosQueryResult, GetCheckReceiveTaskInfosQueryResultItem>
+    {
+        /// <summary>
+        /// 鍏抽敭瀛�
+        /// </summary>
+        public string Keywords { get; set; }
+
+        /// <summary>
+        /// 楠屾敹鏃ユ湡-鏈�鏃╂椂闂�
+        /// </summary>
+        public DateTime? SubmitTimeBegin { get; set; }
+
+        /// <summary>
+        /// 楠屾敹鏃ユ湡-鏈�鏅氭椂闂�
+        /// </summary>
+        public DateTime? SubmitTimeEnd { get; set; }
+
+        /// <summary>
+        /// 楠屾敹鐘舵��
+        /// </summary>
+        public EnumTaskCheckReceiveStatus? CheckReceiveStatus { get; set; }
+    }
+
+    /// <summary>
+    /// 鏌ヨ楠屾敹浠诲姟鍒嗛〉鍒楄〃-缁撴灉
+    /// </summary>
+    public class GetCheckReceiveTaskInfosQueryResult : PagedListQueryResult<GetCheckReceiveTaskInfosQueryResultItem>
+    {
+
+    }
+
+    /// <summary>
+    /// 鏌ヨ楠屾敹浠诲姟鍒嗛〉鍒楄〃-缁撴灉-椤�
+    /// </summary>
+    public class GetCheckReceiveTaskInfosQueryResultItem
+    {
+        /// <summary>
+        /// 浠诲姟Id
+        /// </summary>
+        public Guid Id { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍚嶇О
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 浠诲姟寮�濮嬫椂闂�
+        /// </summary>
+        public DateTime BeginTime { get; set; }
+
+        /// <summary>
+        /// 浠诲姟缁撴潫鏃堕棿
+        /// </summary>
+        public DateTime EndTime { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍦扮偣鍚嶇О
+        /// </summary>
+        public string AddressName { get; set; }
+
+        /// <summary>
+        /// 楠屾敹鐘舵��
+        /// </summary>
+        public EnumTaskCheckReceiveStatus CheckReceiveStatus { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs
index d58bef9..b2e29cd 100644
--- a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs
+++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs
@@ -184,8 +184,51 @@
         /// 褰曠敤鐘舵��
         /// </summary>
         public EnumTaskUserHireStatus? HireStatus { get; set; }
+
+        /// <summary>
+        /// 鎴戠殑鎶ュ悕鍒楄〃鐘舵��
+        /// </summary>
+        public GetTaskInfoQueryResultApplyButton? ApplyButton { get; set; }
+
+        /// <summary>
+        /// 鎴戠殑宸插綍鐢ㄥ垪琛ㄧ姸鎬�
+        /// </summary>
+        public GetTaskInfoQueryResultHireButton? HireButton { get; set; }
     }
 
+    /// <summary>
+    /// 鎴戠殑鎶ュ悕鍒楄〃-璇︽儏-鎸夐挳绫诲瀷
+    /// </summary>
+    public enum GetTaskInfoQueryResultApplyButton
+    {
+        /// <summary>
+        /// 寰呯‘璁�
+        /// </summary>
+        WaitHire = 10,
+        /// <summary>
+        /// 鍘荤绾�
+        /// </summary>
+        WaitSignContract = 20
+    }
+
+    /// <summary>
+    /// 鎴戠殑褰曠敤鍒楄〃-璇︽儏-鎸夐挳绫诲瀷
+    /// </summary>
+    public enum GetTaskInfoQueryResultHireButton
+    {
+        /// <summary>
+        /// 鐢宠楠屾敹
+        /// </summary>
+        ApplyCheckReceive = 1,
+        /// <summary>
+        /// 杩涜涓�
+        /// </summary>
+        InProcess = 10,
+        /// <summary>
+        /// 宸插畬鎴�
+        /// </summary>
+        Completed = 20
+    }
 
     /// <summary>
     /// 鏌ヨ浠诲姟璇︽儏-缁撴灉-绂忓埄
diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs
index 3f46ec6..fe0b498 100644
--- a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs
+++ b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs
@@ -37,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)
@@ -48,11 +49,37 @@
                 .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);
             }

--
Gitblit v1.9.1