/** * 智能主机设备模型 * @file IotJbqServer.js * @description 智能主机设备数据模型,对应iot_jbq_server表 */ const { DataTypes, Model } = require('sequelize'); const { sequelize } = require('../config/database-simple'); class IotJbqServer extends Model { /** * 获取设备状态文本 */ getStatusText() { const statusMap = { 0: '离线', 1: '在线', 2: '报警', 3: '维护' }; return statusMap[this.state] || '未知'; } /** * 获取设备状态颜色 */ getStatusColor() { const colorMap = { 0: 'red', // 离线 1: 'green', // 在线 2: 'orange', // 报警 3: 'blue' // 维护 }; return colorMap[this.state] || 'default'; } /** * 获取GPS状态文本 */ getGpsStatusText() { const gpsMap = { 'A': '已定位', 'V': '未定位' }; return gpsMap[this.gps_state] || '未知'; } /** * 获取GPS状态颜色 */ getGpsStatusColor() { const colorMap = { 'A': 'green', // 已定位 'V': 'red' // 未定位 }; return colorMap[this.gps_state] || 'default'; } /** * 获取电池电量百分比 */ getBatteryPercent() { const voltage = parseFloat(this.voltage) || 0; // 假设电池电压范围是3.0V-4.2V if (voltage >= 4.2) return 100; if (voltage <= 3.0) return 0; return Math.round(((voltage - 3.0) / 1.2) * 100); } /** * 获取温度数值 */ getTemperatureValue() { return parseFloat(this.temperature) || 0; } /** * 获取信号强度文本 */ getSignalText() { const signal = parseInt(this.signa) || 0; if (signal >= 20) return '强'; if (signal >= 10) return '中'; if (signal >= 5) return '弱'; return '无信号'; } /** * 获取信号强度颜色 */ getSignalColor() { const signal = parseInt(this.signa) || 0; if (signal >= 20) return 'green'; if (signal >= 10) return 'orange'; if (signal >= 5) return 'red'; return 'red'; } /** * 判断是否低电量 */ isLowBattery() { return this.getBatteryPercent() < 20; } /** * 判断是否需要维护 */ needsMaintenance() { return this.state === 3 || this.isLowBattery() || this.gps_state === 'V'; } /** * 获取最后更新时间 */ getLastUpdateTime() { if (this.uptime) { const date = new Date(this.uptime * 1000); return date.toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }).replace(/\//g, '-'); } return '未知'; } /** * 获取设备编号(使用sid字段) */ getDeviceNumber() { return this.sid || '无编号'; } /** * 判断设备是否联网 * 通过 simId 字段是否为空来判断联网状态 */ isOnline() { return this.simId && this.simId.trim() !== ''; } /** * 获取联网状态文本 */ getNetworkStatusText() { return this.isOnline() ? '已联网' : '未联网'; } /** * 获取联网状态颜色 */ getNetworkStatusColor() { return this.isOnline() ? 'green' : 'red'; } } // 初始化模型 IotJbqServer.init({ id: { type: DataTypes.BIGINT, primaryKey: true, autoIncrement: true, comment: '主机设备ID' }, org_id: { type: DataTypes.INTEGER.UNSIGNED, allowNull: false, comment: '组织ID' }, title: { type: DataTypes.STRING(50), allowNull: false, defaultValue: '', comment: '设备标题' }, uid: { type: DataTypes.BIGINT, allowNull: false, comment: '用户ID' }, time: { type: DataTypes.INTEGER, allowNull: false, comment: '设备时间戳' }, uptime: { type: DataTypes.INTEGER, allowNull: false, comment: '上传时间戳' }, distribute_time: { type: DataTypes.INTEGER, allowNull: true, defaultValue: 0, comment: '分发时间' }, state: { type: DataTypes.INTEGER, allowNull: true, comment: '设备状态' }, sid: { type: DataTypes.STRING(30), allowNull: false, comment: '设备序列号' }, gps_state: { type: DataTypes.STRING(5), allowNull: false, comment: 'GPS状态' }, lat: { type: DataTypes.STRING(100), allowNull: false, comment: '纬度' }, lon: { type: DataTypes.STRING(100), allowNull: false, comment: '经度' }, signa: { type: DataTypes.STRING(200), allowNull: false, comment: '信号强度' }, voltage: { type: DataTypes.STRING(10), allowNull: false, comment: '电池电压' }, temperature: { type: DataTypes.STRING(10), allowNull: false, comment: '设备温度' }, ver: { type: DataTypes.STRING(100), allowNull: false, comment: '固件版本' }, macsid: { type: DataTypes.BIGINT, allowNull: true, comment: 'MAC序列号' }, ctwing: { type: DataTypes.TEXT, allowNull: true, comment: 'CTWing信息' }, bank_lanwei: { type: DataTypes.INTEGER, allowNull: true, comment: '栏位编号' }, bank_house: { type: DataTypes.INTEGER, allowNull: true, comment: '栏舍编号' }, bank_item_id: { type: DataTypes.INTEGER, allowNull: true, comment: '栏位项目ID' }, fence_id: { type: DataTypes.INTEGER.UNSIGNED, allowNull: false, defaultValue: 0, comment: '围栏ID' }, source_id: { type: DataTypes.BIGINT, allowNull: true, comment: '数据源ID' }, simId: { type: DataTypes.STRING(50), allowNull: true, comment: 'SIM卡ID,用于判断联网状态' } }, { sequelize, modelName: 'IotJbqServer', tableName: 'iot_jbq_server', timestamps: false, // 该表没有created_at和updated_at字段 indexes: [ { fields: ['uid'] }, { fields: ['sid'] }, { fields: ['state'] }, { fields: ['fence_id'] }, { fields: ['source_id'] } ] }); module.exports = IotJbqServer;