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()]); } } }