liu
19 小时以前 004cb343aeac53839bb390df3d1c6f2ba6b0d41e
docs(mes): 补袋码绑定托盘免先录批次的数据库自检脚本

本次改动无 DDL、无权限数据变更(新接口复用 mes:pro-pallet:query,
只查 mes_pro_pallet 现有列)。脚本提供部署前自检与两项回归核对,
可直接执行,不产生结构变更。

Co-Authored-By: Claude <noreply@anthropic.com>
已添加1个文件
107 ■■■■■ 文件已修改
sql/mysql/mes_bag_code_bind_pallet_without_batch.sql 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/mes_bag_code_bind_pallet_without_batch.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,107 @@
-- =============================================================================
-- è¢‹ç ç»‘定托盘(免先录生产批次)—— æ•°æ®åº“脚本
-- æ—¥æœŸï¼š2026-10-16
-- å…³è”提交:66517edf feat(mes): è¢‹ç ç»‘定托盘免先录生产批次
--
-- ã€ç»“论】本次改动 **不需要任何 DDL,也不需要新增菜单/权限数据**。
--         æœ¬è„šæœ¬åªåšéƒ¨ç½²å‰è‡ªæ£€ä¸Žå›žå½’æ ¸å¯¹ï¼Œç›´æŽ¥æ‰§è¡Œå³å¯ï¼Œä¸äº§ç”Ÿä»»ä½•ç»“æž„å˜æ›´ã€‚
--
-- ä¾æ®ï¼š
--   1. æ–°æŽ¥å£ GET /mes/pro/pallet/bindable-list å¤ç”¨å·²æœ‰æƒé™ mes:pro-pallet:query
--      ï¼ˆsystem_menu.id = 602625),未引入新权限码,故无需 INSERT system_menu /
--      system_role_menu。
--   2. è¯¥æŽ¥å£åªæŸ¥è¯¢ mes_pro_pallet çš„现有列:
--      status / item_id / batch_id / batch_code / code / temp_code / bag_count / deleted,
--      æœªæ–°å¢žè¡¨ã€åˆ—或索引。
--   3. ã€Œç»‘定托盘」的写路径(含未录批次袋码自动补录批次)复用既有
--      mes_pro_bag_code / mes_pro_pallet / mes_pro_batch åˆ—,无结构变化。
-- =============================================================================
-- -----------------------------------------------------------------------------
-- è‡ªæ£€ 1:新接口依赖的权限已存在且启用(期望返回 1 è¡Œï¼Œstatus = 0)
-- -----------------------------------------------------------------------------
SELECT id, name, permission, type, status
FROM system_menu
WHERE permission = 'mes:pro-pallet:query';
-- -----------------------------------------------------------------------------
-- è‡ªæ£€ 2:接口用到的 mes_pro_pallet åˆ—齐全(期望返回 9 è¡Œï¼‰
-- -----------------------------------------------------------------------------
SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME = 'mes_pro_pallet'
  AND COLUMN_NAME IN (
    'id', 'status', 'item_id', 'batch_id', 'batch_code',
    'code', 'temp_code', 'bag_count', 'deleted'
  )
ORDER BY COLUMN_NAME;
-- -----------------------------------------------------------------------------
-- è‡ªæ£€ 3:确认「绑定托盘」按钮权限与托盘查询权限的持有角色
--   è¯´æ˜Žï¼šbindable-list éœ€è¦ mes:pro-pallet:query;绑定按钮需要 mes:pro-bag-code:update。
--   è‹¥æŸè§’色此前能正常打开「绑定托盘」弹窗并拉到托盘下拉,说明它已持有
--   mes:pro-pallet:query(旧实现下拉走的也是托盘查询接口),无需补授权。
--   è¶…级管理员(super_admin)走放行逻辑,不体现在 system_role_menu ä¸­ã€‚
-- -----------------------------------------------------------------------------
SELECT r.id AS role_id, r.name AS role_name, r.code AS role_code, m.permission
FROM system_role r
JOIN system_role_menu rm ON rm.role_id = r.id
JOIN system_menu m ON m.id = rm.menu_id
WHERE m.permission IN ('mes:pro-pallet:query', 'mes:pro-bag-code:update')
ORDER BY r.id, m.permission;
-- -----------------------------------------------------------------------------
-- å¯é€‰æŽˆæƒï¼šä»…当需要给「非超级管理员角色」开通赋码管理时执行(默认无需执行)
--   æŠŠ @role_id æ¢æˆç›®æ ‡è§’色编号;已授权的菜单由 NOT EXISTS è·³è¿‡ï¼Œå¯é‡å¤æ‰§è¡Œã€‚
-- -----------------------------------------------------------------------------
-- SET @role_id = 2;
--
-- INSERT INTO system_role_menu (role_id, menu_id, creator, create_time, updater, update_time, deleted)
-- SELECT @role_id, m.id, 'admin', NOW(), 'admin', NOW(), b'0'
-- FROM system_menu m
-- WHERE m.permission = 'mes:pro-pallet:query'
--   AND NOT EXISTS (
--     SELECT 1 FROM system_role_menu rm
--     WHERE rm.role_id = @role_id AND rm.menu_id = m.id
--   );
-- -----------------------------------------------------------------------------
-- å›žå½’核对:批次汇总字段与明细是否一致
--   æ”¹é€ åŽã€Œæœªå½•批次袋码绑到某批次的正式托盘」会自动补录批次,需确认
--   mes_pro_batch.bag_quantity / pallet_quantity ä¸Žæ˜Žç»†åŒæ­¥ã€‚
--   ç”¨æ³•:把 @batch_id æ¢æˆéªŒè¯ç”¨æ‰¹æ¬¡ç¼–号,对比绑定操作前后的输出。
--   æœŸæœ›ï¼šbag_quantity = å®žé™…有效袋码数,pallet_quantity = å®žé™…托盘数。
-- -----------------------------------------------------------------------------
-- SET @batch_id = 123;
--
-- SELECT b.id,
--        b.code,
--        b.status,
--        b.item_id,
--        b.bag_quantity    AS æ‰¹æ¬¡ç™»è®°è¢‹æ•°,
--        (SELECT COUNT(*) FROM mes_pro_bag_code bc
--          WHERE bc.batch_id = b.id AND bc.deleted = b'0' AND bc.status <> 30) AS å®žé™…有效袋码数,
--        b.pallet_quantity AS æ‰¹æ¬¡ç™»è®°æ‰˜ç›˜æ•°,
--        (SELECT COUNT(*) FROM mes_pro_pallet p
--          WHERE p.batch_id = b.id AND p.deleted = b'0') AS å®žé™…托盘数
-- FROM mes_pro_batch b
-- WHERE b.id = @batch_id;
-- -----------------------------------------------------------------------------
-- å›žå½’核对:找出「托盘有批次、袋码却无批次」的漏补录数据
--   æ­£å¸¸åº”为 0 è¡Œã€‚若存在,说明有袋码挂在某批次的托盘上却没录入批次。
-- -----------------------------------------------------------------------------
SELECT p.id AS pallet_id, p.code AS pallet_code, p.batch_id, p.batch_code,
       COUNT(bc.id) AS æœªå½•批次袋码数
FROM mes_pro_pallet p
JOIN mes_pro_bag_code bc
  ON bc.pallet_id = p.id AND bc.deleted = b'0' AND bc.batch_id IS NULL
WHERE p.deleted = b'0' AND p.batch_id IS NOT NULL
GROUP BY p.id, p.code, p.batch_id, p.batch_code;