feat: 添加耗材管理乐观锁机制
- 在 Consumable 模型中添加 version 字段用于乐观锁控制 - 为 quick-inout、inout、adjust 接口添加乐观锁和重试机制 - 修复 adjust/set 类型的负数库存校验 - 添加数据库迁移脚本支持 SQLite 和 MySQL - 防止并发操作导致的负库存问题 技术细节: - 使用 version 字段实现乐观锁,更新时校验版本号 - 并发冲突时自动重试(最多3次) - 409 状态码表示并发冲突,400 表示库存不足
This commit is contained in:
@@ -3,14 +3,18 @@
|
||||
* 为 consumables 表添加 version 字段
|
||||
*/
|
||||
|
||||
require('dotenv').config();
|
||||
const { sequelize, dbDialect } = require('../db');
|
||||
|
||||
// 从环境变量重新确定数据库类型
|
||||
const actualDbType = process.env.DB_TYPE || 'sqlite';
|
||||
|
||||
async function migrate() {
|
||||
try {
|
||||
console.log('开始执行耗材乐观锁迁移...');
|
||||
console.log('数据库类型:', dbDialect);
|
||||
console.log('数据库类型:', actualDbType);
|
||||
|
||||
if (dbDialect === 'sqlite') {
|
||||
if (actualDbType === 'sqlite') {
|
||||
// SQLite: 检查字段是否存在
|
||||
const tableInfo = await sequelize.query(
|
||||
"PRAGMA table_info(consumables)",
|
||||
@@ -47,7 +51,7 @@ async function migrate() {
|
||||
console.log('updatedAt 索引已存在,跳过');
|
||||
}
|
||||
|
||||
} else if (dbDialect === 'mysql') {
|
||||
} else if (actualDbType === 'mysql') {
|
||||
// MySQL: 检查并添加字段
|
||||
try {
|
||||
console.log('添加 version 字段...');
|
||||
|
||||
Reference in New Issue
Block a user