request->param(); if (empty($param['name'])) return json(['code' => '1', 'message' => '参数错误', 'data' => []]); $name = $param['name']; $type = $param['type'] ?? 'string'; $value = $param['value'] ?? ''; $tip = $param['tip'] ?? ''; $insertData = [ 'name' => $name, 'group' => 'config', 'title' => $name, 'tip' => $tip, 'type' => $type, 'value' => $value, ]; $config = ConfigModel::where('name', $name)->find(); if (empty($config)) { $bool = ConfigModel::insert($insertData); if (!$bool) return json(['code' => '100500', 'message' => '设置失败', 'data' => []]); } else { $bool = ConfigModel::where('name', $name)->update($insertData); if (!$bool) return json(['code' => '100500', 'message' => '设置失败', 'data' => []]); } return json(['code' => '0', 'message' => 'Request successful', 'data' => []]); } catch (\Exception $exception) { return json(['code' => '100500', 'message' => '系统繁忙', 'data' => [$exception->getMessage()]]); } } public function getConfig() { try { $param = $this->request->param(); if (empty($param['name'])) return json(['code' => '1', 'message' => '参数错误', 'data' => []]); $name = $param['name']; $value = ConfigModel::where('name', $name)->value('value'); return json(['code' => '0', 'message' => 'Request successful', 'data' => ['value' => $value]]); } catch (\Exception $exception) { return json(['code' => '100500', 'message' => '系统繁忙', 'data' => [$exception->getMessage()]]); } } public function getConfigList() { $returnData = (new ConfigService())->getConfigList($this->request->param()); return json($returnData); } // 获取邮箱模板列表 public function emailTemplateList() { $returnData = (new ConfigService())->emailTemplateList($this->request->param()); return json($returnData); } // 编辑邮箱模板列表 public function editEmailTemplate() { $returnData = (new ConfigService())->editEmailTemplate($this->request->param()); return json($returnData); } // 短信模板列表 public function smsTemplateList() { $returnData = (new ConfigService())->smsTemplateList($this->request->param()); return json($returnData); } // 编辑邮短信板列表 public function editSmsTemplate() { $returnData = (new ConfigService())->editSmsTemplate($this->request->param()); return json($returnData); } // 获取行情数据列表 public function quoteList() { $params = $this->request->param(); if (!isset($params['page']) || !isset($params['limit']) || !isset($params['market_type'])) { return json([ 'code' => 400, 'message' => '缺少参数', 'data' => [] ]); } // 检查市场类型是否有效 if ($params['market_type'] < 0) { return json([ 'code' => 400, 'message' => '市场类型无效', 'data' => [] ]); } // 根据市场类型获取数据在mongo中对应的集合名称 if (!isset(MongoConnection::COLLECTION_ARR[$params['market_type']])) { return json([ 'code' => 400, 'message' => '没有找到对应的行情数据', 'data' => [] ]); } $collectionName = MongoConnection::COLLECTION_ARR[$params['market_type']]; // 分页计算 $page = (int)$params['page']; $pageSize = (int)$params['limit']; $options = [ 'skip' => ($page - 1) * $pageSize, 'limit' => $pageSize, 'sort' => ['_id' => -1], // 按创建时间倒序 ]; // 构造查询条件 $filter = []; if (!empty($params['name'])) { // 使用正则表达式进行模糊匹配(i 表示不区分大小写) $filter['Name'] = [ '$regex' => $params['name'], '$options' => 'i' ]; } if (!empty($params['code'])) { $filter['Code'] = trim($params['code']); } if (!empty($params['country'])) { $filter['Country'] = time($params['country']); } // 查询数据 $client = MongoConnection::getClient(); $collection = $client->selectCollection(MongoConnection::QUOTE_DATA_BASE_NAME, $collectionName); $cursor = $collection->find($filter, $options); $results = iterator_to_array($cursor); // 将 BSON 文档转换为数组 $total = $collection->countDocuments($filter); $list = []; foreach ($results as $item) { $arr = (array)$item; $list[] = $arr; } return json([ 'code' => 0, 'message' => 'ok', 'data' => [ 'total' => $total, 'page' => $page, 'pageSize' => $pageSize, 'list' => $list, ] ]); } // 行情数据置顶 public function quoteTopData() { $params = $this->request->param(); if (empty($params['id']) || empty($params['sort']) || empty($params['market_type'])) { return json([ 'code' => 400, 'message' => '缺少参数', 'data' => [] ]); } // 根据市场类型获取数据在mongo中对应的集合名称 if (!isset(MongoConnection::COLLECTION_ARR[$params['market_type']])) { return json([ 'code' => 400, 'message' => '没有找到对应的行情数据', 'data' => [] ]); } $collectionName = MongoConnection::COLLECTION_ARR[$params['market_type']]; // 根据市场类型获取置顶数据将要存储的Redis Key if (!isset(MongoConnection::QUOTE_TOP_DATA_HASH_ARR[$params['market_type']])) { return json([ 'code' => 400, 'message' => '没有找到对应的行情数据存储KEY', 'data' => [] ]); } $quoteTopDataKey = MongoConnection::QUOTE_TOP_DATA_HASH_ARR[$params['market_type']]; // 获取行情数据 $client = MongoConnection::getClient(); $collection = $client->selectCollection(MongoConnection::QUOTE_DATA_BASE_NAME, $collectionName); $doc = $collection->find(['_id'=>new ObjectId($params['id'])]); $results = iterator_to_array($doc); // 构建缓存数据 $buildArr = []; switch ($params['market_type']) { case 3: $buildArr = [ 'Code' => $results[0]['Code'], 'Type' => $results[0]['Country'], 'Exchange' => $results[0]['Exchange'], 'Sort' => $params['sort'], ]; break; case 19: $buildArr = [ 'Code' => $results[0]['symbol'], // 外汇行情用symbol字段值作为Code 'Type' => $results[0]['category'], // 外汇行情用category作为标识 'Sort' => $params['sort'], ]; break; default: return json([ 'code' => 500, 'message' => '构建数据失败', 'data' => [] ]); } // 检测构建数据 if (empty($buildArr)) { return json([ 'code' => 500, 'message' => '构建数据为空', 'data' => [] ]); } $jsonStr = json_encode($buildArr); // 根据市场类型获取Redis Key $res = Cache::store('redis')->hSet($quoteTopDataKey, $buildArr['Code'], $jsonStr); return json([ 'code' => 0, 'message' => 'ok', 'data' => [ 'cache_key' => $quoteTopDataKey, 'cache_val' => $buildArr, 'isOk' => $res ] ]); } }