Files
zkxw/docs/sql/clear_biz_production_material_data.sql
T
2026-06-15 17:17:26 +08:00

137 lines
6.6 KiB
SQL
Raw 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.
-- ============================================================
-- 清空「生产物料库」界面相关业务表数据
--
-- 覆盖界面模块:
-- 1. 物料列表 → biz_production_material / biz_production_material_stock_batch
-- 2. 变动记录 → biz_production_material_usage
-- 3. 库存盘点 → biz_production_material_stock_check*
-- 4. 配制单 → biz_production_material_prep / biz_production_material_prep_line
-- 5. 我的物料领用记录 → biz_production_material_usage(按用户过滤,无独立表)
-- 6. 消耗明细 → biz_production_material_usage(prep 关联子记录,无独立表)
--
-- 附加:配置试剂配方 BOM → biz_production_material_formula
--
-- 用法(执行前请先备份):
-- SET @tenant_no = 'zkxw' COLLATE utf8mb4_unicode_ci; -- 仅清空指定租户
-- SET @tenant_no = NULL; -- 清空全部租户(生产环境慎用)
--
-- 说明:
-- - 本脚本为物理 DELETE,包含 del_flag=1 的软删数据
-- - 表间无数据库外键,按业务依赖顺序删除
-- - 生产任务步骤表可能仍保留 requisition_usage_id 快照引用(见文末可选清理)
-- ============================================================
-- 与 biz_production_material* 表 tenant_no 列排序规则一致,避免与 @tenant_no 比较时报 1267
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
SET @tenant_no = 'zkxw' COLLATE utf8mb4_unicode_ci;
START TRANSACTION;
-- ------------------------------------------------------------------
-- 1. 库存盘点(子表 → 主表)
-- ------------------------------------------------------------------
DELETE FROM `biz_production_material_stock_check_unused_line`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci);
DELETE FROM `biz_production_material_stock_check_batch_line`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci);
DELETE FROM `biz_production_material_stock_check`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci);
-- ------------------------------------------------------------------
-- 2. 配制单(明细 → 主表)
-- ------------------------------------------------------------------
DELETE FROM `biz_production_material_prep_line`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci);
DELETE FROM `biz_production_material_prep`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci);
-- ------------------------------------------------------------------
-- 3. 变动记录 / 领用记录 / 消耗明细(同一张表)
-- 含 parent_usage_id 自引用,整表删除即可
-- ------------------------------------------------------------------
DELETE FROM `biz_production_material_usage`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci);
-- ------------------------------------------------------------------
-- 4. 物料入库批次
-- ------------------------------------------------------------------
DELETE FROM `biz_production_material_stock_batch`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci);
-- ------------------------------------------------------------------
-- 5. 配置试剂配方 BOM
-- ------------------------------------------------------------------
DELETE FROM `biz_production_material_formula`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci);
-- ------------------------------------------------------------------
-- 6. 物料目录(主数据)
-- ------------------------------------------------------------------
DELETE FROM `biz_production_material`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci);
COMMIT;
-- ------------------------------------------------------------------
-- 可选:解除生产任务步骤中对已删领用记录的引用(默认注释,按需启用)
-- ------------------------------------------------------------------
-- START TRANSACTION;
-- UPDATE `biz_production_task_step_reagent`
-- SET `requisition_usage_id` = NULL, `update_time` = NOW()
-- WHERE `requisition_usage_id` IS NOT NULL
-- AND (@tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci));
--
-- UPDATE `biz_production_task_step_consumable`
-- SET `requisition_usage_id` = NULL, `update_time` = NOW()
-- WHERE `requisition_usage_id` IS NOT NULL
-- AND (@tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci));
--
-- UPDATE `biz_production_task_step_configured_reagent`
-- SET `requisition_usage_id` = NULL, `update_time` = NOW()
-- WHERE `requisition_usage_id` IS NOT NULL
-- AND (@tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci));
-- COMMIT;
-- ------------------------------------------------------------------
-- 校验:各表剩余行数(按 @tenant_no 过滤统计)
-- ------------------------------------------------------------------
SELECT 'biz_production_material_stock_check_unused_line' AS tbl,
COUNT(*) AS remain_cnt
FROM `biz_production_material_stock_check_unused_line`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci)
UNION ALL
SELECT 'biz_production_material_stock_check_batch_line', COUNT(*)
FROM `biz_production_material_stock_check_batch_line`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci)
UNION ALL
SELECT 'biz_production_material_stock_check', COUNT(*)
FROM `biz_production_material_stock_check`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci)
UNION ALL
SELECT 'biz_production_material_prep_line', COUNT(*)
FROM `biz_production_material_prep_line`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci)
UNION ALL
SELECT 'biz_production_material_prep', COUNT(*)
FROM `biz_production_material_prep`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci)
UNION ALL
SELECT 'biz_production_material_usage', COUNT(*)
FROM `biz_production_material_usage`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci)
UNION ALL
SELECT 'biz_production_material_stock_batch', COUNT(*)
FROM `biz_production_material_stock_batch`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci)
UNION ALL
SELECT 'biz_production_material_formula', COUNT(*)
FROM `biz_production_material_formula`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci)
UNION ALL
SELECT 'biz_production_material', COUNT(*)
FROM `biz_production_material`
WHERE @tenant_no IS NULL OR `tenant_no` = (@tenant_no COLLATE utf8mb4_unicode_ci);