param(); // if (!vertifyPass(AESjiemi($params['password']))){ throw new Exception('密码必须包含字母和数字,长度大于8位'); } // 验证短信验证码 $phone = $params['phone']; if (!self::where(['mobile'=>$phone])->find()){ return api_error_return(['msg'=>'账号未注册', 'data'=>null, 'code'=>503]); } $userser = new UserServices(); if (!$userser->checkSmsCode($params['code'], 'editpass', $params['phone'])){ throw new Exception('验证码错误或过期'); } Db::startTrans(); try { self::where(['mobile'=>$params['phone']])->update(['password'=>md5($params['password']), 'pass_enable'=>AESjiemi($params['password'])]); Db::commit(); return api_succ_return('设置成功'); }catch (\Exception $e){ Db::rollBack(); return api_error_return($e->getMessage()); } } // 更改用户密码 public function editSecurityPass($request){ $params = $request->param(); // try { // validate(UserValidate::class)->scene('register')->check($params); // if (!vertifySecurityPass(AESjiemi($params['password']))){ throw new Exception('密码必须是6位数字'); } // 验证短信验证码 $phone = $params['phone']; if (!self::where(['mobile'=>$phone])->find()){ return api_error_return(['msg'=>'账号未注册', 'data'=>null, 'code'=>503]); } $userser = new UserServices(); if (!$userser->checkSmsCode($params['code'], 'securitypass', $params['phone'])){ throw new Exception('验证码错误或过期'); } Db::startTrans(); try { self::where(['mobile'=>$params['phone']])->update(['pay_pass'=>md5($params['password']), 'pay_pass_enable'=>AESjiemi($params['password'])]); Db::commit(); return api_succ_return('设置成功'); }catch (\Exception $e){ Db::rollBack(); return api_error_return($e->getMessage()); } } /** * 用户关联信息 * @return \think\model\relation\HasOne */ public function userData () { return self::hasOne(UserDataModel::class, 'uid', 'id')->field('data_id,uid,email,sex,intro,qq,alipay,alipay_name,real_name,idcard,idname,rz_money,area_code_ids,area_text,birthday,bank_no,bank_name'); } public function getUserDetailByUid($uid){ $user = self::where(['id'=>$uid])->field('user_name,nickname,green_score,user_type,scan_green_score,mobile,code,total_profit_money,pid,total_number,profit_money,total_performance,performance_me,money,money_income,store_expire_time,score,level,avatar,status,deny_reason,login_count,login_ip,login_time,password,id,total_money_excharge,total_withdraw,recycle_count,store_type,total_appoint_count,total_box,today_box')->where('id', $uid)->find(); // $user['avatar'] = ($user['avatar']=='static/img/user/default_avatar.jpg'?(__HTTPLOCALIMG($user['avatar']).'?time'=time()) :__HTTPIMG($user['avatar'])); $user['avatar'] = getWebUrl().'/'.$user['avatar'].'?time='.time(); $user['share_url'] = getWebUrl(). '/api/' . 'registerH5web?code=' . $user['code'] . '&type=1'.' 请复制注册链接到浏览器打开注册'; $user['share_url_orgin'] = getWebUrl(). '/api/' . 'registerH5web?code=' . $user['code'] . '&type=1'; // 本来计划是 隐藏首页的分类, 但是如果用户不登录的情况下 $user['has_hiddencate'] = 0; if($user['id'] == '5344494'){ $user['has_hiddencate'] = 1; } if ($user['level'] == 4){ $user['level'] = 3; } return $user->toArray(); } // public function getUserDetailByMobile($mobile){ // return self::where(['mobile'=>$mobile])->field('is_auth,level,nickname, mobile, code, px_code, score, password, status, avatar, id, login_count, login_time, login_ip, money')->find()->toArray(); // } public function updateUserLoginInfo($uid){ $user = self::where(['id'=>$uid])->field('*')->find(); $time = time(); // 更新登录信息 $data['login_time'] = $user['login_time'] = $time; $data['login_ip'] = $user['login_ip'] = get_client_ip(); $data['login_count'] = $user['login_count'] = $user['login_count'] + 1; self::update($data, ['id' => $user['id']]); } public function getUserInfo (array $map, string $field = '*') { return self::field($field)->withAttr('avatar', function ($val, $data){return __HTTPLOCALIMG($val);})->where($map)->find()->toArray(); } // 获得团队数据 public function getFansData(int $uid) { $user = $this->getUserInfo(['id' => $uid], 'total_number,total_number_real,path,total_active,pid,total_performance,performance_me,today_number_real,is_regup'); //团队总人数 $data['total_number'] = $user['total_number']; //今日团队总人数 // $data['today_number_real'] = $user['today_number_real']; // // 实名人数 // $data['total_number_real'] = $user['total_number_real']; // 团队总活跃 // $data['total_active_number'] = $this->whereFindInSet('path', $user['path'])->where('active_time', '>', 0)->count('active_time'); // 团队总活跃点 // $data['total_active'] = $user['total_active']; // $data['active_me'] = $user['active_me']; // sr_throw(); // 小区活跃点 // $data['xiaoqu_active'] = $this->xiaoquActive($uid); // 小区总人数 // $data['xiaoqu_number'] = $this->xiaoquNumber($uid); // 小区实名人数 // $data['xiaoqu_real_number'] = $this->xiaoquNumber($uid, true); // 小区活跃人数 // $data['xiaoqu_active_number'] = 0; // 直推人数 // $total_direct = $this->getRecNumber(intval($uid)); // $total_direct = Db::name('user')->where('pid', $uid)->count('id'); // // $data['direct_number'] = $total_direct; // // $data['share_total_number'] = Db::name('user')->whereFindInSet('path', $uid)->count('id'); // 直推实名人数 $direct_real_number = $this->getRecNumber(intval($uid), 1); // $data['direct_real_number'] = $direct_real_number; // 直推无效人数 // $data['direct_invalid_number'] = $total_direct - $direct_real_number; // 个人活跃点 // $data['active_me'] = $user['active_me']; // $data['xiaoqu_performance'] = $this->xiaoquPerformance($uid); // 总活跃 // $data['total_active'] = $user['total_active']; // 团队总业绩 // $data['total_performance'] = $user['total_performance']; // 个人总业绩 // $data['performance_me'] = number_format($user['performance_me'], 0,'', ''); // 认购卷有效直推 // $zt_couponcount = self::where('pid', $uid)->where('is_auth', 1)->where('performance_me', '>', 0)->count('id'); // $zt_num = Db::name('user')->where('pid', $uid)->where('is_seven_valid', 2)->count('id'); // $data['coupon_zt_num'] = $zt_num>0?$zt_num:0; $data['inviter'] = null; // sr_throw(); // if ($user['is_regup'] == 1 && $user['pid']) { // $data['inviter'] = $this->getUserInfo(['id' => $user['pid']], 'avatar,nickname,level,mobile'); // } if (Db::name('user')->where('id', $user['pid'])->find()){ $data['inviter'] = Db::name('user')->where('id', $user['pid'])->withAttr('avatar', function ($val, $data){ return getWebUrl() . '/'.$val; })->withAttr('mobile', function ($val, $data){ return substr($val, 0, 3).'****'.substr($val, 7); })->field('avatar,nickname,level,mobile')->find(); } return $data; } // 获得小区活跃点 public function xiaoquActive (int $uid) { // $user = self::where('id', $uid)->field('active_me,total_active')->find()->toArray(); // $max_active = self::where('pid', $uid)->order('total_active desc')->limit(0, 2)->sum('total_active'); // if ($max_active <= 0) return 0; // 没有小区 // return $user['total_active'] - $user['active_me'] - $max_active > 0 ? $user['total_active'] - $user['active_me'] - $max_active : 0; // $user = self::where('id', $uid)->field('active_me,total_active')->find()->toArray(); $count = self::where('pid', $uid)->count('id'); if ($count < 2){ return 0; } $max_active = self::where('pid', $uid)->max('total_active'); $max_activeinfo = self::where('pid', $uid)->order('total_active desc')->limit(0, 1)->field('active_me,total_active,id')->select()->toArray(); $xiaoqu_active = self::where('pid', $uid)->where('id', 'not in', [$max_activeinfo[0]['id']])->sum('total_active'); return $xiaoqu_active; // return number_format($xiaoqu_active, 4, '.', ''); } // 获得小区业绩 public function xiaoquPerformance (int $uid) { $count = self::where('pid', $uid)->count('id'); if ($count < 2){ return 0; } $max_activeinfo = self::where('pid', $uid)->order('total_performance desc')->limit(0, 1)->field('active_me,total_active,id')->select()->toArray(); $xiaoqu_active = self::where('pid', $uid)->where('id', 'not in', [$max_activeinfo[0]['id']])->sum('total_performance'); return $xiaoqu_active; // return number_format($xiaoqu_active, 4, '.', ''); } // 获得小区总人数 public function xiaoquNumber (int $uid, $is_auth = false) { $field = 'total_number'; $is_auth && $field = 'total_number_real'; $user = self::where('id', $uid)->field('total_number,total_number_real')->find()->toArray(); $max_active = self::where('pid', $uid)->order('total_active desc')->limit(0, 1)->sum($field); if ($max_active <= 0) return 0; // 没有小区 return $user[$field] - $max_active > 0 ? $user[$field] - $max_active : 0; } // 获得直推人数 public function getRecNumber (int $uid, $is_auth = 0) { if ($is_auth == 0){ $count = self::where('pid', $uid)->count('id'); return $count>0?$count:0; }else{ $count = self::where('pid', $uid)->where('is_auth', 1)->count('id'); return $count>0?$count:0; } } public function getFansList($uid, $limit, $type, $keyworld) { $where = array(); if (!empty($keyworld)){ $where = [['user_name|mobile', 'LIKE', '%'.$keyworld.'%']]; } // $list = self::whereFindInSet('path', $uid) // ->withAttr('avatar', function ($val, $data){ // return getWebUrl().'/'.$val; // }) // ->where($where) // ->where('pid', $uid) // ->field('id,avatar,nickname,mobile,level,total_number,total_team_box,total_box,today_team_box,today_box,today_money,todayaward_money,zt_num') // ->withAttr('mobile', function ($val, $data){ // return substr($val, 0, 3).'****'.substr($val, 7); // }) // ->paginate($limit) // ->toArray(); $list = self::where('pid', $uid) ->withAttr('avatar', function ($val, $data){ return getWebUrl().'/'.$val; }) ->where($where) ->field('id,avatar,nickname,mobile,level,total_number,total_team_box,total_box,today_team_box,today_box,today_money,todayaward_money,zt_num,store_type,has_fd') ->withAttr('mobile', function ($val, $data){ return substr($val, 0, 3).'****'.substr($val, 7); }) ->paginate($limit) ->toArray(); foreach ($list['data'] as $key=>&$val){ $services_count = Db::name('user')->whereFindInSet('path', $val['id'])->where('store_type', 1)->count(); $val['services_count'] = $services_count; $total_real_count = Db::name('user')->whereFindInSet('path', $val['id'])->where('has_fd', 1)->count(); $val['total_real_count'] = $total_real_count; $zt_total_real_count = Db::name('user')->where('pid', $val['id'])->where('has_fd', 1)->count(); $val['zt_total_real_count'] = $zt_total_real_count; } return $list['data']; } // 直推列表 public function getDirectList ($uid, $is_auth, $limit, $keyworld) { $where = []; if (!empty($keyworld)){ $where = [['mobile', 'LIKE', '%'.$keyworld.'%']]; } $list = self::where('pid', $uid) ->withAttr('avatar', function ($val, $data){ return getWebUrl().'/'.$val; }) ->where($where) // ->whereIn('is_auth', $is_auth) ->field('id,avatar,nickname,code,reg_time,is_auth,xz_level,mobile,total_active,total_number,total_number_real,today_number_real,total_performance,active_me,level') ->paginate($limit) ->toArray(); foreach ($list['data'] as $key=>$val){ $count = Db::name('user')->where('pid', $val['id'])->count('id'); $list['data'][$key]['zt_num'] = $count; if ($val['is_auth'] == 1){ // 如果已经实名并且星钻的日志 if (!Db::name('xz_log')->where([['uid', '=', $val['id']],['type','=', 3],['create_at','>', sr_getcurtime(time()-86400*3)]])->find()){ if (time() > strtotime('+3 day', strtotime($val['reg_time']))){ $list['data'][$key]['tips'] = '他已经三天没有做任务了'; }else{ $list['data'][$key]['tips'] = '刚注册未满三天'; } }else{ $list['data'][$key]['tips'] = ''; } }else{ $list['data'][$key]['tips'] = '还未进行实名认证'; } } return $list['data']; } // 直推列表 public function getDirectDataList ($uid, $limit) { $where = []; $list = self::where('pid', $uid) ->withAttr('avatar', function ($val, $data){ return getWebUrl().'/'.$val; }) ->where($where) // ->whereIn('is_auth', $is_auth) ->field('id,avatar,nickname,code,reg_time,mobile,performance_me,total_number,total_performance,level') ->order('total_performance desc') ->paginate($limit) ->toArray(); return $list['data']; } // 购买商品 public function buyGoodsSuccess($uid, $money){ $scale = env('coupon.BUY_GOODS_SCALE')/100; $de_score = number_format($scale * $money, 2, '.', ''); edit_user_score(5, $uid, $de_score); $dered_score = number_format((1-$scale) * $money, 2, '.', ''); edit_user_redscore(1, $uid, $dered_score); } // 勋章兑换 public function medalExchange($uid, $number){ if (intval($number) <= 0 ){ throw new Exception('参数错误'); } $user = self::where('id', $uid)->field('is_reward, id, is_auth, xz_num, medal, score')->find()->toArray(); if ($user['is_auth'] != 1){ throw new Exception('还未实名'); } if ($user['is_reward'] != 1){ throw new Exception('该账户禁止交易'); } $canxz = true; $xz_error_text = ''; $canscore = true; $score_error_text = ''; if ($user['xz_num'] < 10){ $canxz = false; $xz_error_text = '星钻必需大于10个才能兑换'; // throw new Exception('星钻必需大于10个才能兑换'); } if ($user['xz_num'] < $number){ $canxz = false; $xz_error_text = '星钻不足'; // throw new Exception('星钻不足'); } if ($user['xz_num'] - $number <= 10){ $canxz = false; $xz_error_text = '账户必须预留10个星钻'; // throw new Exception('账户必须预留10个星钻'); } if ($canxz){ edit_user_xz(1, $uid, $number); edit_user_medal(1, $uid, $number); }else{ if ($user['score'] < $number * 5){ $canscore = false; $score_error_text = '积分不足'; // throw new Exception('积分不足'); } if ($canscore){ // 积分 edit_user_score(23, $uid, $number * 5); edit_user_medal(1, $uid, $number); } } if (!empty($score_error_text)){ sr_throw($score_error_text); } if (!empty($xz_error_text)){ sr_throw($xz_error_text); } } // 积分兑换成余额 public function scoreExchangeMoney($uid, $score){ $userinfo = self::where('id', $uid)->field('id,money,score,is_reward,status')->find(); if ($userinfo['is_reward'] !=1){ throw new Exception('账号被禁止交易'); } if ($userinfo['status'] != 1){ throw new Exception('账号状态异常'); } if ($score < 10){ throw new Exception('10积分起提'); } if ($userinfo['score'] < $score){ throw new Exception('用户积分不足'); } // $begin = env('api.EXCHANGETOMONEY_BEGIN'); // $scale = env('api.EXCHANGETOMONEY_SCALE'); // $shouxu = $score * $scale/100 + $begin; $shouxu = 0; $income = number_format($score-$shouxu, 4, '.', ''); edit_user_money(4, $uid, $income); edit_user_score(12, $uid, $score); $m_exchange = new ScoreExchangeModel(); $m_exchange->insert([ 'uid'=>$uid, 'score'=>$score, 'begin_money'=>0, 'begin_scale'=>0, 'in_money'=> $income, 'create_time'=>sr_getcurtime(time()) ]); } // 余额兑换成积分 public function moneyExchangeScore($uid, $money){ $userinfo = self::where('id', $uid)->field('id,money,score,is_reward,status')->find(); if ($userinfo['is_reward'] !=1){ throw new Exception('账号被禁止交易'); } if ($userinfo['status'] != 1){ throw new Exception('账号状态异常'); } // if ($money < 10){ // throw new Exception('1起提'); // } if ($userinfo['money'] < $money){ throw new Exception('余额不足'); } // $begin = env('api.EXCHANGETOMONEY_BEGIN'); // $scale = env('api.EXCHANGETOMONEY_SCALE'); // $shouxu = $score * $scale/100 + $begin; // $shouxu = 0; // $income = number_format($score-$shouxu, 4, '.', ''); edit_user_money(11, $uid, $money); edit_user_score(19, $uid, $money); // $m_exchange = new ScoreExchangeModel(); // $m_exchange->insert([ // 'uid'=>$uid, // 'score'=>$score, // 'begin_money'=>0, // 'begin_scale'=>0, // 'in_money'=> $income, // 'create_time'=>sr_getcurtime(time()) // ]); } public function test(){ // sr_throw(); throw new Exception('aa'); } public function getRecycleCard($uid, $type, $user_info){ if (!in_array($type, ['everyday', 'direct'])){ sr_throw('类型错误'); } if ($type == 'everyday'){ if (Db::name('recyclecard_log')->whereDay('create_at', 'today')->where('uid', $uid)->where('type', 1)->find()){ sr_throw('今日已领取,请明天再来'); } if ($user_info['store_type'] == 1){ edit_user_recyclecard(1, $uid, 120); }else{ edit_user_recyclecard(1, $uid, 20); } } if ($type == 'direct'){ if (Db::name('recyclecard_log')->whereDay('create_at', 'today')->where('uid', $uid)->where('type', 2)->find()){ sr_throw('今日已领取,请明天再来'); } $count = Db::name('user')->where('pid', $uid)->where('has_fd', 1)->count('id'); if ($count > 0){ edit_user_recyclecard(2, $uid, $count * env('boxsetting.ONE_DIRECT_RECYCLE_COUNT')); }else{ sr_throw('暂无有效直推'); } } } public function getUserTeamMoney($uid){ $user_info = Db::name('user')->where('id', $uid)->find(); if ($user_info['store_type'] != 1){ sr_throw('还未开通服务商'); } $cur_time = time(); $day = sr_getcurtime($cur_time, 'Y-m-d'); $next_day = sr_getcurtime($cur_time+86400, 'Y-m-d'); // 10:00:00-01:59:59 $get_teammoneysetting = env('teamsetting.EVERYDAY_GET_TEAM_MONEY'); $setting_times = explode('-', $get_teammoneysetting); $has_yesterday = false; // 如果是在24点之前就要查询预约记录 if ($cur_time > strtotime($day.' '.$setting_times[0]) && $cur_time < strtotime($next_day.' '.'00:00:00')){ $has_yesterday = true; if (!Db::name('box_record')->where('uid', $uid)->whereDay('create_time', 'today')->find()){ sr_throw('今日还未预约福袋'); } } if (!($cur_time > strtotime($next_day.' '.'00:00:00') && $cur_time < strtotime($next_day.' '.$setting_times[1]))){ sr_throw('领取失败,不在领取时间内'); } if ($user_info['today_money'] > 0){ $today_money = $user_info['today_money']; edit_user_money(6, $uid, $today_money); Db::name('user')->where('id', $uid)->save([ 'today_money'=>0 ]); // Db::name('user')->where('id', $uid)->inc('yesterday_money', ) // 累计奖金 Db::name('user')->where('id', $uid)->inc('todayaward_money', $user_info['today_money'])->update(); }else{ sr_throw('暂无奖金'); } } public function getUserIncomeTeam($uid){ $user_info = Db::name('user')->where('id', $uid)->find(); if ($user_info['profit_money'] < 100){ sr_throw('利润小于100,结算失败'); }else{ $profit_endmoney = (int)$user_info['profit_money']; $profit_endmoney = $profit_endmoney - $profit_endmoney % 100; edit_user_money(8, $uid, $profit_endmoney); Db::name('user')->where('id', $uid)->inc('total_profit_money', $profit_endmoney)->update(); Db::name('user')->where('id', $uid)->dec('profit_money', $profit_endmoney)->update(); } } public function bussinessApply($uid, $params){ if (Db::name('business_apply')->where('uid', $uid)->where('mobile', $params['mobile'])->where('status', 1)->find()){ sr_throw('您好,你已提交申请,请耐心等待客服联系'); } Db::name('business_apply')->insert([ 'name'=>$params['name'], 'mobile'=>$params['mobile'], 'message'=>$params['message'], 'uid'=>$uid, 'create_time'=>sr_getcurtime(time()) ]); } public function bangUpFriend($uid, $params){ $user_info = Db::name('user')->where('id', $uid)->find(); if ($user_info['pid'] > 0){ return api_succ_return('你已经绑定成功,无需在绑定'); } $pid_info = Db::name('user')->where('code', $params['invite_code'])->find(); if (!$pid_info){ sr_throw('绑定失败,未查询到你的好友'); } Db::startTrans(); try { $ser_user = new UserServices(); $ser_user->bindRelation($params['invite_code'], $uid); Db::commit(); }catch (\Exception $e){ Db::rollback(); return api_error_return('绑定失败'); } return api_succ_return('绑定成功'); } }