From 6f8074a182c9ee36c9972935b4442ef70711b465 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期二, 12 八月 2025 10:08:36 +0800 Subject: [PATCH] fix:bug --- FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs | 100 ++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 88 insertions(+), 12 deletions(-) diff --git a/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs b/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs index 6b6b6f3..6e8a1e9 100644 --- a/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs @@ -14,10 +14,14 @@ /// 浠诲姟闆囦剑鍛戒护澶勭悊鍣� /// </summary> public class TaskUserCommandHandler( + IRepository<TaskInfoUser> rep, IRepository<UserTaskCollect> repUserTaskCollect ) : - IRequestHandler<CollectTaskCommand, bool> + IRequestHandler<CollectTaskCommand, int>, + IRequestHandler<ApplyTaskCommand, int>, + IRequestHandler<SetTaskUserHireCommand, int> { + private readonly IRepository<TaskInfoUser> rep = rep; private readonly IRepository<UserTaskCollect> repUserTaskCollect = repUserTaskCollect; /// <summary> @@ -26,22 +30,94 @@ /// <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; + } + + /// <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.HireTime = DateTime.Now; + entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Pass; + entity.UserSignContractTime = DateTime.Now; + entity.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Pass; + entity.EnterpriseSignContractTime = DateTime.Now; + entity.ArrangeStatus = EnumTaskUserArrangeStatus.Wait; + } + } + await rep.UpdateAsync(entities); + } + return entities.Count; } } } -- Gitblit v1.9.1