bourse stock
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.

135 lines
4.5 KiB

<?php
namespace app\model;
/**
* @property int id
* @property int user_id
* @property int stock_id
* @property float usable_num
* @property float frozen_num
* @property string create_time
* @property string update_time
*/
class UserStockGBXModel extends BaseModel
{
protected $name = 'user_stock_gbx';
protected $pk = 'id';
public static function getUserStockByUserId(array $data):array
{
if(!empty($data['trade_name'])){
$stock_id=$data['trade_name'];
}else{
$stock_id='GBX';
}
$info = self::where([
'user_id'=>$data['user_id'],
'stock_id'=>$stock_id
])->field('usable_num,frozen_num,stock_id as name')->find();
if(empty($info)){
$info = new self;
$info->user_id = $data['user_id'];
$info->stock_id = $stock_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 getUserStockLock(int $user_id,string $stock_id='GBX'):array
{
$info = self::where([
'user_id'=>$user_id,
'stock_id'=>$stock_id
])->lock(true)->find();
if(empty($info)){
// 如果没有则创建
$info = new self;
$info->user_id = $user_id;
$info->stock_id = $stock_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 getUserStockList(int $user_id):array
{
$list = self::where([
'user_id'=>$user_id,
])->field('usable_num,frozen_num,stock_id as name')->select();
if($list->isEmpty()){
$self = new self;
$self->user_id = $user_id;
$self->stock_id = 'GBX';
$self->usable_num = '0';
$self->frozen_num = '0';
$self->create_time = date('Y-m-d H:i:s');
$self->update_time = date('Y-m-d H:i:s');
$self->save();
$list = self::where([
'user_id'=>$user_id,
])->field('usable_num,frozen_num,stock_id as name')->select();
}
foreach ($list as $key=>$val){
if($val['name']=='GBX'){
$list[$key]['buy_up']=[
'buy_num'=>0,
'buy_money'=>0
];
$list[$key]['buy_down']=[
'buy_num'=>0,
'buy_money'=>0
];
}else{
//获取持仓成本
$list[$key]['buy_up']=StockMysTradeModel::getTradeOrderBuyNum($user_id,$val['name'],1);
$list[$key]['buy_down']=StockMysTradeModel::getTradeOrderBuyNum($user_id,$val['name'],2);
}
}
//获取平仓累计盈亏
$daily_num=StockMysTradeModel::getTradeOrderDailyNum($user_id);
//$earnest_money=StockTradeModel::getUserEarnestMmoney($user_id);
// 保证金 挂单 和 持仓的订单金额
// $earnest_money=StockMysTradeModel::getAmountForMargin($user_id);
$earnest_money=0;
$fee_num=StockMysTradeModel::getTradeOrderFee($user_id);
// 获取新股申购的手续费
$pre_fee = UserMysPreStockOrderModel::getRealFee($user_id);
return [
'earnest_money'=>(float)$earnest_money,//保证金
'daily_num'=>$daily_num,//累计盈亏
'fee_num'=>$fee_num,//累计盈亏
'pre_fee' => $pre_fee, // 新股手续费
'sum_fee' => bcadd($fee_num, $pre_fee, 4),
'list'=>$list->toArray()
];
}
public static function InsertUserStock(array $data)
{
$self = new self;
$self->user_id = $data['user_id'];
$self->stock_id = $data['stock_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 updateUserStock(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;
}
}