160 lines
9.3 KiB
SQL
160 lines
9.3 KiB
SQL
-- ==========================================================
|
||
-- 库房模块简化迁移
|
||
-- 目的:删除冗余表、修复乱码注释、补关键索引
|
||
-- 注意:所有 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;
|