chuan 3 weeks ago
parent
commit
6b1917c1aa
  1. 2
      app/admin/controller/setting/Contract.php
  2. 13
      app/admin/controller/setting/GoldFutures.php
  3. 2
      app/admin/route/app.php
  4. 60
      app/admin/service/OrderService.php
  5. 19
      app/admin/service/setting/ContractService.php
  6. 12
      app/admin/service/setting/ForexService.php
  7. 189
      app/admin/service/setting/GoldFuturesService.php

2
app/admin/controller/setting/Contract.php

@ -12,7 +12,7 @@ class Contract extends AdminBaseController
public function index()
{
$service = new ContractService();
$result = $service->index();
$result = $service->index($this->request->param());
return json($result);
}

13
app/admin/controller/setting/GoldFutures.php

@ -19,5 +19,18 @@ class GoldFutures extends AdminBaseController
return json($result);
}
// 新增黄金期货交易对配置
public function goldFuturesAdd()
{
$result = (new GoldFuturesService())->goldFuturesAdd($this->request->param());
return json($result);
}
// 编辑黄金期货交易对配置
public function goldFuturesEdit()
{
$result = (new GoldFuturesService())->goldFuturesEdit($this->request->param());
return json($result);
}
}

2
app/admin/route/app.php

@ -376,6 +376,8 @@ Route::group('/', function () {
// 黄金期货配置
Route::post('setting/gold_futures_list', 'setting.GoldFutures/goldFuturesList'); // 黄金期货列表
Route::post('setting/gold_futures_select', 'setting.GoldFutures/getTradeNameList'); // 黄金期货交易对列表
Route::post('setting/gold_futures_add', 'setting.GoldFutures/goldFuturesAdd'); // 新增黄金期货交易对配置
Route::post('setting/gold_futures_edit', 'setting.GoldFutures/goldFuturesEdit'); // 编辑黄金期货交易对配置
// 外汇配置
Route::post('/setting/forex_index', 'setting.Forex/index');

60
app/admin/service/OrderService.php

@ -737,9 +737,11 @@ class OrderService extends AdminBaseService
foreach ($list as $item) {
// 计算浮动盈亏
if ($item['trade_type'] == 1) {
$float = $item['closing_price'] - $item['deal_price'];
// $float = $item['closing_price'] - $item['deal_price'];
$float = bcsub($item['closing_price'], $item['deal_price'], 10);
} else {
$float = $item['deal_price'] - $item['closing_price'];
// $float = $item['deal_price'] - $item['closing_price'];
$float = bcsub($item['deal_price'], $item['closing_price'], 10);
}
// * 仓位
@ -1150,15 +1152,15 @@ class OrderService extends AdminBaseService
foreach ($list as $item) {
// 计算浮动盈亏
if ($item['trade_type'] == 1) {
$float = $item['closing_price'] - $item['deal_price'];
$float = bcsub($item['closing_price'], $item['deal_price'], 10);
} else {
$float = $item['deal_price'] - $item['closing_price'];
$float = bcsub($item['deal_price'], $item['closing_price'], 10);;
}
// * 仓位
$float = @bcmul($float, $item['order_number'], 10);
$float = bcmul($float, $item['order_number'], 10);
// * 面值
$float = @bcmul($float, $item['face_value'], 6);
$float = bcmul($float, $item['face_value'], 6);
$rows[] = [
'trade_id' => $item['trade_id'], //
@ -1563,9 +1565,11 @@ class OrderService extends AdminBaseService
foreach ($list as $item) {
// 计算浮动盈亏
if ($item['trade_type'] == 1) {
$float = $item['closing_price'] - $item['deal_price'];
// $float = $item['closing_price'] - $item['deal_price'];
$float = bcsub($item['closing_price'], $item['deal_price'], 10);
} else {
$float = $item['deal_price'] - $item['closing_price'];
// $float = $item['deal_price'] - $item['closing_price'];
$float = bcsub($item['deal_price'], $item['closing_price'], 10);
}
// * 仓位
@ -1687,6 +1691,11 @@ class OrderService extends AdminBaseService
$orderNumber = number_format($item['order_number'], '18', '.', '');
$orderPrice = number_format($item['deal_price'], '18', '.', '');
$orderAmount = bcmul($orderNumber, $orderPrice, 18);
if (in_array($market_type, [21])) { // 一些市场类型字段不一样,比如黄金期货没有stock_id,而是用的contract_id
$stockIdOrContractId = $item['contract_id'];
} else {
$stockIdOrContractId = $item['stock_id'];
}
$rows[] = [
'trade_id' => $item['trade_id'], //
'user_no' => $userNoArr[$item['user_id']] ?? '-', // 用户号
@ -1694,7 +1703,7 @@ class OrderService extends AdminBaseService
'open_time' => $item['open_time'] ?? '-', // 挂单时间
'trade_type' => $item['trade_type'] == 1 ? '买涨' : '买跌',
'order_money' => $orderAmount, // 订单金额
'stock_id' => $item['stock_id'], // 股票代码
'stock_id' => $stockIdOrContractId, // 股票代码
'order_number' => $item['order_number'], // 数量
'service_cost' => $item['service_cost'], // 服务费
'float' => '-', // 浮动盈亏
@ -1798,6 +1807,11 @@ class OrderService extends AdminBaseService
$orderNumber = number_format($item['order_number'], '18', '.', '');
$orderPrice = number_format($price, '18', '.', '');
$orderAmount = bcmul($orderNumber, $orderPrice, 18);
if (in_array($market_type, [21])) { // 一些市场类型字段不一样,比如黄金期货没有stock_id,而是用的contract_id
$stockIdOrContractId = $item['contract_id'];
} else {
$stockIdOrContractId = $item['stock_id'];
}
$rows[] = [
'trade_id' => $item['trade_id'], //
'order_id' => $item['order_id'], // 订单号
@ -1805,7 +1819,7 @@ class OrderService extends AdminBaseService
'create_time' => $item['create_time'], // 挂单时间
'order_money' => $orderAmount, // 订单金额
'trade_type' => $item['trade_type'] == 1 ? '买涨' : '买跌',
'stock_id' => $item['stock_id'], // 合约代码
'stock_id' => $stockIdOrContractId, // 合约代码
'order_number' => $item['order_number'], // 数量
'service_cost' => $item['service_cost'], // 服务费
'deal_price' => $price, // 委托价
@ -1906,6 +1920,11 @@ class OrderService extends AdminBaseService
$orderNumber = number_format($item['order_number'], '18', '.', '');
$orderPrice = number_format($price, '18', '.', '');
$orderAmount = bcmul($orderNumber, $orderPrice, 18);
if (in_array($market_type, [21])) { // 一些市场类型字段不一样,比如黄金期货没有stock_id,而是用的contract_id
$stockIdOrContractId = $item['contract_id'];
} else {
$stockIdOrContractId = $item['stock_id'];
}
$rows[] = [
'trade_id' => $item['trade_id'], //
'user_no' => $userNoArr[$item['user_id']] ?? '-', // 用户号
@ -1914,7 +1933,7 @@ class OrderService extends AdminBaseService
'update_time' => $item['update_time'], // 挂单时间
'trade_type' => $item['trade_type'] == 1 ? '买涨' : '买跌',
'order_money' => $orderAmount, // 订单金额
'stock_id' => $item['stock_id'], // 合约代码
'stock_id' => $stockIdOrContractId, // 合约代码
'order_number' => $item['order_number'], // 数量
'service_cost' => $item['service_cost'], // 服务费
'deal_price' => $price, // 委托价
@ -2016,9 +2035,11 @@ class OrderService extends AdminBaseService
foreach ($list as $item) {
// 计算浮动盈亏
if ($item['trade_type'] == 1) {
$float = $item['closing_price'] - $item['deal_price'];
// $float = $item['closing_price'] - $item['deal_price'];
$float = bcsub($item['closing_price'], $item['deal_price'], 18);
} else {
$float = $item['deal_price'] - $item['closing_price'];
// $float = $item['deal_price'] - $item['closing_price'];
$float = bcsub($item['deal_price'], $item['closing_price'], 18);
}
$orderNumber = number_format($item['order_number'], '18', '.', '');
@ -2028,6 +2049,11 @@ class OrderService extends AdminBaseService
$float = bcmul($float, $item['order_number'], 18);
$orderAmount = bcmul($orderNumber, $orderPrice, 18);
if (in_array($market_type, [21])) { // 一些市场类型字段不一样,比如黄金期货没有stock_id,而是用的contract_id
$stockIdOrContractId = $item['contract_id'];
} else {
$stockIdOrContractId = $item['stock_id'];
}
$rows[] = [
'trade_id' => $item['trade_id'], //
'user_no' => $userNoArr[$item['user_id']] ?? '-', // 用户号
@ -2035,7 +2061,7 @@ class OrderService extends AdminBaseService
'closing_time' => $item['closing_time'], // 平仓时间
'trade_type' => $item['trade_type'] == 1 ? '买涨' : '买跌',
'order_money' => $orderAmount, // 订单金额
'stock_id' => $item['stock_id'], // 股票代码
'stock_id' => $stockIdOrContractId, // 股票代码
'order_number' => $item['order_number'], // 数量
'service_cost' => $item['service_cost'], // 服务费
'closing_cost' => $item['closing_cost'], // 平仓服务费
@ -2866,9 +2892,11 @@ class OrderService extends AdminBaseService
foreach ($list as $item) {
// 计算浮动盈亏
if ($item['trade_type'] == 1) {
$float = $item['closing_price'] - $item['deal_price'];
// $float = $item['closing_price'] - $item['deal_price'];
$float = bcsub($item['closing_price'], $item['deal_price'], 18);
} else {
$float = $item['deal_price'] - $item['closing_price'];
// $float = $item['deal_price'] - $item['closing_price'];
$float = bcsub($item['deal_price'], $item['closing_price'], 18);
}
$float = bcmul($float, $item['order_number'], 18);

19
app/admin/service/setting/ContractService.php

@ -12,15 +12,18 @@ use think\facade\Cache;
class ContractService extends AdminBaseService
{
public function index()
public function index($param)
{
try {
$list = ContractListMode::order('id', 'desc')->select();
$where = [];
if (isset($param['trade_name']) && !empty($param['trade_name'])) {
$where[] = ['trade_name', 'like', '%' . $param['trade_name'] . '%'];
}
$list = ContractListMode::where($where)->order('id', 'desc')->select();
$rows = [];
if(!$list->isEmpty()){
$rows =$list->toArray();
}
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => count($rows)]);
}catch (\Exception $exception){
return $this->toData('1', '系统繁忙', []);
@ -95,7 +98,7 @@ class ContractService extends AdminBaseService
$contract->status = $param['status'];
$contract->is_owner = $param['is_owner'];
$contract->info = $info;
$contract->logo_link = '';
$contract->logo_link = $param['logo_link'] ?? '';
$contract->face_value = $param['face_value'];
$contract->sort = $param['sort'];
$contract->min_pry = $param['min_pry'];
@ -119,7 +122,8 @@ class ContractService extends AdminBaseService
'compel_num'=>$param['compel_num'],
'keep_decimal'=>$param['keep_decimal'],
'is_owner'=>$param['is_owner'],
'status'=>$param['status']
'status'=>$param['status'],
'logo_link' => $param['logo_link'] ?? '',
]);
return $this->toData('0', '操作成功', []);
@ -215,7 +219,7 @@ class ContractService extends AdminBaseService
$contract->status = $param['status'];
$contract->is_owner = $param['is_owner'];
$contract->info = $info;
$contract->logo_link = '';
// $contract->logo_link = $param['logo_link'] ?? ''; // 暂时不允许编辑这个字段
$contract->face_value = $param['face_value'];
$contract->sort = $param['sort'];
$contract->min_pry = $param['min_pry'];
@ -239,7 +243,8 @@ class ContractService extends AdminBaseService
'max_pry'=>$param['max_pry'],
'compel_num'=>$param['compel_num'],
'keep_decimal'=>$param['keep_decimal'],
'status'=>$param['status']
'status'=>$param['status'],
// 'logo_link' => $param['logo_link'] ?? '',
]);
return $this->toData('0', 'SUCCESS', []);
}catch (\Exception $exception){

12
app/admin/service/setting/ForexService.php

@ -140,7 +140,6 @@ class ForexService extends AdminBaseService
}
$contract = ForexListModel::where('id', $param['id'])->find();
$beforeStatus = $contract['status'];
if(empty($contract)){
return $this->toData('1', '目标不存在', []);
}
@ -203,17 +202,6 @@ class ForexService extends AdminBaseService
return $this->toData('1', '合约交易对名称已存在', []);
}
// 如果状态设置成关闭 则判断是否有正在交易的合约
if($beforeStatus == 1 && $param['status'] == 0){
$num=(new ForexListModel())->where([
'contract_id'=>strtoupper($contract['trade_name']),
'status'=>1
])->count();
if ($num != 0) {
return $this->toData('1', '交易对还存在交易,不能关闭', []);
}
}
// 写入数据
$contract->trade_name = $param['trade_name'];
$contract->status = $param['status'];

189
app/admin/service/setting/GoldFuturesService.php

@ -50,4 +50,193 @@ class GoldFuturesService extends AdminBaseService
return $this->toData('500', '系统繁忙', [$e->getMessage(), $e->getTrace()]);
}
}
// 新增黄金期货交易对配置
public function goldFuturesAdd($param)
{
try {
// 交易对名称
if(empty($param['trade_name']) || !is_string($param['trade_name']) || strlen($param['trade_name']) > 100){
return $this->toData('1', '交易对名称无效', []);
}
// 状态
if(!isset($param['status']) || !in_array($param['status'], ['0', '1'])){
return $this->toData('1', '状态无效', []);
}
// 是否自发
if(!isset($param['is_owner']) || !in_array($param['is_owner'], ['0', '1'])){
return $this->toData('1', '是否自发无效', []);
}
// 简介
$info = '';
if(isset($param['info']) && is_string($param['info'])){
$info = $param['info'];
}
// 面值
if(!isset($param['face_value']) || !is_numeric($param['face_value']) || $param['face_value'] != ceil($param['face_value']) || $param['face_value'] <= 0){
return $this->toData('1', '面值无效', []);
}
// 排序
if(!isset($param['sort']) || !is_numeric($param['sort']) || $param['sort'] != ceil($param['sort']) || $param['sort'] < 0){
return $this->toData('1', '排序值无效', []);
}
// 最小杠杆
if(empty($param['min_pry']) || !is_numeric($param['min_pry']) || $param['min_pry'] != ceil($param['min_pry']) || $param['min_pry'] <= 0){
return $this->toData('1', '最小杠杆值无效', []);
}
// 最大杠杆
if(empty($param['max_pry']) || !is_numeric($param['max_pry']) || $param['max_pry'] != ceil($param['max_pry']) || $param['max_pry'] <= 0){
return $this->toData('1', '最大杠杆值无效', []);
}
// 强制平仓比例值
if(empty($param['compel_num']) || !is_numeric($param['compel_num']) || $param['compel_num'] <= 0){
return $this->toData('1', '强制平仓比例值无效', []);
}
// 小数位数
if(!isset($param['keep_decimal']) || !is_numeric($param['keep_decimal']) || $param['keep_decimal'] != ceil($param['keep_decimal']) || $param['keep_decimal'] < 0){
return $this->toData('1', '小数位数值无效', []);
}
// 判断名称是否已被添加
$count = GoldFuturesListModel::where('trade_name', $param['trade_name'])->count();
if($count > 0){
return $this->toData('1', '合约交易对名称已存在', []);
}
$contract = new GoldFuturesListModel;
$contract->trade_name = $param['trade_name'];
$contract->status = $param['status'];
$contract->is_owner = $param['is_owner'];
$contract->info = $info;
$contract->logo_link = $param['logo_link'] ?? '';
$contract->face_value = $param['face_value'];
$contract->sort = $param['sort'];
$contract->min_pry = $param['min_pry'];
$contract->max_pry = $param['max_pry'];
$contract->compel_num = $param['compel_num'];
$contract->keep_decimal = $param['keep_decimal'];
$contract->create_time = date('Y-m-d H:i:s');
$contract->update_time = date('Y-m-d H:i:s');
$contract->save();
$list_key="GoldFutures:STOCK:LIST:".strtoupper($param['trade_name']);
$redis = $this->getRedis();
$redis->del($list_key);
$redis->hMset($list_key, [
'name'=>strtoupper($param['trade_name']),
'code'=>strtoupper($param['trade_name']),
'sort'=>$param['sort'],
'face_value'=>$param['face_value'],
'min_pry'=>$param['min_pry'],
'max_pry'=>$param['max_pry'],
'compel_num'=>$param['compel_num'],
'keep_decimal'=>$param['keep_decimal'],
'is_owner'=>$param['is_owner'],
'status'=>$param['status'],
'logo_link' => $param['logo_link'] ?? '',
]);
return $this->toData('0', '操作成功', []);
} catch (\Exception $e) {
return $this->toData('500', '系统繁忙', [$e->getMessage(), $e->getTrace()]);
}
}
// 编辑黄金期货交易对配置
public function goldFuturesEdit($param)
{
try {
if(empty($param['id']) || !is_numeric($param['id'])){
return $this->toData('1', '目标不存在', []);
}
$goldFuturesList = GoldFuturesListModel::where('id', $param['id'])->find();
if(empty($goldFuturesList)){
return $this->toData('1', '目标不存在');
}
// 交易对名称
if(empty($param['trade_name']) || !is_string($param['trade_name']) || strlen($param['trade_name']) > 100){
return $this->toData('1', '交易对名称无效');
}
// 状态
if(!isset($param['status']) || !in_array($param['status'], ['0', '1'])){
return $this->toData('1', '状态无效');
}
// 是否自发
if(!isset($param['is_owner']) || !in_array($param['is_owner'], ['0', '1'])){
return $this->toData('1', '是否自发无效');
}
// 简介
$info = '';
if(isset($param['info']) && is_string($param['info'])){
$info = $param['info'];
}
// 面值
if(!isset($param['face_value']) || !is_numeric($param['face_value']) || $param['face_value'] != ceil($param['face_value']) || $param['face_value'] <= 0){
return $this->toData('1', '面值无效');
}
// 排序
if(!isset($param['sort']) || !is_numeric($param['sort']) || $param['sort'] != ceil($param['sort']) || $param['sort'] < 0){
return $this->toData('1', '排序值无效');
}
// 最小杠杆
if(empty($param['min_pry']) || !is_numeric($param['min_pry']) || $param['min_pry'] != ceil($param['min_pry']) || $param['min_pry'] <= 0){
return $this->toData('1', '最小杠杆值无效');
}
// 最大杠杆
if(empty($param['max_pry']) || !is_numeric($param['max_pry']) || $param['max_pry'] != ceil($param['max_pry']) || $param['max_pry'] <= 0){
return $this->toData('1', '最大杠杆值无效');
}
// 强制平仓比例值
if(empty($param['compel_num']) || !is_numeric($param['compel_num']) || $param['compel_num'] <= 0){
return $this->toData('1', '强制平仓比例值无效');
}
// 小数位数
if(!isset($param['keep_decimal']) || !is_numeric($param['keep_decimal']) || $param['keep_decimal'] != ceil($param['keep_decimal']) || $param['keep_decimal'] < 0){
return $this->toData('1', '小数位数值无效');
}
// 判断名称是否已被添加
$count = GoldFuturesListModel::where('trade_name', $param['trade_name'])->where('id', '<>', $param['id'])->count();
if($count > 0){
return $this->toData('1', '合约交易对名称已存在');
}
// 写入数据
$goldFuturesList->trade_name = $param['trade_name'];
$goldFuturesList->status = $param['status'];
$goldFuturesList->is_owner = $param['is_owner'];
$goldFuturesList->info = $info;
$goldFuturesList->logo_link = $param['logo_link'] ?? '';
$goldFuturesList->face_value = $param['face_value'];
$goldFuturesList->sort = $param['sort'];
$goldFuturesList->min_pry = $param['min_pry'];
$goldFuturesList->max_pry = $param['max_pry'];
$goldFuturesList->compel_num = $param['compel_num'];
$goldFuturesList->keep_decimal = $param['keep_decimal'];
$goldFuturesList->create_time = date('Y-m-d H:i:s');
$goldFuturesList->update_time = date('Y-m-d H:i:s');
$goldFuturesList->save();
$list_key="GoldFutures:STOCK:LIST:".strtoupper($param['trade_name']);
$redis = $this->getRedis();
$redis->del($list_key);
$redis->hMset($list_key, [
'name'=>strtoupper($param['trade_name']),
'code'=>strtoupper($param['trade_name']),
'sort'=>$param['sort'],
'face_value'=>$param['face_value'],
'min_pry'=>$param['min_pry'],
'max_pry'=>$param['max_pry'],
'compel_num'=>$param['compel_num'],
'keep_decimal'=>$param['keep_decimal'],
'status'=>$param['status'],
'logo_link' => $param['logo_link'] ?? '',
]);
return $this->toData('0', 'SUCCESS', []);
} catch (\Exception $e) {
return $this->toData('500', '系统繁忙', [$e->getMessage(), $e->getTrace()]);
}
}
}
Loading…
Cancel
Save