material_manage_system/scripts/update_warning_stock_zero.sql
2026-09-20 10:31:28 +08:00

46 lines
2.4 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.

-- ============================================================================
-- 预警阈值语义调整脚本(stock_warning_rules)
--
-- 用途:清理历史遗留的 minimum_available = 0 的预警规则行。
--
-- 背景:旧版判定规则是「参与预警 = 启用 AND 阈值 > 0」,阈值为 0 的行被 HAVING 条件
-- 完全屏蔽,从来没有生效过。正因为它们一直是沉默的,无法从数据上区分"当年故意
-- 设成 0"和"入库表单预填逻辑误写 0"。
-- 新版把 0 定为合法的预警值(含义是"库存降到 0 时预警"),这批行会在升级后
-- 立刻开始报警。因此一并删除,让它们回到"从未配置"(不预警)的状态——这与
-- 升级前的实际行为一致。
--
-- !! 破坏性操作,执行前请务必备份数据库 !!
--
-- 字符集:统一 utf8mb4。脚本开头 SET NAMES utf8mb4 确保中文正确落库,
-- 不依赖客户端默认字符集。
-- 幂等性:可重复执行(删除条件固定,清空后再执行不会影响任何行)。
--
-- 执行方式:
-- mysql -uroot -p --default-character-set=utf8mb4 wmms < scripts/update_warning_stock_zero.sql
-- ============================================================================
SET NAMES utf8mb4;
-- ---------------------------------------------------------------------------
-- 1. 执行前先看看要删掉哪些行
-- 如果结果里有你确实想保留的物料,请先手工把它的阈值改成大于 0 的值。
-- ---------------------------------------------------------------------------
SELECT id, organization_id, warehouse_id, material_id, minimum_available, enabled, updated_at
FROM stock_warning_rules
WHERE minimum_available = 0;
-- ---------------------------------------------------------------------------
-- 2. 删除阈值为 0 的历史规则
-- enabled 是 TRUE 还是 FALSE 都要删:前者是"沉默的启用"(升级后会突然报警),
-- 后者本就等同于"从未配置"。
-- ---------------------------------------------------------------------------
DELETE FROM stock_warning_rules WHERE minimum_available = 0;
-- ---------------------------------------------------------------------------
-- 3. 确认清空,结果应为 0
-- ---------------------------------------------------------------------------
SELECT COUNT(*) AS remaining_zero_threshold_rules
FROM stock_warning_rules
WHERE minimum_available = 0;