sceneService = $sceneService; } //获取全部期权场景 public function sceneListByPairs(Request $request) { $data = $this->sceneService->sceneListByPairs(); return $this->successWithData($data); } //获取全部期权场景 public function sceneListByTimes(Request $request) { $data = $this->sceneService->sceneListByTimes(); return $this->successWithData($data); } //根据交易对和时间周期获取当前最新期权场景 public function sceneDetail(Request $request) { if ($vr = $this->verifyField($request->all(), [ 'pair_id' => 'required|integer', 'time_id' => 'required|integer', ])) return $vr; $params = $request->all(); $data = $this->sceneService->sceneDetail($params); return $this->successWithData($data); } //根据交易对和时间周期获取当前最新期权场景赔率 public function getOddsList(Request $request) { if ($vr = $this->verifyField($request->all(), [ 'pair_id' => 'required|integer', 'time_id' => 'required|integer', ])) return $vr; $params = $request->all(); $data = $this->sceneService->getOddsList($params); return $this->successWithData($data); } //获取期权交割记录 public function getSceneResultList(Request $request) { if ($vr = $this->verifyField($request->all(), [ 'pair_id' => 'required|integer', 'time_id' => 'required|integer', ])) return $vr; $params = $request->all(); $data = $this->sceneService->getSceneResultList($params); return $this->successWithData($data); } public function getOptionSymbol() { $data = OptionPair::query()->where('status', 1)->get(); return $this->successWithData($data); } //获取期权用户买入记录 public function getOptionHistoryOrders(Request $request) { if ($vr = $this->verifyField($request->all(), [ 'pair_id' => 'integer', 'time_id' => 'integer', 'status' => 'integer|in:1,2', //1待交割 2已交割 ])) return $vr; $user = $this->current_user(); $params = $request->all(); $data = $this->sceneService->getOptionHistoryOrders($user, $params); return $this->successWithData($data); } public function getOptionOrderDetail(Request $request) { if ($vr = $this->verifyField($request->all(), [ 'order_id' => 'required|integer', ])) return $vr; $user = $this->current_user(); $params = $request->all(); $data = $this->sceneService->getOptionOrderDetail($user, $params); return $this->successWithData($data); } //获取可用来购买期权交易的币种列表 public function getBetCoinList() { $coins = OptionBetCoin::query()->where('is_bet', 1)->orderByDesc('sort')->get(); return $this->successWithData($coins); } //获取用户期权账户余额 public function getUserCoinBalance(Request $request) { if ($vr = $this->verifyField($request->all(), [ 'coin_id' => 'required|integer', ])) return $vr; $user = $this->current_user(); $wallet = UserWallet::query()->where(['user_id' => $user['user_id'], 'coin_id' => $request->coin_id])->firstOrFail(); return $this->successWithData($wallet); } //获取初始价格数据 public function getNewPriceBook(Request $request) { if ($vr = $this->verifyField($request->all(), [ 'symbol' => 'required', ])) return $vr; $params = $request->all(); $symbol = strtolower(str_before($params['symbol'], '/') . str_after($params['symbol'], '/')); $history_data_key = 'market:' . $symbol . '_newPriceBook'; $history_cache_data = Cache::store('redis')->get($history_data_key); return $this->successWithData($history_cache_data); } //获取初始Kline数据 public function getKline(Request $request) { if ($vr = $this->verifyField($request->all(), [ 'symbol' => 'required', 'period' => 'required', 'size' => 'required', 'zip' => '', ])) return $vr; $params = $request->all(); $zip = $request->input('zip', 0); if (strpos($params['symbol'], '/') !== false) { $symbol = strtolower(str_before($params['symbol'], '/') . str_after($params['symbol'], '/')); } else { $symbol = $params['symbol']; } $history_data_key = 'market:' . $symbol . '_kline_book_' . $params['period']; $history_cache_data = Cache::store('redis')->get($history_data_key); $data['data'] = $history_cache_data; $data['ch'] = "market." . $symbol . ".kline." . $params['period']; $data['ts'] = Carbon::now()->getPreciseTimestamp(3); $data['status'] = 'ok'; //涨跌额 涨跌幅 $data['zhangdiee'] = '+0.1269'; $data['zhangdiefu'] = '+29.30%'; $coins = config('coin.exchange_symbols'); foreach ($coins as $coin => $class) { $coin = strtolower($coin); if ($symbol == $coin . 'usdt') { $data['data'] = $class::getKlineData($symbol, $params['period'], $params['size']); $data['ch'] = "market." . $symbol . ".kline." . $params['period']; $data['ts'] = Carbon::now()->getPreciseTimestamp(3); $data['status'] = 'ok'; //涨跌额 涨跌幅 $data['zhangdiee'] = '+0.1269'; $data['zhangdiefu'] = '+29.30%'; break; } } if ($zip) { $json = json_encode($data['data']); $gzstr = gzcompress($json); $data['data'] = base64_encode($gzstr); return $this->successWithData($data); } else { return $this->successWithData($data); } } //购买期权 public function betScene(Request $request) { if ($vr = $this->verifyField($request->all(), [ 'bet_amount' => 'required|numeric|min:0.0001', 'bet_coin_id' => 'required|integer', 'scene_id' => 'required|integer', 'odds_uuid' => 'required', ])) return $vr; $user = $this->current_user(); $params = $request->only(['bet_amount', 'bet_coin_id', 'scene_id', 'odds_uuid']); $orderLockKey = 'option_order_lock:' . $user['user_id']; // var_dump() if (!$this->setKeyLock($orderLockKey, 2)) { //订单锁 return $this->error(); } $res = $this->sceneService->betScene($user, $params); if (!$res) { return $this->error(0, '买入失败'); } return $this->success('买入成功', true); } // 期权 public function instruction(Request $request) { $language = App::getLocale(); switch ($language) { case 'zh-CN': $key = 'option_instruction_cn'; break; case 'cn': $key = 'option_instruction_cn'; break; case 'en': $key = 'option_instruction_en'; break; default: $key = 'option_instruction_en'; } $instruction = AdminSetting::query() ->where('key', $key) ->value('value'); return $this->successWithData($instruction); } }