<?php
|
|
namespace app\api\logic;
|
use app\common\logic\Basic as BasicLogic;
|
use app\common\model\User as ModelUser;
|
use app\common\model\user\Third as ModelThird;
|
use app\common\model\UserLevel as ModelUserLevel;
|
use app\common\model\user\Levellog as ModelLevellog;
|
use think\Db;
|
use fast\Http;
|
use app\api\logic\commission\Tb as LogicTb;
|
use app\api\logic\commission\Jd as LogicJd;
|
use app\api\logic\commission\Pdd as LogicPdd;
|
use app\api\logic\commission\Wph as LogicWph;
|
use app\api\logic\commission\Jtk as LogicJtk;
|
use app\api\logic\commission\Dy as LogicDy;
|
use app\api\logic\SettlementRecord as LogicSettlementRecord;
|
use app\common\model\user\Settlement as ModelSettlementRecord;
|
|
|
class User extends BasicLogic
|
{
|
|
protected $model;
|
|
protected function initialize()
|
{
|
$this->model = new ModelUser();
|
}
|
|
|
/**
|
* 获取数据库用户信息
|
*
|
* @return void
|
*/
|
public function getUser($user_id)
|
{
|
if(empty($user_id)) return [];
|
return $this->model->where(['id'=>$user_id])->find();
|
}
|
|
/**
|
* 获取用户绑定信息
|
*
|
* @param [type] $openid
|
* @return void
|
*/
|
public function getWxBind($user_id,$type)
|
{
|
$ModelThird = new ModelThird();
|
$find = $ModelThird->where(['user_id'=>$user_id,'platform'=>$type])->find();
|
return empty($find) ? 0 : 1;
|
}
|
|
/**
|
* 绑定微信
|
*
|
* @param [type] $user_id
|
* @param [type] $avatar
|
* @param [type] $gender
|
* @param [type] $nickName
|
* @param [type] $openId
|
* @return void
|
*/
|
public function bindWechat($user_id,$avatar,$gender,$nickName,$openId){
|
$ModelThird = new ModelThird();
|
$find = $ModelThird->where(['platform'=>'wechat','user_id'=>$user_id])->find();
|
if(!empty($find)) fault('当前微信已被绑定');
|
Db::startTrans();
|
$save_data = [
|
'user_id' => $user_id,
|
'platform' => 'wechat',
|
'openname' => $nickName,
|
'openid' => $openId,
|
'create_time' =>time()
|
];
|
$res = $ModelThird->insert($save_data);
|
if(!$res){
|
Db::rollback();
|
fault('绑定失败');
|
}
|
$user = $this->model->where(['id' => $user_id])->find();
|
$user_data = [];
|
if(empty($user['avatar'])) $user['avatar'] = $avatar;
|
if(!empty($user_data)){
|
$user['updatetime'] = time();
|
$res2 = $this->model->where(['id'=>$user_id])->update($user_data);
|
if(!$res2){
|
Db::rollback();
|
fault('绑定失败');
|
}
|
}
|
Db::commit();
|
return true;
|
}
|
|
|
/**
|
* 解绑微信
|
*
|
* @return void
|
*/
|
public function unboundWechat($user_id)
|
{
|
$ModelThird = new ModelThird();
|
$find = $ModelThird->where(['user_id'=>$user_id])->find();
|
if(empty($find)) fault('当前账户暂未绑定微信');
|
$res = $ModelThird->where(['user_id'=>$user_id])->delete();
|
if(!$res) fault('解绑失败,请稍后再试');
|
return true;
|
}
|
|
|
/**
|
* 获取用户ID
|
*
|
* @param [type] $openid
|
* @return void
|
*/
|
public function getUserByOpenId($openid)
|
{
|
$ModelThird = new ModelThird();
|
$find = $ModelThird->where(['openid'=>$openid])->find();
|
return empty($find) ? [] : $find['user_id'];
|
}
|
|
|
|
/**
|
* 根据用户openI和access_token获取用户信息
|
*
|
* @param [type] $openid
|
* @param [type] $access_token
|
* @return void
|
*/
|
public function getWxUserByOpenId($openid,$access_token)
|
{
|
$get_user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';
|
$Http = new Http();
|
$result = $Http->get($get_user_info_url);
|
if(empty($result)) fault('微信授权失败');
|
return json_decode($result,true);
|
}
|
|
|
|
/**
|
* 用户等级申请
|
*
|
* @return void
|
*/
|
public function levelApply($user_id)
|
{
|
$user = $this->getUser($user_id);
|
if(empty($user)) fault('用户信息获取失败');
|
if($user['level'] == 3) fault('您已经是最高等级');
|
//获取下一级升级条件
|
$ModelUserLevel = new ModelUserLevel();
|
$next_level = $user['level']+1;
|
$levelInfo = $ModelUserLevel->where(['level'=>$next_level,'status'=>1])->find();
|
if(empty($levelInfo)) fault('等级信息获取失败');
|
if($next_level == 1){
|
if(empty($user['invitation_code'])) fault('暂未满足升级条件');
|
}else if($next_level > 1){
|
$user_zscj_num = $this->model->where(['invitation_id'=>$user_id,'level'=>1])->count(); //直属初级人数
|
$user_jjcj_num = $this->model->where(['f_invitation_id'=>$user_id,'level'=>1])->count(); //间接初级人数
|
$user_zszj_num = $this->model->where(['invitation_id'=>$user_id,'level'=>2])->count(); //直属中级人数
|
$user_jjzj_num = $this->model->where(['f_invitation_id'=>$user_id,'level'=>2])->count(); //间接中级人数
|
$user_monthly_commission = self::getUserCommission($user_id,'month'); //获取上月天佣金
|
$user_total_commission = self::getUserCommission($user_id,'total'); //获取累计佣金
|
if($next_level == 2){
|
if($user_zscj_num < $levelInfo['direct_primary_count'] || $user_jjcj_num < $levelInfo['indirect_primary_count'] || $user_monthly_commission < $levelInfo['own_monthly_commission']) fault('暂未满足升级条件');
|
}else if($next_level == 3){
|
if($user_zszj_num < $levelInfo['direct_intermediate_count'] || $user_jjzj_num < $levelInfo['indirect_intermediate_count'] || $user_monthly_commission < $levelInfo['own_monthly_commission'] || $user_total_commission < $levelInfo['accumulated_commission']) fault('暂未满足升级条件');
|
}else{
|
fault('不符合升级规则');
|
}
|
}
|
//满足升级条件,更新用户等级
|
$ModelLevellog = new ModelLevellog();
|
Db::startTrans();
|
try{
|
$user_data = [
|
'level' => $next_level,
|
'updatetime' => time()
|
];
|
$this->model->where(['id'=>$user['id']])->update($user_data);
|
$level_log = [
|
'user_id' => $user['id'],
|
'old_level' => $user['level'],
|
'new_level' => $next_level,
|
'type' => 'self',
|
'create_time' => time()
|
];
|
$ModelLevellog->insert($level_log);
|
Db::commit();
|
} catch (\Exception $e) {
|
Db::rollback();
|
fault('升级错误,请联系管理员');
|
}
|
return true;
|
}
|
|
/**
|
* 获取用户对应时间段的佣金金额
|
*
|
* @return void
|
*/
|
public static function getUserCommission($user_id,$time_type="month")
|
{
|
if(!in_array($time_type,['month','total']));
|
$ModelSettlementRecord = new ModelSettlementRecord();
|
$obj = $ModelSettlementRecord->where(['user_id'=>$user_id]);
|
if($time_type =="month"){ //获取上月
|
$obj->whereTime('create_time','last month');
|
}
|
$total = $obj->sum("change_money");
|
return empty($total) ? 0 : $total;
|
}
|
|
|
public function getProfit($user_id,$type,$is_user=false)
|
{
|
$time_type = "";
|
switch($type){
|
case 0:
|
$time_type = 'today';
|
break;
|
case 1:
|
$time_type = 'yesterday';
|
break;
|
case 2:
|
$time_type = 'month';
|
break;
|
case 3:
|
$time_type = 'last month';
|
break;
|
}
|
if(empty($time_type)) return false;
|
$LogicTb = new LogicTb();
|
$LogicJd = new LogicJd();
|
$LogicPdd = new LogicPdd();
|
$LogicWph = new LogicWph();
|
$LogicJtk = new LogicJtk();
|
$LogicDy = new LogicDy();
|
$LogicSettlementRecord = new LogicSettlementRecord();
|
//自购
|
$tb = $LogicTb->getEstimateCommission($user_id,$time_type,1);
|
$jd = $LogicJd->getEstimateCommission($user_id,$time_type,1);
|
$pdd = $LogicPdd->getEstimateCommission($user_id,$time_type,1);
|
$wph = $LogicWph->getEstimateCommission($user_id,$time_type,1);
|
$jtk = $LogicJtk->getEstimateCommission($user_id,$time_type,1);
|
$dy = $LogicDy->getEstimateCommission($user_id,$time_type,1);
|
if(!$is_user){
|
//团队
|
$tb_team = $LogicTb->getEstimateCommission($user_id,$time_type,0);
|
$jd_team = $LogicJd->getEstimateCommission($user_id,$time_type,0);
|
$pdd_team = $LogicPdd->getEstimateCommission($user_id,$time_type,0);
|
$wph_team = $LogicWph->getEstimateCommission($user_id,$time_type,0);
|
$jtk_team = $LogicJtk->getEstimateCommission($user_id,$time_type,0);
|
$dy_team = $LogicDy->getEstimateCommission($user_id,$time_type,0);
|
}
|
$data = [
|
'sumMoney' => $LogicSettlementRecord->totalMoney($user_id),
|
'my'=>[
|
'order_num' => $tb['order_num']+$jd['order_num']+$pdd['order_num']+$wph['order_num']+$dy['order_num']+$jtk['order_num'],
|
'money' => $tb['money']+$jd['money']+$pdd['money']+$wph['money']+$dy['money']+$jtk['money'],
|
'sales_volume' => $tb['sales_volume']+$jd['sales_volume']+$pdd['sales_volume']+$wph['sales_volume']+$dy['sales_volume']+$jtk['sales_volume'],
|
],
|
'myData' => [$tb,$jd,$pdd,$wph,$dy,$jtk]
|
];
|
if(!$is_user){
|
$data['team'] = [
|
'order_num' => $tb_team['order_num']+$jd_team['order_num']+$pdd_team['order_num']+$wph_team['order_num']+$dy_team['order_num']+$jtk_team['order_num'],
|
'money' => $tb_team['money']+$jd_team['money']+$pdd_team['money']+$wph_team['money']+$dy_team['money']+$jtk_team['money'],
|
'sales_volume' => $tb_team['sales_volume']+$jd_team['sales_volume']+$pdd_team['sales_volume']+$wph_team['sales_volume']+$dy_team['sales_volume']+$jtk_team['sales_volume'],
|
];
|
$data['teamData'] = [$tb_team,$jd_team,$pdd_team,$wph_team,$dy_team,$jtk_team];
|
$data['team']['money'] = floor($data['team']['money']*100)/100;
|
$data['team']['sales_volume'] = floor($data['team']['sales_volume']*100)/100;
|
$data['team']['money'] = round($data['team']['money'],2);
|
}
|
$data['my']['money'] = round($data['my']['money'],2);
|
$data['my']['sales_volume'] = floor($data['my']['sales_volume']*100)/100;
|
return $data;
|
|
}
|
|
}
|