453 lines
12 KiB
PHP
453 lines
12 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Created by PhpStorm.
|
|
* User: swl
|
|
* Date: 2018/7/3
|
|
* Time: 10:23
|
|
*/
|
|
|
|
namespace App;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Session;
|
|
use App\Token;
|
|
|
|
class Users extends Model
|
|
{
|
|
protected $table = 'users';
|
|
public $timestamps = false;
|
|
|
|
protected $hidden = [
|
|
'password',
|
|
'pay_password',
|
|
'memorizing_words',
|
|
'is_blacklist',
|
|
'gesture_password',
|
|
'risk',
|
|
];
|
|
|
|
protected $appends = [
|
|
'account',
|
|
'is_seller',
|
|
'create_date',
|
|
'usdt',
|
|
'caution_money',
|
|
'parent_name',
|
|
'my_agent_level',
|
|
// 'lever_balance',
|
|
// 'lock_lever_balance',
|
|
// 'legal_balance',
|
|
// 'lock_legal_balance',
|
|
'userreal_name', //tian add
|
|
'usdt_mic',
|
|
];
|
|
|
|
protected static $roleList = [
|
|
MicroOrder::RESULT_LOSS => '亏损',
|
|
MicroOrder::RESULT_BALANCE => '无',
|
|
MicroOrder::RESULT_PROFIT => '盈利',
|
|
];
|
|
|
|
public function getUserrealNameAttribute()
|
|
{
|
|
$user_profile = $this->userReal()->first();
|
|
if($user_profile){
|
|
return $user_profile->name ?? '--';
|
|
}else{
|
|
return '--';
|
|
}
|
|
|
|
}
|
|
|
|
public function userReal()
|
|
{
|
|
return $this->hasMany(UserReal::class, 'user_id')->where('review_status', 2);
|
|
}
|
|
|
|
public function userProfile()
|
|
{
|
|
return $this->hasOne(UserProfile::class, 'user_id');
|
|
}
|
|
|
|
public function getLeverBalanceAttribute()
|
|
{
|
|
$id = $this->getAttribute['id'];
|
|
if(empty($id)){
|
|
return '';
|
|
}
|
|
$wallet = UsersWallet::where('user_id', $id)->where('currency', 3)->first();
|
|
return $wallet->lever_balance;
|
|
}
|
|
public function getLockLeverBalanceAttribute()
|
|
{
|
|
$id = $this->getAttribute['id'];
|
|
if(empty($id)){
|
|
return '';
|
|
}
|
|
$wallet = UsersWallet::where('user_id', $id)->where('currency', 3)->first();
|
|
return $wallet->lock_lever_balance;
|
|
}
|
|
public function getLegalBalanceAttribute()
|
|
{
|
|
$id = $this->getAttribute['id'];
|
|
if(empty($id)){
|
|
return '';
|
|
}
|
|
$wallet = UsersWallet::where('user_id', $id)->where('currency', 3)->first();
|
|
return $wallet->legal_balance;
|
|
}
|
|
public function getLockLegalBalanceAttribute()
|
|
{
|
|
$id = $this->getAttribute['id'];
|
|
$wallet = UsersWallet::where('user_id', $id)->where('currency', 3)->first();
|
|
return $wallet->lock_legal_balance;
|
|
}
|
|
public function getUsdtMicAttribute()
|
|
{
|
|
$value = $this->getAttribute['id'];
|
|
if(empty($value)){
|
|
return '';
|
|
}
|
|
$us = DB::table('currency')->where('name', 'USDC')->first();
|
|
|
|
$wal = UsersWallet::where('currency', $us->id)->where('user_id', $value)->first();
|
|
|
|
return isset($wal->micro_balance) ? $wal->micro_balance : '0.00000';
|
|
}
|
|
//期权账号
|
|
public function getUsdtAttribute()
|
|
{
|
|
$value = $this->getAttributes['id'];
|
|
if(empty($value)){
|
|
return '';
|
|
}
|
|
$us = DB::table('currency')->where('name', 'USDC')->first();
|
|
|
|
$wal = UsersWallet::where('currency', $us->id)->where('user_id', $value)->first();
|
|
|
|
return isset($wal->lever_balance) ? $wal->lever_balance : '0.00000';
|
|
}
|
|
|
|
public function getCautionMoneyAttribute()
|
|
{
|
|
$value = $this->getAttributes['id'];
|
|
if(empty($value)){
|
|
return '';
|
|
}
|
|
return DB::table('lever_transaction')->where('user_id', $value)->whereIn('status', [0, 1])->sum('caution_money');
|
|
}
|
|
|
|
public function getParentNameAttribute()
|
|
{
|
|
$value = $this->getAttribute('agent_note_id');
|
|
$p = Agent::where('id', $value)->first();
|
|
return isset($p->username) ? $p->username : '-/-';
|
|
}
|
|
|
|
public function getMyAgentLevelAttribute()
|
|
{
|
|
$value = $this->attributes['agent_id'] ?? 0;
|
|
if ($value == 0) {
|
|
return '普通用户';
|
|
} else {
|
|
$m = DB::table('agent')->where('id', $value)->first();
|
|
$name = '';
|
|
if (empty($m)) {
|
|
$name = '';
|
|
} else {
|
|
if ($m->level == 0) {
|
|
$name = '超管';
|
|
} else if ($m->level > 0) {
|
|
$name = $m->level . '级代理商';
|
|
}
|
|
}
|
|
|
|
return $name;
|
|
}
|
|
}
|
|
|
|
// 修改用户积分
|
|
public function ChangeScore($num,$model,$id,$remarks)
|
|
{
|
|
|
|
$model->score -= $num;
|
|
if (!$model->save()){
|
|
return true;
|
|
}
|
|
// 保存积分日志
|
|
$log = [
|
|
'user_id' => $id,
|
|
'type' => 2,
|
|
'change' => -$num,
|
|
'remarks' => $remarks,
|
|
'create_time' => date('Y-m-d H:i:s',time()),
|
|
];
|
|
$res = DB::table('score_log')->insert($log);
|
|
if (empty($res)){
|
|
return false;
|
|
}
|
|
|
|
}
|
|
public function getCreateDateAttribute()
|
|
{
|
|
$value = $this->getAttribute('time');
|
|
return $value;
|
|
return date('Y-m-d H:i:s', $value);
|
|
}
|
|
|
|
//密码加密
|
|
public static function MakePassword($password, $type = 0)
|
|
{
|
|
if ($type == 0) {
|
|
$salt = 'ABCDEFG';
|
|
$passwordChars = str_split($password);
|
|
foreach ($passwordChars as $char) {
|
|
$salt .= md5($char);
|
|
}
|
|
} else {
|
|
$salt = 'TPSHOP' . $password;
|
|
}
|
|
return md5($salt);
|
|
}
|
|
|
|
public static function getByAccountNumber($account_number)
|
|
{
|
|
return self::where('account_number', $account_number)->first();
|
|
}
|
|
|
|
public static function getByString($string)
|
|
{
|
|
if (empty($string)) {
|
|
return "";
|
|
}
|
|
return self::where("phone", $string)
|
|
->orwhere('email', $string)
|
|
->orWhere('account_number', $string)
|
|
->first();
|
|
}
|
|
|
|
public static function getById($id)
|
|
{
|
|
if (empty($id)) {
|
|
return "";
|
|
}
|
|
return self::where("id", $id)->first();
|
|
}
|
|
//生成邀请码
|
|
public static function getExtensionCode()
|
|
{
|
|
$code = self::generate_password(4);
|
|
if (self::where("extension_code", $code)->first()) {
|
|
//如果生成的邀请码存在,继续生成,直到不存在
|
|
$code = self::getExtensionCode();
|
|
}
|
|
return $code;
|
|
}
|
|
public static function generate_password($length = 8)
|
|
{
|
|
$chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
$password = "";
|
|
for ($i = 0; $i < $length; $i++) {
|
|
$password .= $chars[mt_rand(0, strlen($chars) - 1)];
|
|
}
|
|
return $password;
|
|
}
|
|
|
|
public static function getUserId()
|
|
{
|
|
// return session('user_id');
|
|
$token = Token::getToken();
|
|
$user_id = Token::getUserIdByToken($token);
|
|
return $user_id;
|
|
}
|
|
|
|
public static function getAuthUser()
|
|
{
|
|
return self::find(self::getUserId());
|
|
}
|
|
|
|
|
|
public function getTimeAttribute()
|
|
{
|
|
if (isset($this->attributes['time'])) {
|
|
$value = $this->attributes['time'];
|
|
return $value ? date('Y-m-d H:i:s', $value) : '';
|
|
} else {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
//获取用户的账号 手机号或邮箱
|
|
public function getAccountAttribute()
|
|
{
|
|
//$value = $this->attributes['phone'];
|
|
$value = $this->getAttribute('phone');
|
|
if (empty($value)) {
|
|
$value = $this->getAttribute['email'];
|
|
if(empty($value)){
|
|
return '';
|
|
}
|
|
$n = strripos($value, '@');
|
|
$value = mb_substr($value, 0, 2) . '******' . mb_substr($value, $n);
|
|
} else {
|
|
$value = mb_substr($value, 0, 3) . '******' . mb_substr($value, -3, 3);
|
|
}
|
|
return $value;
|
|
}
|
|
|
|
/*
|
|
//手势密码序列化
|
|
public function setGesturePassword($value) {
|
|
$this->attributes['gesture_password'] = serialize($value);
|
|
}
|
|
//取出数据时反序列化
|
|
public function getGesturePassword($value) {
|
|
return unserialize($value);
|
|
}
|
|
*/
|
|
|
|
public function getIsSellerAttribute()
|
|
{
|
|
$id=$this->getAttribute['id'];
|
|
if(empty($id)){
|
|
return 0;
|
|
}
|
|
$seller = Seller::where('user_id', $this->getAttribute['id'])->first();
|
|
if (!empty($seller)) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public function cashinfo()
|
|
{
|
|
return $this->belongsTo('App\UserCashInfo', 'id', 'user_id');
|
|
}
|
|
|
|
public function legalDeal()
|
|
{
|
|
return $this->hasOne('App\C2cDeal', 'seller_id', 'id');
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param $model 用户模型实例
|
|
* @param $status 锁定开关
|
|
* @param $time 锁定结束时间
|
|
* @return bool
|
|
*/
|
|
public function lockUser($model, $status, $time, $frozen_funds)
|
|
{
|
|
if (!empty($time)) {
|
|
$time = strtotime($time);
|
|
}
|
|
if ($status == 1) {
|
|
$model->status = 1;
|
|
$model->lock_time = $time;
|
|
} else {
|
|
$model->status = 0;
|
|
$model->lock_time = 0;
|
|
}
|
|
|
|
if($frozen_funds==1){
|
|
$model->frozen_funds = 1;
|
|
$model->lock_time = $time;
|
|
}else{
|
|
$model->frozen_funds = 0;
|
|
$model->lock_time = 0;
|
|
}
|
|
$result = $model->save();
|
|
if ($result) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function getRiskNameAttribute()
|
|
{
|
|
$risk = $this->attributes['risk'] ?? 0;
|
|
return self::$roleList[$risk];
|
|
}
|
|
|
|
/*
|
|
* count 当前几代
|
|
* $algebra 总共几代
|
|
* user_id 用户id
|
|
* touch_user_id 触发者id
|
|
* currency 币种id
|
|
* price 金额
|
|
* */
|
|
public static function rebate($user_id,$touch_user_id,$currency,$price,$count=1,$algebra=0)
|
|
{
|
|
$user=self::where('id', $user_id)->first();
|
|
$touch_user = self::getById($touch_user_id);
|
|
if (empty($user)) {
|
|
return true;
|
|
}
|
|
|
|
if ($user->parent_id==0) {
|
|
return true;
|
|
}
|
|
$wallet = UsersWallet::where('currency', $currency)
|
|
->where('user_id', $user->parent_id)
|
|
->first();
|
|
|
|
$u_algebra=Algebra::where('algebra', $count)->first();
|
|
if (empty($u_algebra)||empty($wallet)) {
|
|
$count+=1;
|
|
$algebra-=1;
|
|
$result=self::rebate($user->parent_id, $touch_user_id, $currency, $price, $count, $algebra);
|
|
return $result;
|
|
}
|
|
|
|
$totle_price=$price*$u_algebra->rate/100;
|
|
$info='第'.$count."代用户{$touch_user->account_number}返手续费:".$totle_price;
|
|
$result = change_wallet_balance($wallet, 4, $totle_price, AccountLog::MICRO_TRADE_CLOSE_SETTLE, $info);
|
|
$algebra-=1;
|
|
$user_algebra=new UserAlgebra();
|
|
$user_algebra->user_id=$user->parent_id;
|
|
$user_algebra->touch_user_id=$touch_user_id;
|
|
$user_algebra->algebra=$count;
|
|
$user_algebra->info=$info;
|
|
$user_algebra->value=$totle_price;
|
|
$user_algebra->save();
|
|
$count+=1;
|
|
if ($algebra==0) {
|
|
return true;
|
|
}else{
|
|
$result=self::rebate($user->parent_id, $touch_user_id, $currency, $price, $count, $algebra);
|
|
return $result;
|
|
}
|
|
|
|
}
|
|
|
|
public function belongAgent()
|
|
{
|
|
return $this->belongsTo(Agent::class, 'agent_note_id', 'id');
|
|
}
|
|
|
|
public static function gen_invite_code($length = 8)
|
|
{
|
|
$pattern = '0123456789';
|
|
$code = self::gen_comm($pattern, $length);
|
|
$users = self::where('id', $code)->first();
|
|
if ($users) {
|
|
return self::gen_invite_code($length);
|
|
} else {
|
|
return $code;
|
|
}
|
|
}
|
|
|
|
private static function gen_comm($content, $length)
|
|
{
|
|
$key = '';
|
|
for ($i = 0; $i < $length; $i++) {
|
|
$key .= $content[mt_rand(0, strlen($content) - 1)];
|
|
}
|
|
|
|
return $key;
|
|
}
|
|
}
|