Files
nxxmdata/backend/import-farms-static-data.js

164 lines
5.0 KiB
JavaScript
Raw Normal View History

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