| | |
| | | IRepository<TaskInfoUserSubmit> repTaskInfoUserSubmit |
| | | ) : |
| | | IRequestHandler<SubmitCheckReceiveTaskCommand, Guid>, |
| | | IRequestHandler<CheckReceiveTaskCommand, Guid> |
| | | IRequestHandler<CheckReceiveTaskCommand, Guid>, |
| | | IRequestHandler<ExportTaskCheckReceiveTaskUsersCommand, string> |
| | | { |
| | | private readonly IRepository<TaskInfo> repTaskInfo = repTaskInfo; |
| | | private readonly IRepository<TaskInfoUser> repTaskInfoUser = repTaskInfoUser; |
| | |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | var task = await repTaskInfo.AsQueryable() |
| | | .FirstOrDefaultAsync(it => it.Id == request.TaskInfoId, cancellationToken); |
| | | if (task == null) throw Oops.Oh(EnumErrorCodeType.s404, "该任务"); |
| | | if (task.Status == EnumTaskStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "该任务暂未安排人员"); |
| | | if (task.ReleaseStatus == EnumTaskReleaseStatus.Stopped) throw Oops.Oh(EnumErrorCodeType.s510, "该任务已结束"); |
| | | if (!(task.BeginTime <= now && now <= task.EndTime)) throw Oops.Oh(EnumErrorCodeType.s510, "该任务已结束"); |
| | | if (task == null) throw Oops.Oh(EnumErrorCodeType.s404, "任务"); |
| | | if (task.Status != EnumTaskStatus.Complete) throw Oops.Oh(EnumErrorCodeType.s510, "任务暂未安排人员"); |
| | | if (task.ReleaseStatus != EnumTaskReleaseStatus.InProcess) throw Oops.Oh(EnumErrorCodeType.s510, "任务已结束"); |
| | | if (request.Date.Date > now.Date) |
| | | throw Oops.Oh(EnumErrorCodeType.s510, "任务时间未开始"); |
| | | if (task.BeginTime > request.Date.Date) |
| | | throw Oops.Oh(EnumErrorCodeType.s510, "任务未开始"); |
| | | if (request.Date.Date > task.EndTime) |
| | | throw Oops.Oh(EnumErrorCodeType.s510, "任务已结束"); |
| | | var taskUser = await repTaskInfoUser.AsQueryable() |
| | | .FirstOrDefaultAsync(it => it.TaskInfoId == task.Id && it.EnterpriseEmployee.UserId == logier.Id, cancellationToken); |
| | | if (taskUser == null) throw Oops.Oh(EnumErrorCodeType.s404, "该报名信息"); |
| | | if (taskUser.ArrangeStatus == EnumTaskUserArrangeStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "暂未安排该任务"); |
| | | if (taskUser == null) throw Oops.Oh(EnumErrorCodeType.s404, "报名信息"); |
| | | //if (taskUser.HireStatus != EnumTaskUserHireStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "您未录用"); |
| | | if (taskUser.ArrangeStatus != EnumTaskUserArrangeStatus.Complete) throw Oops.Oh(EnumErrorCodeType.s510, "暂未安排"); |
| | | task.CheckReceiveStatus = EnumTaskCheckReceiveStatus.WaitCheckReceive; |
| | | task.LastSubmitTime = now; |
| | | taskUser.CheckReceiveStatus = EnumTaskCheckReceiveStatus.WaitCheckReceive; |
| | | taskUser.LastSubmitTime = now; |
| | | var submit = await repTaskInfoUserSubmit.AsQueryable() |
| | | .Include(it => it.Files) |
| | |
| | | submit = new TaskInfoUserSubmit |
| | | { |
| | | TaskInfoUserId = taskUser.Id, |
| | | Date = now.Date, |
| | | Date = request.Date, |
| | | Files = request.Files.Select(it => new TaskInfoUserSubmitFile |
| | | { |
| | | File = it |
| | |
| | | var submit = await repTaskInfoUserSubmit.AsQueryable() |
| | | .Include(it => it.Files) |
| | | .FirstOrDefaultAsync(it => it.Id == request.Id); |
| | | if (submit == null) throw Oops.Oh(EnumErrorCodeType.s404, "该提交信息"); |
| | | if (submit == null) throw Oops.Oh(EnumErrorCodeType.s404, "提交信息"); |
| | | var taskUser = await repTaskInfoUser.AsQueryable() |
| | | .FirstOrDefaultAsync(it => it.Id == submit.TaskInfoUserId, cancellationToken); |
| | | if (taskUser == null) throw Oops.Oh(EnumErrorCodeType.s404, "该灵工信息"); |
| | | if (taskUser.ArrangeStatus == EnumTaskUserArrangeStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "未安排该灵工"); |
| | | if (taskUser == null) throw Oops.Oh(EnumErrorCodeType.s404, "灵工信息"); |
| | | //if (taskUser.HireStatus != EnumTaskUserHireStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "未录用灵工"); |
| | | if (taskUser.ArrangeStatus != EnumTaskUserArrangeStatus.Complete) throw Oops.Oh(EnumErrorCodeType.s510, "未安排灵工"); |
| | | var task = await repTaskInfo.AsQueryable() |
| | | .FirstOrDefaultAsync(it => it.Id == taskUser.TaskInfoId && it.EnterpriseId == logier.EnterpriseId, cancellationToken); |
| | | if (task == null) throw Oops.Oh(EnumErrorCodeType.s404, "该任务"); |
| | | if (task.Status == EnumTaskStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "该任务暂未安排人员"); |
| | | if (task.ReleaseStatus == EnumTaskReleaseStatus.Stopped) throw Oops.Oh(EnumErrorCodeType.s510, "该任务已结束"); |
| | | if (!(task.BeginTime <= now && now <= task.EndTime)) throw Oops.Oh(EnumErrorCodeType.s510, "该任务已结束"); |
| | | if (task == null) throw Oops.Oh(EnumErrorCodeType.s404, "任务"); |
| | | if (task.Status != EnumTaskStatus.Complete) throw Oops.Oh(EnumErrorCodeType.s510, "任务暂未安排人员"); |
| | | if (request.CheckReceiveStatus != EnumTaskUserSubmitCheckReceiveStatus.Success |
| | | && request.CheckReceiveStatus != EnumTaskUserSubmitCheckReceiveStatus.Fail) |
| | | throw Oops.Oh(EnumErrorCodeType.s400, "请选择正确的验收状态"); |
| | |
| | | || it.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.Fail)) |
| | | .Select(it => it.Date) |
| | | .ToListAsync(); |
| | | taskUserSubmitDates.Add(now.Date); |
| | | taskUserSubmitDates.Add(submit.Date); |
| | | if (dates.All(taskUserSubmitDates.Contains)) |
| | | { |
| | | taskUser.CheckReceiveStatus = EnumTaskCheckReceiveStatus.Completed; |
| | |
| | | var taskUserCheckReceiveStatuses = await repTaskInfoUser.AsQueryable().AsNoTracking() |
| | | .Where(it => |
| | | it.TaskInfoId == task.Id |
| | | && it.Id != taskUser.Id) |
| | | && it.Id != taskUser.Id |
| | | && it.ArrangeStatus == EnumTaskUserArrangeStatus.Complete) |
| | | .Select(it => it.CheckReceiveStatus) |
| | | .ToListAsync(); |
| | | taskUserCheckReceiveStatuses.Add(EnumTaskCheckReceiveStatus.Completed); |
| | | if (taskUserCheckReceiveStatuses.All(it => it == EnumTaskCheckReceiveStatus.Completed)) |
| | | { |
| | | task.CheckReceiveStatus = EnumTaskCheckReceiveStatus.Completed; |
| | | task.CheckReceiveTime = DateTime.Now; |
| | | task.SettlementOrderStatus = EnumTaskSettlementOrderStatus.Wait; |
| | | } |
| | | |
| | | await repTaskInfoUserSubmit.UpdateAsync(submit); |
| | | return submit.Id; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 导出验收记录 |
| | | /// </summary> |
| | | /// <param name="request"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public async Task<string> Handle(ExportTaskCheckReceiveTaskUsersCommand request, CancellationToken cancellationToken) |
| | | { |
| | | var models = await repTaskInfoUserSubmit.AsQueryable().AsNoTracking() |
| | | .Where(it => it.TaskInfoUser.TaskInfoId == request.Id) |
| | | .Select(it => new ExportTaskCheckReceiveTaskUsersCommandModel |
| | | { |
| | | UserId = it.TaskInfoUser.EnterpriseEmployee.UserId!.Value, |
| | | Name = it.TaskInfoUser.EnterpriseEmployee.User.Name, |
| | | Identity = it.TaskInfoUser.EnterpriseEmployee.User.Identity, |
| | | ContactPhoneNumber = it.TaskInfoUser.EnterpriseEmployee.User.ContactPhoneNumber, |
| | | CheckReceiveStatus = it.CheckReceiveStatus, |
| | | CheckReceiveTime = it.CheckReceiveTime, |
| | | }) |
| | | .ToListAsync(cancellationToken); |
| | | if (models.IsNotNull()) |
| | | { |
| | | var userIds = models.DistinctSelect(it => it.UserId); |
| | | var bankCards = await repTaskInfoUserSubmit.Change<UserBankCard>().AsQueryable().AsNoTracking() |
| | | .Where(it => userIds.Contains(it.UserId)) |
| | | .Select(it => new |
| | | { |
| | | it.UserId, |
| | | it.Bank, |
| | | it.Code |
| | | }) |
| | | .ToListAsync(cancellationToken); |
| | | foreach (var model in models) |
| | | { |
| | | var bankCard = bankCards.FirstOrDefault(it => it.UserId == model.UserId); |
| | | model.Bank = bankCard?.Bank; |
| | | model.Code = bankCard?.Code; |
| | | } |
| | | } |
| | | var url = await models.ExportExcelToOSS("TaskCheckReceive/Export", "验收记录.xlsx"); |
| | | return url; |
| | | } |
| | | } |
| | | } |