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', '系统繁忙', []); } } // 新增 public function add($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 = ForexListModel::where('trade_name', $param['trade_name'])->count(); if($count > 0){ return $this->toData('1', '合约交易对名称已存在', []); } $contract = new ForexListModel; $contract->trade_name = $param['trade_name']; $contract->status = $param['status']; $contract->is_owner = $param['is_owner']; $contract->info = $info; $contract->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="FOREX: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'] ]); return $this->toData('0', '操作成功', []); }catch (\Exception $exception){ return $this->toData('1', '系统繁忙', [$exception->getMessage()]); } } public function edit($param) { try { if(empty($param['id']) || !is_numeric($param['id'])){ return $this->toData('1', '目标不存在', []); } $contract = ForexListModel::where('id', $param['id'])->find(); $beforeStatus = $contract['status']; if(empty($contract)){ 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 = ForexListModel::where('trade_name', $param['trade_name'])->where('id', '<>', $param['id'])->count(); if($count > 0){ 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']; $contract->is_owner = $param['is_owner']; $contract->info = $info; $contract->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="FOREX: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'] ]); return $this->toData('0', 'SUCCESS', []); }catch (\Exception $exception){ return $this->toData('1', '系统繁忙', []); } } // 获取合约交易对 public function getTradeNameList($param) { try { $list = ForexListModel::where('status', 1)->order('id', 'desc') ->column('trade_name', 'id'); return $this->toData('0', 'SUCCESS', ['list' => $list]); }catch (\Exception $exception){ return $this->toData('1', '系统繁忙', []); } } public function hq_index() { try { $list = ForexMarketModel::where('type', 0)->order('id', 'desc')->select(); $rows = []; if(!$list->isEmpty()){ $rows = $list->toArray(); } return $this->toData('0','SUCCSS',['list' => $rows, 'total' => count($rows)]); }catch (\Exception $exception){ return $this->toData('1', '系统繁忙', [$exception->getMessage()]); } } // 新增 public function hq_add($param) { try { // 参数校验 validate(HqValidate::class)->scene('add')->check($param); // 已存在未执行的 不能再插入 $count = ForexMarketModel::where('trade_name', $param['trade_name']) ->where('is_get',1) ->where('type', 0) ->count(); if($count > 0){ return $this->toData('1','已存在未执行'); } //判断 $diff = strtotime($param['end_time']) - strtotime($param['begin_time']); if($diff > 600 || $diff <=0){ return $this->toData('1','时间无效-结束时间必须在开始时间十分钟以内'); } // 不能有交叉时间 $map1 = [ ['trade_name', '=',$param['trade_name']], ['begin_time','between', [$param['begin_time'], $param['end_time']]] ]; $map2 = [ ['trade_name', '=',$param['trade_name']], ['end_time','between', [$param['begin_time'], $param['end_time']]] ]; $count = ForexMarketModel::whereOr([$map1,$map2]) ->count(); if($count > 0){ return $this->toData('1','时间无效-时间不能有交叉'); } $market = new ForexMarketModel; $market->trade_name = $param['trade_name']; $market->begin_time = $param['begin_time']; $market->end_time = $param['end_time']; $market->max_price = $param['max_price']; $market->step = $param['step']; $market->type = 0; $market->save(); // 写入redis $this->initForexHqData(); return $this->toData('0','SUCCESS'); }catch (ValidateException $validateException){ return $this->toData('1', $validateException->getMessage(), []); }catch (\Exception $exception){ return $this->toData('1', '系统繁忙', [$exception->getMessage()]); } } // 编辑 public function hq_edit($param) { try { // 参数校验 validate(HqValidate::class)->scene('edit')->check($param); // 已存在未执行的 不能再插入 $count = ForexMarketModel::where('trade_name', $param['trade_name']) ->where('id', '<>', $param['id']) ->where('is_get',1) ->where('type', 0) ->count(); if($count > 0){ return $this->toData('1','已存在未执行'); } // 目标 $market = ForexMarketModel::where('id', $param['id'])->where('type', 0)->find(); if(empty($market)){ return $this->toData('1','目标不存在'); } //判断 $diff = strtotime($param['end_time']) - strtotime($param['begin_time']); if($diff > 600 || $diff <=0){ return $this->toData('1','时间无效'); } // 不能有交叉时间 $map1 = [ ['trade_name', '=',$param['trade_name']], ['id', '<>',$param['id']], ['begin_time','between', [$param['begin_time'], $param['end_time']]] ]; $map2 = [ ['trade_name', '=',$param['trade_name']], ['id', '<>',$param['id']], ['end_time','between', [$param['begin_time'], $param['end_time']]] ]; $count = ForexMarketModel::whereOr([$map1,$map2]) ->count(); if($count > 0){ return $this->toData('1','时间无效'); } $market->trade_name = $param['trade_name']; $market->begin_time = $param['begin_time']; $market->end_time = $param['end_time']; $market->max_price = $param['max_price']; $market->is_get = 1; $market->step = $param['step']; $market->save(); // redis $this->initForexHqData(); return $this->toData('0','SUCCESS'); }catch (ValidateException $validateException){ return $this->toData('1', $validateException->getMessage(), []); }catch (\Exception $exception){ return $this->toData('1', '系统繁忙', [$exception->getMessage(),$exception->getTrace()]); } } // 删除 public function hq_del($param) { try { // 参数校验 validate(HqValidate::class)->scene('del')->check($param); // 目标 $market = ForexMarketModel::where('id', $param['id'])->find(); if(empty($market)){ return $this->toData('1','目标不存在'); } $market->delete(); $this->initForexHqData(); return $this->toData('0','SUCCESS'); }catch (ValidateException $validateException){ return $this->toData('12', $validateException->getMessage(), []); }catch (\Exception $exception){ return $this->toData('11', '系统繁忙', [$exception->getMessage()]); } } }