| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- <?php
- namespace App\Jobs;
- use App\Model\TaskAwarkLogModel;
- use App\Model\UserModel;
- use App\Repositories\Service\QueueService;
- use App\Repositories\TaskAwarkLogRepository;
- use App\Repositories\UserLevelRelationRepository;
- use App\Repositories\UserRepository;
- use App\Repositories\UserTaskRepoistory;
- use Carbon\Carbon;
- use Hyperf\AsyncQueue\Job;
- /**
- * 限时任务奖励
- */
- class TimeTaskSendRewardJob extends Job
- {
- public $params;
- public function __construct($params)
- {
- // 这里最好是普通数据,不要使用携带 IO 的对象,比如 PDO 对象
- $this->params = $params;
- }
- public function handle()
- {
- try {
- $params = $this->params;
- // 获取已推荐人数
- $number = UserModel::query()->where('parent_uid', $params['user_id'])->count();
- // 任务
- $taskInfo = make(UserTaskRepoistory::class)->findBy('reward_type', 7);
- // 奖励
- $reward = json_decode($taskInfo->reward, true);
- // 条件
- $taskCondition = json_decode($taskInfo->task_condition, true);
- $endTime = strtotime($taskCondition['end_time']);
- $dateTime = strtotime(date('Y-m-d'));
- if ($endTime < $dateTime) {
- logger('TimeTaskListener:限时任务已过期', []);
- return true;
- }
- // 获取任务日志
- $taskLogInfo = make(TaskAwarkLogRepository::class)->findWhere(['reward_way' => TaskAwarkLogModel::REWARD_WAY_TIME_FILL_IN, 'uid' => $params['user_id']], ['subtask_id'])->keyBy('subtask_id');
- foreach ($taskCondition['condition'] as $k => $val) {
- if (!isset($taskLogInfo[$k]) && $val == $number) {
- $rewardData['reward'] = $reward[$k];
- $rewardData['subtask_id'] = $k;
- $rewardData['user_id'] = $params['user_id'];
- // 异步发放奖励
- logger('TimeTaskListener:准备异步发放奖励', [$params['user_id']]);
- $this->sendReward($rewardData);
- logger('TimeTaskListener:限时任务奖励发放成功', [$params['user_id']]);
- }
- }
- } catch (\Exception $exception) {
- logger('SendSignInRewardsJob', [$exception->getMessage()]);
- }
- }
- /**
- * 发送奖励
- *
- * @param $reward
- * @return void
- */
- private function sendReward($reward)
- {
- $setData = [
- 'uid' => $reward['user_id'],
- 'is_add_up' => 1,
- 'date' => date('Y-m-d'),
- 'reward_way' => TaskAwarkLogModel::REWARD_WAY_TIME_FILL_IN,
- 'subtask_id' => $reward['subtask_id']
- ];
- $awarkLogRepo = make(TaskAwarkLogRepository::class);
- foreach ($reward['reward'] as $k => $v) {
- if ($v == 0) {
- continue;
- }
- $setData['reward'] = $v;
- switch ($k) {
- case 'vipTime':
- $setData['reward_type'] = TaskAwarkLogModel::REWARD_VIP_TIME;
- //加会员天数
- $userInfo = make(UserRepository::class)
- ->getUserInfoFromCache($reward['user_id']);
- if ($userInfo['is_vip'] == 'y') {
- $vipTime = Carbon::parse($userInfo['vip_expired'])
- ->addDays($v)
- ->toDateTimeString();
- } else {
- $vipTime = Carbon::now()
- ->addDays($v)
- ->toDateTimeString();
- }
- UserModel::query()
- ->where('code', $reward['user_id'])
- ->update(['vip_expired' => $vipTime]);
- break;
- case 'house':
- $setData['reward_type'] = TaskAwarkLogModel::REWARD_TYPE_OPEN_HOUSE_COUNT;
- UserModel::where('code', $reward['user_id'])->increment('max_open_house', $v);
- break;
- case 'movie':
- $setData['reward_type'] = TaskAwarkLogModel::REWARD_TYPE_MOVIE_CONUT;
- break;
- case 'comment':
- $setData['reward_type'] = TaskAwarkLogModel::REWARD_TYPE_COMMENT_COUNT;
- break;
- case 'coin':
- $setData['reward_type'] = TaskAwarkLogModel::REWARD_TYPE_COIN;
- break;
- }
- //插入日志
- $awarkLogRepo->create($setData);
- make(UserRepository::class)->delUserCache($reward['user_id']);
- }
- }
- }
|