tuqin
2026-11-02 5ea3ccadce91cb9e7a760da8d0d34b316a977d78
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
-- =====================================================================
-- 安全生产模块 —— 四期:特种作业票证管理
--
-- 定位:高风险作业必须先办票、审批通过后才可作业,作业期间需监护人确认,
--       完工后登记并归档,形成可追溯的作业许可记录。
--
-- 支持作业类型(可按客户实际增减字典即可):
--   1 动火作业 / 2 受限空间作业 / 3 高处作业 / 4 吊装作业
--   5 临时用电作业 / 6 断路作业 / 7 盲板抽堵作业 / 8 设备检修作业
--
-- 状态流转:
--   0 待审批 --审批通过--> 10 已批准 --完工登记--> 20 已完工 --归档--> 30 已归档
--      │
--      └--审批驳回--> 90 已驳回
--
-- 使用约束(服务端强校验):
--   * 作业结束时间必须晚于开始时间
--   * 审批通过后不允许再改作业信息(需作废重开)
--   * 已归档的作业票只读
--
-- 内容:
--   1. 建表 mes_safety_work_ticket
--   2. 字典:作业类型 / 作业级别 / 作业票状态
--   3. 菜单挂在「安全生产」目录下
--   4. 授权超级管理员
--
-- 特性:可重复执行
-- =====================================================================
 
