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.
121 lines
5.0 KiB
121 lines
5.0 KiB
|
3 months ago
|
import { PrismaClient } from '@prisma/client';
|
||
|
|
|
||
|
|
const prisma = new PrismaClient();
|
||
|
|
|
||
|
|
async function main() {
|
||
|
|
console.log('Start seeding...');
|
||
|
|
|
||
|
|
// 创建版块数据
|
||
|
|
const sectors = [
|
||
|
|
{ name: '半导体', code: '880491' },
|
||
|
|
{ name: '新能源', code: '880952' },
|
||
|
|
{ name: '医药生物', code: '880122' },
|
||
|
|
{ name: '白酒', code: '880381' },
|
||
|
|
{ name: '银行', code: '880471' },
|
||
|
|
{ name: '证券', code: '880472' },
|
||
|
|
{ name: '保险', code: '880473' },
|
||
|
|
{ name: '房地产', code: '880482' },
|
||
|
|
{ name: '汽车', code: '880391' },
|
||
|
|
{ name: '电子', code: '880494' },
|
||
|
|
{ name: '计算机', code: '880952' },
|
||
|
|
{ name: '通信', code: '880495' },
|
||
|
|
{ name: '传媒', code: '880952' },
|
||
|
|
{ name: '军工', code: '880954' },
|
||
|
|
{ name: '有色金属', code: '880324' },
|
||
|
|
{ name: '钢铁', code: '880318' },
|
||
|
|
{ name: '煤炭', code: '880952' },
|
||
|
|
{ name: '化工', code: '880336' },
|
||
|
|
{ name: '建筑材料', code: '880344' },
|
||
|
|
{ name: '机械设备', code: '880952' },
|
||
|
|
];
|
||
|
|
|
||
|
|
for (const sector of sectors) {
|
||
|
|
await prisma.sector.upsert({
|
||
|
|
where: { code: sector.code },
|
||
|
|
update: {},
|
||
|
|
create: sector,
|
||
|
|
});
|
||
|
|
}
|
||
|
|
console.log(`Created ${sectors.length} sectors`);
|
||
|
|
|
||
|
|
// 创建市场指数
|
||
|
|
const indices = [
|
||
|
|
{ name: '上证指数', code: '000001', current: 3050.32, change: 15.23, changePercent: 0.5, volume: BigInt(450000000), turnover: BigInt(4200000000), sortOrder: 1 },
|
||
|
|
{ name: '深证成指', code: '399001', current: 9850.15, change: -25.6, changePercent: -0.26, volume: BigInt(520000000), turnover: BigInt(5100000000), sortOrder: 2 },
|
||
|
|
{ name: '创业板指', code: '399006', current: 1950.45, change: 8.75, changePercent: 0.45, volume: BigInt(180000000), turnover: BigInt(2100000000), sortOrder: 3 },
|
||
|
|
{ name: '科创50', code: '000688', current: 850.32, change: -5.23, changePercent: -0.61, volume: BigInt(65000000), turnover: BigInt(950000000), sortOrder: 4 },
|
||
|
|
];
|
||
|
|
|
||
|
|
for (const index of indices) {
|
||
|
|
await prisma.marketIndex.upsert({
|
||
|
|
where: { code: index.code },
|
||
|
|
update: {},
|
||
|
|
create: index,
|
||
|
|
});
|
||
|
|
}
|
||
|
|
console.log(`Created ${indices.length} market indices`);
|
||
|
|
|
||
|
|
// 创建示例股票数据
|
||
|
|
const stocks = [
|
||
|
|
{ code: '000001', name: '平安银行', sectorCode: '880471' },
|
||
|
|
{ code: '000002', name: '万科A', sectorCode: '880482' },
|
||
|
|
{ code: '000063', name: '中兴通讯', sectorCode: '880495' },
|
||
|
|
{ code: '000100', name: 'TCL科技', sectorCode: '880494' },
|
||
|
|
{ code: '000333', name: '美的集团', sectorCode: '880952' },
|
||
|
|
{ code: '000568', name: '泸州老窖', sectorCode: '880381' },
|
||
|
|
{ code: '000651', name: '格力电器', sectorCode: '880952' },
|
||
|
|
{ code: '000725', name: '京东方A', sectorCode: '880494' },
|
||
|
|
{ code: '000768', name: '中航西飞', sectorCode: '880954' },
|
||
|
|
{ code: '000858', name: '五粮液', sectorCode: '880381' },
|
||
|
|
{ code: '600000', name: '浦发银行', sectorCode: '880471' },
|
||
|
|
{ code: '600009', name: '上海机场', sectorCode: '880952' },
|
||
|
|
{ code: '600016', name: '民生银行', sectorCode: '880471' },
|
||
|
|
{ code: '600028', name: '中国石化', sectorCode: '880952' },
|
||
|
|
{ code: '600030', name: '中信证券', sectorCode: '880472' },
|
||
|
|
{ code: '600031', name: '三一重工', sectorCode: '880952' },
|
||
|
|
{ code: '600036', name: '招商银行', sectorCode: '880471' },
|
||
|
|
{ code: '600048', name: '保利发展', sectorCode: '880482' },
|
||
|
|
{ code: '600050', name: '中国联通', sectorCode: '880495' },
|
||
|
|
{ code: '600104', name: '上汽集团', sectorCode: '880391' },
|
||
|
|
{ code: '600196', name: '复星医药', sectorCode: '880122' },
|
||
|
|
{ code: '600276', name: '恒瑞医药', sectorCode: '880122' },
|
||
|
|
{ code: '600309', name: '万华化学', sectorCode: '880336' },
|
||
|
|
{ code: '600519', name: '贵州茅台', sectorCode: '880381' },
|
||
|
|
{ code: '600900', name: '长江电力', sectorCode: '880952' },
|
||
|
|
{ code: '601012', name: '隆基绿能', sectorCode: '880952' },
|
||
|
|
{ code: '601088', name: '中国神华', sectorCode: '880952' },
|
||
|
|
{ code: '601166', name: '兴业银行', sectorCode: '880471' },
|
||
|
|
{ code: '601288', name: '农业银行', sectorCode: '880471' },
|
||
|
|
{ code: '601318', name: '中国平安', sectorCode: '880473' },
|
||
|
|
{ code: '601398', name: '工商银行', sectorCode: '880471' },
|
||
|
|
{ code: '601888', name: '中国中免', sectorCode: '880952' },
|
||
|
|
{ code: '603288', name: '海天味业', sectorCode: '880952' },
|
||
|
|
{ code: '688981', name: '中芯国际', sectorCode: '880491' },
|
||
|
|
];
|
||
|
|
|
||
|
|
for (const stock of stocks) {
|
||
|
|
await prisma.stock.upsert({
|
||
|
|
where: { code: stock.code },
|
||
|
|
update: {},
|
||
|
|
create: {
|
||
|
|
...stock,
|
||
|
|
marketCap: BigInt(Math.floor(Math.random() * 1000000000000) + 10000000000),
|
||
|
|
pe: Number((Math.random() * 50 + 5).toFixed(2)),
|
||
|
|
pb: Number((Math.random() * 10 + 0.5).toFixed(2)),
|
||
|
|
},
|
||
|
|
});
|
||
|
|
}
|
||
|
|
console.log(`Created ${stocks.length} stocks`);
|
||
|
|
|
||
|
|
console.log('Seeding finished');
|
||
|
|
}
|
||
|
|
|
||
|
|
main()
|
||
|
|
.catch((e) => {
|
||
|
|
console.error(e);
|
||
|
|
process.exit(1);
|
||
|
|
})
|
||
|
|
.finally(async () => {
|
||
|
|
await prisma.$disconnect();
|
||
|
|
});
|