toData('1', '分页参数无效', []); } if (empty($param['limit']) || !is_numeric($param['limit']) || ceil($param['limit']) != $param['limit'] || $param['limit'] <= 0) { return $this->toData('1', '分页参数无效', []); } $list = StockPricesSettingModel::order('id', 'desc')->page($param['page'], $param['limit'])->select(); $total = StockPricesSettingModel::where('id', '>', 0)->count(); $rows = []; // 股票市场货币符号 $marketSymbol = StockMarketModel::where('id', '>', 0)->column('symbol', 'stock_market_type'); if (!$list->isEmpty()) { $rows = $list->toArray(); foreach ($list as $key => $item) { $stock = (new StockMarketService)->searchStockById(['market_type' => $item->market_type, 'stock_id' => $item->stock_id]); $rows[$key]['stock_code'] = $stock['stock_code'] ?? '-'; $rows[$key]['stock_name'] = $stock['stock_name'] ?? '-'; $rows[$key]['symbol'] = $marketSymbol[$item->market_type] ?? '-'; $rows[$key]['price'] = rtrim(rtrim($item['price'], '0'), '.'); } } return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extent' => [ 'market_type_list' => StockMarketModel::STOCK_MARKET_TYPE, 'market_symbol' => $marketSymbol ]]); } catch (\Exception $exception) { return $this->toData('1', '系统繁忙', [$exception->getMessage()]); } } // 新增 public function add($param) { try { $marketTypeList = StockMarketModel::STOCK_MARKET_TYPE; // 股票市场 if (empty($param['market_type']) || !in_array($param['market_type'], array_keys($marketTypeList))) { return $this->toData('1', '市场类型无效', []); } // 股票主键 if (empty($param['stock_id']) || !is_numeric($param['stock_id'])) { return $this->toData('1', '股票无效', []); } $stock = (new StockMarketService)->searchStockById(['market_type' => $param['market_type'], 'stock_id' => $param['stock_id']]); if (empty($stock)) { return $this->toData('1', '股票无效', []); } // 盘前状态 if (empty($param['status']) || !in_array($param['status'], [StockPricesSettingModel::STATUS_ON, StockPricesSettingModel::STATUS_OFF])) { return $this->toData('1', '状态无效', []); } if (empty($param['price']) || !is_numeric($param['price'])) { return $this->toData('1', '价格无效', []); } // 判断市场是否已经存在 $count = StockPricesSettingModel::where('market_type', $param['market_type'])->where('stock_id', $param['stock_id'])->count(); if ($count > 0) { return $this->toData('1', '已存在相同配置', []); } // 添加缓存 $key = 'STOCK_PRICES:' . $param['market_type'] . ':' . $stock['stock_code']; $redis = $this->getRedis(); $redis->del($key); $bool = $redis->hMSet($key, [ 'market_type' => $param['market_type'], 'stock_id' => $param['stock_id'], 'stock_code' => $stock['stock_code'], 'status' => $param['status'], 'price' => $param['price'], ]); if ($bool) { $stockPriceSetting = new StockPricesSettingModel; $stockPriceSetting->market_type = $param['market_type']; $stockPriceSetting->stock_id = $param['stock_id']; $stockPriceSetting->status = $param['status']; $stockPriceSetting->price = $param['price']; $stockPriceSetting->create_time = date('Y-m-d H:i:s'); $stockPriceSetting->update_time = date('Y-m-d H:i:s'); $stockPriceSetting->save(); } return $this->toData('0', 'SUCCESS', []); } catch (\Exception $exception) { return $this->toData('1', '系统繁忙', [$exception->getMessage()]); } } // 编辑 public function edit($param) { try { $marketTypeList = StockMarketModel::STOCK_MARKET_TYPE; // 目标 if (empty($param['id']) || !is_numeric($param['id'])) { return $this->toData('1', '目标不存在', []); } $stockPriceSetting = StockPricesSettingModel::where('id', $param['id'])->find(); if (empty($stockPriceSetting)) { return $this->toData('1', '目标不存在', []); } // 股票市场 if (empty($param['market_type']) || !in_array($param['market_type'], array_keys($marketTypeList))) { return $this->toData('1', '市场类型无效', []); } // 股票主键 if (empty($param['stock_id']) || !is_numeric($param['stock_id'])) { return $this->toData('1', '股票无效', []); } $stock = (new StockMarketService)->searchStockById(['market_type' => $param['market_type'], 'stock_id' => $param['stock_id']]); if (empty($stock)) { return $this->toData('1', '股票无效', []); } // 盘前状态 if (empty($param['status']) || !in_array($param['status'], [StockPricesSettingModel::STATUS_ON, StockPricesSettingModel::STATUS_OFF])) { return $this->toData('1', '盘前状态无效', []); } if (empty($param['price']) || !is_numeric($param['price'])) { return $this->toData('1', '价格无效', []); } // 判断市场是否已经存在 $count = StockPricesSettingModel::where('market_type', $param['market_type'])->where('stock_id', $param['stock_id']) ->where('id', '<>', $param['id']) ->count(); if ($count > 0) { return $this->toData('1', '已存在相同配置', []); } // 添加缓存 $key = 'STOCK_PRICES:' . $param['market_type'] . ':' . $stock['stock_code']; $redis = $this->getRedis(); $redis->del($key); $bool = $redis->hMSet($key, [ 'market_type' => $param['market_type'], 'stock_id' => $param['stock_id'], 'stock_code' => $stock['stock_code'], 'status' => $param['status'], 'price' => $param['price'], ]); if ($bool) { $stockPriceSetting->market_type = $param['market_type']; $stockPriceSetting->stock_id = $param['stock_id']; $stockPriceSetting->status = $param['status']; $stockPriceSetting->price = $param['price']; $stockPriceSetting->update_time = date('Y-m-d H:i:s'); $stockPriceSetting->save(); } return $this->toData('0', 'SUCCESS', [$stockPriceSetting->price]); } catch (\Exception $exception) { return $this->toData('1', '系统繁忙', [$exception->getMessage()]); } } // 删除 public function del($param) { try { // 目标 if (empty($param['id']) || !is_numeric($param['id'])) { return $this->toData('1', '目标不存在', []); } $stockPriceSetting = StockPricesSettingModel::where('id', $param['id'])->find(); if (empty($stockPriceSetting)) { return $this->toData('1', '目标不存在', []); } if ($stockPriceSetting->status == StockPricesSettingModel::STATUS_ON) { return $this->toData('1', '配置开启中 不可删除', []); } $stock = (new StockMarketService)->searchStockById(['market_type' => $stockPriceSetting->market_type, 'stock_id' => $stockPriceSetting->stock_id]); if (empty($stock)) { return $this->toData('1', '股票无效', []); } $key = 'STOCK_PRICES:' . $stockPriceSetting->market_type . ':' . $stock['stock_code']; $redis = $this->getRedis(); $num = $redis->del($key); if ($num > 0) { $stockPriceSetting->delete(); } return $this->toData('0', 'SUCCESS'); } catch (\Exception $exception) { return $this->toData('1', '系统繁忙', [$exception->getMessage()]); } } }