| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- <?php
- namespace addons\ShortVideo\common\models;
- use addons\ShortVideo\common\enums\AddonsShortVideoEnum;
- use common\enums\StatusEnum;
- use common\enums\UserWalletEnum;
- use common\models\user\User;
- use services\common\UserWalletService;
- use Yii;
- /**
- * This is the model class for table "{{%addons_short_video_browse_award}}".
- *
- * @property int $id
- * @property int $mall_id
- * @property int $video_id 视频id
- * @property int $user_id 用户id
- * @property int|null $source_user_id 源头id
- * @property int|null $user_type 用户类型:0:本人 1:一级 2:二级
- * @property int $award_type 奖励类型 0:积分 1:现金
- * @property float $award_integral 奖励积分
- * @property float $award_money 奖励金额
- * @property int $status 状态[-1:删除;0:禁用;1启用]
- * @property int $created_at
- * @property int $updated_at
- */
- class ShortVideoBrowseAward extends \common\models\base\BaseActiveRecord
- {
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return '{{%addons_short_video_browse_award}}';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['mall_id', 'video_id', 'user_id'], 'required'],
- [['mall_id', 'video_id', 'user_id', 'source_user_id', 'user_type', 'award_type', 'status', 'created_at', 'updated_at'], 'integer'],
- [['award_integral', 'award_money'], 'number'],
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function attributeLabels()
- {
- return [
- 'id' => '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;
- }
- }
|