From 5573750ed0d2302df49dd07901fadf3c8ef44d39 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期一, 11 八月 2025 15:58:24 +0800 Subject: [PATCH] feat:报名 --- FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs | 63 +++++++++++++++++---- FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml | 10 +++ FlexJobApi.Core/FlexJobApi.Core.xml | 22 +++++++ FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs | 11 +++ FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs | 12 +++ FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/CollectTaskCommand.cs | 16 ++++- FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/ApplyTaskCommand.cs | 26 ++++++++ FlexJobApi.Core/FlexJobApi.Core.csproj | 1 8 files changed, 142 insertions(+), 19 deletions(-) diff --git a/FlexJobApi.Core/FlexJobApi.Core.csproj b/FlexJobApi.Core/FlexJobApi.Core.csproj index e622fd7..7b5646b 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.csproj +++ b/FlexJobApi.Core/FlexJobApi.Core.csproj @@ -37,6 +37,7 @@ <ItemGroup> <Folder Include="Models\CommonServer\Schedules\Queries\" /> + <Folder Include="Models\FlexJobServer\TaskUsers\Queries\" /> </ItemGroup> </Project> diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index 02334e7..fbce0ba 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/FlexJobApi.Core/FlexJobApi.Core.xml @@ -3777,6 +3777,11 @@ 楠屾敹鐘舵�� </summary> </member> + <member name="P:FlexJobApi.Core.GetTaskInfosQuery.HireStatus"> + <summary> + 褰曠敤鐘舵�� + </summary> + </member> <member name="P:FlexJobApi.Core.GetTaskInfosQueryResult.ObjectData"> <summary> 缁熻 @@ -3937,6 +3942,11 @@ 鍒涘缓鏃堕棿 </summary> </member> + <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.HireStatus"> + <summary> + 褰曠敤鐘舵�� + </summary> + </member> <member name="T:FlexJobApi.Core.TaskInfoRepository"> <summary> 浠诲姟浠撳簱 @@ -3951,12 +3961,22 @@ <param name="logier"></param> <returns></returns> </member> + <member name="T:FlexJobApi.Core.ApplyTaskCommand"> + <summary> + 鎶ュ悕浠诲姟 + </summary> + </member> + <member name="P:FlexJobApi.Core.ApplyTaskCommand.Ids"> + <summary> + 浠诲姟Id + </summary> + </member> <member name="T:FlexJobApi.Core.CollectTaskCommand"> <summary> 鏀惰棌浠诲姟 </summary> </member> - <member name="P:FlexJobApi.Core.CollectTaskCommand.Id"> + <member name="P:FlexJobApi.Core.CollectTaskCommand.Ids"> <summary> 浠诲姟Id </summary> diff --git a/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/ApplyTaskCommand.cs b/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/ApplyTaskCommand.cs new file mode 100644 index 0000000..b334f8c --- /dev/null +++ b/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/ApplyTaskCommand.cs @@ -0,0 +1,26 @@ +锘縰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 ApplyTaskCommand : IRequest<int> + { + public ApplyTaskCommand() + { + Ids = []; + } + + /// <summary> + /// 浠诲姟Id + /// </summary> + public List<Guid> Ids { get; set; } + } +} diff --git a/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/CollectTaskCommand.cs b/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/CollectTaskCommand.cs index 6188d71..0d8e881 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/CollectTaskCommand.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/CollectTaskCommand.cs @@ -10,12 +10,22 @@ /// <summary> /// 鏀惰棌浠诲姟 /// </summary> - [Resource([EnumResourceController.Task])] - public class CollectTaskCommand : IRequest<bool> + [Resource([EnumResourceController.TaskUser])] + public class CollectTaskCommand : IRequest<int> { + public CollectTaskCommand() + { + Ids = []; + } + /// <summary> /// 浠诲姟Id /// </summary> - public Guid Id { get; set; } + public List<Guid> Ids { get; set; } + + /// <summary> + /// 鏄惁鏀惰棌 + /// </summary> + public bool IsCollect { get; set; } } } diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs index d64ade0..80a6fef 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs @@ -16,6 +16,7 @@ public GetTaskInfosQuery() { BenefitCodes = []; + HireStatus = []; } /// <summary> @@ -77,6 +78,11 @@ /// 楠屾敹鐘舵�� /// </summary> public EnumTaskCheckReceiveStatus? CheckReceiveStatus { get; set; } + + /// <summary> + /// 褰曠敤鐘舵�� + /// </summary> + public List<EnumTaskUserHireStatus> HireStatus { get; set; } } public class GetTaskInfosQueryResult : PagedListQueryResult<GetTaskInfosQueryResultItem> @@ -245,5 +251,10 @@ /// 鍒涘缓鏃堕棿 /// </summary> public DateTimeOffset CreatedTime { 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 d92683a..b295f1a 100644 --- a/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml +++ b/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml @@ -78,7 +78,7 @@ 浠诲姟闆囦剑鍛戒护澶勭悊鍣� </summary> </member> - <member name="M:FlexJobApi.FlexJobServer.Application.TaskUserCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.UserTaskCollect})"> + <member name="M:FlexJobApi.FlexJobServer.Application.TaskUserCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUser},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.UserTaskCollect})"> <summary> 浠诲姟闆囦剑鍛戒护澶勭悊鍣� </summary> @@ -91,5 +91,13 @@ <param name="cancellationToken"></param> <returns></returns> </member> + <member name="M:FlexJobApi.FlexJobServer.Application.TaskUserCommandHandler.Handle(FlexJobApi.Core.ApplyTaskCommand,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 6b6b6f3..0f9abe1 100644 --- a/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs @@ -14,10 +14,13 @@ /// 浠诲姟闆囦剑鍛戒护澶勭悊鍣� /// </summary> public class TaskUserCommandHandler( + IRepository<TaskInfoUser> rep, IRepository<UserTaskCollect> repUserTaskCollect ) : - IRequestHandler<CollectTaskCommand, bool> + IRequestHandler<CollectTaskCommand, int>, + IRequestHandler<ApplyTaskCommand, int> { + private readonly IRepository<TaskInfoUser> rep = rep; private readonly IRepository<UserTaskCollect> repUserTaskCollect = repUserTaskCollect; /// <summary> @@ -26,22 +29,58 @@ /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - public async Task<bool> Handle(CollectTaskCommand request, CancellationToken cancellationToken) + public async Task<int> Handle(CollectTaskCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); - var entity = await repUserTaskCollect.AsQueryable().AsNoTracking() - .Where(it => it.TaskInfoId == request.Id && it.UserId == logier.Id) - .FirstOrDefaultAsync(cancellationToken); - if (entity == null) + var collects = await repUserTaskCollect.AsQueryable().AsNoTracking() + .Where(it => request.Ids.Contains(it.TaskInfoId) && it.UserId == logier.Id) + .ToListAsync(cancellationToken); + if (request.IsCollect) { - entity = new UserTaskCollect + var addIds = request.Ids.Where(it => !collects.Any(c => c.TaskInfoId == it)).ToList(); + foreach (var addId in addIds) { - TaskInfoId = request.Id, - UserId = logier.Id - }; - await repUserTaskCollect.InsertAsync(entity); + var entity = new UserTaskCollect + { + TaskInfoId = addId, + UserId = logier.Id + }; + await repUserTaskCollect.InsertAsync(entity); + } + return addIds.Count; } - return true; + else + { + await repUserTaskCollect.DeleteAsync(collects); + return collects.Count; + } + } + + /// <summary> + /// 鎶ュ悕浠诲姟 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<int> Handle(ApplyTaskCommand request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + var applyIds = await rep.AsQueryable().AsNoTracking() + .Where(it => request.Ids.Contains(it.TaskInfoId) && it.UserId == logier.Id) + .Select(it => it.TaskInfoId) + .ToListAsync(cancellationToken); + var addIds = request.Ids.Where(it => !applyIds.Contains(it)).ToList(); + foreach (var addId in addIds) + { + var entity = new TaskInfoUser + { + TaskInfoId = addId, + UserId = logier.Id, + HireStatus = EnumTaskUserHireStatus.Wait + }; + await rep.InsertAsync(entity); + } + return addIds.Count; } } } diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs index 40d49f9..e3468a9 100644 --- a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs @@ -52,7 +52,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)); @@ -80,6 +81,10 @@ 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.Users.Any(u => u.UserId == logier.Id && request.HireStatus.Contains(u.HireStatus))); } var count = new GetTaskInfosQueryResultObjectData @@ -142,7 +147,10 @@ CheckReceiveStatus = t.CheckReceiveStatus, CreatedTime = t.CreatedTime, RecommendStatus = t.RecommendStatus, - SettlementStatus = t.SettlementStatus + SettlementStatus = t.SettlementStatus, + HireStatus = logier != null + ? t.Users.Where(it => it.UserId == logier.Id).Select(u => u.HireStatus).FirstOrDefault() + : null }; var result = await request.PageModel.GetPagedListAsync<GetTaskInfosQueryResult, GetTaskInfosQueryResultItem>(s, cancellationToken); result.ObjectData = count; -- Gitblit v1.9.1