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.
242 lines
11 KiB
242 lines
11 KiB
<?php
|
|
namespace app\admin\service\setting;
|
|
|
|
use app\admin\service\AdminBaseService;
|
|
use app\model\GoldFuturesListModel;
|
|
|
|
class GoldFuturesService extends AdminBaseService
|
|
{
|
|
// 获取黄金期货交易对列表
|
|
public function getTradeNameList()
|
|
{
|
|
try {
|
|
$list = GoldFuturesListModel::where('status', 1)->order('id', 'desc')->column('name', 'id');
|
|
return $this->toData('0', 'SUCCESS', ['list' => $list]);
|
|
} catch (\Exception $e) {
|
|
return $this->toData('1', '系统繁忙', [$e->getMessage(), $e->getTrace()]);
|
|
}
|
|
}
|
|
|
|
// 黄金期货列表
|
|
public function inrStockIndexList($param): array
|
|
{
|
|
try {
|
|
if (empty($param['page']) || empty($param['limit'])) {
|
|
return $this->toData('400', '缺少必要参数');
|
|
}
|
|
|
|
$where = [];
|
|
if (!empty($param['trade_name'])) {
|
|
$where[] = ['trade_name', 'like', '%' . $param['trade_name'] . '%'];
|
|
}
|
|
$list = GoldFuturesListModel::where($where)->order('id', 'desc')->paginate([
|
|
'page' => $param['page'],
|
|
'list_rows' => $param['limit'],
|
|
]);
|
|
|
|
$tapeList = (new IPOService())->getStockTape(20);
|
|
|
|
return $this->toData('0', 'SUCCESS', [
|
|
'list' => $list->items(),
|
|
'total' => $list->total(),
|
|
'page' => $list->currentPage(),
|
|
'last_page' => $list->lastPage(),
|
|
'extend' => [
|
|
'tape_list' => $tapeList['tape'],
|
|
'source_list' => $tapeList['source'] ?? [],
|
|
]
|
|
]);
|
|
} catch (\Exception $e) {
|
|
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()]);
|
|
}
|
|
}
|
|
}
|