Files

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