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

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();
});