const db = require('../config/db'); const logger = require('../logger'); class Device { // 插入新设备 static insert(device_id, status, last_seen, first_online_time, last_online_time, ip_address, callback) { const sql = ` INSERT INTO devices (device_id, status, last_seen, first_online_time, last_online_time, ip_address) VALUES (?, ?, ?, ?, ?, ?) `; logger.info(`插入新设备: ${device_id}`); const devicesSql = `/* 原有SQL语句保持不变 */`; db.query(devicesSql, [device_id, status, last_seen, first_online_time, last_online_time, ip_address], (err, result) => { if (err) { logger.error('插入新设备失败:', err); return callback(err); } // 新增relay_state表插入(初始化默认房间信息) const relaySql = ` INSERT INTO relay_state (device_id, state, temperature, timestamp, room_number, room_name) VALUES (?, 'off', NULL, ?, '默认房间号', '默认房间') `; db.query(relaySql, [device_id, last_seen], (relayErr) => { if (relayErr) logger.error('初始化继电器状态失败:', relayErr); }); callback(null, result); }); } // 更新设备上线状态 static updateOnlineStatus(device_id, status, last_seen, first_online_time, last_online_time, ip_address, callback) { logger.info(`更新设备 ${device_id} 在线状态`); const sql = ` UPDATE devices SET status = ?, last_seen = ?, first_online_time = ?, last_online_time = ?, ip_address = ? WHERE device_id = ? `; db.query(sql, [status, last_seen, first_online_time, last_online_time, ip_address, device_id], callback); } // 更新设备下线状态 static updateOfflineStatus(device_id, status, last_seen, last_offline_time, callback) { const sql = ` UPDATE devices SET status = ?, last_seen = ?, last_offline_time = ? WHERE device_id = ? `; db.query(sql, [status, last_seen, last_offline_time, device_id], callback); } // 修改updateTemperature方法参数处理 static updateTemperature(device_id, temperature, upload_time, room_number, room_name, callback = () => {}) { logger.info(`更新设备温度: 设备ID=${device_id}, 温度=${temperature}`); const sql = ` UPDATE devices SET temperature = ?, upload_time = ? WHERE device_id = ? `; db.query(sql, [temperature, upload_time, device_id], (err, results) => { if (err) { logger.error(`更新设备温度失败: 设备ID=${device_id}, 错误: ${err}`); return callback(err); } // 新增relay_state插入(添加默认回调) const relaySql = ` INSERT INTO relay_state (device_id, temperature, timestamp, room_number, room_name) VALUES (?, ?, ?, ?, ?) `; db.query(relaySql, [device_id, temperature, upload_time, room_number, room_name], (relayErr) => { if (relayErr) { logger.error(`温度记录失败: ${device_id}`); } callback(null, results); // 确保在此处调用回调 }); }); } // 只更新开关状态和开关状态时间 static updateSwitchStatus(device_id, switch_status, switch_status_time, callback) { logger.info(`更新设备开关状态: 设备ID=${device_id}, 状态=${switch_status}`); const sql = ` UPDATE devices SET switch_status = ?, switch_status_time = ? WHERE device_id = ? `; db.query(sql, [switch_status, switch_status_time, device_id], (err, results) => { if (err) { logger.error(`更新设备开关状态失败: 设备ID=${device_id}, 错误: ${err}`); return callback(err); } // 新增relay_state更新 const relaySql = ` UPDATE relay_state SET switch_status = ?, update_time = ? WHERE device_id = ? `; db.query(relaySql, [switch_status, switch_status_time, device_id], (relayErr) => { if (relayErr) { logger.error(`更新继电器状态失败: ${device_id}`); } }); logger.debug(`设备开关状态更新成功: 设备ID=${device_id}`); callback(null, results); }); } static updateTemperature(device_id, temperature, upload_time, callback) { logger.info(`更新设备温度: 设备ID=${device_id}, 温度=${temperature}`); const sql = ` UPDATE devices SET temperature = ?, upload_time = ? WHERE device_id = ? `; db.query(sql, [temperature, upload_time, device_id], (err, results) => { if (err) { logger.error(`更新设备温度失败: 设备ID=${device_id}, 错误: ${err}`); return callback(err); } // 新增relay_state更新 const relaySql = ` UPDATE relay_state SET temperature = ?, update_time = ? WHERE device_id = ? `; db.query(relaySql, [temperature, upload_time, device_id], (relayErr) => { if (relayErr) { logger.error(`更新温度记录失败: ${device_id}`); } }); logger.debug(`设备温度更新成功: 设备ID=${device_id}`); callback(null, results); }); } // 只更新高低电平状态和高低电平状态时间 static updateLevelStatus(device_id, level_status, level_status_time, callback) { const sql = ` UPDATE devices SET level_status = ?, level_status_time = ? WHERE device_id = ? `; db.query(sql, [level_status, level_status_time, device_id], callback); } // 例如 getDeviceById 方法 static getDeviceById(device_id, callback) { const sql = ` SELECT * FROM devices WHERE device_id = ? `; db.query(sql, [device_id], (err, results) => { if (err) { console.error('Error fetching device:', err); return callback(err); } const device = results.length > 0? results[0] : null; callback(null, device); }); } // 建议添加数据库连接检查 static getDeviceById(device_id, callback) { if (!db) { console.error('Database connection is not initialized'); return callback(new Error('Database connection is not initialized')); } const sql = ` SELECT * FROM devices WHERE device_id = ? `; db.query(sql, [device_id], (err, results) => { if (err) { console.error('Error fetching device:', err); return callback(err); } const device = results.length > 0? results[0] : null; callback(null, device); }); } static async getDeviceStatus(device_id) { return new Promise((resolve, reject) => { this.getDeviceById(device_id, (err, device) => { if (err) return reject(err); resolve({ status: device?.status || 'offline', temperature: device?.temperature || 0, switch_status: device?.switch_status || 'off' }); }); }); } } module.exports = Device;