RepeatTask.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace App\Modules\UserTask\Services;
  3. use App\Modules\UserTask\Models\Task;
  4. use App\Modules\UserTask\Models\UserRepeatTask;
  5. /**
  6. * 重复任务
  7. * @property UserRepeatTask $model
  8. */
  9. class RepeatTask extends BaseTask
  10. {
  11. private $model;
  12. public function __construct(int $uid, ?Task $task)
  13. {
  14. $this->model = UserRepeatTask::model($uid);
  15. parent::__construct($uid, $task);
  16. }
  17. public function checkUserTask()
  18. {
  19. $date = $this->getDate();
  20. return $this->model::where('task_id', $this->task->id)
  21. ->where('uid', $this->uid)
  22. ->where('date', '>=', $date)
  23. ->exists();
  24. }
  25. public function addUserTask()
  26. {
  27. $this->model->create([
  28. 'date' => date('Y-m-d'),
  29. 'uid' => $this->uid,
  30. 'task_id' => $this->task->id,
  31. 'status' => self::under_status,
  32. 'type' => $this->task->reward_type,
  33. 'value' => $this->task->value,
  34. ]);
  35. }
  36. public function findUserTask(int $status)
  37. {
  38. $date = $this->getDate();
  39. return $this->model::where('task_id', $this->task->id)
  40. ->where('uid', $this->uid)
  41. ->where('date', '>=', $date)
  42. ->where('status', $status)
  43. ->first();
  44. }
  45. /**
  46. * 判断条件是否符合
  47. * @return bool
  48. */
  49. public function judgeUpTo()
  50. {
  51. return true;
  52. }
  53. /**
  54. * 处理用户符合任务流程
  55. */
  56. public function handleUpToUserTask()
  57. {
  58. $user_task = $this->findUserTask(self::under_status);
  59. if ($user_task && $this->judgeUpTo()) {
  60. $user_task->status = self::up_status;
  61. $user_task->save();
  62. }
  63. }
  64. /**
  65. * 获取日期
  66. */
  67. private function getDate()
  68. {
  69. $diff_day = $this->task->repeat_cycles - 1;
  70. if ($diff_day > 0) {
  71. $date = date('Y-m-d', strtotime("-{$diff_day} days"));
  72. } else {
  73. $date = date('Y-m-d');
  74. }
  75. return $date;
  76. }
  77. }