mcp-invest-assistant
Version:
101 lines • 4.05 kB
JavaScript
import axios from "axios";
import { COMPANY_FUNDAMENTAL_MARKET_API } from '../config/index.js';
import logger from "../utils/logger.js";
import { sampleData, calculateStatistics, generateTimeRange } from '../utils/dataSampling.js';
/**
* 处理返回数据,进行采样和统计
*/
function processResponseData(data, metricsList, samplingPeriod = 'monthly', includeStatistics = true) {
if (!includeStatistics || samplingPeriod === 'daily') {
if (samplingPeriod !== 'daily') {
return sampleData(data, samplingPeriod, metricsList);
}
return data;
}
const sampledData = sampleData(data, samplingPeriod, metricsList);
const statistics = {};
metricsList.forEach(metric => {
statistics[metric] = calculateStatistics(sampledData, metric);
});
const summary = {
summary: {
dataPoints: sampledData.length,
timeRange: generateTimeRange(sampledData),
samplingMethod: samplingPeriod,
metricsCount: metricsList.length
},
statistics,
timeSeries: sampledData
};
return summary;
}
/**
* 获取基本面数据,如PE、PB等
*/
const getFundamentalData = ({ stockCodes, market, startDate, endDate, token, fsTableType, metricsList, samplingPeriod = 'monthly', includeStatistics = true }) => {
return new Promise((resolve) => {
const fetchUri = `${COMPANY_FUNDAMENTAL_MARKET_API[market]}/${fsTableType}`;
try {
const bodyData = {
token,
stockCodes,
startDate,
endDate,
metricsList,
};
logger.info(`[getFundamentalData]请求地址:${fetchUri}`);
logger.info(`[getFundamentalData]参数:${JSON.stringify(bodyData)}`);
axios.post(fetchUri, bodyData)
.then(res => {
logger.info(`[getFundamentalData]返回数据状态码: ${res.status}`);
logger.info(`[getFundamentalData]返回数据: ${JSON.stringify(res.data)}`);
if (res.data.code === 1 && res.data.data && Array.isArray(res.data.data)) {
const processedData = processResponseData(res.data.data, metricsList, samplingPeriod, includeStatistics);
if (includeStatistics && samplingPeriod !== 'daily') {
resolve({
code: res.data.code,
message: res.data.message,
data: processedData
});
}
else {
resolve({
code: res.data.code,
message: res.data.message,
data: processedData
});
}
}
else {
resolve(res.data);
}
})
.catch(e => {
logger.info(`[getFundamentalData]Error: ${e.message || '未知错误'}`);
if (e.response) {
logger.info(`[getFundamentalData]Error status: ${e.response.status}`);
logger.info(`[getFundamentalData]Error data: ${JSON.stringify(e.response.data)}`);
resolve(e.response.data);
}
else {
resolve({
code: 0,
message: e.message || '请求失败',
data: []
});
}
});
}
catch (err) {
const errorMessage = err instanceof Error ? err.message : '未知错误';
logger.info(`[getFundamentalData]Error: ${errorMessage}`);
resolve({
code: 0,
message: '请求失败',
data: []
});
}
});
};
export default getFundamentalData;
//# sourceMappingURL=getCompanyFundamental.js.map