liu
15 小时以前 5bf65a4d967c90b4ee51c8405ee9bef766530fd8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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;