You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.2 KiB
126 lines
4.2 KiB
2 months ago
|
<?php
|
||
|
namespace app\model;
|
||
|
/**
|
||
|
* @property int id
|
||
|
* @property int user_id
|
||
|
* @property int digital_id
|
||
|
* @property float usable_num
|
||
|
* @property float frozen_num
|
||
|
* @property string create_time
|
||
|
* @property string update_time
|
||
|
*/
|
||
|
class UserDigitalModel extends BaseModel
|
||
|
{
|
||
|
protected $name = 'user_digital';
|
||
|
protected $pk = 'id';
|
||
|
|
||
|
public static function getUserDigitalByUserId(array $data):array
|
||
|
{
|
||
|
if(!empty($data['trade_name'])){
|
||
|
$digital_id=strtoupper($data['trade_name']);
|
||
|
}else{
|
||
|
$digital_id='USDT';
|
||
|
}
|
||
|
$info = self::where([
|
||
|
'user_id'=>$data['user_id'],
|
||
|
'digital_id'=>$digital_id
|
||
|
])->field('usable_num,frozen_num,digital_id as name')->find();
|
||
|
if(empty($info)){
|
||
|
return [
|
||
|
'usable_num'=>0,
|
||
|
'frozen_num'=>0,
|
||
|
'name'=>$digital_id
|
||
|
];
|
||
|
}
|
||
|
return $info->toArray();
|
||
|
}
|
||
|
public static function getUserDigitalLock(int $user_id,string $digital_id='USDT'):array
|
||
|
{
|
||
|
$info = self::where([
|
||
|
'user_id'=>$user_id,
|
||
|
'digital_id'=>$digital_id
|
||
|
])->lock(true)->find();
|
||
|
if(empty($info)){
|
||
|
$info = new self;
|
||
|
$info->user_id = $user_id;
|
||
|
$info->digital_id = $digital_id;
|
||
|
$info->usable_num = 0;
|
||
|
$info->frozen_num = 0;
|
||
|
$info->create_time = date('Y-m-d H:i:s');
|
||
|
$info->update_time = date('Y-m-d H:i:s');
|
||
|
$info->save();
|
||
|
}
|
||
|
return $info->toArray();
|
||
|
}
|
||
|
public static function getUserDigitalList(int $user_id):array
|
||
|
{
|
||
|
$list = self::where([
|
||
|
'user_id'=>$user_id,
|
||
|
])->field('usable_num,frozen_num,digital_id as name')->select();
|
||
|
if(empty($list)){
|
||
|
return [];
|
||
|
}
|
||
|
$digital_list=DigitalListModel::getMarketList(['page'=>1,'page_size'=>100],$type=1);
|
||
|
//print_r($digital_list);
|
||
|
foreach ($list as $key=>$val){
|
||
|
foreach ($digital_list['list'] as $item){
|
||
|
if($item['name']==$val['name']){
|
||
|
$list[$key]['logo_link']=$item['logo_link'];
|
||
|
}
|
||
|
}
|
||
|
if($val['name']!='USDT'){
|
||
|
//买入成本
|
||
|
$buy_info=DigitalTradeModel::getTradeOrderPrice($user_id,$val['name'],1);
|
||
|
if($buy_info['order_num']>0){
|
||
|
$buy_price=($buy_info['order_money']/$buy_info['order_num']);//平均买入价
|
||
|
$list[$key]['buy_price']=$buy_price;
|
||
|
}else{
|
||
|
$list[$key]['buy_price']=0;
|
||
|
}
|
||
|
//累计盈亏
|
||
|
$sale_info=DigitalTradeModel::getTradeOrderPrice($user_id,$val['name'],2);
|
||
|
if($sale_info['order_num']>0){
|
||
|
$sale_price=$sale_info['order_money']/$sale_info['order_num'];
|
||
|
$list[$key]['daily_num']=($sale_price-$buy_price)*$sale_info['order_num'];
|
||
|
}else{
|
||
|
$list[$key]['daily_num']=0;
|
||
|
}
|
||
|
}else{
|
||
|
$list[$key]['buy_price']=0;
|
||
|
$list[$key]['daily_num']=0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//获取持仓成本
|
||
|
//$buy_num=DigitalTradeModel::getTradeOrderBuyNum($user_id);
|
||
|
//获取平仓累计盈亏
|
||
|
//$daily_num=DigitalTradeModel::getTradeOrderDailyNum($user_id);
|
||
|
$fee_num=DigitalTradeModel::getTradeOrderFee($user_id);
|
||
|
return [
|
||
|
'fee_num'=>$fee_num,//手续费
|
||
|
'list'=>$list->toArray()
|
||
|
];
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function InsertUserDigital(array $data)
|
||
|
{
|
||
|
$self = new self;
|
||
|
$self->user_id = $data['user_id'];
|
||
|
$self->digital_id = $data['digital_id'];
|
||
|
$self->usable_num = $data['usable_num'];
|
||
|
$self->frozen_num = $data['frozen_num'];
|
||
|
$self->create_time = date('Y-m-d H:i:s');
|
||
|
$self->save();
|
||
|
}
|
||
|
public static function updateUserDigital(array $update_data,array $where)
|
||
|
{
|
||
|
$update_data['update_time']=date('Y-m-d H:i:s');
|
||
|
$res=self::where($where)->save($update_data);
|
||
|
//echo self::where($where)->getLastSql();
|
||
|
return $res;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
}
|