CREATE TABLE IF NOT EXISTS `mes_safety_work_ticket` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `code` varchar(64) NOT NULL COMMENT '作业票号',
 
  `ticket_type` tinyint NOT NULL COMMENT '作业类型(字典 mes_safety_ticket_type)',
  `ticket_level` tinyint DEFAULT NULL COMMENT '作业级别(字典 mes_safety_ticket_level)',
 
  `unit_id` bigint DEFAULT NULL COMMENT '关联风险单元编号',
  `workshop_id` bigint DEFAULT NULL COMMENT '所属车间编号',
  `work_location` varchar(255) DEFAULT NULL COMMENT '作业地点',
  `work_content` varchar(1000) DEFAULT NULL COMMENT '作业内容',
 
  `plan_start_time` datetime DEFAULT NULL COMMENT '计划开始时间',
  `plan_end_time` datetime DEFAULT NULL COMMENT '计划结束时间',
  `actual_start_time` datetime DEFAULT NULL COMMENT '实际开始时间',
  `actual_end_time` datetime DEFAULT NULL COMMENT '实际结束时间',
 
  `applicant_user_id` bigint DEFAULT NULL COMMENT '申请人编号',
  `applicant_dept_id` bigint DEFAULT NULL COMMENT '申请部门编号',
  `contractor` varchar(200) DEFAULT NULL COMMENT '施工单位/承包商',
  `worker_names` varchar(500) DEFAULT NULL COMMENT '作业人员(多个用逗号分隔)',
  `guardian_user_id` bigint DEFAULT NULL COMMENT '监护人编号',
  `guardian_confirm` bit(1) DEFAULT b'0' COMMENT '监护人是否已确认',
 
  `safety_measures` varchar(2000) DEFAULT NULL COMMENT '安全措施',
  `safety_check_result` varchar(1000) DEFAULT NULL COMMENT '安全交底/检查结果',
 
  `approver_user_id` bigint DEFAULT NULL COMMENT '审批人编号',
  `approve_time` datetime DEFAULT NULL COMMENT '审批时间',
  `approve_comment` varchar(500) DEFAULT NULL COMMENT '审批意见',
  `reject_reason` varchar(500) DEFAULT NULL COMMENT '驳回原因',
 
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态:0待审批 10已批准 20已完工 30已归档 90已驳回',
 
  `close_time` datetime DEFAULT NULL COMMENT '归档时间',
  `close_user_id` bigint DEFAULT NULL COMMENT '归档人编号',
  `close_remark` varchar(500) DEFAULT NULL COMMENT '完工/归档说明',
 
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `uk_code` (`code`) USING BTREE,
  KEY `idx_status` (`status`) USING BTREE,
  KEY `idx_type` (`ticket_type`) USING BTREE,
  KEY `idx_plan_start` (`plan_start_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='安全生产-特种作业票证';
 
-- ---------------------------------------------------------------------
-- 字典
-- ---------------------------------------------------------------------
DELETE FROM system_dict_data WHERE dict_type IN
  ('mes_safety_ticket_type', 'mes_safety_ticket_level', 'mes_safety_ticket_status');
 
DELETE FROM system_dict_type WHERE type IN
  ('mes_safety_ticket_type', 'mes_safety_ticket_level', 'mes_safety_ticket_status');
 
INSERT INTO system_dict_type (name, type, status, remark, creator, create_time, updater, update_time, deleted)
VALUES ('安全生产-作业类型', 'mes_safety_ticket_type', 0, '特种作业票证类型', '1', NOW(), '1', NOW(), b'0'),
       ('安全生产-作业级别', 'mes_safety_ticket_level', 0, '动火/高处等按风险分级的作业级别', '1', NOW(), '1', NOW(), b'0'),
       ('安全生产-作业票状态', 'mes_safety_ticket_status', 0, '作业票审批与归档状态', '1', NOW(), '1', NOW(), b'0');
 
INSERT INTO system_dict_data (sort, label, value, dict_type, status, color_type, creator, create_time, updater, update_time, deleted)
VALUES
-- 作业类型
(1, '动火作业',     '1', 'mes_safety_ticket_type', 0, 'error',      '1', NOW(), '1', NOW(), b'0'),
(2, '受限空间作业', '2', 'mes_safety_ticket_type', 0, 'warning',    '1', NOW(), '1', NOW(), b'0'),
(3, '高处作业',     '3', 'mes_safety_ticket_type', 0, 'warning',    '1', NOW(), '1', NOW(), b'0'),
(4, '吊装作业',     '4', 'mes_safety_ticket_type', 0, 'processing', '1', NOW(), '1', NOW(), b'0'),
(5, '临时用电作业', '5', 'mes_safety_ticket_type', 0, 'processing', '1', NOW(), '1', NOW(), b'0'),
(6, '断路作业',     '6', 'mes_safety_ticket_type', 0, 'default',    '1', NOW(), '1', NOW(), b'0'),
(7, '盲板抽堵作业', '7', 'mes_safety_ticket_type', 0, 'warning',    '1', NOW(), '1', NOW(), b'0'),
(8, '设备检修作业', '8', 'mes_safety_ticket_type', 0, 'default',    '1', NOW(), '1', NOW(), b'0'),
-- 作业级别
(1, '特殊作业', '1', 'mes_safety_ticket_level', 0, 'error',      '1', NOW(), '1', NOW(), b'0'),
(2, '一级作业', '2', 'mes_safety_ticket_level', 0, 'warning',    '1', NOW(), '1', NOW(), b'0'),
(3, '二级作业', '3', 'mes_safety_ticket_level', 0, 'processing', '1', NOW(), '1', NOW(), b'0'),
(4, '三级作业', '4', 'mes_safety_ticket_level', 0, 'success',    '1', NOW(), '1', NOW(), b'0'),
-- 作业票状态
(1, '待审批', '0',  'mes_safety_ticket_status', 0, 'processing', '1', NOW(), '1', NOW(), b'0'),
(2, '已批准', '10', 'mes_safety_ticket_status', 0, 'success',    '1', NOW(), '1', NOW(), b'0'),
(3, '已完工', '20', 'mes_safety_ticket_status', 0, 'default',    '1', NOW(), '1', NOW(), b'0'),
(4, '已归档', '30', 'mes_safety_ticket_status', 0, 'default',    '1', NOW(), '1', NOW(), b'0'),
(5, '已驳回', '90', 'mes_safety_ticket_status', 0, 'error',      '1', NOW(), '1', NOW(), b'0');
 
-- ---------------------------------------------------------------------
-- 菜单(挂在 1065910 安全生产下)
-- ---------------------------------------------------------------------
DELETE FROM system_role_menu WHERE menu_id BETWEEN 1065934 AND 1065950;
 
DELETE FROM system_menu WHERE id BETWEEN 1065934 AND 1065950;
 
INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon,
                         component, component_name, status, visible, keep_alive, always_show,
                         creator, create_time, updater, update_time, deleted)
VALUES
(1065934, '特种作业票证', '', 2, 5, 1065910, 'work-ticket', 'ep:tickets',
 'safety/ticket/index', 'SafetyWorkTicket', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065935, '作业票查询', 'mes:safety-ticket:query',   3, 1, 1065934, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065936, '作业票申请', 'mes:safety-ticket:create',  3, 2, 1065934, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065937, '作业票修改', 'mes:safety-ticket:update',  3, 3, 1065934, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065938, '作业票删除', 'mes:safety-ticket:delete',  3, 4, 1065934, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065939, '作业票审批', 'mes:safety-ticket:approve', 3, 5, 1065934, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065940, '完工归档',   'mes:safety-ticket:close',   3, 6, 1065934, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
 
INSERT INTO system_role_menu (role_id, menu_id, creator, create_time, updater, update_time, deleted)
SELECT 1, m.id, '1', NOW(), '1', NOW(), b'0'
FROM system_menu m
WHERE m.id BETWEEN 1065934 AND 1065950;
 
-- ---------------------------------------------------------------------
-- 验证
-- ---------------------------------------------------------------------
SELECT id, parent_id, name, path, component, permission, type
FROM system_menu WHERE id BETWEEN 1065910 AND 1065950 ORDER BY id;
 
SELECT dict_type, label, value FROM system_dict_data
WHERE dict_type LIKE 'mes_safety_ticket%' ORDER BY dict_type, sort;