TaskUserTaskRepository.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. * @var array
  23. */
  24. protected $with = ['task'];
  25. /**
  26. * 获取查询构建器
  27. *
  28. * @return \Illuminate\Database\Eloquent\Builder
  29. */
  30. public function query()
  31. {
  32. return $this->eloquentClass::with(['task']);
  33. }
  34. /**
  35. * 获取用户的所有任务
  36. *
  37. * @param int $userId 用户ID
  38. * @param int|null $status 任务状态
  39. * @return array 用户任务列表
  40. */
  41. public function getUserTasks(int $userId, ?int $status = null): array
  42. {
  43. $query = $this->eloquentClass::where('user_id', $userId);
  44. if ($status !== null) {
  45. $query->where('status', $status);
  46. }
  47. return $query->with(['task', 'task.category'])
  48. ->get()
  49. ->toArray();
  50. }
  51. /**
  52. * 获取用户的特定任务
  53. *
  54. * @param int $userId 用户ID
  55. * @param int $taskId 任务ID
  56. * @return TaskUserTask|null 用户任务对象
  57. */
  58. public function getUserTask(int $userId, int $taskId): ?TaskUserTask
  59. {
  60. return $this->eloquentClass::where('user_id', $userId)
  61. ->where('task_id', $taskId)
  62. ->first();
  63. }
  64. /**
  65. * 获取即将过期的任务
  66. *
  67. * @param int $hoursThreshold 过期时间阈值(小时)
  68. * @return array 即将过期的任务列表
  69. */
  70. public function getExpiringTasks(int $hoursThreshold = 24): array
  71. {
  72. $expiryTime = now()->addHours($hoursThreshold);
  73. return $this->eloquentClass::where('status', 1) // 进行中
  74. ->whereNotNull('expire_at')
  75. ->where('expire_at', '<=', $expiryTime)
  76. ->where('expire_at', '>', now())
  77. ->with(['task'])
  78. ->get()
  79. ->toArray();
  80. }
  81. }