-- ========================================================== -- 库房模块简化迁移 -- 目的:删除冗余表、修复乱码注释、补关键索引 -- 注意:所有 ALTER 在 MySQL 8 上为 in-place / instant,业务低峰执行 -- ========================================================== -- 强烈建议执行前做一次备份: -- mysqldump -uroot -p fad_oa_dev \ -- sys_oa_warehouse sys_oa_warehouse_master sys_oa_warehouse_detail \ -- sys_oa_warehouse_task sys_oa_warehouse_log sys_oa_warehouse_request \ -- > warehouse_backup_$(date +%Y%m%d).sql -- ========================================================== -- ---------------------------------------------------------- -- 1. 删除完全未使用的表 -- ---------------------------------------------------------- -- request 表 0 行,前端没接入,确认废弃 -- ---------------------------------------------------------- -- 2. 修复字段注释(数据库中是 ? 乱码,重新设置为可读中文) -- ---------------------------------------------------------- -- 2.1 sys_oa_warehouse 物料档案 / 实时库存 ALTER TABLE `sys_oa_warehouse` MODIFY COLUMN `id` bigint NOT NULL AUTO_INCREMENT COMMENT '物料ID', MODIFY COLUMN `inventory` bigint DEFAULT NULL COMMENT '当前库存数量', MODIFY COLUMN `model` varchar(50) DEFAULT NULL COMMENT '型号', MODIFY COLUMN `price` decimal(18,2) DEFAULT '0.00' COMMENT '加权平均单价', MODIFY COLUMN `unit` varchar(5) DEFAULT NULL COMMENT '单位', MODIFY COLUMN `name` varchar(50) DEFAULT NULL COMMENT '物料名称', MODIFY COLUMN `brand` varchar(200) DEFAULT NULL COMMENT '品牌', MODIFY COLUMN `specifications` varchar(125) DEFAULT NULL COMMENT '规格', MODIFY COLUMN `remark` varchar(500) DEFAULT NULL COMMENT '备注', MODIFY COLUMN `create_time` datetime DEFAULT NULL COMMENT '创建时间', MODIFY COLUMN `create_by` varchar(50) DEFAULT NULL COMMENT '创建人', MODIFY COLUMN `update_time` datetime DEFAULT NULL COMMENT '更新时间', MODIFY COLUMN `update_by` varchar(50) DEFAULT NULL COMMENT '更新人', MODIFY COLUMN `del_flag` tinyint DEFAULT '0' COMMENT '删除标志(0=正常 2=删除)', MODIFY COLUMN `threshold` bigint NOT NULL DEFAULT '5' COMMENT '库存预警阈值', COMMENT = '物料档案/实时库存'; -- 2.2 sys_oa_warehouse_master 出入库单据头 ALTER TABLE `sys_oa_warehouse_master` MODIFY COLUMN `master_id` bigint NOT NULL AUTO_INCREMENT COMMENT '单据ID', MODIFY COLUMN `master_num` varchar(296) DEFAULT NULL COMMENT '单据编号', MODIFY COLUMN `type` int DEFAULT NULL COMMENT '类型(0=出库 1=入库 2=归还)', MODIFY COLUMN `project_id` bigint DEFAULT NULL COMMENT '关联项目ID', MODIFY COLUMN `requirement_id` bigint DEFAULT NULL COMMENT '关联需求ID', MODIFY COLUMN `sign_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '签收/操作时间', MODIFY COLUMN `sign_user` varchar(20) DEFAULT NULL COMMENT '签收人', MODIFY COLUMN `is_like` int DEFAULT '0' COMMENT '是否收藏(0=否 1=是)', MODIFY COLUMN `status` int DEFAULT '0' COMMENT '单据状态', MODIFY COLUMN `return_type` int DEFAULT '0' COMMENT '归还类型(0=否 1=部分归还)', MODIFY COLUMN `withdraw_lock` tinyint NOT NULL DEFAULT '0' COMMENT '撤回锁定(1=锁定)', MODIFY COLUMN `remark` varchar(500) DEFAULT NULL COMMENT '备注', MODIFY COLUMN `del_flag` tinyint NOT NULL DEFAULT '0' COMMENT '删除标志', COMMENT = '出入库单据头'; -- 2.3 sys_oa_warehouse_detail 出入库单据行 ALTER TABLE `sys_oa_warehouse_detail` MODIFY COLUMN `id` bigint NOT NULL AUTO_INCREMENT COMMENT '明细ID', MODIFY COLUMN `master_id` bigint DEFAULT NULL COMMENT '所属单据ID(sys_oa_warehouse_master)', MODIFY COLUMN `warehouse_id` bigint NOT NULL COMMENT '物料ID(sys_oa_warehouse)', MODIFY COLUMN `amount` bigint DEFAULT NULL COMMENT '本次出入库数量', MODIFY COLUMN `sign_price` decimal(18,2) DEFAULT '0.00' COMMENT '签收单价', MODIFY COLUMN `project_id` bigint DEFAULT NULL COMMENT '所属项目ID', MODIFY COLUMN `father_id` bigint DEFAULT NULL COMMENT '父任务ID(task 派生明细使用)', MODIFY COLUMN `remark` varchar(255) DEFAULT NULL COMMENT '备注', MODIFY COLUMN `del_flag` tinyint(1) DEFAULT '0' COMMENT '删除标志', COMMENT = '出入库单据行'; -- 2.4 sys_oa_warehouse_task 库房任务(采购/补货) ALTER TABLE `sys_oa_warehouse_task` MODIFY COLUMN `task_id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID', MODIFY COLUMN `master_id` bigint DEFAULT NULL COMMENT '完成后写回的单据ID', MODIFY COLUMN `warehouse_id` bigint DEFAULT NULL COMMENT '关联物料ID(新采购可空)', MODIFY COLUMN `name` varchar(50) DEFAULT NULL COMMENT '物料名称(快照)', MODIFY COLUMN `model` varchar(20) DEFAULT NULL COMMENT '型号', MODIFY COLUMN `brand` varchar(20) DEFAULT NULL COMMENT '品牌', MODIFY COLUMN `specifications` varchar(40) DEFAULT NULL COMMENT '规格', MODIFY COLUMN `unit` varchar(50) DEFAULT NULL COMMENT '单位', MODIFY COLUMN `task_inventory` int DEFAULT NULL COMMENT '任务数量(采购量/补货量)', MODIFY COLUMN `task_status` int DEFAULT '0' COMMENT '任务状态(0=待处理 1=进行中 2=完成 3=取消)', MODIFY COLUMN `end_time` datetime DEFAULT NULL COMMENT '期望完成时间', MODIFY COLUMN `remark` varchar(500) DEFAULT NULL COMMENT '备注', MODIFY COLUMN `del_flag` int DEFAULT '0' COMMENT '删除标志', COMMENT = '库房任务(采购/补货)'; -- 2.5 sys_oa_warehouse_log 库房操作日志 ALTER TABLE `sys_oa_warehouse_log` MODIFY COLUMN `log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志ID', MODIFY COLUMN `master_id` bigint DEFAULT NULL COMMENT '关联单据ID', MODIFY COLUMN `warehouse_id` bigint DEFAULT NULL COMMENT '关联物料ID', MODIFY COLUMN `num` int DEFAULT NULL COMMENT '变更数量', MODIFY COLUMN `del_flag` int NOT NULL DEFAULT '0' COMMENT '删除标志', COMMENT = '库房操作日志'; -- ---------------------------------------------------------- -- 3. 补关键索引(之前所有表只有主键,查询慢的根因) -- ---------------------------------------------------------- -- master 单据头:按项目、状态、类型查 ALTER TABLE `sys_oa_warehouse_master` ADD INDEX `idx_project_id` (`project_id`), ADD INDEX `idx_type_status` (`type`, `status`), ADD INDEX `idx_sign_time` (`sign_time`); -- detail 单据行:按单据、物料、项目查(最高频) ALTER TABLE `sys_oa_warehouse_detail` ADD INDEX `idx_master_id` (`master_id`), ADD INDEX `idx_warehouse_id` (`warehouse_id`), ADD INDEX `idx_project_id` (`project_id`); -- warehouse 物料:按名称、型号搜 ALTER TABLE `sys_oa_warehouse` ADD INDEX `idx_name` (`name`), ADD INDEX `idx_model` (`model`), ADD INDEX `idx_del_flag` (`del_flag`); -- task 任务:按状态、物料、单据 ALTER TABLE `sys_oa_warehouse_task` ADD INDEX `idx_task_status` (`task_status`), ADD INDEX `idx_warehouse_id` (`warehouse_id`), ADD INDEX `idx_master_id` (`master_id`); -- log:按单据、物料查 ALTER TABLE `sys_oa_warehouse_log` ADD INDEX `idx_master_id` (`master_id`), ADD INDEX `idx_warehouse_id` (`warehouse_id`); -- ---------------------------------------------------------- -- 4. 数据健康检查(运行后看看) -- ---------------------------------------------------------- -- 4.1 库存为负数的物料(数据错乱) SELECT id, name, model, inventory FROM sys_oa_warehouse WHERE del_flag = 0 AND inventory < 0; -- 4.2 detail 指向已删除/不存在物料的孤儿行 SELECT d.id, d.master_id, d.warehouse_id FROM sys_oa_warehouse_detail d LEFT JOIN sys_oa_warehouse w ON w.id = d.warehouse_id WHERE w.id IS NULL AND d.del_flag = 0 LIMIT 50; -- 4.3 detail 指向已删除/不存在单据的孤儿行 SELECT d.id, d.master_id FROM sys_oa_warehouse_detail d LEFT JOIN sys_oa_warehouse_master m ON m.master_id = d.master_id WHERE m.master_id IS NULL AND d.del_flag = 0 LIMIT 50; -- 4.4 task 中超过 90 天还在进行中的(疑似遗留) SELECT task_id, name, task_status, create_time FROM sys_oa_warehouse_task WHERE task_status IN (0, 1) AND create_time < DATE_SUB(NOW(), INTERVAL 90 DAY) AND del_flag = 0;