Initial commit: 宁夏智慧养殖监管平台

This commit is contained in:
shenquanyi
2025-08-25 15:00:46 +08:00
commit ec72c6a8b5
177 changed files with 37263 additions and 0 deletions

105
backend/reorder-farms-id.js Normal file
View 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);