p2 project
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

2 months ago
<?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()]);
}
}
4 weeks ago
// 新增黄金期货交易对配置
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()]);
}
}
2 months ago
}