toData('0', 'SUCCESS', ['status' => '2']); } // 1 开启 2 关闭 $market = StockMarketModel::where('stock_market_type', $param['type'])->find(); if(empty($market)){ return $this->toData('0', 'SUCCESS', ['status' => '2']); } if($market->status == StockMarketModel::STATUS_OFF){ return $this->toData('0', 'SUCCESS', ['status' => '2', 'market' => $market->toArray()]); } // 如果是开启 则判断是否在开盘时间段 $date = date('H:i'); $dateTime = \DateTime::createFromFormat('H:i', $date); $amOpenTime = \DateTime::createFromFormat('H:i', $market->am_open_time); $pmOpenTime = \DateTime::createFromFormat('H:i', $market->pm_open_time); $amCloseTime = \DateTime::createFromFormat('H:i', $market->am_close_time); $pmCloseTime = \DateTime::createFromFormat('H:i', $market->pm_close_time); // 判断 上午盘 if($amOpenTime > $amCloseTime){ // 开盘时间 大于 闭盘时间 跨天 if($dateTime >= $amOpenTime || $dateTime <= $amCloseTime){ return $this->toData('0', 'SUCCESS', ['status' => '1','market' => $market->toArray(),$dateTime,$amOpenTime,$amCloseTime,1]); } } else { if($dateTime >= $amOpenTime && $dateTime <= $amCloseTime){ return $this->toData('0', 'SUCCESS', ['status' => '1','market' => $market->toArray(),$dateTime,$amOpenTime,$amCloseTime,2]); } } // 下午盘 if($pmOpenTime > $pmCloseTime){ // 开盘时间 大于 闭盘时间 跨天 if($dateTime >= $pmOpenTime || $dateTime <= $pmCloseTime){ return $this->toData('0', 'SUCCESS', ['status' => '1','market' => $market->toArray(),$dateTime,$pmOpenTime,$pmCloseTime,3]); } } else { if($dateTime >= $pmOpenTime && $dateTime <= $pmCloseTime){ return $this->toData('0', 'SUCCESS', ['status' => '1','market' => $market->toArray(),$dateTime,$pmOpenTime,$pmCloseTime,4]); } } return $this->toData('0', 'SUCCESS', ['status' => '2','market' => $market->toArray()]); }catch (\Exception $exception){ return $this->toData('400','System error',[$exception->getMessage()]); } } public function stockAnalysis($userId,$param){ try { if (empty($userId)) { return $this->toData('400','用户ID不能为空'); } if (empty($param['stock_code'])) { return $this->toData('400','缺少参数'); } // 检测用户调用该接口次数,普通用户只能调用5次,vip用户可以无限次调用 $apiCalledNum = ApiCalledNumModel::where(['user_id'=>$userId])->find(); if (!empty($apiCalledNum) && $apiCalledNum->stock_api >= ApiCalledNumModel::API_CALLED_LIMIT) { $vipInfo = PurchaseVipModel::where(['user_id'=>$userId])->find(); if (empty($vipInfo)) { return $this->toData('400', '非会员用户只能使用5次股票分析接口'); } else { if ($vipInfo->expire <= date("Y-m-d H:i:s")) { return $this->toData('400', '非会员用户只能使用5次股票分析接口'); } } } $replaceData = [ '{stock_code}' => $param['stock_code'] ]; $msgTml = "1. 获取{stock_code}的最新股价、市场情绪及相关新闻。2. 结合过去 30 天的价格走势,预测未来 7 天的短期趋势。3. 提供投资建议(买入、持有或卖出),并说明理由。4. 如果可能,引用具体数据或事件支持你的分析。"; $msg = str_replace(array_keys($replaceData), array_values($replaceData), $msgTml); $headers = [ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer xai-X2H9moLMSKQaCMsfnjZxjfvHeRd0O3Q8zBfJ3I3sEOSIYd8840zsUvUWkj6g2rxy5VfRMRF87YkSsE85', 'cf-aig-authorization' => 'Bearer RCnKINIJTYVgFIbJjPznXekn0SV94GRVIait3-vO', ]; $reqData = [ 'model' => 'grok-2-1212', // 'max_tokens' => 500, //会限制输出结果长度 'temperature' => 0.6, 'messages' => [ [ 'role' => 'user', 'content' => $msg ] ], ]; $url = "https://gateway.ai.cloudflare.com/v1/14aa58d158b80afdedd874eb4bc82636/chatgpt-api/grok/v1/chat/completions"; $result = HttpHandler::reqPost($url, $headers, $reqData); if ($result['code'] != 200) { return $this->toData('500', '数据错误,稍后再试', $result); } $getBody = json_decode($result['data'], true); $getChoices = $getBody['choices']; // 更新用户调用该接口次数 if (empty($apiCalledNum)) { ApiCalledNumModel::create([ 'user_id' => $userId, 'stock_api' => 1 ]); } else { ApiCalledNumModel::where(['user_id'=>$userId])->inc('stock_api')->save(); } return $this->toData('0', 'success', $getChoices); } catch (\Exception $exception){ return $this->toData('500','System error',[$exception->getMessage()]); } } }