-- ============================================
-- 兴万达MES系统改进 - 库存预警功能
-- 创建时间：2025-10-17
-- ============================================
-- 
-- 本脚本包含库存预警功能的数据库变更：
-- 1. 创建库存预警配置表
-- 2. 创建菜单及权限配置
-- 
-- 执行前请备份数据库！
-- ============================================

-- ============================================
-- 1. 创建库存预警配置表
-- ============================================
CREATE TABLE IF NOT EXISTS `wm_inventory_alert` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `material_id` BIGINT NOT NULL COMMENT '物料ID',
  `material_number` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '物料编号（冗余字段）',
  `material_name` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '物料名称（冗余字段）',
  `specification` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '规格型号（冗余字段）',
  `warehouse_id` BIGINT DEFAULT NULL COMMENT '仓库ID（NULL表示所有仓库）',
  `warehouse_name` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '仓库名称（冗余字段）',
  `max_quantity` DECIMAL(15,2) DEFAULT NULL COMMENT '库存上限数量',
  `min_quantity` DECIMAL(15,2) DEFAULT NULL COMMENT '库存下限数量',
  `status` CHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '状态（0启用 1停用）',
  `remark` VARCHAR(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '备注',
  `create_by` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '创建者',
  `create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
  `update_by` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '更新者',
  `update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  INDEX `idx_material_id` (`material_id`) USING BTREE,
  INDEX `idx_warehouse_id` (`warehouse_id`) USING BTREE,
  INDEX `idx_status` (`status`) USING BTREE,
  UNIQUE INDEX `uk_material_warehouse` (`material_id`, `warehouse_id`) USING BTREE COMMENT '同一物料在同一仓库只能有一条预警配置'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='库存预警配置表';

-- ============================================
-- 2. 插入菜单和权限配置
-- ============================================

-- 2.1 插入库存预警主菜单（与即时库存同级）
INSERT INTO `sys_menu` VALUES (
  2400, 
  '库存预警', 
  2082, 
  1, 
  'inventoryAlert', 
  'mes/warehouse/inventoryAlert/index', 
  NULL, 
  1, 
  0, 
  'C', 
  '0', 
  '0', 
  'warehouse:inventoryAlert:list', 
  'warning', 
  'admin', 
  NOW(), 
  '', 
  NULL, 
  '库存预警菜单'
);

-- 2.2 插入库存预警-查询权限
INSERT INTO `sys_menu` VALUES (
  2401, 
  '库存预警查询', 
  2400, 
  1, 
  '#', 
  '', 
  NULL, 
  1, 
  0, 
  'F', 
  '0', 
  '0', 
  'warehouse:inventoryAlert:query', 
  '#', 
  'admin', 
  NOW(), 
  '', 
  NULL, 
  ''
);

-- 2.3 插入库存预警-新增权限
INSERT INTO `sys_menu` VALUES (
  2402, 
  '库存预警新增', 
  2400, 
  2, 
  '#', 
  '', 
  NULL, 
  1, 
  0, 
  'F', 
  '0', 
  '0', 
  'warehouse:inventoryAlert:add', 
  '#', 
  'admin', 
  NOW(), 
  '', 
  NULL, 
  ''
);

-- 2.4 插入库存预警-修改权限
INSERT INTO `sys_menu` VALUES (
  2403, 
  '库存预警修改', 
  2400, 
  3, 
  '#', 
  '', 
  NULL, 
  1, 
  0, 
  'F', 
  '0', 
  '0', 
  'warehouse:inventoryAlert:edit', 
  '#', 
  'admin', 
  NOW(), 
  '', 
  NULL, 
  ''
);

-- 2.5 插入库存预警-删除权限
INSERT INTO `sys_menu` VALUES (
  2404, 
  '库存预警删除', 
  2400, 
  4, 
  '#', 
  '', 
  NULL, 
  1, 
  0, 
  'F', 
  '0', 
  '0', 
  'warehouse:inventoryAlert:remove', 
  '#', 
  'admin', 
  NOW(), 
  '', 
  NULL, 
  ''
);

-- 2.6 插入库存预警-导出权限
INSERT INTO `sys_menu` VALUES (
  2405, 
  '库存预警导出', 
  2400, 
  5, 
  '#', 
  '', 
  NULL, 
  1, 
  0, 
  'F', 
  '0', 
  '0', 
  'warehouse:inventoryAlert:export', 
  '#', 
  'admin', 
  NOW(), 
  '', 
  NULL, 
  ''
);

-- ============================================
-- 3. 测试数据（可选，用于开发测试）
-- ============================================
-- 示例：为某个物料设置库存预警
-- INSERT INTO `wm_inventory_alert` VALUES (
--   1, 
--   100, 
--   'MAT001', 
--   '测试物料', 
--   '100*200*300', 
--   9, 
--   '原材料仓库', 
--   1000.00, 
--   100.00, 
--   '0', 
--   '测试预警配置', 
--   'admin', 
--   NOW(), 
--   '', 
--   NULL
-- );

-- ============================================
-- 验证查询（执行后运行这些查询验证结果）
-- ============================================

-- 验证1：检查表是否创建成功
-- SELECT COUNT(*) as table_exists 
-- FROM INFORMATION_SCHEMA.TABLES 
-- WHERE TABLE_SCHEMA = DATABASE() 
--   AND TABLE_NAME = 'wm_inventory_alert';

-- 验证2：检查菜单是否创建成功
-- SELECT menu_id, menu_name, parent_id, path, component, perms 
-- FROM sys_menu 
-- WHERE menu_id >= 2400 AND menu_id <= 2405
-- ORDER BY menu_id;

-- 验证3：检查库存预警配置数据
-- SELECT * FROM wm_inventory_alert;

-- ============================================
-- 脚本执行完成
-- ============================================

