'ID', 'mall_id' => '商城ID', 'video_id' => '视频ID', 'user_id' => '会员ID', 'source_user_id' => '来源会员ID', 'user_type' => '会员类型', 'award_type' => '奖励类型', 'award_integral' => '奖励积分', 'award_money' => '奖励金额', 'status' => '状态[-1:删除;0:禁用;1启用]', 'created_at' => 'Created At', 'updated_at' => 'Updated At', ]; } /** * @name: * @msg: 发放观看视频奖励和分享视频奖励(分享的只发一级) * @param {int} $mall_id * @param {array} $data video_id:视频id;user_id:当前会员id;browse_log_id:浏览视频记录id * @return {*} */ public static function grantReward(int $mall_id, array $data) { $video = ShortVideo::findOne(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED, 'id' => $data['video_id'], 'check_status' => AddonsShortVideoEnum::VIDEO_AUDIT_STATUS1, 'is_blacklist' => 0]); if (empty($video)) { self::$static_error = '视频不存在'; return false; } $reward_info = ShortVideoBrowseAward::find() ->select('video_id,user_id') ->where(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED, 'video_id' => $data['video_id'], 'user_id' => $data['user_id'], 'user_type' => 0]) ->asArray() ->one(); // 如果已经发过观看奖励则不再发 if (!empty($reward_info)) return true; $params_video = [ 'id' => $data['video_id'], 'look_complete_num' => $video->look_complete_num + 1, ]; $transaction = \Yii::$app->db->beginTransaction(); $res_video = ShortVideo::setData($mall_id, $params_video); if (false === $res_video) { self::$static_error = ShortVideo::getStaticError(); return false; } $time = time(); // 奖励记录数据 $browse_reward_log_datas = []; // 钱包数据 $wallet_datas = []; // 当前会员id $user_id_0 = $data['user_id']; // 上一级分享会员id $user_id_1 = 0; // 查询当前视频是否分享观看 $browse = ShortVideoBrowse::find() ->where(['mall_id' => $mall_id, 'user_id' => $data['user_id'], 'is_share' => 1, 'video_id' => $data['video_id'], 'id' => $data['browse_log_id']]) ->one(); if (!empty($browse)) { // 更新当前会员浏览记录 $browse->is_complete_look = 1; $browse->complete_time = time(); $res_browse = $browse->save(); if (false === $res_browse) { $transaction->rollBack(); self::$static_error = '完整观看视频回调发放观看奖励出错--更新会员浏览记录出错:' . $browse->getErrors(); return false; } $share_log = ShortVideoShare::findOne(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED, 'video_id' => $data['video_id'], 'id' => $browse->share_log_id, ]); if (!empty($share_log) && $user_id_0 != $share_log->user_id) { // 如果是自己分享的视频自己看,则不发放上级的奖励 $user_id_1 = $share_log->user_id; $user = User::findOne(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED, 'id' => $user_id_1]); if (empty($user)) $user_id_1 = 0; } } if (1 == $video->open_integral_award) { // 开启积分奖励 // 当前视频可以用于奖励的基准积分 $score_reward_base = min($video->watch_integral_sum, $video->max_integral); // 当前会员获得的奖励 $score_user_reward_0 = bcmul($score_reward_base, $video->watch_integral / 100, 2); // 分享上级获得的积分奖励 $score_user_reward_1 = bcmul($score_reward_base, $video->watch_integral_one / 100, 2); if ($score_user_reward_0 > 0) { $browse_reward_log_datas[] = [$mall_id, $data['video_id'], $user_id_0, 0, 0, 0, $score_user_reward_0, 0, 1, $time, $time]; $wallet_datas[] = [ 'mall_id' => $mall_id, 'user_id' => $user_id_0, 'is_frozen' => false, 'wallet_type' => UserWalletService::WALLET_TYPE_SCORE, 'money' => $score_user_reward_0, 'desc' => '观看短视频获得积分奖励', 'source_table' => $browse->tableSchema->name, 'source_table_id' => $data['browse_log_id'], 'from_type' => UserWalletEnum::REWARD, 'capital_type' => UserWalletEnum::SHORT_VIDEO_REWARD, ]; } if (!empty($user_id_1) && $score_user_reward_1 > 0) { $browse_reward_log_datas[] = [$mall_id, $data['video_id'], $user_id_1, 0, 1, 0, $score_user_reward_1, 0, 1, $time, $time]; $wallet_datas[] = [ 'mall_id' => $mall_id, 'user_id' => $user_id_0, 'is_frozen' => false, 'wallet_type' => UserWalletService::WALLET_TYPE_SCORE, 'money' => $score_user_reward_1, 'desc' => '分享短视频获得积分奖励', 'source_table' => $browse->tableSchema->name, 'source_table_id' => $data['browse_log_id'], 'from_type' => UserWalletEnum::REWARD, 'capital_type' => UserWalletEnum::SHORT_VIDEO_REWARD, ]; } } if (1 == $video->open_money_award) { // 开启现金奖励 // 当前视频可以用于奖励的基准现金 $money_reward_base = min($video->watch_money_sum, $video->max_money); // 当前会员获得的奖励 $money_user_reward_0 = bcmul($money_reward_base, $video->watch_money / 100, 2); // 分享上级获得的积分奖励 $money_user_reward_1 = bcmul($money_reward_base, $video->watch_money_one / 100, 2); if ($money_user_reward_0 > 0) { $browse_reward_log_datas[] = [$mall_id, $data['video_id'], $user_id_0, 0, 0, 1, 0, $money_user_reward_0, 1, $time, $time]; $wallet_datas[] = [ 'mall_id' => $mall_id, 'user_id' => $user_id_0, 'is_frozen' => false, 'wallet_type' => UserWalletService::WALLET_TYPE_BALANCE, 'money' => $money_user_reward_0, 'desc' => '观看短视频获得积分奖励', 'source_table' => $browse->tableSchema->name, 'source_table_id' => $data['browse_log_id'], 'from_type' => UserWalletEnum::REWARD, 'capital_type' => UserWalletEnum::SHORT_VIDEO_REWARD, ]; } if (!empty($user_id_1) && $money_user_reward_1 > 0) { $browse_reward_log_datas[] = [$mall_id, $data['video_id'], $user_id_1, 0, 1, 1, 0, $money_user_reward_1, 1, $time, $time]; $wallet_datas[] = [ 'mall_id' => $mall_id, 'user_id' => $user_id_1, 'is_frozen' => false, 'wallet_type' => UserWalletService::WALLET_TYPE_BALANCE, 'money' => $money_user_reward_1, 'desc' => '分享短视频获得积分奖励', 'source_table' => $browse->tableSchema->name, 'source_table_id' => $data['browse_log_id'], 'from_type' => UserWalletEnum::REWARD, 'capital_type' => UserWalletEnum::SHORT_VIDEO_REWARD, ]; } } // 添加观看奖励记录 if (!empty($browse_reward_log_datas)) { $field = ['mall_id', 'video_id', 'user_id', 'source_user_id', 'user_type', 'award_type', 'award_integral', 'award_money', 'status', 'created_at', 'updated_at']; $res_reward = Yii::$app->db->createCommand()->batchInsert(self::tableName(), $field, $browse_reward_log_datas)->execute(); if (false === $res_reward) { $transaction->rollBack(); self::$static_error = '完整观看视频回调发放观看奖励出错--插入奖励记录出错'; return false; } } if (!empty($wallet_datas)) { $res = UserWalletService::batchHandleByQueue($wallet_datas); if ($res === false) { $transaction->rollBack(); self::$static_error = '完整观看视频回调发放观看奖励出错--奖励奖励发放到会员账号出错:' . UserWalletService::getStaticError(); return false; } } $transaction->commit(); return true; } }