/** * Device 模型定义 * @file Device.js * @description 定义设备模型,用于数据库操作 */ const { DataTypes } = require('sequelize'); const BaseModel = require('./BaseModel'); const { sequelize } = require('../config/database-simple'); /** * 设备模型 * @typedef {Object} Device * @property {number} id - 设备唯一标识 * @property {string} type - 设备类型 * @property {string} status - 设备状态 * @property {number} farmId - 所属养殖场ID * @property {Date} created_at - 创建时间 * @property {Date} updated_at - 更新时间 */ class Device extends BaseModel { /** * 获取设备所属的养殖场 * @returns {Promise} 养殖场信息 */ async getFarm() { return await this.getFarm(); } /** * 获取设备的所有预警 * @returns {Promise} 预警列表 */ async getAlerts() { return await this.getAlerts(); } /** * 更新设备状态 * @param {String} status 新状态 * @returns {Promise} 更新结果 */ async updateStatus(status) { try { this.status = status; await this.save(); return true; } catch (error) { console.error('更新设备状态失败:', error); return false; } } /** * 记录设备维护 * @returns {Promise} 记录结果 */ async recordMaintenance() { try { this.last_maintenance = new Date(); this.status = 'online'; await this.save(); return true; } catch (error) { console.error('记录设备维护失败:', error); return false; } } } // 初始化Device模型 Device.init({ id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true }, name: { type: DataTypes.STRING(100), allowNull: false }, type: { type: DataTypes.STRING(50), allowNull: false }, status: { type: DataTypes.ENUM('online', 'offline', 'maintenance'), defaultValue: 'offline' }, farm_id: { type: DataTypes.INTEGER, allowNull: false, references: { model: 'farms', key: 'id' } }, last_maintenance: { type: DataTypes.DATE, allowNull: true }, installation_date: { type: DataTypes.DATE, allowNull: true }, metrics: { type: DataTypes.JSON, allowNull: true, defaultValue: {} } }, { sequelize, tableName: 'devices', modelName: 'Device', timestamps: true, createdAt: 'created_at', updatedAt: 'updated_at' }); /** * 导出设备模型 * @exports Device */ module.exports = Device;