/** * 更新设备状态脚本 * 将设备状态更新为online、maintenance、offline三种状态 */ const { Device } = require('./models'); async function updateDeviceStatus() { try { console.log('开始更新设备状态...'); // 获取所有设备 const devices = await Device.findAll(); console.log(`找到 ${devices.length} 个设备`); // 计算每种状态的设备数量 const totalDevices = devices.length; const onlineCount = Math.floor(totalDevices * 0.6); // 60% 在线 const maintenanceCount = Math.floor(totalDevices * 0.15); // 15% 维护 const offlineCount = totalDevices - onlineCount - maintenanceCount; // 剩余离线 console.log(`计划分配: ${onlineCount} 在线, ${maintenanceCount} 维护, ${offlineCount} 离线`); // 随机打乱设备数组 const shuffledDevices = devices.sort(() => Math.random() - 0.5); // 批量更新设备状态 const updates = []; // 设置在线设备 for (let i = 0; i < onlineCount; i++) { updates.push( Device.update( { status: 'online' }, { where: { id: shuffledDevices[i].id } } ) ); } // 设置维护设备 for (let i = onlineCount; i < onlineCount + maintenanceCount; i++) { updates.push( Device.update( { status: 'maintenance' }, { where: { id: shuffledDevices[i].id } } ) ); } // 设置离线设备 for (let i = onlineCount + maintenanceCount; i < totalDevices; i++) { updates.push( Device.update( { status: 'offline' }, { where: { id: shuffledDevices[i].id } } ) ); } // 执行所有更新 await Promise.all(updates); // 验证更新结果 const statusCount = await Device.findAll({ attributes: [ 'status', [Device.sequelize.fn('COUNT', Device.sequelize.col('status')), 'count'] ], group: ['status'], raw: true }); console.log('\n更新完成!当前设备状态分布:'); statusCount.forEach(item => { console.log(`${item.status}: ${item.count} 个设备`); }); console.log('\n设备状态更新成功!'); } catch (error) { console.error('更新设备状态失败:', error); } finally { process.exit(0); } } // 执行更新 updateDeviceStatus();