Files
nxxmdata/backend/import-farms-static-data.js
2025-08-25 15:00:46 +08:00

164 lines
5.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const { sequelize } = require('./config/database-simple');
const { Farm } = require('./models');
/**
* 导入farms静态数据到数据库
* 包含API路由中的静态数据和种子文件中的详细数据
*/
async function importFarmsStaticData() {
try {
console.log('开始导入farms静态数据到数据库...');
// 检查当前farms表状态
const existingFarms = await Farm.findAll();
console.log(`当前farms表中有 ${existingFarms.length} 条记录`);
// API路由中的静态数据
const apiStaticData = [
{ id: 1, name: '宁夏农场1', location: '银川市' },
{ id: 2, name: '宁夏农场2', location: '石嘴山市' },
{ id: 3, name: '宁夏农场3', location: '吴忠市' }
];
// 种子文件中的详细数据
const seedData = [
{
name: '阳光农场',
type: '养猪场',
location: JSON.stringify({ lat: 39.9042, lng: 116.4074 }),
address: '北京市朝阳区农场路1号',
contact: '张三',
phone: '13800138001',
status: 'active'
},
{
name: '绿野牧场',
type: '养牛场',
location: JSON.stringify({ lat: 31.2304, lng: 121.4737 }),
address: '上海市浦东新区牧场路2号',
contact: '李四',
phone: '13800138002',
status: 'active'
},
{
name: '山谷羊场',
type: '养羊场',
location: JSON.stringify({ lat: 23.1291, lng: 113.2644 }),
address: '广州市天河区山谷路3号',
contact: '王五',
phone: '13800138003',
status: 'active'
},
{
name: '蓝天养鸡场',
type: '养鸡场',
location: JSON.stringify({ lat: 30.2741, lng: 120.1551 }),
address: '杭州市西湖区蓝天路4号',
contact: '赵六',
phone: '13800138004',
status: 'active'
},
{
name: '金山养鸭场',
type: '养鸭场',
location: JSON.stringify({ lat: 36.0611, lng: 103.8343 }),
address: '兰州市城关区金山路5号',
contact: '孙七',
phone: '13800138005',
status: 'active'
},
{
name: '银河渔场',
type: '渔场',
location: JSON.stringify({ lat: 29.5647, lng: 106.5507 }),
address: '重庆市渝中区银河路6号',
contact: '周八',
phone: '13800138006',
status: 'active'
},
{
name: '星空牧场',
type: '综合养殖场',
location: JSON.stringify({ lat: 34.3416, lng: 108.9398 }),
address: '西安市雁塔区星空路7号',
contact: '吴九',
phone: '13800138007',
status: 'active'
},
{
name: '彩虹农庄',
type: '有机农场',
location: JSON.stringify({ lat: 25.0478, lng: 102.7123 }),
address: '昆明市五华区彩虹路8号',
contact: '郑十',
phone: '13800138008',
status: 'active'
}
];
// 合并API静态数据和种子数据
const allFarmsData = [];
// 首先添加API静态数据转换为完整格式
for (const apiData of apiStaticData) {
allFarmsData.push({
name: apiData.name,
type: '综合农场', // 默认类型
location: JSON.stringify({ lat: 38.4872, lng: 106.2309 }), // 宁夏地区坐标
address: `宁夏回族自治区${apiData.location}`,
contact: '管理员',
phone: '400-000-0000',
status: 'active'
});
}
// 然后添加种子数据
allFarmsData.push(...seedData);
console.log(`准备导入 ${allFarmsData.length} 条farms数据`);
// 开始事务
const transaction = await sequelize.transaction();
try {
// 清空现有数据
await Farm.destroy({ where: {}, transaction });
console.log('已清空现有farms数据');
// 重置自增ID
await sequelize.query('ALTER TABLE farms AUTO_INCREMENT = 1', { transaction });
console.log('已重置farms表自增ID');
// 批量插入新数据
const createdFarms = await Farm.bulkCreate(allFarmsData, { transaction });
console.log(`成功插入 ${createdFarms.length} 条farms数据`);
// 提交事务
await transaction.commit();
// 验证导入结果
const finalFarms = await Farm.findAll({ order: [['id', 'ASC']] });
console.log('\n导入后的farms数据:');
finalFarms.forEach(farm => {
console.log(`ID: ${farm.id}, Name: ${farm.name}, Type: ${farm.type}, Location: ${farm.address}`);
});
console.log(`\n✅ 成功导入 ${finalFarms.length} 条farms静态数据到数据库`);
} catch (error) {
// 回滚事务
await transaction.rollback();
throw error;
}
} catch (error) {
console.error('❌ 导入farms静态数据失败:', error.message);
console.error('错误详情:', error);
} finally {
// 关闭数据库连接
await sequelize.close();
}
}
// 执行导入
importFarmsStaticData();