FlexJobApi.Core/FlexJobApi.Core.csproj | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/FlexJobApi.Core.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/ApplyTaskCommand.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/CollectTaskCommand.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
FlexJobApi.Core/FlexJobApi.Core.csproj
@@ -37,6 +37,7 @@ <ItemGroup> <Folder Include="Models\CommonServer\Schedules\Queries\" /> <Folder Include="Models\FlexJobServer\TaskUsers\Queries\" /> </ItemGroup> </Project> 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> FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/ApplyTaskCommand.cs
New file @@ -0,0 +1,26 @@ using 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; } } } 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; } } } 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; } } } 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> 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; } } } 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;