const { DataTypes } = require('sequelize'); const { sequelize } = require('../db'); const User = require('./User'); const InventoryPlan = require('./InventoryPlan'); const InventoryTask = require('./InventoryTask'); const Room = require('./Room'); const Rack = require('./Rack'); const PendingDevice = sequelize.define( 'PendingDevice', { pendingId: { type: DataTypes.STRING, primaryKey: true, allowNull: false, unique: true, }, serialNumber: { type: DataTypes.STRING, allowNull: false, comment: '设备序列号', }, deviceName: { type: DataTypes.STRING, allowNull: true, comment: '设备名称', }, deviceType: { type: DataTypes.STRING, allowNull: true, defaultValue: 'other', comment: '设备类型: server, switch, router, storage, other', }, roomId: { type: DataTypes.STRING, allowNull: true, references: { model: Room, key: 'roomId', }, comment: '所属机房ID', }, rackId: { type: DataTypes.STRING, allowNull: true, references: { model: Rack, key: 'rackId', }, comment: '所属机柜ID', }, position: { type: DataTypes.INTEGER, allowNull: true, comment: 'U位', }, height: { type: DataTypes.INTEGER, allowNull: true, defaultValue: 1, comment: '高度(U)', }, powerConsumption: { type: DataTypes.FLOAT, allowNull: true, defaultValue: 0, comment: '功率(W)', }, model: { type: DataTypes.STRING, allowNull: true, comment: '设备型号', }, brand: { type: DataTypes.STRING, allowNull: true, comment: '品牌', }, ipAddress: { type: DataTypes.STRING, allowNull: true, comment: 'IP地址', }, purchaseDate: { type: DataTypes.DATE, allowNull: true, comment: '购买日期', }, warrantyExpiry: { type: DataTypes.DATE, allowNull: true, comment: '保修到期', }, description: { type: DataTypes.TEXT, allowNull: true, comment: '描述', }, customFields: { type: DataTypes.JSON, defaultValue: {}, allowNull: true, }, status: { type: DataTypes.STRING, defaultValue: 'pending', comment: 'pending: 待同步, synced: 已同步, deleted: 已删除', }, planId: { type: DataTypes.STRING, allowNull: true, references: { model: InventoryPlan, key: 'planId', }, comment: '关联的盘点计划ID', }, taskId: { type: DataTypes.STRING, allowNull: true, references: { model: InventoryTask, key: 'taskId', }, comment: '关联的盘点任务ID', }, createdBy: { type: DataTypes.STRING, allowNull: true, references: { model: User, key: 'userId', }, comment: '创建人', }, syncedAt: { type: DataTypes.DATE, allowNull: true, comment: '同步时间', }, syncedBy: { type: DataTypes.STRING, allowNull: true, references: { model: User, key: 'userId', }, comment: '同步人', }, syncedDeviceId: { type: DataTypes.STRING, allowNull: true, comment: '同步后生成的设备ID', }, remark: { type: DataTypes.TEXT, allowNull: true, comment: '备注', }, }, { tableName: 'pending_devices', timestamps: true, indexes: [ { fields: ['serialNumber'] }, { fields: ['status'] }, { fields: ['planId'] }, { fields: ['taskId'] }, { fields: ['createdBy'] }, { fields: ['roomId'] }, { fields: ['rackId'] }, ], } ); PendingDevice.belongsTo(User, { foreignKey: 'createdBy', as: 'Creator' }); PendingDevice.belongsTo(User, { foreignKey: 'syncedBy', as: 'Syncer' }); PendingDevice.belongsTo(InventoryPlan, { foreignKey: 'planId', as: 'Plan' }); PendingDevice.belongsTo(InventoryTask, { foreignKey: 'taskId', as: 'Task' }); PendingDevice.belongsTo(Room, { foreignKey: 'roomId', as: 'Room' }); PendingDevice.belongsTo(Rack, { foreignKey: 'rackId', as: 'Rack' }); module.exports = PendingDevice;