const { DataTypes } = require('sequelize'); const { sequelize } = require('../db'); const ConsumableLog = sequelize.define( 'ConsumableLog', { id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, }, consumableId: { type: DataTypes.STRING, allowNull: false, comment: '耗材ID', }, consumableName: { type: DataTypes.STRING, allowNull: false, comment: '耗材名称', }, operationType: { type: DataTypes.ENUM('in', 'out', 'create', 'update', 'delete', 'adjust', 'import'), allowNull: false, comment: '操作类型', }, quantity: { type: DataTypes.INTEGER, defaultValue: 0, comment: '变动数量(入库为正,出库为负)', }, previousStock: { type: DataTypes.INTEGER, allowNull: false, comment: '操作前库存', }, currentStock: { type: DataTypes.INTEGER, allowNull: false, comment: '操作后库存', }, operator: { type: DataTypes.STRING, comment: '操作人', }, reason: { type: DataTypes.STRING, comment: '操作原因', }, notes: { type: DataTypes.TEXT, comment: '备注', }, relatedId: { type: DataTypes.STRING, comment: '关联ID(如订单号、盘点ID等)', }, isEditable: { type: DataTypes.BOOLEAN, defaultValue: true, comment: '是否可编辑(创建、导入的记录可编辑,系统生成的出入库记录不可编辑)', }, originalLogId: { type: DataTypes.INTEGER, allowNull: true, comment: '原始日志ID(用于追踪修改历史链)', }, modifiedBy: { type: DataTypes.STRING, allowNull: true, comment: '修改人', }, modifiedAt: { type: DataTypes.DATE, allowNull: true, comment: '修改时间', }, modificationReason: { type: DataTypes.STRING, allowNull: true, comment: '修改原因', }, isConsumableDeleted: { type: DataTypes.BOOLEAN, defaultValue: false, comment: '关联耗材是否已被删除', }, consumableSnapshot: { type: DataTypes.JSON, allowNull: true, comment: '耗材快照信息(分类、单位、供应商等),用于耗材删除后追溯', }, snList: { type: DataTypes.JSON, allowNull: true, defaultValue: [], comment: '本次操作的SN序列号列表', }, deviceId: { type: DataTypes.STRING, allowNull: true, comment: '目标设备ID(出库时关联)', }, deviceName: { type: DataTypes.STRING, allowNull: true, comment: '目标设备名称', }, rackId: { type: DataTypes.STRING, allowNull: true, comment: '机柜ID', }, rackName: { type: DataTypes.STRING, allowNull: true, comment: '机柜名称', }, roomId: { type: DataTypes.STRING, allowNull: true, comment: '机房ID', }, roomName: { type: DataTypes.STRING, allowNull: true, comment: '机房名称', }, lastNameSyncAt: { type: DataTypes.DATE, allowNull: true, comment: '名称最后同步时间(名称变更时更新)', }, }, { tableName: 'consumable_logs', timestamps: true, comment: '耗材操作日志表', indexes: [ { fields: ['consumableId'] }, { fields: ['operationType'] }, { fields: ['createdAt'] }, { fields: ['consumableId', 'createdAt'] }, { fields: ['originalLogId'] }, { fields: ['isEditable'] }, { fields: ['isConsumableDeleted'] }, { fields: ['deviceId'] }, ], } ); module.exports = ConsumableLog;