121 lines
4.3 KiB
JavaScript
121 lines
4.3 KiB
JavaScript
|
|
const mysql = require('mysql2/promise');
|
|||
|
|
|
|||
|
|
// 数据库配置
|
|||
|
|
const dbConfig = {
|
|||
|
|
host: process.env.DB_HOST || 'localhost',
|
|||
|
|
port: process.env.DB_PORT || 3306,
|
|||
|
|
user: process.env.DB_USER || 'root',
|
|||
|
|
password: process.env.DB_PASSWORD || '',
|
|||
|
|
database: process.env.DB_NAME || 'nxxmdata'
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
async function createEnvironmentScheduleTable() {
|
|||
|
|
let connection;
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
// 创建数据库连接
|
|||
|
|
connection = await mysql.createConnection(dbConfig);
|
|||
|
|
console.log('数据库连接成功');
|
|||
|
|
|
|||
|
|
// 创建环境监测时刻表
|
|||
|
|
const createTableSQL = `
|
|||
|
|
CREATE TABLE IF NOT EXISTS environment_schedules (
|
|||
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|||
|
|
farm_id INT NOT NULL COMMENT '农场ID',
|
|||
|
|
device_id INT NOT NULL COMMENT '设备ID',
|
|||
|
|
schedule_time TIME NOT NULL COMMENT '监测时刻(HH:MM:SS)',
|
|||
|
|
temperature DECIMAL(5,2) NULL COMMENT '温度值(摄氏度)',
|
|||
|
|
humidity DECIMAL(5,2) NULL COMMENT '湿度值(百分比)',
|
|||
|
|
monitoring_date DATE NOT NULL DEFAULT (CURRENT_DATE) COMMENT '监测日期',
|
|||
|
|
status ENUM('active', 'inactive', 'maintenance') DEFAULT 'active' COMMENT '监测状态',
|
|||
|
|
notes TEXT NULL COMMENT '备注信息',
|
|||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
INDEX idx_farm_date_time (farm_id, monitoring_date, schedule_time),
|
|||
|
|
INDEX idx_device (device_id)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='环境监测时刻表';
|
|||
|
|
`;
|
|||
|
|
|
|||
|
|
await connection.execute(createTableSQL);
|
|||
|
|
console.log('环境监测时刻表创建成功');
|
|||
|
|
|
|||
|
|
// 生成示例数据
|
|||
|
|
const schedules = [
|
|||
|
|
'06:00:00', '08:00:00', '10:00:00', '12:00:00',
|
|||
|
|
'14:00:00', '16:00:00', '18:00:00', '20:00:00'
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
const insertSQL = `
|
|||
|
|
INSERT INTO environment_schedules
|
|||
|
|
(farm_id, device_id, schedule_time, temperature, humidity, monitoring_date, status, notes)
|
|||
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|||
|
|
`;
|
|||
|
|
|
|||
|
|
let totalInserted = 0;
|
|||
|
|
const today = new Date();
|
|||
|
|
|
|||
|
|
// 为过去7天生成数据
|
|||
|
|
for (let day = 0; day < 7; day++) {
|
|||
|
|
const monitoringDate = new Date(today);
|
|||
|
|
monitoringDate.setDate(today.getDate() - day);
|
|||
|
|
const dateStr = monitoringDate.toISOString().split('T')[0];
|
|||
|
|
|
|||
|
|
for (const time of schedules) {
|
|||
|
|
// 农场1的数据
|
|||
|
|
const temp1 = (18 + Math.random() * 15).toFixed(2);
|
|||
|
|
const humidity1 = (45 + Math.random() * 35).toFixed(2);
|
|||
|
|
|
|||
|
|
await connection.execute(insertSQL, [
|
|||
|
|
1, 1, time, temp1, humidity1, dateStr, 'active', `定时监测数据 - ${time}`
|
|||
|
|
]);
|
|||
|
|
totalInserted++;
|
|||
|
|
|
|||
|
|
// 农场2的数据
|
|||
|
|
const temp2 = (16 + Math.random() * 18).toFixed(2);
|
|||
|
|
const humidity2 = (40 + Math.random() * 40).toFixed(2);
|
|||
|
|
|
|||
|
|
await connection.execute(insertSQL, [
|
|||
|
|
2, 2, time, temp2, humidity2, dateStr, 'active', `定时监测数据 - ${time}`
|
|||
|
|
]);
|
|||
|
|
totalInserted++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
console.log(`成功插入 ${totalInserted} 条环境监测时刻数据`);
|
|||
|
|
|
|||
|
|
// 验证数据
|
|||
|
|
const [countResult] = await connection.execute(
|
|||
|
|
'SELECT COUNT(*) as total FROM environment_schedules'
|
|||
|
|
);
|
|||
|
|
console.log(`环境监测时刻表总记录数: ${countResult[0].total}`);
|
|||
|
|
|
|||
|
|
const [todayResult] = await connection.execute(
|
|||
|
|
'SELECT COUNT(*) as today_count FROM environment_schedules WHERE monitoring_date = CURDATE()'
|
|||
|
|
);
|
|||
|
|
console.log(`今日监测记录数: ${todayResult[0].today_count}`);
|
|||
|
|
|
|||
|
|
// 显示部分数据样例
|
|||
|
|
const [sampleData] = await connection.execute(`
|
|||
|
|
SELECT monitoring_date, schedule_time, temperature, humidity
|
|||
|
|
FROM environment_schedules
|
|||
|
|
ORDER BY monitoring_date DESC, schedule_time ASC
|
|||
|
|
LIMIT 5
|
|||
|
|
`);
|
|||
|
|
|
|||
|
|
console.log('\n数据样例:');
|
|||
|
|
sampleData.forEach(record => {
|
|||
|
|
console.log(`日期: ${record.monitoring_date}, 时间: ${record.schedule_time}, 温度: ${record.temperature}°C, 湿度: ${record.humidity}%`);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('创建环境监测时刻表失败:', error.message);
|
|||
|
|
} finally {
|
|||
|
|
if (connection) {
|
|||
|
|
await connection.end();
|
|||
|
|
console.log('数据库连接已关闭');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 执行创建操作
|
|||
|
|
createEnvironmentScheduleTable();
|