SentTaskRewardJob.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. namespace App\Jobs;
  3. use App\Constants\ChangeLogConstant;
  4. use App\Model\TaskAwarkLogModel;
  5. use App\Model\UserModel;
  6. use App\Repositories\Service\QueueService;
  7. use App\Repositories\TaskAwarkLogRepository;
  8. use App\Repositories\UserRepository;
  9. use Carbon\Carbon;
  10. use Hyperf\AsyncQueue\Job;
  11. class SentTaskRewardJob extends Job
  12. {
  13. public $params;
  14. public function __construct($params)
  15. {
  16. // 这里最好是普通数据,不要使用携带 IO 的对象,比如 PDO 对象
  17. $this->params = $params;
  18. }
  19. public function handle()
  20. {
  21. try {
  22. $rewardInfo = $this->params['reward_info'];
  23. $setData = [
  24. 'uid' => $this->params['user_id'],
  25. 'is_add_up' => $rewardInfo['is_add_up'],
  26. 'date' => date('Y-m-d'),
  27. 'reward_way' => $this->params['reward_way'],
  28. ];
  29. $userModel = new UserModel();
  30. $awarkLogRepo = make(TaskAwarkLogRepository::class);
  31. $userModel = $userModel->where('code', $this->params['user_id']);
  32. foreach ($rewardInfo['reward'] as $k => $v) {
  33. $setData['reward'] = $v;
  34. switch ($k) {
  35. case 'movie':
  36. $setData['reward_type'] = TaskAwarkLogModel::REWARD_TYPE_MOVIE_CONUT;
  37. break;
  38. case 'house':
  39. $setData['reward_type'] = TaskAwarkLogModel::REWARD_TYPE_OPEN_HOUSE_COUNT;
  40. $userModel->increment('max_open_house', $v);
  41. break;
  42. case 'comment':
  43. $setData['reward_type'] = TaskAwarkLogModel::REWARD_TYPE_COMMENT_COUNT;
  44. break;
  45. case 'coin':
  46. $setData['reward_type'] = TaskAwarkLogModel::REWARD_TYPE_COIN;
  47. break;
  48. case 'vipTime':
  49. $setData['reward_type'] = TaskAwarkLogModel::REWARD_VIP_TIME;
  50. break;
  51. }
  52. if ($rewardInfo['is_add_up'] == 1) {
  53. switch ($k) {
  54. case 'movie':
  55. $userModel->increment('max_view', $v);
  56. break;
  57. case 'comment':
  58. $userModel->increment('max_comment', $v);
  59. break;
  60. case 'coin':
  61. $userModel->increment('coins', $v);
  62. // 帐变记录
  63. $changeData = [
  64. 'user_uid' => $this->params['user_id'],
  65. 'currency_type' => ChangeLogConstant::CHANGE_COIN,
  66. 'amount' => $v,
  67. 'way' => ChangeLogConstant::WAY_1,
  68. 'type' => ChangeLogConstant::TYPE_24,
  69. 'item_id' => $this->params['reward_way'],
  70. ];
  71. make(QueueService::class)->saveChangeLogJob($changeData);
  72. break;
  73. }
  74. } elseif ($rewardInfo['is_add_up'] == 2) {
  75. // 不累计
  76. if ($k == 'vipTime') {
  77. $userObj = UserModel::query()->where(['code' => $this->params['user_id']])->first();
  78. if (empty($userObj->vip_expired)) {
  79. $userObj->vip_expired = Carbon::now()->addDays($v)->toDateTimeString();
  80. } else {
  81. $oldVipExpired = Carbon::parse($userObj->vip_expired);
  82. $newVipExpired = $oldVipExpired->copy()->addDays($v)->toDateTimeString();
  83. $userObj->vip_expired = $newVipExpired;
  84. }
  85. $userObj->save();
  86. }
  87. }
  88. //插入日志
  89. $awarkLogRepo->create($setData);
  90. make(UserRepository::class)->delUserCache($this->params['user_id']);
  91. }
  92. } catch (\Exception $exception) {
  93. logger('SendSignInRewardsJob', [$exception->getMessage()]);
  94. }
  95. }
  96. }