TaskUserTaskRepository.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace App\Module\Task\Repositorys;
  3. use App\Module\Task\Models\TaskUserTask;
  4. use Dcat\Admin\Repositories\EloquentRepository;
  5. /**
  6. * 用户任务关联数据仓库类
  7. *
  8. * 提供用户任务关联数据的访问和操作功能。
  9. * 该类是用户任务关联模块与后台管理系统的桥梁,用于处理用户任务关联数据的CRUD操作。
  10. */
  11. class TaskUserTaskRepository extends EloquentRepository
  12. {
  13. /**
  14. * 关联的Eloquent模型类
  15. *
  16. * @var string
  17. */
  18. protected $eloquentClass = TaskUserTask::class;
  19. /**
  20. * 获取用户的所有任务
  21. *
  22. * @param int $userId 用户ID
  23. * @param int|null $status 任务状态
  24. * @return array 用户任务列表
  25. */
  26. public function getUserTasks(int $userId, ?int $status = null): array
  27. {
  28. $query = $this->eloquentClass::where('user_id', $userId);
  29. if ($status !== null) {
  30. $query->where('status', $status);
  31. }
  32. return $query->with(['task', 'task.category'])
  33. ->get()
  34. ->toArray();
  35. }
  36. /**
  37. * 获取用户的特定任务
  38. *
  39. * @param int $userId 用户ID
  40. * @param int $taskId 任务ID
  41. * @return TaskUserTask|null 用户任务对象
  42. */
  43. public function getUserTask(int $userId, int $taskId): ?TaskUserTask
  44. {
  45. return $this->eloquentClass::where('user_id', $userId)
  46. ->where('task_id', $taskId)
  47. ->first();
  48. }
  49. /**
  50. * 获取即将过期的任务
  51. *
  52. * @param int $hoursThreshold 过期时间阈值(小时)
  53. * @return array 即将过期的任务列表
  54. */
  55. public function getExpiringTasks(int $hoursThreshold = 24): array
  56. {
  57. $expiryTime = now()->addHours($hoursThreshold);
  58. return $this->eloquentClass::where('status', 1) // 进行中
  59. ->whereNotNull('expire_at')
  60. ->where('expire_at', '<=', $expiryTime)
  61. ->where('expire_at', '>', now())
  62. ->with(['task'])
  63. ->get()
  64. ->toArray();
  65. }
  66. }