<?php
|
|
namespace app\common\model\plus\vip;
|
|
use app\common\model\BaseModel;
|
use app\common\model\order\OrderProduct;
|
use app\common\model\plus\vip\GradeLog as GradeLogModel;
|
use app\common\enum\user\grade\ChangeTypeEnum;
|
|
/**
|
* VIP专区用户模型
|
*/
|
class User extends BaseModel
|
{
|
protected $name = 'vip_area_user';
|
protected $pk = 'user_id';
|
|
/**
|
* 关联会员记录表
|
* @return \think\model\relation\BelongsTo
|
*/
|
public function user()
|
{
|
return $this->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;
|
|
}
|
}
|