You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
6.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
console.log('🌱 开始种子数据...');
// 创建期货品种
const products = [
{ symbol: 'SC', name: '原油', category: 'energy', exchange: 'INE', unit: '元/桶', minChange: 0.1 },
{ symbol: 'AU', name: '黄金', category: 'metal', exchange: 'SHFE', unit: '元/克', minChange: 0.02 },
{ symbol: 'CU', name: '铜', category: 'metal', exchange: 'SHFE', unit: '元/吨', minChange: 10 },
{ symbol: 'AG', name: '白银', category: 'metal', exchange: 'SHFE', unit: '元/千克', minChange: 1 },
{ symbol: 'I', name: '铁矿石', category: 'metal', exchange: 'DCE', unit: '元/吨', minChange: 0.5 },
{ symbol: 'M', name: '豆粕', category: 'agriculture', exchange: 'DCE', unit: '元/吨', minChange: 1 },
{ symbol: 'P', name: '棕榈油', category: 'agriculture', exchange: 'DCE', unit: '元/吨', minChange: 2 },
{ symbol: 'EC', name: '集运指数', category: 'financial', exchange: 'INE', unit: '点', minChange: 0.1 },
{ symbol: 'RB', name: '螺纹钢', category: 'metal', exchange: 'SHFE', unit: '元/吨', minChange: 1 },
{ symbol: 'FG', name: '玻璃', category: 'industrial', exchange: 'ZCE', unit: '元/吨', minChange: 1 },
{ symbol: 'SA', name: '纯碱', category: 'industrial', exchange: 'ZCE', unit: '元/吨', minChange: 1 },
{ symbol: 'MA', name: '甲醇', category: 'energy', exchange: 'ZCE', unit: '元/吨', minChange: 1 },
{ symbol: 'TA', name: 'PTA', category: 'industrial', exchange: 'ZCE', unit: '元/吨', minChange: 2 },
{ symbol: 'CF', name: '棉花', category: 'agriculture', exchange: 'ZCE', unit: '元/吨', minChange: 5 },
{ symbol: 'SR', name: '白糖', category: 'agriculture', exchange: 'ZCE', unit: '元/吨', minChange: 1 },
];
for (const product of products) {
await prisma.product.upsert({
where: { symbol: product.symbol },
update: product,
create: product,
});
}
console.log(`✅ 已创建 ${products.length} 个期货品种`);
// 创建热点事件
const events = [
{
title: '地缘政治风险升级',
summary: '美以袭伊朗,"海上油阀"被关,中东局势紧张升级',
content: '详细内容...',
impact: 'bullish',
impactLevel: 5,
analysis: '地缘政治风险急剧升温,霍尔木兹海峡封锁风险上升。原油供应中断担忧推动油价上涨,避险资产黄金、白银同步走强。短期油价易涨难跌,建议关注原油、黄金相关品种做多机会。',
risks: ['冲突升级可能', '供应中断风险', '波动率激增'],
affectedSymbols: ['SC', 'AU', 'AG'],
},
{
title: '黄金价格创历史新高',
summary: 'COMEX黄金突破3100美元关口避险需求强劲',
content: '详细内容...',
impact: 'bullish',
impactLevel: 4,
analysis: '特朗普关税政策"2.0"版本引发市场担忧,叠加地缘政治风险,黄金避险属性凸显。技术面突破历史高点,多头趋势强劲。预计金价短期维持强势,回调即是买入机会。',
risks: ['获利回吐压力', '美元反弹风险', '美联储政策转向'],
affectedSymbols: ['AU', 'AG'],
},
{
title: '铜供应紧张预期',
summary: '全球铜市场预计出现18万吨供应缺口美国或加征铜进口关税',
content: '详细内容...',
impact: 'bullish',
impactLevel: 4,
analysis: '铜精矿TC现货指数持续回落矿山供应增长放缓。美国可能加征铜进口关税刺激美铜价格上涨全球套利行为收紧供应。需求端新能源产业用铜需求快速增长供需矛盾支撑铜价。',
risks: ['需求放缓风险', '美元走强压制', '库存累积'],
affectedSymbols: ['CU'],
},
{
title: '美联储通胀数据超预期',
summary: '核心PCE数据超预期降息预期降温',
content: '详细内容...',
impact: 'bearish',
impactLevel: 3,
analysis: '美国2月核心PCE通胀数据超预期市场对美联储降息预期降温。美元指数短期获得支撑对大宗商品形成一定压制。但地缘政治风险对冲了部分利空影响。',
risks: ['加息预期升温', '美元持续走强', '风险资产抛售'],
affectedSymbols: ['AU', 'AG', 'SC', 'CU'],
},
{
title: 'OPEC+减产延期预期',
summary: 'OPEC+可能延长减产协议至二季度末',
content: '详细内容...',
impact: 'bullish',
impactLevel: 3,
analysis: 'OPEC+成员国倾向于延长减产协议以支撑油价。全球原油需求预期改善,叠加供应端约束,原油市场供需格局趋紧。关注减产协议正式落地情况。',
risks: ['减产执行力度', '非OPEC增产', '需求不及预期'],
affectedSymbols: ['SC'],
},
];
for (const event of events) {
const existing = await prisma.hotEvent.findFirst({
where: { title: event.title },
});
if (!existing) {
// 查找产品ID
const products = await prisma.product.findMany({
where: { symbol: { in: event.affectedSymbols } },
});
await prisma.hotEvent.create({
data: {
title: event.title,
summary: event.summary,
content: event.content,
impact: event.impact,
impactLevel: event.impactLevel,
analysis: event.analysis,
risks: event.risks,
affectedProducts: {
create: products.map((p) => ({
productId: p.id,
impactConfidence: 0.8,
})),
},
},
});
}
}
console.log(`✅ 已创建 ${events.length} 个热点事件`);
// 创建系统配置
const configs = [
{ key: 'MARKET_STATUS', value: 'open', description: '市场状态' },
{ key: 'TRADING_HOURS', value: '09:00-11:30,13:30-15:00,21:00-02:30', description: '交易时间' },
];
for (const config of configs) {
await prisma.systemConfig.upsert({
where: { key: config.key },
update: config,
create: config,
});
}
console.log(`✅ 已创建 ${configs.length} 个系统配置`);
console.log('✨ 种子数据完成!');
}
main()
.catch((e) => {
console.error('❌ 种子数据失败:', e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});