|
|
@@ -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) { /* 表已存在,忽略 */ }
|
|
|
}
|
|
|
}
|