fix(mock): 完善大宗交易和龙虎榜数据结构

- 融券余额增加 balance_amount 字段
- 大宗交易:新增 deals 明细、买卖营业部、成交均价
- 龙虎榜:新增 buyers/sellers 营业部列表、净买入金额

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
zdl
2025-12-22 12:15:21 +08:00
parent 307d80c808
commit 88b836e75a

View File

@@ -55,41 +55,77 @@ export const generateMarketData = (stockCode) => {
repay: Math.floor(Math.random() * 500000000) + 80000000 // 融资偿还 repay: Math.floor(Math.random() * 500000000) + 80000000 // 融资偿还
}, },
securities: { securities: {
balance: Math.floor(Math.random() * 100000000) + 50000000, // 融券余额 balance: Math.floor(Math.random() * 100000000) + 50000000, // 融券余额(股数)
balance_amount: Math.floor(Math.random() * 2000000000) + 1000000000, // 融券余额(金额)
sell: Math.floor(Math.random() * 10000000) + 5000000, // 融券卖出 sell: Math.floor(Math.random() * 10000000) + 5000000, // 融券卖出
repay: Math.floor(Math.random() * 10000000) + 3000000 // 融券偿还 repay: Math.floor(Math.random() * 10000000) + 3000000 // 融券偿还
} }
})) }))
}, },
// 大单统计 - 包含 daily_stats 数组 // 大宗交易 - 包含 daily_stats 数组,符合 BigDealDayStats 类型
bigDealData: { bigDealData: {
success: true, success: true,
data: [], data: [],
daily_stats: Array(10).fill(null).map((_, i) => ({ daily_stats: Array(10).fill(null).map((_, i) => {
const count = Math.floor(Math.random() * 5) + 1; // 1-5 笔交易
const avgPrice = parseFloat((basePrice * (0.95 + Math.random() * 0.1)).toFixed(2)); // 折价/溢价 -5%~+5%
const deals = Array(count).fill(null).map(() => {
const volume = parseFloat((Math.random() * 500 + 100).toFixed(2)); // 100-600 万股
const price = parseFloat((avgPrice * (0.98 + Math.random() * 0.04)).toFixed(2));
return {
buyer_dept: ['中信证券北京总部', '国泰君安上海分公司', '华泰证券深圳营业部', '招商证券广州分公司'][Math.floor(Math.random() * 4)],
seller_dept: ['中金公司北京营业部', '海通证券上海分公司', '广发证券深圳营业部', '平安证券广州分公司'][Math.floor(Math.random() * 4)],
price,
volume,
amount: parseFloat((price * volume).toFixed(2))
};
});
const totalVolume = deals.reduce((sum, d) => sum + d.volume, 0);
const totalAmount = deals.reduce((sum, d) => sum + d.amount, 0);
return {
date: new Date(Date.now() - (9 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0], date: new Date(Date.now() - (9 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0],
big_buy: Math.floor(Math.random() * 300000000) + 100000000, count,
big_sell: Math.floor(Math.random() * 300000000) + 80000000, total_volume: parseFloat(totalVolume.toFixed(2)),
medium_buy: Math.floor(Math.random() * 200000000) + 60000000, total_amount: parseFloat(totalAmount.toFixed(2)),
medium_sell: Math.floor(Math.random() * 200000000) + 50000000, avg_price: avgPrice,
small_buy: Math.floor(Math.random() * 100000000) + 30000000, deals
small_sell: Math.floor(Math.random() * 100000000) + 25000000 };
})) })
}, },
// 异动分析 - 包含 grouped_data 数组 // 龙虎榜数据 - 包含 grouped_data 数组,符合 UnusualDayData 类型
unusualData: { unusualData: {
success: true, success: true,
data: [], data: [],
grouped_data: Array(5).fill(null).map((_, i) => ({ grouped_data: Array(5).fill(null).map((_, i) => {
const buyerDepts = ['中信证券北京总部', '国泰君安上海分公司', '华泰证券深圳营业部', '招商证券广州分公司', '中金公司北京营业部'];
const sellerDepts = ['海通证券上海分公司', '广发证券深圳营业部', '平安证券广州分公司', '东方证券上海营业部', '兴业证券福州营业部'];
const infoTypes = ['日涨幅偏离值达7%', '日振幅达15%', '连续三日涨幅偏离20%', '换手率达20%'];
const buyers = buyerDepts.map(dept => ({
dept_name: dept,
buy_amount: Math.floor(Math.random() * 50000000) + 10000000 // 1000万-6000万
})).sort((a, b) => b.buy_amount - a.buy_amount);
const sellers = sellerDepts.map(dept => ({
dept_name: dept,
sell_amount: Math.floor(Math.random() * 40000000) + 8000000 // 800万-4800万
})).sort((a, b) => b.sell_amount - a.sell_amount);
const totalBuy = buyers.reduce((sum, b) => sum + b.buy_amount, 0);
const totalSell = sellers.reduce((sum, s) => sum + s.sell_amount, 0);
return {
date: new Date(Date.now() - (4 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0], date: new Date(Date.now() - (4 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0],
events: [ total_buy: totalBuy,
{ time: '14:35:22', type: '快速拉升', change: '+2.3%', description: '5分钟内上涨2.3%' }, total_sell: totalSell,
{ time: '11:28:45', type: '大单买入', amount: '5680万', description: '单笔大单买入' }, net_amount: totalBuy - totalSell,
{ time: '10:15:30', type: '量比异动', ratio: '3.2', description: '量比达到3.2倍' } buyers,
], sellers,
count: 3 info_types: infoTypes.slice(0, Math.floor(Math.random() * 3) + 1) // 随机选1-3个类型
})) };
})
}, },
// 股权质押 - 匹配 PledgeData[] 类型 // 股权质押 - 匹配 PledgeData[] 类型