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

View File

@@ -0,0 +1,161 @@
const mysql = require('mysql2/promise');
async function simpleReorderFarms() {
let connection;
try {
// 创建数据库连接
connection = await mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root123',
database: 'nxxmdata'
});
console.log('连接数据库成功');
// 1. 检查当前farms数据
const [farms] = await connection.execute('SELECT * FROM farms ORDER BY id ASC');
console.log(`找到 ${farms.length} 个养殖场:`);
farms.forEach(farm => {
console.log(`ID: ${farm.id}, Name: ${farm.name}`);
});
if (farms.length === 0) {
console.log('farms表为空先恢复数据...');
// 插入基础数据
await connection.execute(`
INSERT INTO farms (name, type, location, address, contact, phone, status, created_at, updated_at) VALUES
('蓝天养鸡场', '养鸡场', '{}', '成都市锦江区蓝天路4号', '赵六', '13800138004', 'active', NOW(), NOW()),
('金山养鸭场', '养鸭场', '{}', '青岛市市南区金山路5号', '钱七', '13800138005', 'active', NOW(), NOW()),
('银河渔场', '渔场', '{}', '深圳市福田区银河路6号', '孙八', '13800138006', 'active', NOW(), NOW()),
('星空牧场', '综合农场', '{}', '重庆市渝中区星空路7号', '周九', '13800138007', 'active', NOW(), NOW()),
('彩虹农庄', '有机农场', '{}', '西安市雁塔区彩虹路8号', '吴十', '13800138008', 'active', NOW(), NOW()),
('东方养殖场', '养猪场', '{}', '福州市鼓楼区东方路9号', '郑一', '13800138009', 'active', NOW(), NOW()),
('西部牧场', '养牛场', '{}', '乌鲁木齐市天山区西部路10号', '王二', '13800138010', 'active', NOW(), NOW()),
('南方羊场', '养羊场', '{}', '昆明市五华区南方路11号', '李三', '13800138011', 'active', NOW(), NOW())
`);
console.log('数据恢复完成');
// 重新获取数据
const [newFarms] = await connection.execute('SELECT * FROM farms ORDER BY id ASC');
console.log('恢复后的数据:');
newFarms.forEach(farm => {
console.log(`ID: ${farm.id}, Name: ${farm.name}`);
});
return;
}
// 2. 开始事务
await connection.beginTransaction();
// 3. 禁用外键检查
await connection.execute('SET FOREIGN_KEY_CHECKS = 0');
// 4. 创建ID映射
const idMapping = {};
farms.forEach((farm, index) => {
idMapping[farm.id] = index + 1;
});
console.log('\nID映射:');
Object.entries(idMapping).forEach(([oldId, newId]) => {
console.log(`${oldId} -> ${newId}`);
});
// 5. 更新farms表ID
console.log('\n更新farms表ID...');
for (let i = 0; i < farms.length; i++) {
const farm = farms[i];
const newId = i + 1;
if (farm.id !== newId) {
// 先更新为临时ID避免冲突
const tempId = 1000 + newId;
await connection.execute(
'UPDATE farms SET id = ? WHERE id = ?',
[tempId, farm.id]
);
console.log(`临时更新: ${farm.id} -> ${tempId}`);
}
}
// 6. 更新为最终ID
for (let i = 0; i < farms.length; i++) {
const newId = i + 1;
const tempId = 1000 + newId;
await connection.execute(
'UPDATE farms SET id = ? WHERE id = ?',
[newId, tempId]
);
console.log(`最终更新: ${tempId} -> ${newId}`);
}
// 7. 更新相关表的外键
console.log('\n更新外键...');
// 更新animals表
for (const [oldId, newId] of Object.entries(idMapping)) {
if (oldId !== newId.toString()) {
const [result] = await connection.execute(
'UPDATE animals SET farm_id = ? WHERE farm_id = ?',
[newId, oldId]
);
console.log(`Animals: farm_id ${oldId} -> ${newId}, 影响 ${result.affectedRows}`);
}
}
// 更新devices表
for (const [oldId, newId] of Object.entries(idMapping)) {
if (oldId !== newId.toString()) {
const [result] = await connection.execute(
'UPDATE devices SET farm_id = ? WHERE farm_id = ?',
[newId, oldId]
);
console.log(`Devices: farm_id ${oldId} -> ${newId}, 影响 ${result.affectedRows}`);
}
}
// 更新alerts表
for (const [oldId, newId] of Object.entries(idMapping)) {
if (oldId !== newId.toString()) {
const [result] = await connection.execute(
'UPDATE alerts SET farm_id = ? WHERE farm_id = ?',
[newId, oldId]
);
console.log(`Alerts: farm_id ${oldId} -> ${newId}, 影响 ${result.affectedRows}`);
}
}
// 8. 重新启用外键检查
await connection.execute('SET FOREIGN_KEY_CHECKS = 1');
// 9. 提交事务
await connection.commit();
// 10. 验证结果
const [finalFarms] = await connection.execute('SELECT * FROM farms ORDER BY id ASC');
console.log('\n最终结果:');
finalFarms.forEach(farm => {
console.log(`ID: ${farm.id}, Name: ${farm.name}`);
});
console.log('\n✅ farms表ID重新排序完成');
} catch (error) {
if (connection) {
await connection.rollback();
}
console.error('❌ 操作失败:', error.message);
} finally {
if (connection) {
await connection.end();
}
}
}
simpleReorderFarms();