-- =============================================================================
|
-- 袋码绑定托盘(免先录生产批次)—— 数据库脚本
|
-- 日期: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;
|