feat(scrap): 报废审批流 DB 迁移(建表 + 权限码)
- scrap_approval 表(申请单,items_json 携带 source_table+stock_id 精准实物) - trans_scrap 增加 scrap_request_no 关联申请单 - 注册权限码 scrap_apply / scrap_approval / scrap_execute 并按现有报废角色授予
This commit is contained in:
31
db_migrations/add_scrap_approval.sql
Normal file
31
db_migrations/add_scrap_approval.sql
Normal file
@ -0,0 +1,31 @@
|
||||
-- =============================================================================
|
||||
-- 报废审批流 + 按单报废(镜像 借库/出库 审批框架)
|
||||
-- 1) 新表 scrap_approval(申请单)
|
||||
-- 2) trans_scrap 增加 scrap_request_no,关联申请单号
|
||||
-- 执行: docker exec -i inventory_db psql -U test -d inventory_system < 本文件
|
||||
-- =============================================================================
|
||||
BEGIN;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS scrap_approval (
|
||||
id SERIAL PRIMARY KEY,
|
||||
request_no varchar(100) UNIQUE NOT NULL,
|
||||
applicant_id integer NOT NULL,
|
||||
remark text,
|
||||
status integer NOT NULL DEFAULT 0, -- 0待审 1已通过(待执行) 2驳回 3已执行
|
||||
allowed_approvers text,
|
||||
actual_approver_id integer,
|
||||
approved_at timestamptz,
|
||||
reject_reason text,
|
||||
items_json text NOT NULL,
|
||||
executed_at timestamptz,
|
||||
executor_name varchar(100),
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS ix_scrap_approval_status ON scrap_approval(status);
|
||||
CREATE INDEX IF NOT EXISTS ix_scrap_approval_applicant ON scrap_approval(applicant_id);
|
||||
|
||||
ALTER TABLE trans_scrap ADD COLUMN IF NOT EXISTS scrap_request_no varchar(100);
|
||||
CREATE INDEX IF NOT EXISTS ix_trans_scrap_req_no ON trans_scrap(scrap_request_no);
|
||||
|
||||
COMMIT;
|
||||
57
db_migrations/add_scrap_perm.sql
Normal file
57
db_migrations/add_scrap_perm.sql
Normal file
@ -0,0 +1,57 @@
|
||||
-- =============================================================================
|
||||
-- 报废审批流权限码(动态权限,不硬编码角色)
|
||||
-- scrap_apply 提交报废申请 / 预检
|
||||
-- scrap_approval 查看审批列表 / 审批(通过/驳回)
|
||||
-- scrap_execute 按单报废执行(扣减库存)
|
||||
-- 授予:apply/execute 复制现有持 'scrap_create:operation' 的角色;
|
||||
-- approval 复制现有持 'scrap_list:operation' 的角色 + 超管/主管。
|
||||
-- 执行: docker exec -i inventory_db psql -U test -d inventory_system < 本文件
|
||||
-- =============================================================================
|
||||
BEGIN;
|
||||
|
||||
-- 1) 注册权限元素
|
||||
INSERT INTO sys_element (menu_code, name, code, element_type)
|
||||
SELECT 'scrap_create', '报废申请(提交)', 'scrap_apply', 'operation'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'scrap_apply');
|
||||
|
||||
INSERT INTO sys_element (menu_code, name, code, element_type)
|
||||
SELECT 'scrap_create', '按单报废(执行)', 'scrap_execute', 'operation'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'scrap_execute');
|
||||
|
||||
INSERT INTO sys_element (menu_code, name, code, element_type)
|
||||
SELECT 'scrap_list', '报废审批(查看/审批)', 'scrap_approval', 'operation'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'scrap_approval');
|
||||
|
||||
-- 2) scrap_apply / scrap_execute ← 现有持 scrap_create:operation 的角色
|
||||
INSERT INTO sys_role_permission (role_code, target_code, type, company_name)
|
||||
SELECT DISTINCT sp.role_code, v.target_code, 'element', sp.company_name
|
||||
FROM sys_role_permission sp
|
||||
CROSS JOIN (VALUES ('scrap_apply'), ('scrap_execute')) AS v(target_code)
|
||||
WHERE sp.target_code = 'scrap_create:operation' AND sp.type = 'element'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_role_permission r
|
||||
WHERE r.role_code = sp.role_code AND r.target_code = v.target_code
|
||||
AND r.type = 'element' AND COALESCE(r.company_name,'') = COALESCE(sp.company_name,'')
|
||||
);
|
||||
|
||||
-- 3) scrap_approval ← 现有持 scrap_list:operation 的角色
|
||||
INSERT INTO sys_role_permission (role_code, target_code, type, company_name)
|
||||
SELECT DISTINCT sp.role_code, 'scrap_approval', 'element', sp.company_name
|
||||
FROM sys_role_permission sp
|
||||
WHERE sp.target_code = 'scrap_list:operation' AND sp.type = 'element'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_role_permission r
|
||||
WHERE r.role_code = sp.role_code AND r.target_code = 'scrap_approval'
|
||||
AND r.type = 'element' AND COALESCE(r.company_name,'') = COALESCE(sp.company_name,'')
|
||||
);
|
||||
|
||||
-- 4) 超管 / 主管 兜底持有审批权
|
||||
INSERT INTO sys_role_permission (role_code, target_code, type, company_name)
|
||||
SELECT v.role_code, 'scrap_approval', 'element', NULL
|
||||
FROM (VALUES ('SUPER_ADMIN'), ('SUPERVISOR')) AS v(role_code)
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM sys_role_permission r
|
||||
WHERE r.role_code = v.role_code AND r.target_code = 'scrap_approval' AND r.type = 'element'
|
||||
);
|
||||
|
||||
COMMIT;
|
||||
Reference in New Issue
Block a user