risk_update_20260706.sql 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. -- =============================================================
  2. -- 风控平台 数据库增量脚本 2026-07-06
  3. -- 适用版本: risk_control_platform 2026-07-06 之前的部署
  4. -- 合并自以下三份独立脚本(均已在 2026-07-06 当天执行过):
  5. -- 1. risk_hidden_danger_dict.sql 隐患处理结果字典
  6. -- 2. risk_inspection_record_audit.sql 巡检记录审核字段 + audit_status 字典
  7. -- 3. risk_special_equipment_maintenance.sql 特种设备维护字段 + maintenance_status 字典
  8. --
  9. -- 本脚本特征:
  10. -- - 全部 SQL 幂等,可重复执行(基于 INFORMATION_SCHEMA 判断)
  11. -- - 新环境用 risk_control_platform.sql 部署;已有环境用本脚本增量升级
  12. -- - 不修改业务表已有数据,只补字段、索引、字典
  13. -- =============================================================
  14. SET NAMES utf8mb4;
  15. -- =============================================================
  16. -- 1. 巡检记录表 risk_inspection_record 加审核字段
  17. -- =============================================================
  18. -- 1.1 audit_status
  19. SET @sql = (SELECT IF(
  20. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
  21. WHERE TABLE_SCHEMA = DATABASE()
  22. AND TABLE_NAME = 'risk_inspection_record'
  23. AND COLUMN_NAME = 'audit_status') = 0,
  24. 'ALTER TABLE `risk_inspection_record` ADD COLUMN `audit_status` VARCHAR(20) DEFAULT ''待审核'' COMMENT ''审核状态(待审核/审核通过/审核不通过)''',
  25. 'SELECT 1'));
  26. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  27. -- 1.2 auditor_id
  28. SET @sql = (SELECT IF(
  29. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
  30. WHERE TABLE_SCHEMA = DATABASE()
  31. AND TABLE_NAME = 'risk_inspection_record'
  32. AND COLUMN_NAME = 'auditor_id') = 0,
  33. 'ALTER TABLE `risk_inspection_record` ADD COLUMN `auditor_id` BIGINT DEFAULT NULL COMMENT ''审核人ID''',
  34. 'SELECT 1'));
  35. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  36. -- 1.3 auditor_name
  37. SET @sql = (SELECT IF(
  38. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
  39. WHERE TABLE_SCHEMA = DATABASE()
  40. AND TABLE_NAME = 'risk_inspection_record'
  41. AND COLUMN_NAME = 'auditor_name') = 0,
  42. 'ALTER TABLE `risk_inspection_record` ADD COLUMN `auditor_name` VARCHAR(50) DEFAULT NULL COMMENT ''审核人''',
  43. 'SELECT 1'));
  44. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  45. -- 1.4 audit_time
  46. SET @sql = (SELECT IF(
  47. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
  48. WHERE TABLE_SCHEMA = DATABASE()
  49. AND TABLE_NAME = 'risk_inspection_record'
  50. AND COLUMN_NAME = 'audit_time') = 0,
  51. 'ALTER TABLE `risk_inspection_record` ADD COLUMN `audit_time` DATETIME DEFAULT NULL COMMENT ''审核时间''',
  52. 'SELECT 1'));
  53. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  54. -- 1.5 audit_opinion
  55. SET @sql = (SELECT IF(
  56. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
  57. WHERE TABLE_SCHEMA = DATABASE()
  58. AND TABLE_NAME = 'risk_inspection_record'
  59. AND COLUMN_NAME = 'audit_opinion') = 0,
  60. 'ALTER TABLE `risk_inspection_record` ADD COLUMN `audit_opinion` TEXT COMMENT ''审核意见/不通过原因''',
  61. 'SELECT 1'));
  62. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  63. -- 1.6 索引 idx_audit_status
  64. SET @sql = (SELECT IF(
  65. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  66. WHERE TABLE_SCHEMA = DATABASE()
  67. AND TABLE_NAME = 'risk_inspection_record'
  68. AND INDEX_NAME = 'idx_audit_status') = 0,
  69. 'ALTER TABLE `risk_inspection_record` ADD KEY `idx_audit_status` (`audit_status`)',
  70. 'SELECT 1'));
  71. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  72. -- =============================================================
  73. -- 2. 特种设备表 risk_special_equipment 加维护字段
  74. -- =============================================================
  75. -- 2.1 next_maintenance_date
  76. SET @sql = (SELECT IF(
  77. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
  78. WHERE TABLE_SCHEMA = DATABASE()
  79. AND TABLE_NAME = 'risk_special_equipment'
  80. AND COLUMN_NAME = 'next_maintenance_date') = 0,
  81. 'ALTER TABLE `risk_special_equipment` ADD COLUMN `next_maintenance_date` DATE DEFAULT NULL COMMENT ''下次维护时间(完成维护时由用户录入)'' AFTER `install_date`',
  82. 'SELECT 1'));
  83. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  84. -- 2.2 maintenance_status
  85. SET @sql = (SELECT IF(
  86. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
  87. WHERE TABLE_SCHEMA = DATABASE()
  88. AND TABLE_NAME = 'risk_special_equipment'
  89. AND COLUMN_NAME = 'maintenance_status') = 0,
  90. 'ALTER TABLE `risk_special_equipment` ADD COLUMN `maintenance_status` VARCHAR(20) DEFAULT ''未维护'' COMMENT ''维护状态(未维护/待维护/维护中/正常)'' AFTER `next_maintenance_date`',
  91. 'SELECT 1'));
  92. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  93. -- 2.3 索引 idx_maintenance_status
  94. SET @sql = (SELECT IF(
  95. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  96. WHERE TABLE_SCHEMA = DATABASE()
  97. AND TABLE_NAME = 'risk_special_equipment'
  98. AND INDEX_NAME = 'idx_maintenance_status') = 0,
  99. 'ALTER TABLE `risk_special_equipment` ADD KEY `idx_maintenance_status` (`maintenance_status`)',
  100. 'SELECT 1'));
  101. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  102. -- 2.4 索引 idx_next_maintenance_date
  103. SET @sql = (SELECT IF(
  104. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  105. WHERE TABLE_SCHEMA = DATABASE()
  106. AND TABLE_NAME = 'risk_special_equipment'
  107. AND INDEX_NAME = 'idx_next_maintenance_date') = 0,
  108. 'ALTER TABLE `risk_special_equipment` ADD KEY `idx_next_maintenance_date` (`next_maintenance_date`)',
  109. 'SELECT 1'));
  110. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  111. -- 2.5 初始化历史设备 maintenance_status
  112. UPDATE `risk_special_equipment`
  113. SET `maintenance_status` = '未维护'
  114. WHERE `maintenance_status` IS NULL OR `maintenance_status` = '';
  115. -- =============================================================
  116. -- 3. 维护记录表 risk_equipment_maintenance 加字段
  117. -- =============================================================
  118. SET @sql = (SELECT IF(
  119. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
  120. WHERE TABLE_SCHEMA = DATABASE()
  121. AND TABLE_NAME = 'risk_equipment_maintenance'
  122. AND COLUMN_NAME = 'next_maintenance_date') = 0,
  123. 'ALTER TABLE `risk_equipment_maintenance` ADD COLUMN `next_maintenance_date` DATE DEFAULT NULL COMMENT ''下次维护时间(维护完成时录入)'' AFTER `actual_end_time`',
  124. 'SELECT 1'));
  125. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  126. -- =============================================================
  127. -- 4. 字典 seed: 隐患处理结果 risk_handle_result
  128. -- =============================================================
  129. -- 4.1 字典类型
  130. INSERT INTO `sys_dict_type`
  131. (`dict_name`, `dict_type`, `status`, `create_dept`, `create_by`, `create_time`, `remark`)
  132. VALUES
  133. ('隐患处理结果', 'risk_handle_result', '0', 103, 1, NOW(), '安全隐患处理结果字典')
  134. ON DUPLICATE KEY UPDATE `update_time` = NOW();
  135. -- 4.2 字典数据 seed(只保留隐患已处置 / 隐患误报 两项)
  136. DELETE FROM `sys_dict_data`
  137. WHERE `dict_type` = 'risk_handle_result'
  138. AND `dict_value` IN ('隐患已消除', '已设置警戒', '已上报整改', '临时管控', '其他');
  139. INSERT INTO `sys_dict_data`
  140. (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_dept`, `create_by`, `create_time`, `remark`)
  141. VALUES
  142. (1, '隐患已处置', '隐患已处置', 'risk_handle_result', '', 'success', 'N', '0', 103, 1, NOW(), '隐患已经现场处置完成'),
  143. (2, '隐患误报', '隐患误报', 'risk_handle_result', '', 'info', 'N', '0', 103, 1, NOW(), '经核实为误报,无需处置')
  144. ON DUPLICATE KEY UPDATE `update_time` = NOW();
  145. -- =============================================================
  146. -- 5. 字典 seed: 审核状态 audit_status (巡检/作业/人员变动通用)
  147. -- =============================================================
  148. -- 5.1 字典类型(若不存在则补)
  149. INSERT IGNORE INTO `sys_dict_type`
  150. (`dict_name`, `dict_type`, `remark`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`)
  151. VALUES
  152. ('审核状态', 'audit_status', '巡检/作业/人员变动等业务通用审核状态', 103, 1, NOW(), 1, NOW());
  153. -- 5.2 字典数据
  154. DELETE FROM `sys_dict_data`
  155. WHERE `dict_type` = 'audit_status'
  156. AND `dict_label` IN ('待审核', '审核通过', '审核不通过');
  157. INSERT INTO `sys_dict_data`
  158. (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `remark`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`)
  159. VALUES
  160. (1, '待审核', '待审核', 'audit_status', '', 'warning', 'N', '巡检人提交后默认状态', 103, 1, NOW(), 1, NOW()),
  161. (2, '审核通过', '审核通过', 'audit_status', '', 'success', 'N', '审核人审核通过', 103, 1, NOW(), 1, NOW()),
  162. (3, '审核不通过', '审核不通过', 'audit_status', '', 'danger', 'N', '审核不通过需填原因', 103, 1, NOW(), 1, NOW());
  163. -- =============================================================
  164. -- 6. 字典 seed: 维护状态 maintenance_status
  165. -- =============================================================
  166. INSERT INTO `sys_dict_data`
  167. (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_dept`, `create_by`, `create_time`, `remark`)
  168. SELECT 0, '未维护', '未维护', 'maintenance_status', '', 'info', 'N', '0', 103, 1, NOW(), '设备从未做过维护'
  169. FROM DUAL
  170. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'maintenance_status' AND `dict_value` = '未维护');
  171. INSERT INTO `sys_dict_data`
  172. (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_dept`, `create_by`, `create_time`, `remark`)
  173. SELECT 10, '待维护', '待维护', 'maintenance_status', '', 'warning', 'N', '0', 103, 1, NOW(), '下一次维护时间已过'
  174. FROM DUAL
  175. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'maintenance_status' AND `dict_value` = '待维护');
  176. INSERT INTO `sys_dict_data`
  177. (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_dept`, `create_by`, `create_time`, `remark`)
  178. SELECT 20, '维护中', '维护中', 'maintenance_status', '', 'primary', 'N', '0', 103, 1, NOW(), '正在进行维护作业'
  179. FROM DUAL
  180. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'maintenance_status' AND `dict_value` = '维护中');
  181. INSERT INTO `sys_dict_data`
  182. (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_dept`, `create_by`, `create_time`, `remark`)
  183. SELECT 30, '已维护', '已维护', 'maintenance_status', '', 'success', 'N', '0', 103, 1, NOW(), '本次维护已完成且尚未到期'
  184. FROM DUAL
  185. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'maintenance_status' AND `dict_value` = '已维护');
  186. -- =============================================================
  187. -- 7. (可选)历史数据清洗
  188. -- =============================================================
  189. -- 7.1 隐患历史"处理中"状态归并到"待处理"
  190. UPDATE `risk_hidden_danger`
  191. SET `handle_status` = '待处理'
  192. WHERE `handle_status` = '处理中';
  193. -- =============================================================
  194. -- 8. 验证清单(可手动 SELECT 确认)
  195. -- =============================================================
  196. -- SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
  197. -- WHERE TABLE_SCHEMA = DATABASE()
  198. -- AND TABLE_NAME = 'risk_inspection_record'
  199. -- AND COLUMN_NAME IN ('audit_status','auditor_id','auditor_name','audit_time','audit_opinion');
  200. --
  201. -- SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
  202. -- WHERE TABLE_SCHEMA = DATABASE()
  203. -- AND TABLE_NAME = 'risk_special_equipment'
  204. -- AND COLUMN_NAME IN ('next_maintenance_date','maintenance_status');
  205. --
  206. -- SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
  207. -- WHERE TABLE_SCHEMA = DATABASE()
  208. -- AND TABLE_NAME = 'risk_equipment_maintenance'
  209. -- AND COLUMN_NAME = 'next_maintenance_date';
  210. --
  211. -- SELECT dict_type, dict_label, dict_value FROM sys_dict_data
  212. -- WHERE dict_type IN ('risk_handle_result','audit_status','maintenance_status')
  213. -- ORDER BY dict_type, dict_sort;