fix(FEAT-MO-001): 修复TDX数据完整性与状态展示
This commit is contained in:
@@ -112,28 +112,34 @@ export class MarketOverviewService {
|
||||
}),
|
||||
),
|
||||
);
|
||||
const snapshots = results.flatMap((result) =>
|
||||
result.status === 'fulfilled' ? [result.value] : [],
|
||||
);
|
||||
if (!snapshots.length) {
|
||||
const validSnapshots = results.flatMap((result) => {
|
||||
if (result.status === 'rejected') return [];
|
||||
return mapBreadthSnapshots([result.value]).validCount === 1 ? [result.value] : [];
|
||||
});
|
||||
const mapped = mapBreadthSnapshots(validSnapshots);
|
||||
const unavailableMarkets = BREADTH_INDEXES.filter((_, index) => {
|
||||
const result = results[index];
|
||||
return (
|
||||
!result ||
|
||||
result.status === 'rejected' ||
|
||||
mapBreadthSnapshots([result.value]).validCount === 0
|
||||
);
|
||||
}).map((item) => item.name);
|
||||
if (!mapped.data) {
|
||||
return {
|
||||
...meta,
|
||||
status: 'unavailable',
|
||||
data: null,
|
||||
warnings: [
|
||||
this.toWarning(
|
||||
results[0]?.status === 'rejected' ? results[0].reason : undefined,
|
||||
'市场宽度',
|
||||
),
|
||||
],
|
||||
warnings: [`市场宽度数据不可用:${unavailableMarkets.join('、')}`],
|
||||
};
|
||||
}
|
||||
const status = snapshots.length === BREADTH_INDEXES.length ? 'fresh' : 'partial';
|
||||
const status = mapped.validCount === BREADTH_INDEXES.length ? 'fresh' : 'partial';
|
||||
return {
|
||||
...meta,
|
||||
status,
|
||||
data: mapBreadthSnapshots(snapshots),
|
||||
warnings: status === 'partial' ? ['部分市场指数未返回涨跌家数'] : [],
|
||||
data: mapped.data,
|
||||
warnings:
|
||||
status === 'partial' ? [`部分市场涨跌家数不可用:${unavailableMarkets.join('、')}`] : [],
|
||||
};
|
||||
}
|
||||
|
||||
@@ -145,6 +151,14 @@ export class MarketOverviewService {
|
||||
list_type: 1,
|
||||
});
|
||||
const definitions = catalog.Value.map(({ Code: code, Name: name }) => ({ code, name }));
|
||||
if (!definitions.length) {
|
||||
return {
|
||||
...meta,
|
||||
status: 'unavailable',
|
||||
data: null,
|
||||
warnings: ['一级行业目录为空'],
|
||||
};
|
||||
}
|
||||
const result = await this.tdxClient.request<TdxMarketDataResult>('get_market_data', {
|
||||
stock_list: definitions.map((item) => item.code),
|
||||
count: 2,
|
||||
@@ -187,10 +201,19 @@ export class MarketOverviewService {
|
||||
dividend_type: 'none',
|
||||
period: '1d',
|
||||
});
|
||||
const data = mapTurnoverTrend(result, TURNOVER_INDEXES);
|
||||
if (!data)
|
||||
const mapped = mapTurnoverTrend(result, TURNOVER_INDEXES);
|
||||
if (!mapped.data)
|
||||
return { ...meta, status: 'unavailable', data: null, warnings: ['成交额趋势数据不完整'] };
|
||||
return { ...meta, status: 'fresh', data, warnings: [] };
|
||||
const status = mapped.validMarketCount === TURNOVER_INDEXES.length ? 'fresh' : 'partial';
|
||||
return {
|
||||
...meta,
|
||||
status,
|
||||
data: mapped.data,
|
||||
warnings:
|
||||
status === 'partial'
|
||||
? [`部分市场成交额不可用,当前汇总 ${mapped.validMarketCount} 个市场`]
|
||||
: [],
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
...meta,
|
||||
|
||||
Reference in New Issue
Block a user