From 96773ae7a301322d499cc92e58fec7e043587976 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Fri, 13 Nov 2026 13:20:02 +0800 Subject: [PATCH] =?UTF-8?q?chore(sql):=20=E7=A7=BB=E9=99=A4=E6=97=A7?= =?UTF-8?q?=E7=89=88=E5=AE=9E=E9=AA=8C=E5=AE=A4=E6=A0=B7=E6=9C=AC=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=B8=80=E7=BA=A7=E8=8F=9C=E5=8D=95=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 生产库已无旧菜单与 biz_lab_sample_processing_extra,保留这些脚本易被误执行;一并去掉仅服务该清理流程的恢复说明。 Co-authored-by: Cursor --- ...12_lab_sample_processing_normalize_acl.sql | 21 --- ..._sample_processing_restore_excel_extras.md | 23 ---- ...ab_sample_processing_retire_excel_demo.sql | 14 -- ...26-11-12-lab-sample-processing-acl-fix.sql | 12 -- .../2026-11-12-lab-sample-processing-data.sql | 120 ------------------ ...1-12-remove-lab-sample-processing-menu.sql | 50 -------- 6 files changed, 240 deletions(-) delete mode 100644 docs/sql/20261112_lab_sample_processing_normalize_acl.sql delete mode 100644 docs/sql/20261112_lab_sample_processing_restore_excel_extras.md delete mode 100644 docs/sql/20261112_lab_sample_processing_retire_excel_demo.sql delete mode 100644 docs/sql/migrations/2026-11-12-lab-sample-processing-acl-fix.sql delete mode 100644 docs/sql/migrations/2026-11-12-lab-sample-processing-data.sql delete mode 100644 docs/sql/migrations/2026-11-12-remove-lab-sample-processing-menu.sql diff --git a/docs/sql/20261112_lab_sample_processing_normalize_acl.sql b/docs/sql/20261112_lab_sample_processing_normalize_acl.sql deleted file mode 100644 index 98957ea9..00000000 --- a/docs/sql/20261112_lab_sample_processing_normalize_acl.sql +++ /dev/null @@ -1,21 +0,0 @@ --- 实验室样本处理 ACL 归一化(可重复执行) --- 1) 撤销所有 lab:sample-processing* / menu:lab-sample-processing 角色菜单 --- 2) 仅按下列角色重授: --- 市场编辑:市场专员/临床销售/销售助理/客服/采集专员 --- 生产编辑:生产专员/实验专员/细胞实验员/研发专员 --- 质检编辑:质检专员/质量安全员 --- 主管:生产主管/质量主管/采集主管/采集经理/研发主管/研发总监/总经理/副总经理/董事长/超级管理员 --- 只读:采集接受人 --- 说明:正式执行请用 Agent 脚本 tmp_normalize_lab_acl.py(含幂等 undelete/insert)。 --- 本文件作为规则记录;勿在未核对角色名时直接全量套用到其他环境。 - -UPDATE sys_role_menu rm -JOIN sys_menu m ON m.id = rm.menu_id -SET rm.del_flag = 1, - rm.update_by = 'normalize-acl', - rm.update_time = NOW() -WHERE rm.del_flag = 0 - AND ( - m.perms LIKE 'lab:sample-processing%' - OR m.perms = 'menu:lab-sample-processing' - ); diff --git a/docs/sql/20261112_lab_sample_processing_restore_excel_extras.md b/docs/sql/20261112_lab_sample_processing_restore_excel_extras.md deleted file mode 100644 index 9ad25ea2..00000000 --- a/docs/sql/20261112_lab_sample_processing_restore_excel_extras.md +++ /dev/null @@ -1,23 +0,0 @@ -# 恢复 Excel 补充字段(真菌等) - -## 原因 - -`20261112_lab_sample_processing_retire_excel_demo.sql` 按「补充表 sample_code = 协议样本号」软删演示行。 -会议 Excel 实际多用实验室入库编码(`B000*` / `BC*` / `UBMC*`),与协议号不一致,导致真实样本的真菌/内毒素/CD34 等补充字段被误删。 - -## 处理 - -运行: - -```bash -ENV_FILE=backend/.env python backend/scripts/restore_lab_sample_processing_excel_extras.py -``` - -脚本会: - -1. 找出 `update_by=retire-excel-demo` 且 `del_flag=1` 的补充行 -2. 仅恢复仍能关联到当前有效协议/接收编码的行 -3. 只写回 `SOURCE_EXTRA` 字段到有效补充表 -4. 同步旧台账 `biz_lab_sample_process_supplement` - -列表侧同时会从质检完成任务填空(内毒素/真菌/支原体/细菌及母血相关)。 diff --git a/docs/sql/20261112_lab_sample_processing_retire_excel_demo.sql b/docs/sql/20261112_lab_sample_processing_retire_excel_demo.sql deleted file mode 100644 index 17ee94f5..00000000 --- a/docs/sql/20261112_lab_sample_processing_retire_excel_demo.sql +++ /dev/null @@ -1,14 +0,0 @@ --- 软删除实验室样本处理 Excel 演示补充行: --- 仅删除在协议样本表中不存在对应 sample_code 的补充记录。 --- Excel 列结构仍由代码字段目录维护;真实列表只聚合协议/接收/生产源数据。 - -UPDATE biz_lab_sample_processing_extra e -LEFT JOIN biz_protocol_sample s - ON s.sample_code = e.sample_code - AND s.tenant_no = e.tenant_no - AND s.del_flag = 0 -SET e.del_flag = 1, - e.update_by = 'retire-excel-demo', - e.update_time = NOW() -WHERE e.del_flag = 0 - AND s.id IS NULL; diff --git a/docs/sql/migrations/2026-11-12-lab-sample-processing-acl-fix.sql b/docs/sql/migrations/2026-11-12-lab-sample-processing-acl-fix.sql deleted file mode 100644 index ceb65266..00000000 --- a/docs/sql/migrations/2026-11-12-lab-sample-processing-acl-fix.sql +++ /dev/null @@ -1,12 +0,0 @@ --- 纠正实验室样本处理部门 ACL: --- 「采集接受人」仅挂在「质检专员」职位上,不应再授予市场字段编辑权, --- 否则质检人员经职位角色并集会同时可改市场+质检字段。 - -UPDATE sys_role_menu rm -JOIN sys_role r ON r.id = rm.role_id AND r.del_flag = 0 AND r.role_name = '采集接受人' -JOIN sys_menu m ON m.id = rm.menu_id AND m.del_flag = 0 - AND m.perms = 'lab:sample-processing:market:edit' -SET rm.del_flag = 1, - rm.update_by = 'migration', - rm.update_time = NOW() -WHERE rm.del_flag = 0; diff --git a/docs/sql/migrations/2026-11-12-lab-sample-processing-data.sql b/docs/sql/migrations/2026-11-12-lab-sample-processing-data.sql deleted file mode 100644 index 0c0f5a69..00000000 --- a/docs/sql/migrations/2026-11-12-lab-sample-processing-data.sql +++ /dev/null @@ -1,120 +0,0 @@ --- 实验室样本处理数据:补充表 + 一级模块菜单/按钮权限(不自动授权角色) --- MySQL 5.7,可重复执行 - -CREATE TABLE IF NOT EXISTS biz_lab_sample_processing_extra ( - id VARCHAR(64) NOT NULL, - dataset VARCHAR(16) NOT NULL COMMENT 'hsc|ubmc|msc', - sample_code VARCHAR(32) NOT NULL COMMENT '样本编码', - payload_json TEXT NULL COMMENT '补充字段 JSON', - tenant_no VARCHAR(64) NOT NULL, - order_num INT NULL, - remark VARCHAR(512) NULL, - create_by VARCHAR(64) NULL, - create_dept_id VARCHAR(64) NOT NULL DEFAULT '', - create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - update_by VARCHAR(64) NULL, - update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - del_flag SMALLINT NOT NULL DEFAULT 0, - PRIMARY KEY (id), - KEY ix_lab_sample_extra_tenant_ds_code (tenant_no, dataset, sample_code, del_flag) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- 挂到与「质检」同一 Web 虚拟根下(复用 menu:quality 的 parent_id) -INSERT INTO sys_menu ( - id, menu_name, parent_id, menu_type, path, component, perms, - is_frame, visible, status, tenant_no, order_num, remark, - create_by, create_dept_id, create_time, update_by, update_time, del_flag -) -SELECT - MD5(CONCAT(quality.tenant_no, ':menu:lab-sample-processing')), - '实验室样本处理数据', quality.parent_id, 'M', '/lab-sample-processing', '/index/index', - 'menu:lab-sample-processing', 1, '1', '1', quality.tenant_no, - COALESCE(quality.order_num, 50) + 1, - '20261104 会议:造血/单个核/间充质台账', - 'migration', '', NOW(), 'migration', NOW(), 0 -FROM sys_menu quality -WHERE quality.perms = 'menu:quality' AND quality.del_flag = 0 AND quality.status = '1' - AND NOT EXISTS ( - SELECT 1 FROM sys_menu e - WHERE e.tenant_no = quality.tenant_no AND e.perms = 'menu:lab-sample-processing' AND e.del_flag = 0 - ); - -INSERT INTO sys_menu ( - id, menu_name, parent_id, menu_type, path, component, perms, - is_frame, visible, status, tenant_no, order_num, remark, - create_by, create_dept_id, create_time, update_by, update_time, del_flag -) -SELECT - MD5(CONCAT(p.tenant_no, ':lab:sample-processing:list')), - '造血干细胞数据', p.id, 'C', 'lab-sample-processing/hsc', - '/lab-sample-processing/hsc/index', 'lab:sample-processing:list', - 1, '1', '1', p.tenant_no, 10, '造血干细胞数据列表', - 'migration', '', NOW(), 'migration', NOW(), 0 -FROM sys_menu p -WHERE p.perms = 'menu:lab-sample-processing' AND p.del_flag = 0 AND p.status = '1' - AND NOT EXISTS ( - SELECT 1 FROM sys_menu e - WHERE e.tenant_no = p.tenant_no AND e.path = 'lab-sample-processing/hsc' AND e.del_flag = 0 - ); - -INSERT INTO sys_menu ( - id, menu_name, parent_id, menu_type, path, component, perms, - is_frame, visible, status, tenant_no, order_num, remark, - create_by, create_dept_id, create_time, update_by, update_time, del_flag -) -SELECT - MD5(CONCAT(p.tenant_no, ':lab:sample-processing:ubmc')), - '单个核数据', p.id, 'C', 'lab-sample-processing/ubmc', - '/lab-sample-processing/ubmc/index', 'lab:sample-processing:list', - 1, '1', '1', p.tenant_no, 20, '单个核数据列表', - 'migration', '', NOW(), 'migration', NOW(), 0 -FROM sys_menu p -WHERE p.perms = 'menu:lab-sample-processing' AND p.del_flag = 0 AND p.status = '1' - AND NOT EXISTS ( - SELECT 1 FROM sys_menu e - WHERE e.tenant_no = p.tenant_no AND e.path = 'lab-sample-processing/ubmc' AND e.del_flag = 0 - ); - -INSERT INTO sys_menu ( - id, menu_name, parent_id, menu_type, path, component, perms, - is_frame, visible, status, tenant_no, order_num, remark, - create_by, create_dept_id, create_time, update_by, update_time, del_flag -) -SELECT - MD5(CONCAT(p.tenant_no, ':lab:sample-processing:msc')), - '脐带间充质干细胞数据', p.id, 'C', 'lab-sample-processing/msc', - '/lab-sample-processing/msc/index', 'lab:sample-processing:list', - 1, '1', '1', p.tenant_no, 30, '脐带间充质干细胞数据列表', - 'migration', '', NOW(), 'migration', NOW(), 0 -FROM sys_menu p -WHERE p.perms = 'menu:lab-sample-processing' AND p.del_flag = 0 AND p.status = '1' - AND NOT EXISTS ( - SELECT 1 FROM sys_menu e - WHERE e.tenant_no = p.tenant_no AND e.path = 'lab-sample-processing/msc' AND e.del_flag = 0 - ); - --- 编辑按钮挂在列表菜单下(三页共用同一 list 权限父节点:造血页) -INSERT INTO sys_menu ( - id, menu_name, parent_id, menu_type, path, component, perms, - is_frame, visible, status, tenant_no, order_num, remark, - create_by, create_dept_id, create_time, update_by, update_time, del_flag -) -SELECT - MD5(CONCAT(p.tenant_no, ':', btn.perms)), - btn.menu_name, p.id, 'F', '', NULL, btn.perms, - 1, '0', '1', p.tenant_no, btn.order_num, btn.remark, - 'migration', '', NOW(), 'migration', NOW(), 0 -FROM sys_menu p -JOIN ( - SELECT '市场字段编辑' AS menu_name, 'lab:sample-processing:market:edit' AS perms, 1 AS order_num, '仅可编辑市场部门字段' AS remark - UNION ALL SELECT '生产字段编辑', 'lab:sample-processing:production:edit', 2, '仅可编辑生产部门字段' - UNION ALL SELECT '质检字段编辑', 'lab:sample-processing:qc:edit', 3, '仅可编辑质检部门字段' - UNION ALL SELECT '部门主管', 'lab:sample-processing:manager', 4, '可编辑全部部门字段' -) btn -WHERE p.perms = 'lab:sample-processing:list' - AND p.path = 'lab-sample-processing/hsc' - AND p.del_flag = 0 AND p.status = '1' - AND NOT EXISTS ( - SELECT 1 FROM sys_menu e - WHERE e.tenant_no = p.tenant_no AND e.perms = btn.perms AND e.del_flag = 0 - ); diff --git a/docs/sql/migrations/2026-11-12-remove-lab-sample-processing-menu.sql b/docs/sql/migrations/2026-11-12-remove-lab-sample-processing-menu.sql deleted file mode 100644 index 20a9c3d3..00000000 --- a/docs/sql/migrations/2026-11-12-remove-lab-sample-processing-menu.sql +++ /dev/null @@ -1,50 +0,0 @@ --- Issue #100:移除多余一级菜单「实验室样本处理数据」及其子菜单/按钮 --- 软删除 sys_menu 与对应 sys_role_menu;不影响质检管理下 lab-sample-process 台账 --- MySQL 5.7,可重复执行 - --- 1) 角色菜单授权 -UPDATE sys_role_menu rm -JOIN sys_menu m ON m.id = rm.menu_id -SET rm.del_flag = 1, - rm.update_by = 'migration', - rm.update_time = NOW() -WHERE rm.del_flag = 0 - AND ( - m.perms IN ( - 'menu:lab-sample-processing', - 'lab:sample-processing:list', - 'lab:sample-processing:market:edit', - 'lab:sample-processing:production:edit', - 'lab:sample-processing:qc:edit', - 'lab:sample-processing:manager' - ) - OR m.path IN ( - '/lab-sample-processing', - 'lab-sample-processing/hsc', - 'lab-sample-processing/ubmc', - 'lab-sample-processing/msc' - ) - ); - --- 2) 按钮 / 子菜单 / 一级菜单(先叶子后父级,同批软删即可) -UPDATE sys_menu -SET del_flag = 1, - update_by = 'migration', - update_time = NOW() -WHERE del_flag = 0 - AND ( - perms IN ( - 'menu:lab-sample-processing', - 'lab:sample-processing:list', - 'lab:sample-processing:market:edit', - 'lab:sample-processing:production:edit', - 'lab:sample-processing:qc:edit', - 'lab:sample-processing:manager' - ) - OR path IN ( - '/lab-sample-processing', - 'lab-sample-processing/hsc', - 'lab-sample-processing/ubmc', - 'lab-sample-processing/msc' - ) - ); -- 2.54.0