BaseTask.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. namespace App\Modules\UserTask\Services;
  3. use App\Modules\User\Models\User;
  4. use App\Modules\UserTask\Models\Task;
  5. use Exception;
  6. use Illuminate\Support\Facades\DB;
  7. /**
  8. * @property Task $task
  9. * @property int $uid
  10. */
  11. abstract class BaseTask
  12. {
  13. /**
  14. * 未符合条件
  15. */
  16. const under_status = 0;
  17. /**
  18. * 符合条件
  19. */
  20. const up_status = 1;
  21. /**
  22. * 已领取
  23. */
  24. const get_status = 2;
  25. /**
  26. * 用户书币奖励
  27. */
  28. const coin_reward = 1;
  29. /**
  30. * 阅读卡奖励
  31. */
  32. const read_card_reward = 2;
  33. /**
  34. * 注册
  35. */
  36. const register = 'register';
  37. /**
  38. * 加桌
  39. */
  40. const add_desk = 'add_desk';
  41. /**
  42. * 绑定手机号
  43. */
  44. const bind_phone = 'bind_phone';
  45. /**
  46. * 充值
  47. */
  48. const charge = 'charge';
  49. /**
  50. * 阅读
  51. */
  52. const read = 'read';
  53. /**
  54. * 新用户任务code组
  55. */
  56. const new_user_codes = [
  57. 'user_register',
  58. 'add_desk',
  59. 'bind_phone',
  60. ];
  61. /**
  62. * 用户每日任务code组
  63. */
  64. const date_codes = [
  65. 'date_charge_reward',
  66. 'date_read_reward',
  67. 'date_subscribe_reward',
  68. ];
  69. protected $task;
  70. protected $uid;
  71. /**
  72. * 检查任务
  73. */
  74. public abstract function checkUserTask();
  75. /**
  76. * 添加用户任务
  77. */
  78. public abstract function addUserTask();
  79. /**
  80. * 查找用户任务
  81. * @param int $status 任务状态
  82. */
  83. public abstract function findUserTask(int $status);
  84. public function __construct(int $uid, ?Task $task)
  85. {
  86. $this->task = $task ?? new Task;
  87. $this->uid = $uid;
  88. }
  89. /**
  90. * 设置任务
  91. */
  92. public function setTask(Task $task)
  93. {
  94. $this->task = $task;
  95. }
  96. /**
  97. * 处理添加用户任务
  98. */
  99. public function handleAddUserTask()
  100. {
  101. if (!$this->checkUserTask()) {
  102. $this->addUserTask();
  103. }
  104. }
  105. /**
  106. * 处理用户任务奖励
  107. * @return int
  108. */
  109. public function handleUserTaskReward()
  110. {
  111. $user_task = $this->findUserTask(self::up_status);
  112. if ($user_task) {
  113. try {
  114. DB::beginTransaction();
  115. $user_task->status = self::get_status;
  116. $user_task->save();
  117. switch ($this->task->reward_type) {
  118. case self::coin_reward:
  119. $this->coinReward();
  120. break;
  121. case self::read_card_reward:
  122. $this->readCardReward();
  123. break;
  124. }
  125. DB::commit();
  126. return 1;
  127. } catch (Exception $e) {
  128. myLog('user_task')->error($e->getMessage());
  129. DB::rollback();
  130. return -1;
  131. }
  132. } else {
  133. return 0;
  134. }
  135. }
  136. /**
  137. * 书币奖励
  138. */
  139. protected function coinReward()
  140. {
  141. User::where('id', $this->uid)->update(
  142. [
  143. 'balance' => DB::raw('balance+' . $this->task->value),
  144. 'reward_balance' => DB::raw('reward_balance+' . $this->task->value)
  145. ]
  146. );
  147. }
  148. /**
  149. * 阅读卡奖励
  150. */
  151. protected function readCardReward()
  152. {
  153. }
  154. }