TimeTaskSendRewardJob.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace App\Jobs;
  3. use App\Model\TaskAwarkLogModel;
  4. use App\Model\UserModel;
  5. use App\Repositories\Service\QueueService;
  6. use App\Repositories\TaskAwarkLogRepository;
  7. use App\Repositories\UserLevelRelationRepository;
  8. use App\Repositories\UserRepository;
  9. use App\Repositories\UserTaskRepoistory;
  10. use Carbon\Carbon;
  11. use Hyperf\AsyncQueue\Job;
  12. /**
  13. * 限时任务奖励
  14. */
  15. class TimeTaskSendRewardJob extends Job
  16. {
  17. public $params;
  18. public function __construct($params)
  19. {
  20. // 这里最好是普通数据,不要使用携带 IO 的对象,比如 PDO 对象
  21. $this->params = $params;
  22. }
  23. public function handle()
  24. {
  25. try {
  26. $params = $this->params;
  27. // 获取已推荐人数
  28. $number = UserModel::query()->where('parent_uid', $params['user_id'])->count();
  29. // 任务
  30. $taskInfo = make(UserTaskRepoistory::class)->findBy('reward_type', 7);
  31. // 奖励
  32. $reward = json_decode($taskInfo->reward, true);
  33. // 条件
  34. $taskCondition = json_decode($taskInfo->task_condition, true);
  35. $endTime = strtotime($taskCondition['end_time']);
  36. $dateTime = strtotime(date('Y-m-d'));
  37. if ($endTime < $dateTime) {
  38. logger('TimeTaskListener:限时任务已过期', []);
  39. return true;
  40. }
  41. // 获取任务日志
  42. $taskLogInfo = make(TaskAwarkLogRepository::class)->findWhere(['reward_way' => TaskAwarkLogModel::REWARD_WAY_TIME_FILL_IN, 'uid' => $params['user_id']], ['subtask_id'])->keyBy('subtask_id');
  43. foreach ($taskCondition['condition'] as $k => $val) {
  44. if (!isset($taskLogInfo[$k]) && $val == $number) {
  45. $rewardData['reward'] = $reward[$k];
  46. $rewardData['subtask_id'] = $k;
  47. $rewardData['user_id'] = $params['user_id'];
  48. // 异步发放奖励
  49. logger('TimeTaskListener:准备异步发放奖励', [$params['user_id']]);
  50. $this->sendReward($rewardData);
  51. logger('TimeTaskListener:限时任务奖励发放成功', [$params['user_id']]);
  52. }
  53. }
  54. } catch (\Exception $exception) {
  55. logger('SendSignInRewardsJob', [$exception->getMessage()]);
  56. }
  57. }
  58. /**
  59. * 发送奖励
  60. *
  61. * @param $reward
  62. * @return void
  63. */
  64. private function sendReward($reward)
  65. {
  66. $setData = [
  67. 'uid' => $reward['user_id'],
  68. 'is_add_up' => 1,
  69. 'date' => date('Y-m-d'),
  70. 'reward_way' => TaskAwarkLogModel::REWARD_WAY_TIME_FILL_IN,
  71. 'subtask_id' => $reward['subtask_id']
  72. ];
  73. $awarkLogRepo = make(TaskAwarkLogRepository::class);
  74. foreach ($reward['reward'] as $k => $v) {
  75. if ($v == 0) {
  76. continue;
  77. }
  78. $setData['reward'] = $v;
  79. switch ($k) {
  80. case 'vipTime':
  81. $setData['reward_type'] = TaskAwarkLogModel::REWARD_VIP_TIME;
  82. //加会员天数
  83. $userInfo = make(UserRepository::class)
  84. ->getUserInfoFromCache($reward['user_id']);
  85. if ($userInfo['is_vip'] == 'y') {
  86. $vipTime = Carbon::parse($userInfo['vip_expired'])
  87. ->addDays($v)
  88. ->toDateTimeString();
  89. } else {
  90. $vipTime = Carbon::now()
  91. ->addDays($v)
  92. ->toDateTimeString();
  93. }
  94. UserModel::query()
  95. ->where('code', $reward['user_id'])
  96. ->update(['vip_expired' => $vipTime]);
  97. break;
  98. case 'house':
  99. $setData['reward_type'] = TaskAwarkLogModel::REWARD_TYPE_OPEN_HOUSE_COUNT;
  100. UserModel::where('code', $reward['user_id'])->increment('max_open_house', $v);
  101. break;
  102. case 'movie':
  103. $setData['reward_type'] = TaskAwarkLogModel::REWARD_TYPE_MOVIE_CONUT;
  104. break;
  105. case 'comment':
  106. $setData['reward_type'] = TaskAwarkLogModel::REWARD_TYPE_COMMENT_COUNT;
  107. break;
  108. case 'coin':
  109. $setData['reward_type'] = TaskAwarkLogModel::REWARD_TYPE_COIN;
  110. break;
  111. }
  112. //插入日志
  113. $awarkLogRepo->create($setData);
  114. make(UserRepository::class)->delUserCache($reward['user_id']);
  115. }
  116. }
  117. }