using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.FriendlyException; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.FlexJobServer.Application { /// /// 任务人员命令处理器 /// public class TaskUserCommandHandler( IRepository rep, IRepository repTaskUserCollect ) : IRequestHandler, IRequestHandler, IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; private readonly IRepository repTaskUserCollect = repTaskUserCollect; /// /// 收藏任务 /// /// /// /// public async Task Handle(CollectTaskCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var collects = await repTaskUserCollect.AsQueryable().AsNoTracking() .Where(it => request.Ids.Contains(it.TaskInfoId) && it.UserId == logier.Id) .ToListAsync(cancellationToken); if (request.IsCollect) { var addIds = request.Ids.Where(it => !collects.Any(c => c.TaskInfoId == it)).ToList(); foreach (var addId in addIds) { var entity = new TaskUserCollect { TaskInfoId = addId, UserId = logier.Id }; await repTaskUserCollect.InsertAsync(entity); } return addIds.Count; } else { await repTaskUserCollect.DeleteAsync(collects); return collects.Count; } } /// /// 清空已停止的任务收藏 /// /// /// /// public async Task Handle(ClearTaskCollectCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var entities = await repTaskUserCollect.AsQueryable() .Where(it => it.TaskInfo.ReleaseStatus == EnumTaskReleaseStatus.Stopped && it.UserId == logier.Id) .ToListAsync(cancellationToken); if (entities.IsNotNull()) { foreach (var entity in entities) { await repTaskUserCollect.DeleteAsync(entity); } } return entities.Count; } /// /// 任务录用 /// /// /// /// public async Task Handle(SetTaskUserHireCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var entity = await rep.AsQueryable() .Include(it => it.EnterpriseEmployee) .Where(it => it.TaskInfo.EnterpriseId == logier.EnterpriseId && it.Id == request.Id) .FirstOrDefaultAsync(cancellationToken); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "报名信息"); if (entity.HireStatus == EnumTaskUserHireStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "灵工已录用"); entity.HireStatus = request.HireStatus; if (entity.HireStatus == EnumTaskUserHireStatus.Pass) { entity.HireTime = DateTime.Now; if (entity.EnterpriseEmployee.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass) { entity.ArrangeStatus = EnumTaskUserArrangeStatus.Wait; } } await rep.UpdateAsync(entity); return entity.Id; } /// /// 任务安排 /// /// /// /// public async Task Handle(SetTaskUserArrangeCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var entity = await rep.AsQueryable() .Include(it => it.TaskInfo) .Include(it => it.EnterpriseEmployee) .Where(it => it.TaskInfo.EnterpriseId == logier.EnterpriseId && it.Id == request.Id) .FirstOrDefaultAsync(cancellationToken); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "报名信息"); if (entity.EnterpriseEmployee.EnterpriseSignContractStatus != EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "灵工未签约"); if (entity.ArrangeStatus == EnumTaskUserArrangeStatus.Complete) throw Oops.Oh(EnumErrorCodeType.s510, "灵工已安排"); entity.ArrangeStatus = request.ArrangeStatus; if (entity.ArrangeStatus == EnumTaskUserArrangeStatus.Complete) { entity.ArrangeTime = DateTime.Now; entity.CheckReceiveStatus = EnumTaskCheckReceiveStatus.WaitSubmit; entity.TaskInfo.Status = EnumTaskStatus.Complete; entity.TaskInfo.CheckReceiveStatus = EnumTaskCheckReceiveStatus.WaitSubmit; } await rep.UpdateAsync(entity); return entity.Id; } } }