Initial commit: 宁夏智慧养殖监管平台
This commit is contained in:
105
backend/reorder-farms-id.js
Normal file
105
backend/reorder-farms-id.js
Normal file
@@ -0,0 +1,105 @@
|
||||
const { Farm, Animal, Device, Alert } = require('./models');
|
||||
const { sequelize } = require('./config/database-simple');
|
||||
|
||||
async function reorderFarmsId() {
|
||||
const transaction = await sequelize.transaction();
|
||||
|
||||
try {
|
||||
console.log('开始重新排序farms表ID...');
|
||||
|
||||
// 1. 获取所有farms数据,按当前ID排序
|
||||
const farms = await Farm.findAll({
|
||||
order: [['id', 'ASC']],
|
||||
transaction
|
||||
});
|
||||
|
||||
console.log(`找到 ${farms.length} 个养殖场`);
|
||||
|
||||
// 2. 创建ID映射表
|
||||
const idMapping = {};
|
||||
farms.forEach((farm, index) => {
|
||||
const oldId = farm.id;
|
||||
const newId = index + 1;
|
||||
idMapping[oldId] = newId;
|
||||
console.log(`养殖场 "${farm.name}": ${oldId} -> ${newId}`);
|
||||
});
|
||||
|
||||
// 3. 临时禁用外键约束
|
||||
await sequelize.query('SET FOREIGN_KEY_CHECKS = 0', { transaction });
|
||||
|
||||
// 4. 创建临时表存储farms数据
|
||||
await sequelize.query(`
|
||||
CREATE TEMPORARY TABLE farms_temp AS
|
||||
SELECT * FROM farms ORDER BY id ASC
|
||||
`, { transaction });
|
||||
|
||||
// 5. 清空farms表
|
||||
await sequelize.query('DELETE FROM farms', { transaction });
|
||||
|
||||
// 6. 重置自增ID
|
||||
await sequelize.query('ALTER TABLE farms AUTO_INCREMENT = 1', { transaction });
|
||||
|
||||
// 7. 按新顺序插入数据
|
||||
for (let i = 0; i < farms.length; i++) {
|
||||
const farm = farms[i];
|
||||
const newId = i + 1;
|
||||
|
||||
await sequelize.query(`
|
||||
INSERT INTO farms (id, name, type, location, address, contact, phone, status, created_at, updated_at)
|
||||
SELECT ${newId}, name, type, location, address, contact, phone, status, created_at, updated_at
|
||||
FROM farms_temp WHERE id = ${farm.id}
|
||||
`, { transaction });
|
||||
}
|
||||
|
||||
// 8. 更新animals表的farm_id
|
||||
console.log('\n更新animals表的farm_id...');
|
||||
for (const [oldId, newId] of Object.entries(idMapping)) {
|
||||
const result = await sequelize.query(
|
||||
'UPDATE animals SET farm_id = ? WHERE farm_id = ?',
|
||||
{ replacements: [newId, oldId], transaction }
|
||||
);
|
||||
console.log(`Animals: farm_id ${oldId} -> ${newId}, 影响 ${result[0].affectedRows || 0} 行`);
|
||||
}
|
||||
|
||||
// 9. 更新devices表的farm_id
|
||||
console.log('\n更新devices表的farm_id...');
|
||||
for (const [oldId, newId] of Object.entries(idMapping)) {
|
||||
const result = await sequelize.query(
|
||||
'UPDATE devices SET farm_id = ? WHERE farm_id = ?',
|
||||
{ replacements: [newId, oldId], transaction }
|
||||
);
|
||||
console.log(`Devices: farm_id ${oldId} -> ${newId}, 影响 ${result[0].affectedRows || 0} 行`);
|
||||
}
|
||||
|
||||
// 10. 更新alerts表的farm_id
|
||||
console.log('\n更新alerts表的farm_id...');
|
||||
for (const [oldId, newId] of Object.entries(idMapping)) {
|
||||
const result = await sequelize.query(
|
||||
'UPDATE alerts SET farm_id = ? WHERE farm_id = ?',
|
||||
{ replacements: [newId, oldId], transaction }
|
||||
);
|
||||
console.log(`Alerts: farm_id ${oldId} -> ${newId}, 影响 ${result[0].affectedRows || 0} 行`);
|
||||
}
|
||||
|
||||
// 11. 重新启用外键约束
|
||||
await sequelize.query('SET FOREIGN_KEY_CHECKS = 1', { transaction });
|
||||
|
||||
// 12. 验证数据完整性
|
||||
console.log('\n验证数据完整性...');
|
||||
const newFarms = await Farm.findAll({ order: [['id', 'ASC']], transaction });
|
||||
console.log('更新后的farms表:');
|
||||
newFarms.forEach(farm => {
|
||||
console.log(`ID: ${farm.id}, Name: ${farm.name}`);
|
||||
});
|
||||
|
||||
await transaction.commit();
|
||||
console.log('\n✅ farms表ID重新排序完成!');
|
||||
|
||||
} catch (error) {
|
||||
await transaction.rollback();
|
||||
console.error('❌ 重新排序失败:', error.message);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
reorderFarmsId().catch(console.error);
|
||||
Reference in New Issue
Block a user