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 repUserTaskCollect ) : IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; private readonly IRepository repUserTaskCollect = repUserTaskCollect; /// /// 收藏任务 /// /// /// /// public async Task Handle(CollectTaskCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var collects = await repUserTaskCollect.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 UserTaskCollect { TaskInfoId = addId, UserId = logier.Id }; await repUserTaskCollect.InsertAsync(entity); } return addIds.Count; } else { await repUserTaskCollect.DeleteAsync(collects); return collects.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.EnterpriseEmployee.HireStatus == EnumTaskUserHireStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "该灵工已录用"); entity.EnterpriseEmployee.HireStatus = request.HireStatus; if (entity.EnterpriseEmployee.HireStatus == EnumTaskUserHireStatus.Pass) { entity.EnterpriseEmployee.HireTime = DateTime.Now; entity.EnterpriseEmployee.UserSignContractStatus = EnumTaskUserSignContractStatus.Pass; entity.EnterpriseEmployee.UserSignContractTime = DateTime.Now; entity.EnterpriseEmployee.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Pass; entity.EnterpriseEmployee.EnterpriseSignContractTime = DateTime.Now; entity.ArrangeStatus = EnumTaskUserArrangeStatus.Wait; } return entity.Id; } } }