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; } }