belongsTo('app\\common\\model\\user\\User'); } /** * 关联推荐人表 * @return \think\model\relation\BelongsTo */ public function referee() { return $this->belongsTo('app\\common\\model\\user\\User', 'referee_id', 'user_id'); } /** * 关联VIP等级记录表 * @return \think\model\relation\BelongsTo */ public function grade() { return $this->belongsTo('app\\common\\model\\plus\\vip\\Grade','grade_id', 'grade_id'); } /** * 详情 */ public static function detail($user_id, $with = ['user', 'referee', 'grade']) { return (new static())->with($with)->find($user_id); } /** * 是否为VIP专区用户 */ public static function isVipUser($user_id) { $vip = self::detail($user_id); return !!$vip && !$vip['is_delete']; } /** * 新增VIP专区用户记录 * @param $user_id * @param $data * @return bool */ public static function add($user_id, $data) { $model = static::detail($user_id) ?: new static; $user=(new \app\common\model\user\User())->detail($user_id); $model->save(array_merge([ 'user_id' => $user_id, 'real_name' => $user['real_name']?: $user['nickName'], 'mobile' => $user['mobile'], 'is_delete' => 0, 'app_id' => $model::$app_id, 'grade_id' => Grade::getDefaultGradeId() ], $data)); return true; } /** * 发放VIP专区佣金 * @param $user_id * @param $money * @param string $description 佣金描述 * @return bool */ public static function grantMoney($user_id, $money, $description = '订单佣金结算') { // VIP专区用户详情 $model = static::detail($user_id); if (!$model || $model['is_delete']) { return false; } // 累加VIP专区用户可提现佣金 $model->where('user_id', '=', $user_id)->inc('money', $money)->update(); // 记录VIP专区资金明细 Capital::add([ 'user_id' => $user_id, 'flow_type' => 10, 'money' => $money, 'describe' => $description, 'app_id' => $model['app_id'], ]); return true; } /** * 批量设置会员等级 */ public function upgradeGrade($user, $upgradeGrade) { // 更新会员等级的数据 $this->where('user_id', '=', $user['user_id']) ->update([ 'grade_id' => $upgradeGrade['grade_id'] ]); (new GradeLogModel)->save([ 'old_grade_id' => $user['grade_id'], 'new_grade_id' => $upgradeGrade['grade_id'], 'change_type' => ChangeTypeEnum::AUTO_UPGRADE, 'user_id' => $user['user_id'], 'app_id' => $user['app_id'] ]); return true; } /** * 提现打款成功:累积提现佣金 */ public static function totalMoney($user_id, $money) { $model = self::detail($user_id); return $model->save([ 'freeze_money' => $model['freeze_money'] - $money, 'total_money' => $model['total_money'] + $money, ]); } /** * 提现驳回:解冻VIP专区资金 */ public static function backFreezeMoney($user_id, $money) { $model = self::detail($user_id); return $model->save([ 'money' => $model['money'] + $money, 'freeze_money' => $model['freeze_money'] - $money, ]); } /** * 冻结VIP专区资金 */ public static function freezeMoney($user_id, $money) { $model = self::detail($user_id); if ($model['money'] < $money) { return false; } return $model->save([ 'money' => $model['money'] - $money, 'freeze_money' => $model['freeze_money'] + $money, ]); } /** * 获取用户是否符合复购专区佣金条件 */ public function getViewpointMoneyQualification($user_id,$setting) { $userNum=$this->where('referee_id','=',$user_id)->count(); $consumption=(new OrderProduct()) ->alias('order_product') ->where('order_product.user_id','=',$user_id) ->join('order','order_product.order_id=order.order_id') ->where('order.order_status','=',30) ->where('order_product.create_time','>=',strtotime(date('Y-m-01 00:00:00'))) ->where('order_product.create_time','<',strtotime('+1 month',strtotime(date('Y-m-01 00:00:00')))) ->where('order_product.is_repurchase','=',1)->sum('order_product.total_pay_price'); if($userNum>=$setting['viewpoint_buy_count']&&$consumption>=$setting['repurchase_consumption']){ return true; } return false; } /** * 获取用户所有级差上级 */ public static function getAllJcUser($user_id, $jcUser = [], $percent_total = 0, $is_add = true) { $user = User::detail($user_id); $is_add && $percent_total += $user['grade']['differential_prize'] - $percent_total; if($user['referee_id']) { $is_add = false; $parent = User::detail($user['referee_id']); if (!$parent){ return $jcUser; } if ($parent['grade']['weight'] > $user['grade']['weight'] && $parent['grade']['differential_prize'] > $percent_total) { $jcUser[] = [ 'user_id' => $parent['user_id'], 'bonus_percent' => $parent['grade']['differential_prize'] - $percent_total //分红比例 ]; $is_add = true; } if($parent['user_id']) { return self::getAllJcUser($parent['user_id'], $jcUser, $percent_total, $is_add); } } return $jcUser; } /** * 获取用户所有平级 * 每个级别都发放$pjaward_level层平级奖 */ public static function getAllPjUser($user_id, $pjaward_level, $pjUser = []) { $user = User::detail($user_id); $pj_user[$user['grade_id']][] = []; $pj_user = self::getPjUser($user_id, $pj_user); if ($pj_user) { foreach ($pj_user as $u) { foreach ($u as $k => $item) { if ($k > 0 && $k <= $pjaward_level) { $pjUser[] = $item; } } } } return $pjUser; } /** * 获取所有平级 */ private static function getPjUser($user_id, $pj_user = []) { $user = User::detail($user_id); if($user['referee_id']) { $parent = User::detail($user['referee_id']); if (!$parent){ return $pj_user; } // 记录平级用户 if($parent && $parent['grade']['weight'] >= $user['grade']['weight']) { if ( $parent['grade']['equal_level_award']){ $pj_user[$parent['grade_id']][] = [ 'user_id' => $parent['user_id'], 'bonus_percent' => $parent['grade']['equal_level_award'], // 平级分红比例 ]; } } if($parent['referee_id']) { return self::getPjUser($parent['user_id'], $pj_user); } } return $pj_user; } }