244 lines
6.1 KiB
PHP
244 lines
6.1 KiB
PHP
<?php
|
|
|
|
namespace App;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Carbon;
|
|
|
|
class MicroOrder extends Model
|
|
{
|
|
const TYPE_RISE = 1; //买涨
|
|
const TYPE_FALL = 2; //买跌
|
|
|
|
const STATUS_OPENED = 1; //交易中
|
|
const STATUS_CLOSING = 2; //平仓中
|
|
const STATUS_CLOSED = 3; //已平仓
|
|
|
|
const RESULT_LOSS = -1; //亏
|
|
const RESULT_BALANCE = 0; //平
|
|
const RESULT_PROFIT = 1; //盈
|
|
|
|
protected $dates = [
|
|
'handled_at',
|
|
'complete_at',
|
|
];
|
|
|
|
protected $attributes = [
|
|
'profit_result' => 0,
|
|
];
|
|
|
|
protected $hidden = [
|
|
'pre_profit_result', //隐藏掉预设的盈利结果
|
|
];
|
|
|
|
protected $appends = [
|
|
'currency_name',
|
|
'symbol_name',
|
|
'account',
|
|
'type_name',
|
|
'status_name',
|
|
'real_name',
|
|
'profit_result_name',
|
|
'show_micro_id',//显示订单号
|
|
'parent_agent_name',
|
|
];
|
|
|
|
protected static $typeList = [
|
|
'',
|
|
self::TYPE_RISE => '涨',
|
|
self::TYPE_FALL => '跌',
|
|
];
|
|
|
|
protected static $statusList = [
|
|
'',
|
|
self::STATUS_OPENED => '交易中',
|
|
self::STATUS_CLOSING => '平仓中',
|
|
self::STATUS_CLOSED => '已平仓',
|
|
];
|
|
|
|
protected static $resultList = [
|
|
self::RESULT_LOSS => '亏损',
|
|
self::RESULT_BALANCE => '无',
|
|
self::RESULT_PROFIT => '盈利',
|
|
];
|
|
|
|
//伪订单号
|
|
public function getShowMicroIdAttribute()
|
|
{
|
|
|
|
$id = $this->attributes['id'] ?? 0;
|
|
$uid = $id + 10000;
|
|
return $uid;
|
|
}
|
|
|
|
public function getCurrencyNameAttribute()
|
|
{
|
|
return $this->currency()->value('name');
|
|
}
|
|
|
|
public function getSymbolNameAttribute()
|
|
{
|
|
return $this->currencyMatch->symbol ?? '';
|
|
}
|
|
|
|
public function getTypeNameAttribute()
|
|
{
|
|
$value = $this->attributes['type'] ?? 0;
|
|
return self::$typeList[$value] ?? '';
|
|
}
|
|
|
|
public function getStatusNameAttribute()
|
|
{
|
|
$value = $this->attributes['status'] ?? 0;
|
|
return self::$statusList[$value] ?? '';
|
|
}
|
|
|
|
public function getProfitResultNameAttribute()
|
|
{
|
|
$value = $this->attributes['profit_result'] ?? 0;
|
|
return self::$resultList[$value] ?? '';
|
|
}
|
|
|
|
public function getPreProfitResultNameAttribute()
|
|
{
|
|
$value = $this->attributes['pre_profit_result'] ?? 0;
|
|
return self::$resultList[$value] ?? '';
|
|
}
|
|
|
|
public function getAccountAttribute()
|
|
{
|
|
$user = $this->user();
|
|
return $user->value('phone') ?? $user->value('email');
|
|
}
|
|
|
|
public function setPreProfitResultAttribute($value)
|
|
{
|
|
if (!$this->exists) {
|
|
$user_id = $this->attributes['user_id']; //下单用户id
|
|
$currency_id = $this->attributes['currency_id']; //币种id
|
|
$number = $this->attributes['number']; //下单数量
|
|
$result = self::getRisk($user_id, $currency_id, $number);
|
|
$this->attributes['pre_profit_result'] = $result;
|
|
} else {
|
|
$this->attributes['pre_profit_result'] = $value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 返回输赢结果
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function getRisk($user_id, $currency_id, $number)
|
|
{
|
|
//检测用户是否在预设的盈利和亏损名单中
|
|
$user = Users::find($user_id);
|
|
|
|
// $risk = $user->value('risk');
|
|
$risk = $user['risk'];
|
|
return $risk;
|
|
// return 0;
|
|
}
|
|
|
|
/**
|
|
* 根据价格计算当前的盈利结果
|
|
*
|
|
* @return integer
|
|
*/
|
|
public function getProfitTypeAttribute()
|
|
{
|
|
$type = $this->attributes['type'] ?? 0;
|
|
$open_price = $this->attributes['open_price'] ?? 0;
|
|
$end_price = $this->attributes['end_price'] ?? 0;
|
|
if (empty($type) || empty($open_price) || empty($end_price)) {
|
|
return 0;
|
|
}
|
|
$profit_type = bc_comp($end_price, $open_price);
|
|
if ($type == self::TYPE_FALL) {
|
|
$profit_type = -1 * $profit_type;
|
|
}
|
|
return $profit_type;
|
|
}
|
|
|
|
public function getCostPriceAttribute()
|
|
{
|
|
return $this->currency()->value('price') ?? 0;
|
|
}
|
|
|
|
public function getLossPriceAttribute()
|
|
{
|
|
return $this->currency()->value('price') ?? 0;
|
|
}
|
|
|
|
public function getCostAttribute()
|
|
{
|
|
$number = $this->attributes['number'] ?? 0;
|
|
return bc_mul($number, $this->getAttribute('cost_price'));
|
|
}
|
|
|
|
public function getCostWithProfitAttribute()
|
|
{
|
|
$profit_ratio = $this->getAttribute('profit_ratio');
|
|
$number = $this->attributes['number'] ?? 0;
|
|
$cost_with_profit = bc_mul($number, bc_div(bc_add(100, $profit_ratio), 100));
|
|
return bc_mul($cost_with_profit, $this->getAttribute('cost_price'));
|
|
}
|
|
|
|
public function getRemainMilliSecondsAttribute()
|
|
{
|
|
$handled_at = $this->getAttribute('handled_at');
|
|
$now = Carbon::now();
|
|
if ($now >= $handled_at) {
|
|
return 0;
|
|
}
|
|
return ($handled_at->diffInSeconds($now) + 1.3) * 1000;
|
|
}
|
|
|
|
public function getRealNameAttribute()
|
|
{
|
|
$user_profile = $this->user->userReal->first();
|
|
if($user_profile){
|
|
return $user_profile->name ?? '--';
|
|
}else{
|
|
return '--';
|
|
}
|
|
//return $this->user->userProfile->name ?? '--';
|
|
}
|
|
|
|
public function user()
|
|
{
|
|
return $this->belongsTo(Users::class)->withDefault();
|
|
}
|
|
|
|
public function userProfile()
|
|
{
|
|
return $this->user->userProfile();
|
|
}
|
|
|
|
public function currency()
|
|
{
|
|
return $this->belongsTo(Currency::class);
|
|
}
|
|
|
|
public function currencyMatch()
|
|
{
|
|
return $this->belongsTo(CurrencyMatch::class, 'match_id');
|
|
}
|
|
|
|
//所属代理商
|
|
public function getParentAgentNameAttribute() {
|
|
$user = $this->user()->getResults();
|
|
if ($user) {
|
|
if ($user->agent_note_id == 0){
|
|
return '无';
|
|
}else{
|
|
$agent = Agent::where('id' , $user->agent_note_id)->first();
|
|
|
|
return $agent->username;
|
|
}
|
|
} else {
|
|
return '';
|
|
}
|
|
}
|
|
}
|