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.
 
 
 

106 lines
4.0 KiB

<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2020/7/7
* Time: 16:27
*/
namespace App\Http\Controllers\Appapi\V1;
use App\Services\PerpetualContractService;
use Illuminate\Http\Request;
class PerpetualContractController extends ApiController
{
//永续合约
protected $PerpetualContractService;
public function __construct(PerpetualContractService $PerpetualContractService)
{
$this->PerpetualContractService = $PerpetualContractService;
}
#下单
public function order_placement(Request $request)
{
if ($data = $this->verifyField($request->all(), [
'type' => 'required|integer|in:1,2', //委托类型 1限价交易 2市价交易
'contract_code' => 'required|String', //合约代码取值范围BTC-USD
'entrust_price' => 'required_if:type,1|numeric', //委托价格
'direction' => 'required|string|in:buy,sell', //买卖方向 buy":买,"sell":卖
'offset' => 'required|String|in:open,close', //开仓平仓 open",开,"close"平
'volume' => 'required|numeric', //委托数量(张)
'lever_rate' => 'required|numeric', //委托数量 杠杆倍数
'client_order_id' => 'required|String', //委托数量 客户端订单必须保持唯一
])) return $data;
$array = $request->only(['type', 'contract_code', 'entrust_price', 'direction', 'offset', 'volume', 'lever_rate', 'client_order_id', 'exchange_coin_id']);
$user = $this->current_user();
$orderLockKey = 'inside_entrust_lock:' . $user['user_id'];
if (!$this->setKeyLock($orderLockKey, 3)) { //订单锁
return $this->error();
}
if ($request->direction == 'buy') {
$res = $this->PerpetualContractService->buyLong($user, $array);
} else {
$res = $this->PerpetualContractService->sellShort($user, $array);
}
if (!$res) {
return $this->error(0, '下单失败,请稍后重试');
}
return $res;
}
#撤单
public function cancelOrder(Request $request)
{
}
#批量撤单
public function bulkCancellation(Request $request)
{
}
#当前委托
public function current_commission(Request $request)
{
if ($vr = $this->verifyField($request->all(), [
'direction' => 'string|in:buy,sell', //买卖方向
'type' => 'integer|in:1,2', //委托类型 1限价交易 2市价交易
'contract_code' => 'required|String', //交易对 参数格式:BTC-USDT
])) return $vr;
$user = $this->current_user();
$params = $request->only(['direction', 'type', 'contract_code']);
$data = $this->PerpetualContractService->currentCommission($user, $params);
return $this->successWithData($data);
}
#持仓信息
public function contract_position(Request $request)
{
$user = $this->current_user();
$user_id = $user['user_id'];
// $client_order_id= $request->input("client_order_id");
// $contract_code = $request->input("contract_code");
// $contract_code = $request->input("contract_code");
if ($vr = $this->verifyField($request->all(), [
'client_order_id' => 'required|String', //客户端订单ID
'contract_code' => 'required|String', //合约代码取值范围BTC-USD
'margin_mode' => 'required|string|in:crossed,fixed', //仓位 模式 全仓 crossed fixed 逐仓
])) return $vr;
$params = $request->only(['client_order_id', 'margin_mode', 'contract_code']);
return $this->PerpetualContractService->contractPosition($user_id, $params);
}
#历史委托
public function historical_commission(Request $request)
{
$user = $this->current_user();
$user_id = $user['user_id'];
$contract_code = $request->input('contract_code');
return $this->PerpetualContractService->historicalCommission($user_id, $contract_code);
}
}