Browse Source

fix(backend): 迁移173 创建库存管理4张表(inventory_transactions/counting_records/inbound_orders/inbound_items)+ 同步schema.sql

Xiaogang Liao 1 month ago
parent
commit
ba6766ef89

+ 64 - 0
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -7763,5 +7763,69 @@ private void runMigration100() {
 
 		// 迁移172: products 添加 min_stock_alert 列(库存预警阈值,配合库存管理模块)
 		ensureColumn("products", "min_stock_alert", "INT DEFAULT 0 COMMENT '库存预警阈值(低于此值预警)'");
+
+		// 迁移173: 创建库存管理4张表(inventory_transactions/counting_records/inbound_orders/inbound_items)
+		try {
+			jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS inventory_transactions (" +
+					"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+					"product_id BIGINT COMMENT '商品ID', " +
+					"sku_id BIGINT COMMENT 'SKU ID', " +
+					"type VARCHAR(32) COMMENT '交易类型: INBOUND/OUTBOUND/ADJUSTMENT/TRANSFER/COUNT', " +
+					"direction TINYINT COMMENT '方向: 1=入库, -1=出库', " +
+					"quantity INT NOT NULL COMMENT '数量', " +
+					"before_stock INT COMMENT '操作前库存', " +
+					"after_stock INT COMMENT '操作后库存', " +
+					"reference_type VARCHAR(32) COMMENT '关联业务类型', " +
+					"reference_id BIGINT COMMENT '关联业务ID', " +
+					"operator_id BIGINT COMMENT '操作人ID', " +
+					"remark TEXT COMMENT '备注', " +
+					"created_at DATETIME DEFAULT CURRENT_TIMESTAMP " +
+					") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存交易流水表'");
+			log.info("已创建inventory_transactions表");
+		} catch (Exception e) { /* 表已存在,忽略 */ }
+
+		try {
+			jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS inventory_counting_records (" +
+					"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+					"product_id BIGINT COMMENT '商品ID', " +
+					"sku_id BIGINT COMMENT 'SKU ID', " +
+					"expected_stock INT COMMENT '账面库存', " +
+					"actual_stock INT COMMENT '实际库存', " +
+					"difference INT COMMENT '差异', " +
+					"status VARCHAR(16) DEFAULT 'pending' COMMENT '状态', " +
+					"operator_id BIGINT COMMENT '盘点人ID', " +
+					"remark TEXT COMMENT '备注', " +
+					"created_at DATETIME DEFAULT CURRENT_TIMESTAMP " +
+					") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存盘点记录表'");
+			log.info("已创建inventory_counting_records表");
+		} catch (Exception e) { /* 表已存在,忽略 */ }
+
+		try {
+			jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS inventory_inbound_orders (" +
+					"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+					"order_no VARCHAR(64) NOT NULL COMMENT '入库单号', " +
+					"supplier_id BIGINT COMMENT '供应商ID', " +
+					"supplier_name VARCHAR(100) COMMENT '供应商名称', " +
+					"status VARCHAR(16) DEFAULT 'pending' COMMENT '状态', " +
+					"total_items INT DEFAULT 0 COMMENT '商品种类数', " +
+					"operator_id BIGINT COMMENT '操作人ID', " +
+					"remark TEXT COMMENT '备注', " +
+					"created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+					"updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP " +
+					") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存入库单表'");
+			log.info("已创建inventory_inbound_orders表");
+		} catch (Exception e) { /* 表已存在,忽略 */ }
+
+		try {
+			jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS inventory_inbound_items (" +
+					"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+					"inbound_order_id BIGINT NOT NULL COMMENT '入库单ID', " +
+					"product_id BIGINT NOT NULL COMMENT '商品ID', " +
+					"sku_id BIGINT COMMENT 'SKU ID', " +
+					"quantity INT NOT NULL COMMENT '入库数量', " +
+					"created_at DATETIME DEFAULT CURRENT_TIMESTAMP " +
+					") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存入库明细表'");
+			log.info("已创建inventory_inbound_items表");
+		} catch (Exception e) { /* 表已存在,忽略 */ }
 	}
 }

+ 55 - 0
cfc-backend/src/main/resources/schema.sql

@@ -1102,6 +1102,61 @@ CREATE TABLE IF NOT EXISTS products (
     updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
 
+-- 库存交易流水表
+CREATE TABLE IF NOT EXISTS inventory_transactions (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    product_id BIGINT COMMENT '商品ID',
+    sku_id BIGINT COMMENT 'SKU ID',
+    type VARCHAR(32) COMMENT '交易类型: INBOUND/OUTBOUND/ADJUSTMENT/TRANSFER/COUNT',
+    direction TINYINT COMMENT '方向: 1=入库, -1=出库',
+    quantity INT NOT NULL COMMENT '数量',
+    before_stock INT COMMENT '操作前库存',
+    after_stock INT COMMENT '操作后库存',
+    reference_type VARCHAR(32) COMMENT '关联业务类型',
+    reference_id BIGINT COMMENT '关联业务ID',
+    operator_id BIGINT COMMENT '操作人ID',
+    remark TEXT COMMENT '备注',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存交易流水表';
+
+-- 库存盘点记录表
+CREATE TABLE IF NOT EXISTS inventory_counting_records (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    product_id BIGINT COMMENT '商品ID',
+    sku_id BIGINT COMMENT 'SKU ID',
+    expected_stock INT COMMENT '账面库存',
+    actual_stock INT COMMENT '实际库存',
+    difference INT COMMENT '差异',
+    status VARCHAR(16) DEFAULT 'pending' COMMENT '状态',
+    operator_id BIGINT COMMENT '盘点人ID',
+    remark TEXT COMMENT '备注',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存盘点记录表';
+
+-- 库存入库单表
+CREATE TABLE IF NOT EXISTS inventory_inbound_orders (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    order_no VARCHAR(64) NOT NULL COMMENT '入库单号',
+    supplier_id BIGINT COMMENT '供应商ID',
+    supplier_name VARCHAR(100) COMMENT '供应商名称',
+    status VARCHAR(16) DEFAULT 'pending' COMMENT '状态',
+    total_items INT DEFAULT 0 COMMENT '商品种类数',
+    operator_id BIGINT COMMENT '操作人ID',
+    remark TEXT COMMENT '备注',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存入库单表';
+
+-- 库存入库明细表
+CREATE TABLE IF NOT EXISTS inventory_inbound_items (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    inbound_order_id BIGINT NOT NULL COMMENT '入库单ID',
+    product_id BIGINT NOT NULL COMMENT '商品ID',
+    sku_id BIGINT COMMENT 'SKU ID',
+    quantity INT NOT NULL COMMENT '入库数量',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存入库明细表';
+
 -- 商品规格SKU表(product_skus)
 CREATE TABLE IF NOT EXISTS product_skus (
     id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',