From 9c0fd0b3ff123cbea59a53ac4880976859c1a88a Mon Sep 17 00:00:00 2001 From: gituib Date: Wed, 6 May 2026 03:27:51 +0000 Subject: [PATCH] Revert commits 5170c0a..4e8e8b8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts 3 commit(s) from 5170c0a to 4e8e8b8. Reverted commits: 4e8e8b8 feat: 拉取最新仓库代码 307528b feat: 拉取最新仓库代码 5170c0a feat: 拉取最新仓库代码 Co-authored-by: traeagent --- backend/models/Business.js | 5 +---- backend/models/Warehouse.js | 5 +---- backend/scripts/init-database.js | 30 ++++++++++++++---------------- backend/scripts/migrate-all.js | 22 ++++++---------------- backend/server.js | 20 +++++++++++++------- 5 files changed, 35 insertions(+), 47 deletions(-) diff --git a/backend/models/Business.js b/backend/models/Business.js index 0a63840..602f6f5 100644 --- a/backend/models/Business.js +++ b/backend/models/Business.js @@ -19,11 +19,8 @@ const Business = sequelize.define( allowNull: true, }, status: { - type: DataTypes.STRING, + type: DataTypes.ENUM('active', 'offline'), defaultValue: 'active', - validate: { - isIn: [['active', 'offline']], - }, }, offlineDate: { type: DataTypes.DATE, diff --git a/backend/models/Warehouse.js b/backend/models/Warehouse.js index 4b04808..35e81d6 100644 --- a/backend/models/Warehouse.js +++ b/backend/models/Warehouse.js @@ -25,11 +25,8 @@ const Warehouse = sequelize.define( defaultValue: 100, }, status: { - type: DataTypes.STRING, + type: DataTypes.ENUM('active', 'inactive'), defaultValue: 'active', - validate: { - isIn: [['active', 'inactive']], - }, }, description: { type: DataTypes.TEXT, diff --git a/backend/scripts/init-database.js b/backend/scripts/init-database.js index c767cdf..347a0be 100644 --- a/backend/scripts/init-database.js +++ b/backend/scripts/init-database.js @@ -227,29 +227,27 @@ async function initDatabase() { // 同步所有模型(按依赖顺序) console.log('开始同步模型...'); - const alterOptions = process.env.DB_TYPE === 'mysql' ? { alter: true } : {}; - // 基础模型 - await User.sync(alterOptions); - await Room.sync(alterOptions); - await Rack.sync(alterOptions); - await Device.sync(alterOptions); - await FaultCategory.sync(alterOptions); + await User.sync({ alter: true }); + await Room.sync({ alter: true }); + await Rack.sync({ alter: true }); + await Device.sync({ alter: true }); + await FaultCategory.sync({ alter: true }); // 耗材相关模型 - await ConsumableCategory.sync(alterOptions); - await Consumable.sync(alterOptions); - await ConsumableLog.sync(alterOptions); - await ConsumableRecord.sync(alterOptions); - await ConsumableLogArchive.sync(alterOptions); + await ConsumableCategory.sync({ alter: true }); + await Consumable.sync({ alter: true }); + await ConsumableLog.sync({ alter: true }); + await ConsumableRecord.sync({ alter: true }); + await ConsumableLogArchive.sync({ alter: true }); // 盘点相关模型 - await InventoryPlan.sync(alterOptions); - await InventoryTask.sync(alterOptions); - await InventoryRecord.sync(alterOptions); + await InventoryPlan.sync({ alter: true }); + await InventoryTask.sync({ alter: true }); + await InventoryRecord.sync({ alter: true }); // 系统设置 - await SystemSetting.sync(alterOptions); + await SystemSetting.sync({ alter: true }); console.log('数据库表结构同步完成'); diff --git a/backend/scripts/migrate-all.js b/backend/scripts/migrate-all.js index c5a8f91..aa51746 100644 --- a/backend/scripts/migrate-all.js +++ b/backend/scripts/migrate-all.js @@ -724,7 +724,7 @@ async function migrateIdleDeviceAndBusiness() { }, name: { type: sequelize.Sequelize.STRING, allowNull: false }, description: { type: sequelize.Sequelize.TEXT }, - status: { type: sequelize.Sequelize.STRING, defaultValue: 'active' }, + status: { type: sequelize.Sequelize.ENUM('active', 'offline'), defaultValue: 'active' }, offlineDate: { type: sequelize.Sequelize.DATE }, offlineReason: { type: sequelize.Sequelize.STRING }, createdAt: { type: sequelize.Sequelize.DATE, allowNull: false }, @@ -746,7 +746,7 @@ async function migrateIdleDeviceAndBusiness() { name: { type: sequelize.Sequelize.STRING, allowNull: false }, location: { type: sequelize.Sequelize.STRING }, capacity: { type: sequelize.Sequelize.INTEGER, defaultValue: 100 }, - status: { type: sequelize.Sequelize.STRING, defaultValue: 'active' }, + status: { type: sequelize.Sequelize.ENUM('active', 'inactive'), defaultValue: 'active' }, description: { type: sequelize.Sequelize.TEXT }, createdAt: { type: sequelize.Sequelize.DATE, allowNull: false }, updatedAt: { type: sequelize.Sequelize.DATE, allowNull: false }, @@ -803,20 +803,10 @@ async function migrateDevicePositionIndexes() { for (const idx of indexesToCreate) { console.log(` → 为 ${tableName} 表添加复合索引 ${idx.name}...`); try { - let indexExists = false; - - if (dialect === 'sqlite') { - const indexList = await sequelize.query( - `SELECT name FROM sqlite_master WHERE type='index' AND name=?`, - { replacements: [idx.name], type: sequelize.QueryTypes.SELECT } - ); - indexExists = indexList.length > 0; - } else { - const existingIndexes = await sequelize.query(`SHOW INDEX FROM ${tableName}`, { - type: sequelize.QueryTypes.SELECT, - }); - indexExists = existingIndexes.some(existing => existing.Key_name === idx.name); - } + const existingIndexes = await sequelize.query(`SHOW INDEX FROM ${tableName}`, { + type: sequelize.QueryTypes.SELECT, + }); + const indexExists = existingIndexes.some(existing => existing.Key_name === idx.name); if (indexExists) { console.log(' → 索引已存在,跳过'); diff --git a/backend/server.js b/backend/server.js index ef3ab31..36d5164 100644 --- a/backend/server.js +++ b/backend/server.js @@ -6,7 +6,7 @@ ensureJwtSecret(); const express = require('express'); const cors = require('cors'); const fileUpload = require('express-fileupload'); -const { sequelize, dbDialect } = require('./db'); +const { sequelize } = require('./db'); const { FILE_UPLOAD } = require('./config'); const { generateId } = require('./utils/idGenerator'); const logger = require('./utils/logger').module('Server'); @@ -96,12 +96,18 @@ async function syncBusinessModels() { const DeviceBusiness = require('./models/DeviceBusiness'); const Warehouse = require('./models/Warehouse'); - const alterOptions = dbDialect === 'mysql' ? { alter: true } : {}; - - await Business.sync(alterOptions); - await DeviceBusiness.sync(alterOptions); - await Warehouse.sync(alterOptions); - logger.info(`业务/设备关联/库房模型同步完成(${dbDialect}${dbDialect === 'mysql' ? ' alter mode' : ''})`); + // 仅在开发环境使用 sync({ alter: true }),生产环境应使用 migrations + if (process.env.NODE_ENV !== 'production') { + await Business.sync({ alter: true }); + await DeviceBusiness.sync({ alter: true }); + await Warehouse.sync({ alter: true }); + logger.info('业务/设备关联/库房模型同步完成(alter mode)'); + } else { + await Business.sync(); + await DeviceBusiness.sync(); + await Warehouse.sync(); + logger.info('业务/设备关联/库房模型同步完成(safe mode)'); + } } async function initDefaultSystemSettings() {