-- ============================================================================ -- 预警阈值语义调整脚本(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;