Files
fad_oa/sql/warehouse_simplify_migration.sql
2026-05-29 19:52:32 +08:00

160 lines
9.3 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ==========================================================
-- 库房模块简化迁移
-- 目的:删除冗余表、修复乱码注释、补关键索引
-- 注意:所有 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 '所属单据IDsys_oa_warehouse_master',
MODIFY COLUMN `warehouse_id` bigint NOT NULL COMMENT '物料IDsys_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 '父任务IDtask 派生明细使用)',
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;