/// <summary> /// Метод получит список заданий для вкладки "Мои задания". Т.е задания, работа над которыми начата текущим исполнителем. /// <param name="account">Логин исполнителя.</param> /// </summary> /// <returns>Список заданий.</returns> public async Task <GetResultTask> GetWorkTasksAsync(string account) { try { GetResultTask result = new GetResultTask(); string executorId = await _userService.GetUserIdByLogin(account); if (string.IsNullOrEmpty(executorId)) { throw new NotFoundUserException(account); } var tasks = await _postgre.Tasks .Join(_postgre.TaskCategories, t => t.CategoryCode, tc => tc.CategoryCode, (t, tc) => new { Tasks = t, ParentTaskCategory = tc }) .Join(_postgre.Users, ts => ts.Tasks.OwnerId, u => u.Id, (ts, u) => new { TaskCategory = ts, User = u }) .Join(_postgre.TaskStatuses, tcc => tcc.TaskCategory.Tasks.StatusCode, s => s.StatusCode, (tcc, s) => new { Result = tcc, TaskStatus = s }) .Join(_postgre.Invities, x => x.Result.TaskCategory.Tasks.TaskId, i => i.TaskId, (x, i) => new { ChildUser = x, Invite = i }) .Where(c => c.Invite.IsAccept.Equals(true) && c.ChildUser.TaskStatus.StatusCode.Equals(StatusCode.CODE_WORK) && c.ChildUser.Result.TaskCategory.Tasks.ExecutorId.Equals(executorId) && c.ChildUser.Result.TaskCategory.Tasks.IsPay.Equals(true)) .Select(res => new { res.ChildUser.Result.TaskCategory.Tasks.TaskId, TaskEndda = string.Format("{0:f}", res.ChildUser.Result.TaskCategory.Tasks.TaskEndda), res.ChildUser.Result.TaskCategory.Tasks.TaskTitle, res.ChildUser.Result.TaskCategory.Tasks.TaskDetail, TaskPrice = string.Format("{0:0,0}", res.ChildUser.Result.TaskCategory.Tasks.TaskPrice), res.ChildUser.Result.TaskCategory.Tasks.CountOffers, res.ChildUser.Result.TaskCategory.Tasks.CountViews, res.ChildUser.Result.TaskCategory.Tasks.TypeCode, res.ChildUser.Result.User.UserName, res.ChildUser.Result.TaskCategory.ParentTaskCategory.CategoryName, res.ChildUser.TaskStatus.StatusName }) .ToListAsync(); // Если заданий нет. if (!tasks.Any()) { return(result); } // Запишет логины заказчиков по их OwnerId. foreach (object task in tasks) { string jsonString = JsonSerializer.Serialize(task); ResultTaskOutput item = JsonSerializer.Deserialize <ResultTaskOutput>(jsonString); // Возьмет первые 100 символов из заголовка задания. item.TaskTitle = item.TaskTitle.Length > 100 ? string.Concat(item.TaskTitle.Substring(0, 100), "...") : item.TaskTitle; // Возьмет первые 200 символов из описания задания. item.TaskDetail = item.TaskDetail.Length > 200 ? string.Concat(item.TaskDetail.Substring(0, 200), "...") : item.TaskDetail; result.Tasks.Add(item); } return(result); } catch (Exception ex) { Console.WriteLine(ex); Logger logger = new Logger(_db, ex.GetType().FullName, ex.Message, ex.StackTrace); await logger.LogCritical(); throw; } }
/// <summary> /// Метод выгрузит список заданий, в которых был выбран исполнитель. /// </summary> /// <param name="account">Логин исполнителя.</param> /// <returns>Список приглашений с данными заданий.</returns> public async Task <GetResultTask> InviteAsync(string account) { try { GetResultTask result = new GetResultTask(); // Выберет Id текущего исполнителя по его логину. string executorId = await _userService.GetUserIdByLogin(account); // Получит список заданий, в которых выбран исполнитель. var invities = await _postgre.Tasks .Join(_postgre.TaskCategories, t => t.CategoryCode, tc => tc.CategoryCode, (t, tc) => new { Tasks = t, ParentTaskCategory = tc }) .Join(_postgre.Users, ts => ts.Tasks.OwnerId, u => u.Id, (ts, u) => new { TaskCategory = ts, User = u }) .Join(_postgre.TaskStatuses, tcc => tcc.TaskCategory.Tasks.StatusCode, s => s.StatusCode, (tcc, s) => new { Result = tcc, TaskStatus = s }) .Join(_postgre.Invities, x => x.Result.TaskCategory.Tasks.TaskId, i => i.TaskId, (x, i) => new { ChildUser = x, Invite = i }) .Where(c => c.Invite.ExecutorId.Equals(executorId) && c.ChildUser.Result.TaskCategory.Tasks.StatusCode.Equals(StatusCode.CODE_AUCTION)) .Select(res => new { res.ChildUser.Result.TaskCategory.Tasks.TaskId, TaskEndda = string.Format("{0:f}", res.ChildUser.Result.TaskCategory.Tasks.TaskEndda), res.ChildUser.Result.TaskCategory.Tasks.TaskTitle, res.ChildUser.Result.TaskCategory.Tasks.TaskDetail, TaskPrice = string.Format("{0:0,0}", res.ChildUser.Result.TaskCategory.Tasks.TaskPrice), res.ChildUser.Result.TaskCategory.Tasks.CountOffers, res.ChildUser.Result.TaskCategory.Tasks.CountViews, res.ChildUser.Result.TaskCategory.Tasks.TypeCode, res.ChildUser.Result.User.UserName, res.ChildUser.Result.TaskCategory.ParentTaskCategory.CategoryName, res.ChildUser.TaskStatus.StatusName }) .ToListAsync(); // Если приглашений нет. if (invities.Count <= 0) { return(result); } // Запишет логины заказчиков по их OwnerId. invities.ForEach(invite => { string jsonString = JsonSerializer.Serialize(invite); ResultTaskOutput item = JsonSerializer.Deserialize <ResultTaskOutput>(jsonString); // Запишет логин заказчика. if (item != null) { // Возьмет первые 100 символов из заголовка задания. item.TaskTitle = item.TaskTitle.Length > 100 ? string.Concat(item.TaskTitle.Substring(0, 100), "...") : item.TaskTitle; // Возьмет первые 200 символов из описания задания. item.TaskDetail = item.TaskDetail.Length > 200 ? string.Concat(item.TaskDetail.Substring(0, 200), "...") : item.TaskDetail; } result.Tasks.Add(item); }); return(result); } catch (Exception ex) { Console.WriteLine(ex); Logger logger = new Logger(_db, ex.GetType().FullName, ex.Message, ex.StackTrace); await logger.LogCritical(); throw; } }