Revert commits 5170c0a..4e8e8b8
This reverts 3 commit(s) from5170c0ato4e8e8b8. Reverted commits:4e8e8b8feat: 拉取最新仓库代码307528bfeat: 拉取最新仓库代码5170c0afeat: 拉取最新仓库代码 Co-authored-by: traeagent <traeagent@users.noreply.github.com>
This commit is contained in:
@@ -19,11 +19,8 @@ const Business = sequelize.define(
|
|||||||
allowNull: true,
|
allowNull: true,
|
||||||
},
|
},
|
||||||
status: {
|
status: {
|
||||||
type: DataTypes.STRING,
|
type: DataTypes.ENUM('active', 'offline'),
|
||||||
defaultValue: 'active',
|
defaultValue: 'active',
|
||||||
validate: {
|
|
||||||
isIn: [['active', 'offline']],
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
offlineDate: {
|
offlineDate: {
|
||||||
type: DataTypes.DATE,
|
type: DataTypes.DATE,
|
||||||
|
|||||||
@@ -25,11 +25,8 @@ const Warehouse = sequelize.define(
|
|||||||
defaultValue: 100,
|
defaultValue: 100,
|
||||||
},
|
},
|
||||||
status: {
|
status: {
|
||||||
type: DataTypes.STRING,
|
type: DataTypes.ENUM('active', 'inactive'),
|
||||||
defaultValue: 'active',
|
defaultValue: 'active',
|
||||||
validate: {
|
|
||||||
isIn: [['active', 'inactive']],
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
description: {
|
description: {
|
||||||
type: DataTypes.TEXT,
|
type: DataTypes.TEXT,
|
||||||
|
|||||||
@@ -227,29 +227,27 @@ async function initDatabase() {
|
|||||||
// 同步所有模型(按依赖顺序)
|
// 同步所有模型(按依赖顺序)
|
||||||
console.log('开始同步模型...');
|
console.log('开始同步模型...');
|
||||||
|
|
||||||
const alterOptions = process.env.DB_TYPE === 'mysql' ? { alter: true } : {};
|
|
||||||
|
|
||||||
// 基础模型
|
// 基础模型
|
||||||
await User.sync(alterOptions);
|
await User.sync({ alter: true });
|
||||||
await Room.sync(alterOptions);
|
await Room.sync({ alter: true });
|
||||||
await Rack.sync(alterOptions);
|
await Rack.sync({ alter: true });
|
||||||
await Device.sync(alterOptions);
|
await Device.sync({ alter: true });
|
||||||
await FaultCategory.sync(alterOptions);
|
await FaultCategory.sync({ alter: true });
|
||||||
|
|
||||||
// 耗材相关模型
|
// 耗材相关模型
|
||||||
await ConsumableCategory.sync(alterOptions);
|
await ConsumableCategory.sync({ alter: true });
|
||||||
await Consumable.sync(alterOptions);
|
await Consumable.sync({ alter: true });
|
||||||
await ConsumableLog.sync(alterOptions);
|
await ConsumableLog.sync({ alter: true });
|
||||||
await ConsumableRecord.sync(alterOptions);
|
await ConsumableRecord.sync({ alter: true });
|
||||||
await ConsumableLogArchive.sync(alterOptions);
|
await ConsumableLogArchive.sync({ alter: true });
|
||||||
|
|
||||||
// 盘点相关模型
|
// 盘点相关模型
|
||||||
await InventoryPlan.sync(alterOptions);
|
await InventoryPlan.sync({ alter: true });
|
||||||
await InventoryTask.sync(alterOptions);
|
await InventoryTask.sync({ alter: true });
|
||||||
await InventoryRecord.sync(alterOptions);
|
await InventoryRecord.sync({ alter: true });
|
||||||
|
|
||||||
// 系统设置
|
// 系统设置
|
||||||
await SystemSetting.sync(alterOptions);
|
await SystemSetting.sync({ alter: true });
|
||||||
|
|
||||||
console.log('数据库表结构同步完成');
|
console.log('数据库表结构同步完成');
|
||||||
|
|
||||||
|
|||||||
@@ -724,7 +724,7 @@ async function migrateIdleDeviceAndBusiness() {
|
|||||||
},
|
},
|
||||||
name: { type: sequelize.Sequelize.STRING, allowNull: false },
|
name: { type: sequelize.Sequelize.STRING, allowNull: false },
|
||||||
description: { type: sequelize.Sequelize.TEXT },
|
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 },
|
offlineDate: { type: sequelize.Sequelize.DATE },
|
||||||
offlineReason: { type: sequelize.Sequelize.STRING },
|
offlineReason: { type: sequelize.Sequelize.STRING },
|
||||||
createdAt: { type: sequelize.Sequelize.DATE, allowNull: false },
|
createdAt: { type: sequelize.Sequelize.DATE, allowNull: false },
|
||||||
@@ -746,7 +746,7 @@ async function migrateIdleDeviceAndBusiness() {
|
|||||||
name: { type: sequelize.Sequelize.STRING, allowNull: false },
|
name: { type: sequelize.Sequelize.STRING, allowNull: false },
|
||||||
location: { type: sequelize.Sequelize.STRING },
|
location: { type: sequelize.Sequelize.STRING },
|
||||||
capacity: { type: sequelize.Sequelize.INTEGER, defaultValue: 100 },
|
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 },
|
description: { type: sequelize.Sequelize.TEXT },
|
||||||
createdAt: { type: sequelize.Sequelize.DATE, allowNull: false },
|
createdAt: { type: sequelize.Sequelize.DATE, allowNull: false },
|
||||||
updatedAt: { 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) {
|
for (const idx of indexesToCreate) {
|
||||||
console.log(` → 为 ${tableName} 表添加复合索引 ${idx.name}...`);
|
console.log(` → 为 ${tableName} 表添加复合索引 ${idx.name}...`);
|
||||||
try {
|
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}`, {
|
const existingIndexes = await sequelize.query(`SHOW INDEX FROM ${tableName}`, {
|
||||||
type: sequelize.QueryTypes.SELECT,
|
type: sequelize.QueryTypes.SELECT,
|
||||||
});
|
});
|
||||||
indexExists = existingIndexes.some(existing => existing.Key_name === idx.name);
|
const indexExists = existingIndexes.some(existing => existing.Key_name === idx.name);
|
||||||
}
|
|
||||||
|
|
||||||
if (indexExists) {
|
if (indexExists) {
|
||||||
console.log(' → 索引已存在,跳过');
|
console.log(' → 索引已存在,跳过');
|
||||||
|
|||||||
+13
-7
@@ -6,7 +6,7 @@ ensureJwtSecret();
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const cors = require('cors');
|
const cors = require('cors');
|
||||||
const fileUpload = require('express-fileupload');
|
const fileUpload = require('express-fileupload');
|
||||||
const { sequelize, dbDialect } = require('./db');
|
const { sequelize } = require('./db');
|
||||||
const { FILE_UPLOAD } = require('./config');
|
const { FILE_UPLOAD } = require('./config');
|
||||||
const { generateId } = require('./utils/idGenerator');
|
const { generateId } = require('./utils/idGenerator');
|
||||||
const logger = require('./utils/logger').module('Server');
|
const logger = require('./utils/logger').module('Server');
|
||||||
@@ -96,12 +96,18 @@ async function syncBusinessModels() {
|
|||||||
const DeviceBusiness = require('./models/DeviceBusiness');
|
const DeviceBusiness = require('./models/DeviceBusiness');
|
||||||
const Warehouse = require('./models/Warehouse');
|
const Warehouse = require('./models/Warehouse');
|
||||||
|
|
||||||
const alterOptions = dbDialect === 'mysql' ? { alter: true } : {};
|
// 仅在开发环境使用 sync({ alter: true }),生产环境应使用 migrations
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
await Business.sync(alterOptions);
|
await Business.sync({ alter: true });
|
||||||
await DeviceBusiness.sync(alterOptions);
|
await DeviceBusiness.sync({ alter: true });
|
||||||
await Warehouse.sync(alterOptions);
|
await Warehouse.sync({ alter: true });
|
||||||
logger.info(`业务/设备关联/库房模型同步完成(${dbDialect}${dbDialect === 'mysql' ? ' alter mode' : ''})`);
|
logger.info('业务/设备关联/库房模型同步完成(alter mode)');
|
||||||
|
} else {
|
||||||
|
await Business.sync();
|
||||||
|
await DeviceBusiness.sync();
|
||||||
|
await Warehouse.sync();
|
||||||
|
logger.info('业务/设备关联/库房模型同步完成(safe mode)');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function initDefaultSystemSettings() {
|
async function initDefaultSystemSettings() {
|
||||||
|
|||||||
Reference in New Issue
Block a user