dispatch_refactor.sql 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. -- =====================================================================
  2. -- 应急与指挥调度模块(dispatch)改造脚本 —— 建表 / 加列 / 字典 seed
  3. -- 数据库:KingbaseES(PG 兼容模式),业务 schema = app_user
  4. --
  5. -- 目的:
  6. -- 1) 事件域由「按操作拆 9 张表」收敛为 dis_event(主表)+ dis_event_log(日志表)
  7. -- 2) 预案域由 dis_event_plan + dis_plan_approval 两套收敛为
  8. -- dis_plan + dis_plan_version + dis_plan_log
  9. -- 3) dis_event_grade 字段字典化并补业务编号列
  10. -- 4) 事件来源/渠道/管网类型/类别/等级/区域、预案类型/等级等全部落 sys_dict_data
  11. --
  12. -- 设计口径(2026-10-14 与业务确认):
  13. -- · 事件等级:3 级 —— Ⅰ级(紧急) / Ⅱ级(较大) / Ⅲ级(一般)(原型口径)
  14. -- · 事件类别:保留两级 —— event_type(管网类型) + event_category(故障类别)
  15. -- · 事件状态:5 态 —— 0 待核实 / 1 已核实 / 2 处置中 / 3 已解除 / 4 不实事件
  16. -- 存量「待受理」归 0、「已关闭」归 3
  17. --
  18. -- 幂等性:本脚本可重复执行。
  19. -- 建表用 CREATE TABLE IF NOT EXISTS;加列用 ADD COLUMN IF NOT EXISTS;
  20. -- 字典先 DELETE 同 dict_type 再 INSERT。
  21. --
  22. -- ⚠️ 本脚本只做「新增」,不删除任何旧表/旧列/旧数据。
  23. -- 废弃旧表与旧列的 DROP 语句放在独立的 dispatch_refactor_drop.sql,
  24. -- 确认新结构运行正常后再单独执行。
  25. -- =====================================================================
  26. BEGIN;
  27. -- =====================================================================
  28. -- 一、事件域
  29. -- =====================================================================
  30. -- ---------------------------------------------------------------------
  31. -- 1.1 dis_event 事件主表(全生命周期当前值)
  32. -- 表若已存在(旧版),下列 ADD COLUMN 只会补齐缺失列;
  33. -- 旧列 source / category / level 的搬迁见第四节「存量数据迁移」。
  34. -- ---------------------------------------------------------------------
  35. CREATE TABLE IF NOT EXISTS app_user.dis_event (
  36. id int8 GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  37. event_no varchar(32),
  38. description text,
  39. event_source varchar(20),
  40. channel varchar(20),
  41. location varchar(255),
  42. longitude numeric(12,6),
  43. latitude numeric(12,6),
  44. happen_time timestamp,
  45. report_time timestamp,
  46. reporter varchar(64),
  47. reporter_phone varchar(20),
  48. event_type varchar(20),
  49. event_category varchar(20),
  50. event_level varchar(20),
  51. event_region varchar(20),
  52. status int2 NOT NULL DEFAULT 0,
  53. verify_result int2,
  54. verifier varchar(64),
  55. verify_time timestamp,
  56. verify_opinion varchar(500),
  57. handler varchar(64),
  58. handler_phone varchar(20),
  59. department varchar(128),
  60. dispose_time timestamp,
  61. release_time timestamp,
  62. release_reason varchar(20),
  63. release_note varchar(500),
  64. last_visit_time timestamp,
  65. next_visit_time timestamp,
  66. need_upgrade int2,
  67. plan_id int8,
  68. loss_amount numeric(14,2),
  69. create_by varchar(64),
  70. create_time timestamp DEFAULT CURRENT_TIMESTAMP,
  71. update_by varchar(64),
  72. update_time timestamp DEFAULT CURRENT_TIMESTAMP,
  73. del_flag char(1) DEFAULT '0'
  74. );
  75. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS event_no varchar(32);
  76. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS description text;
  77. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS event_source varchar(20);
  78. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS channel varchar(20);
  79. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS location varchar(255);
  80. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS longitude numeric(12,6);
  81. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS latitude numeric(12,6);
  82. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS happen_time timestamp;
  83. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS report_time timestamp;
  84. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS reporter varchar(64);
  85. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS reporter_phone varchar(20);
  86. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS event_type varchar(20);
  87. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS event_category varchar(20);
  88. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS event_level varchar(20);
  89. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS event_region varchar(20);
  90. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS status int2 DEFAULT 0;
  91. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS verify_result int2;
  92. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS verifier varchar(64);
  93. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS verify_time timestamp;
  94. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS verify_opinion varchar(500);
  95. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS handler varchar(64);
  96. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS handler_phone varchar(20);
  97. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS department varchar(128);
  98. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS dispose_time timestamp;
  99. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS release_time timestamp;
  100. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS release_reason varchar(20);
  101. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS release_note varchar(500);
  102. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS last_visit_time timestamp;
  103. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS next_visit_time timestamp;
  104. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS need_upgrade int2;
  105. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS plan_id int8;
  106. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS loss_amount numeric(14,2);
  107. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS create_by varchar(64);
  108. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS create_time timestamp DEFAULT CURRENT_TIMESTAMP;
  109. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS update_by varchar(64);
  110. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS update_time timestamp DEFAULT CURRENT_TIMESTAMP;
  111. ALTER TABLE app_user.dis_event ADD COLUMN IF NOT EXISTS del_flag char(1) DEFAULT '0';
  112. COMMENT ON TABLE app_user.dis_event IS '应急事件主表:一个事件一行,承载全生命周期当前值;过程留痕见 dis_event_log';
  113. COMMENT ON COLUMN app_user.dis_event.id IS '主键ID,int8 自增';
  114. COMMENT ON COLUMN app_user.dis_event.event_no IS '事件编号(业务序号:SJ+yyyyMMddHHmmss+4位随机,后端保存前生成,普通更新不可修改)';
  115. COMMENT ON COLUMN app_user.dis_event.description IS '事件描述';
  116. COMMENT ON COLUMN app_user.dis_event.event_source IS '事件来源:字典 dis_event_source';
  117. COMMENT ON COLUMN app_user.dis_event.channel IS '来源渠道:字典 dis_event_channel';
  118. COMMENT ON COLUMN app_user.dis_event.location IS '发生地点';
  119. COMMENT ON COLUMN app_user.dis_event.longitude IS '经度(发生地点地理编码得到)';
  120. COMMENT ON COLUMN app_user.dis_event.latitude IS '纬度(发生地点地理编码得到)';
  121. COMMENT ON COLUMN app_user.dis_event.happen_time IS '发生时间';
  122. COMMENT ON COLUMN app_user.dis_event.report_time IS '接报时间';
  123. COMMENT ON COLUMN app_user.dis_event.reporter IS '接报人';
  124. COMMENT ON COLUMN app_user.dis_event.reporter_phone IS '上报人联系电话';
  125. COMMENT ON COLUMN app_user.dis_event.event_type IS '管网类型:字典 dis_event_type(供水/燃气/排水/其他)';
  126. COMMENT ON COLUMN app_user.dis_event.event_category IS '事件类别:字典 dis_event_category(管道泄漏/路面积水/设施损坏/管道堵塞)';
  127. COMMENT ON COLUMN app_user.dis_event.event_level IS '事件等级:字典 dis_event_level(1-Ⅰ级紧急 2-Ⅱ级较大 3-Ⅲ级一般)';
  128. COMMENT ON COLUMN app_user.dis_event.event_region IS '发生区域:字典 dis_event_region';
  129. COMMENT ON COLUMN app_user.dis_event.status IS '事件状态:EventStatusEnum —— 0-待核实 1-已核实 2-处置中 3-已解除 4-不实事件;终态为 3、4';
  130. COMMENT ON COLUMN app_user.dis_event.verify_result IS '核实结论:0-真实 1-不实;仅 status in (1,4) 时有值';
  131. COMMENT ON COLUMN app_user.dis_event.verifier IS '核验人';
  132. COMMENT ON COLUMN app_user.dis_event.verify_time IS '核实时间';
  133. COMMENT ON COLUMN app_user.dis_event.verify_opinion IS '核实意见;判定为不实时填核销原因(字典 dis_event_false_reason)';
  134. COMMENT ON COLUMN app_user.dis_event.handler IS '责任处置人(后续工作催办的催办对象)';
  135. COMMENT ON COLUMN app_user.dis_event.handler_phone IS '责任处置人联系电话';
  136. COMMENT ON COLUMN app_user.dis_event.department IS '责任单位 / 转接接收部门';
  137. COMMENT ON COLUMN app_user.dis_event.dispose_time IS '开始处置时间(status 1→2 时写入)';
  138. COMMENT ON COLUMN app_user.dis_event.release_time IS '解除时间(status 2→3 时写入)';
  139. COMMENT ON COLUMN app_user.dis_event.release_reason IS '解除原因:字典 dis_event_release_reason';
  140. COMMENT ON COLUMN app_user.dis_event.release_note IS '解除说明 / 处置结果补充';
  141. COMMENT ON COLUMN app_user.dis_event.last_visit_time IS '最近回访时间(取最近一次处置跟踪的跟踪时间)';
  142. COMMENT ON COLUMN app_user.dis_event.next_visit_time IS '下次回访时间(取最近一次处置跟踪填写的值)';
  143. COMMENT ON COLUMN app_user.dis_event.need_upgrade IS '是否需要升级:字典 dis_yes_no(0-否 1-是),取最近一次处置跟踪填写的值';
  144. COMMENT ON COLUMN app_user.dis_event.plan_id IS '应用预案ID(dis_plan.id)';
  145. COMMENT ON COLUMN app_user.dis_event.loss_amount IS '直接经济损失(万元)';
  146. COMMENT ON COLUMN app_user.dis_event.del_flag IS '删除标志(0=正常 2=删除)';
  147. CREATE UNIQUE INDEX IF NOT EXISTS uk_dis_event_no ON app_user.dis_event(event_no);
  148. CREATE INDEX IF NOT EXISTS idx_dis_event_status ON app_user.dis_event(status);
  149. CREATE INDEX IF NOT EXISTS idx_dis_event_report_time ON app_user.dis_event(report_time DESC);
  150. CREATE INDEX IF NOT EXISTS idx_dis_event_source ON app_user.dis_event(event_source);
  151. CREATE INDEX IF NOT EXISTS idx_dis_event_level ON app_user.dis_event(event_level);
  152. CREATE INDEX IF NOT EXISTS idx_dis_event_type ON app_user.dis_event(event_type);
  153. -- ---------------------------------------------------------------------
  154. -- 1.2 dis_event_log 事件日志表
  155. -- 一张表承载全部环节留痕:接报登记 / 初判核实 / 不实核销 / 电话转接 /
  156. -- 上报报送 / 开始处置 / 处置跟踪 / 事件解除 / 工作催办 / 信息修改。
  157. -- 替代旧 dis_event_transfer_log + dis_event_track_log + dis_event_urge_detail。
  158. -- 日志完全由业务代码写入,不使用触发器/自定义函数。
  159. -- ---------------------------------------------------------------------
  160. CREATE TABLE IF NOT EXISTS app_user.dis_event_log (
  161. id int8 GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  162. event_id int8 NOT NULL,
  163. event_no varchar(32),
  164. oper_type int2 NOT NULL CHECK (oper_type BETWEEN 0 AND 9),
  165. oper_desc text,
  166. status_from int2,
  167. status_to int2,
  168. targets varchar(500),
  169. receiver_dept varchar(128),
  170. receiver_phone varchar(20),
  171. method varchar(20),
  172. urge_result varchar(20),
  173. trend varchar(20),
  174. need_upgrade int2,
  175. next_visit_time timestamp,
  176. attach_url text,
  177. oper_user_id int8,
  178. oper_user_name varchar(128),
  179. oper_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
  180. );
  181. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS event_no varchar(32);
  182. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS oper_desc text;
  183. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS status_from int2;
  184. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS status_to int2;
  185. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS targets varchar(500);
  186. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS receiver_dept varchar(128);
  187. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS receiver_phone varchar(20);
  188. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS method varchar(20);
  189. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS urge_result varchar(20);
  190. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS trend varchar(20);
  191. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS need_upgrade int2;
  192. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS next_visit_time timestamp;
  193. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS attach_url text;
  194. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS oper_user_id int8;
  195. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS oper_user_name varchar(128);
  196. ALTER TABLE app_user.dis_event_log ADD COLUMN IF NOT EXISTS oper_time timestamp DEFAULT CURRENT_TIMESTAMP;
  197. COMMENT ON TABLE app_user.dis_event_log IS '应急事件操作日志:一个事件 N 行,记录全部环节动作与状态变更轨迹;仅由业务代码写入';
  198. COMMENT ON COLUMN app_user.dis_event_log.event_id IS '关联 dis_event.id';
  199. COMMENT ON COLUMN app_user.dis_event_log.event_no IS '事件编号(冗余,便于按编号单独查日志)';
  200. COMMENT ON COLUMN app_user.dis_event_log.oper_type IS 'EventLogOperTypeEnum:0-接报登记 1-初判核实 2-不实核销 3-电话转接 4-上报报送 5-开始处置 6-处置跟踪 7-事件解除 8-工作催办 9-信息修改';
  201. COMMENT ON COLUMN app_user.dis_event_log.oper_desc IS '操作说明/备注:跟踪内容、催办内容、核实意见、解除说明等';
  202. COMMENT ON COLUMN app_user.dis_event_log.status_from IS '变更前事件状态;不改状态的动作为 NULL';
  203. COMMENT ON COLUMN app_user.dis_event_log.status_to IS '变更后事件状态;不改状态的动作为 NULL';
  204. COMMENT ON COLUMN app_user.dis_event_log.targets IS '操作对象:转接/报送部门名称(多个逗号分隔);工作催办时填目标接收人';
  205. COMMENT ON COLUMN app_user.dis_event_log.receiver_dept IS '催办接收部门(oper_type=8)';
  206. COMMENT ON COLUMN app_user.dis_event_log.receiver_phone IS '催办接收人电话(oper_type=8)';
  207. COMMENT ON COLUMN app_user.dis_event_log.method IS '催办方式:字典 dis_event_urge_method(oper_type=8)';
  208. COMMENT ON COLUMN app_user.dis_event_log.urge_result IS '催办结果:字典 dis_event_urge_result(oper_type=8)';
  209. COMMENT ON COLUMN app_user.dis_event_log.trend IS '态势评估:字典 dis_event_trend(oper_type=6 处置跟踪)';
  210. COMMENT ON COLUMN app_user.dis_event_log.need_upgrade IS '是否需要升级:字典 dis_yes_no(oper_type=6 处置跟踪)';
  211. COMMENT ON COLUMN app_user.dis_event_log.next_visit_time IS '下次回访时间(oper_type=6 处置跟踪)';
  212. COMMENT ON COLUMN app_user.dis_event_log.attach_url IS '附件URL,多个使用逗号分隔';
  213. COMMENT ON COLUMN app_user.dis_event_log.oper_user_id IS '操作人ID,系统操作可为空';
  214. COMMENT ON COLUMN app_user.dis_event_log.oper_user_name IS '操作人昵称(sys_user.nick_name);自动操作使用系统名称';
  215. COMMENT ON COLUMN app_user.dis_event_log.oper_time IS '操作时间';
  216. CREATE INDEX IF NOT EXISTS idx_dis_event_log_event ON app_user.dis_event_log(event_id, oper_time, id);
  217. CREATE INDEX IF NOT EXISTS idx_dis_event_log_type ON app_user.dis_event_log(oper_type);
  218. CREATE INDEX IF NOT EXISTS idx_dis_event_log_no ON app_user.dis_event_log(event_no);
  219. -- =====================================================================
  220. -- 二、预案域(编辑与审批合并为同一套数据)
  221. -- =====================================================================
  222. -- ---------------------------------------------------------------------
  223. -- 2.1 dis_plan 预案主表
  224. -- ---------------------------------------------------------------------
  225. CREATE TABLE IF NOT EXISTS app_user.dis_plan (
  226. id int8 GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  227. plan_no varchar(32),
  228. plan_name varchar(200) NOT NULL,
  229. plan_type varchar(20),
  230. plan_level varchar(20),
  231. compile_unit varchar(128),
  232. publish_unit varchar(128),
  233. publish_date varchar(20),
  234. attach_name varchar(255),
  235. attach_path varchar(1000),
  236. is_template int2 NOT NULL DEFAULT 0,
  237. status int2 NOT NULL DEFAULT 0,
  238. version varchar(20),
  239. content text,
  240. approve_result varchar(20),
  241. approve_time timestamp,
  242. approve_note varchar(500),
  243. create_by varchar(64),
  244. create_time timestamp DEFAULT CURRENT_TIMESTAMP,
  245. update_by varchar(64),
  246. update_time timestamp DEFAULT CURRENT_TIMESTAMP,
  247. del_flag char(1) DEFAULT '0'
  248. );
  249. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS plan_no varchar(32);
  250. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS plan_type varchar(20);
  251. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS plan_level varchar(20);
  252. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS compile_unit varchar(128);
  253. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS publish_unit varchar(128);
  254. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS publish_date varchar(20);
  255. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS attach_name varchar(255);
  256. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS attach_path varchar(1000);
  257. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS is_template int2 DEFAULT 0;
  258. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS status int2 DEFAULT 0;
  259. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS version varchar(20);
  260. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS content text;
  261. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS approve_result varchar(20);
  262. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS approve_time timestamp;
  263. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS approve_note varchar(500);
  264. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS create_by varchar(64);
  265. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS create_time timestamp DEFAULT CURRENT_TIMESTAMP;
  266. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS update_by varchar(64);
  267. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS update_time timestamp DEFAULT CURRENT_TIMESTAMP;
  268. ALTER TABLE app_user.dis_plan ADD COLUMN IF NOT EXISTS del_flag char(1) DEFAULT '0';
  269. COMMENT ON TABLE app_user.dis_plan IS '应急预案主表:预案编辑与预案审批共用同一套数据,状态流转 草稿→待审核→已通过/已驳回';
  270. COMMENT ON COLUMN app_user.dis_plan.plan_no IS '预案编号(业务序号:YA+yyyyMMdd+4位随机)';
  271. COMMENT ON COLUMN app_user.dis_plan.plan_name IS '预案名称';
  272. COMMENT ON COLUMN app_user.dis_plan.plan_type IS '预案类型:字典 dis_plan_type(综合/专项/现场处置)';
  273. COMMENT ON COLUMN app_user.dis_plan.plan_level IS '预案等级:字典 dis_plan_level(Ⅰ级/Ⅱ级/Ⅲ级)';
  274. COMMENT ON COLUMN app_user.dis_plan.compile_unit IS '编制单位';
  275. COMMENT ON COLUMN app_user.dis_plan.publish_unit IS '发布单位';
  276. COMMENT ON COLUMN app_user.dis_plan.publish_date IS '发布日期';
  277. COMMENT ON COLUMN app_user.dis_plan.attach_name IS '附件名称';
  278. COMMENT ON COLUMN app_user.dis_plan.attach_path IS '附件路径';
  279. COMMENT ON COLUMN app_user.dis_plan.is_template IS '是否预案模板:0-否 1-是(新建预案时可套用模板的章节结构)';
  280. COMMENT ON COLUMN app_user.dis_plan.status IS 'PlanStatusEnum:0-草稿 1-待审核 2-已通过 3-已驳回';
  281. COMMENT ON COLUMN app_user.dis_plan.version IS '当前生效版本号;尚未审批通过时为空';
  282. COMMENT ON COLUMN app_user.dis_plan.content IS '当前正文(富文本 HTML);生效正文以版本表快照为准';
  283. COMMENT ON COLUMN app_user.dis_plan.approve_result IS '审批结果:通过 / 不通过';
  284. COMMENT ON COLUMN app_user.dis_plan.approve_time IS '审批完成时间';
  285. COMMENT ON COLUMN app_user.dis_plan.approve_note IS '审批意见;不通过时为驳回原因(必填)';
  286. CREATE UNIQUE INDEX IF NOT EXISTS uk_dis_plan_no ON app_user.dis_plan(plan_no);
  287. CREATE INDEX IF NOT EXISTS idx_dis_plan_status ON app_user.dis_plan(status);
  288. CREATE INDEX IF NOT EXISTS idx_dis_plan_template ON app_user.dis_plan(is_template);
  289. -- ---------------------------------------------------------------------
  290. -- 2.2 dis_plan_version 预案版本快照表
  291. -- ---------------------------------------------------------------------
  292. CREATE TABLE IF NOT EXISTS app_user.dis_plan_version (
  293. id int8 GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  294. plan_id int8 NOT NULL,
  295. plan_no varchar(32),
  296. version varchar(20) NOT NULL,
  297. content text,
  298. change_note varchar(500),
  299. editor varchar(64),
  300. edit_time timestamp,
  301. ver_status int2 NOT NULL DEFAULT 0
  302. );
  303. ALTER TABLE app_user.dis_plan_version ADD COLUMN IF NOT EXISTS plan_no varchar(32);
  304. ALTER TABLE app_user.dis_plan_version ADD COLUMN IF NOT EXISTS content text;
  305. ALTER TABLE app_user.dis_plan_version ADD COLUMN IF NOT EXISTS change_note varchar(500);
  306. ALTER TABLE app_user.dis_plan_version ADD COLUMN IF NOT EXISTS editor varchar(64);
  307. ALTER TABLE app_user.dis_plan_version ADD COLUMN IF NOT EXISTS edit_time timestamp;
  308. ALTER TABLE app_user.dis_plan_version ADD COLUMN IF NOT EXISTS ver_status int2 DEFAULT 0;
  309. COMMENT ON TABLE app_user.dis_plan_version IS '应急预案版本快照:审核通过后的正文落地为版本;修订已通过预案先生成「审核中」候选版本,旧版本仍生效';
  310. COMMENT ON COLUMN app_user.dis_plan_version.plan_id IS '关联 dis_plan.id';
  311. COMMENT ON COLUMN app_user.dis_plan_version.version IS '版本号,如 v3.1';
  312. COMMENT ON COLUMN app_user.dis_plan_version.content IS '该版本正文快照(富文本 HTML)';
  313. COMMENT ON COLUMN app_user.dis_plan_version.change_note IS '变更说明;修订已通过预案时必填';
  314. COMMENT ON COLUMN app_user.dis_plan_version.editor IS '修订人';
  315. COMMENT ON COLUMN app_user.dis_plan_version.edit_time IS '修订时间';
  316. COMMENT ON COLUMN app_user.dis_plan_version.ver_status IS 'PlanVersionStatusEnum:0-历史 1-当前生效 2-审核中 3-已驳回';
  317. CREATE INDEX IF NOT EXISTS idx_dis_plan_version_plan ON app_user.dis_plan_version(plan_id, ver_status);
  318. CREATE UNIQUE INDEX IF NOT EXISTS uk_dis_plan_version ON app_user.dis_plan_version(plan_id, version);
  319. -- ---------------------------------------------------------------------
  320. -- 2.3 dis_plan_log 预案操作日志表
  321. -- 替代旧 dis_plan_approval + dis_plan_approval_step(原型审批为单环节)
  322. -- ---------------------------------------------------------------------
  323. CREATE TABLE IF NOT EXISTS app_user.dis_plan_log (
  324. id int8 GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  325. plan_id int8 NOT NULL,
  326. plan_no varchar(32),
  327. oper_type int2 NOT NULL CHECK (oper_type BETWEEN 0 AND 4),
  328. oper_desc text,
  329. version varchar(20),
  330. status_from int2,
  331. status_to int2,
  332. oper_user_id int8,
  333. oper_user_name varchar(128),
  334. oper_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
  335. );
  336. ALTER TABLE app_user.dis_plan_log ADD COLUMN IF NOT EXISTS plan_no varchar(32);
  337. ALTER TABLE app_user.dis_plan_log ADD COLUMN IF NOT EXISTS oper_desc text;
  338. ALTER TABLE app_user.dis_plan_log ADD COLUMN IF NOT EXISTS version varchar(20);
  339. ALTER TABLE app_user.dis_plan_log ADD COLUMN IF NOT EXISTS status_from int2;
  340. ALTER TABLE app_user.dis_plan_log ADD COLUMN IF NOT EXISTS status_to int2;
  341. ALTER TABLE app_user.dis_plan_log ADD COLUMN IF NOT EXISTS oper_user_id int8;
  342. ALTER TABLE app_user.dis_plan_log ADD COLUMN IF NOT EXISTS oper_user_name varchar(128);
  343. ALTER TABLE app_user.dis_plan_log ADD COLUMN IF NOT EXISTS oper_time timestamp DEFAULT CURRENT_TIMESTAMP;
  344. COMMENT ON TABLE app_user.dis_plan_log IS '应急预案操作日志:新建/提交审核/审批通过/审批驳回/修订全部留痕';
  345. COMMENT ON COLUMN app_user.dis_plan_log.oper_type IS 'PlanLogOperTypeEnum:0-新建 1-提交审核 2-审批通过 3-审批驳回 4-修订';
  346. COMMENT ON COLUMN app_user.dis_plan_log.oper_desc IS '操作说明/审批意见';
  347. COMMENT ON COLUMN app_user.dis_plan_log.version IS '本次操作涉及的版本号';
  348. COMMENT ON COLUMN app_user.dis_plan_log.status_from IS '变更前预案状态';
  349. COMMENT ON COLUMN app_user.dis_plan_log.status_to IS '变更后预案状态';
  350. CREATE INDEX IF NOT EXISTS idx_dis_plan_log_plan ON app_user.dis_plan_log(plan_id, oper_time, id);
  351. -- =====================================================================
  352. -- 三、事件分级(保留原表,字段字典化 + 补业务编号)
  353. -- =====================================================================
  354. CREATE TABLE IF NOT EXISTS app_user.dis_event_grade (
  355. id int8 GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  356. grade_no varchar(32),
  357. event_category varchar(20),
  358. event_type varchar(20),
  359. event_level varchar(20),
  360. sub_category varchar(50),
  361. scenario varchar(200),
  362. criteria text,
  363. response varchar(500),
  364. status int2 NOT NULL DEFAULT 0,
  365. remark varchar(500),
  366. create_by varchar(64),
  367. create_time timestamp DEFAULT CURRENT_TIMESTAMP,
  368. update_by varchar(64),
  369. update_time timestamp DEFAULT CURRENT_TIMESTAMP,
  370. del_flag char(1) DEFAULT '0'
  371. );
  372. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS grade_no varchar(32);
  373. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS event_category varchar(20);
  374. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS event_type varchar(20);
  375. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS event_level varchar(20);
  376. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS sub_category varchar(50);
  377. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS scenario varchar(200);
  378. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS criteria text;
  379. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS response varchar(500);
  380. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS status int2 DEFAULT 0;
  381. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS remark varchar(500);
  382. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS create_by varchar(64);
  383. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS create_time timestamp DEFAULT CURRENT_TIMESTAMP;
  384. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS update_by varchar(64);
  385. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS update_time timestamp DEFAULT CURRENT_TIMESTAMP;
  386. ALTER TABLE app_user.dis_event_grade ADD COLUMN IF NOT EXISTS del_flag char(1) DEFAULT '0';
  387. COMMENT ON TABLE app_user.dis_event_grade IS '应急事件分级分类标准,同时作为初判核实的辅助核实依据';
  388. COMMENT ON COLUMN app_user.dis_event_grade.grade_no IS '标准编号(业务序号:GJ+yyyyMMdd+3位随机)';
  389. COMMENT ON COLUMN app_user.dis_event_grade.event_category IS '事件类别:字典 dis_event_category';
  390. COMMENT ON COLUMN app_user.dis_event_grade.event_type IS '管网类型:字典 dis_event_type';
  391. COMMENT ON COLUMN app_user.dis_event_grade.event_level IS '事件等级:字典 dis_event_level';
  392. COMMENT ON COLUMN app_user.dis_event_grade.sub_category IS '类别细分';
  393. COMMENT ON COLUMN app_user.dis_event_grade.scenario IS '适用场景';
  394. COMMENT ON COLUMN app_user.dis_event_grade.criteria IS '分级分类判断标准';
  395. COMMENT ON COLUMN app_user.dis_event_grade.response IS '响应要求,如:30 分钟内启动预案';
  396. COMMENT ON COLUMN app_user.dis_event_grade.status IS '标准生效状态:0-启用 1-停用';
  397. CREATE UNIQUE INDEX IF NOT EXISTS uk_dis_event_grade_no ON app_user.dis_event_grade(grade_no);
  398. CREATE INDEX IF NOT EXISTS idx_dis_event_grade_query ON app_user.dis_event_grade(event_category, event_level, status);
  399. -- =====================================================================
  400. -- 四、存量数据迁移 —— 见独立文件 dispatch_refactor_migrate.sql
  401. -- 本脚本只负责建表 / 加列 / 字典,可安全用于全新库与既有库。
  402. -- 存量数据搬迁依赖旧表旧列(source / level / category / dis_event_report 等),
  403. -- 在新库上必然因缺列缺表报错,因此单独拆出,只在有存量数据的环境执行。
  404. -- =====================================================================
  405. -- =====================================================================
  406. -- 五、字典(sys_dict_type / sys_dict_data)
  407. -- 编码口径:dict_value 存编码,dict_label 存中文,list_class 配徽标色。
  408. -- =====================================================================
  409. DELETE FROM app_user.sys_dict_data
  410. WHERE dict_type IN ('dis_event_source','dis_event_channel','dis_event_type','dis_event_category',
  411. 'dis_event_level','dis_event_region','dis_event_urge_method','dis_event_urge_result',
  412. 'dis_event_trend','dis_event_false_reason','dis_event_release_reason',
  413. 'dis_transfer_dept','dis_report_target',
  414. 'dis_plan_type','dis_plan_level','dis_yes_no');
  415. INSERT INTO app_user.sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
  416. SELECT v.dict_name, v.dict_type, '0', 'admin', CURRENT_TIMESTAMP, v.remark
  417. FROM (VALUES
  418. ('应急事件来源', 'dis_event_source', '应急事件来源:1巡查上报 2呼叫中心 3视频监控 4上级下达'),
  419. ('应急事件来源渠道', 'dis_event_channel', '应急事件来源渠道'),
  420. ('应急管网类型', 'dis_event_type', '应急事件管网类型:1供水管网 2燃气管网 3排水管网 9其他'),
  421. ('应急事件类别', 'dis_event_category', '应急事件类别:故障类别'),
  422. ('应急事件等级', 'dis_event_level', '应急事件等级:1Ⅰ级紧急 2Ⅱ级较大 3Ⅲ级一般'),
  423. ('应急事件区域', 'dis_event_region', '应急事件发生区域'),
  424. ('工作催办方式', 'dis_event_urge_method', '工作催办方式:1电话 2短信 3系统消息'),
  425. ('工作催办结果', 'dis_event_urge_result', '工作催办结果:0未反馈 1已反馈'),
  426. ('处置态势评估', 'dis_event_trend', '处置跟踪的态势评估:1趋于平稳 2仍在发展 3明显恶化'),
  427. ('不实事件核销原因', 'dis_event_false_reason', '初判核实判定不实时的核销原因'),
  428. ('事件解除原因', 'dis_event_release_reason', '事件解除原因'),
  429. ('转接报送部门', 'dis_transfer_dept', '电话转接 / 上报报送的接收部门'),
  430. ('上报报送层级', 'dis_report_target', '上报报送的层级对象'),
  431. ('应急预案类型', 'dis_plan_type', '应急预案类型:1综合 2专项 3现场处置'),
  432. ('应急预案等级', 'dis_plan_level', '应急预案等级:1Ⅰ级 2Ⅱ级 3Ⅲ级'),
  433. ('通用是否', 'dis_yes_no', '通用是否:0否 1是')
  434. ) AS v(dict_name, dict_type, remark)
  435. WHERE NOT EXISTS (SELECT 1 FROM app_user.sys_dict_type t WHERE t.dict_type = v.dict_type);
  436. INSERT INTO app_user.sys_dict_data
  437. (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
  438. VALUES
  439. -- 事件来源
  440. (1, '巡查上报', '1', 'dis_event_source', '', 'primary', 'Y', '0', 'admin', CURRENT_TIMESTAMP, '应急事件来源:巡查上报'),
  441. (2, '呼叫中心', '2', 'dis_event_source', '', 'info', 'N', '0', 'admin', CURRENT_TIMESTAMP, '应急事件来源:呼叫中心'),
  442. (3, '视频监控', '3', 'dis_event_source', '', 'info', 'N', '0', 'admin', CURRENT_TIMESTAMP, '应急事件来源:视频监控'),
  443. (4, '上级下达', '4', 'dis_event_source', '', 'warning', 'N', '0', 'admin', CURRENT_TIMESTAMP, '应急事件来源:上级下达'),
  444. -- 来源渠道
  445. (1, '12345市民热线', '1', 'dis_event_channel', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '来源渠道:12345市民热线'),
  446. (2, '移动终端巡查系统', '2', 'dis_event_channel', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '来源渠道:移动终端巡查系统'),
  447. (3, '省应急管理厅平台', '3', 'dis_event_channel', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '来源渠道:省应急管理厅平台'),
  448. (4, '交警监控共享平台', '4', 'dis_event_channel', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '来源渠道:交警监控共享平台'),
  449. (5, '其他', '9', 'dis_event_channel', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '来源渠道:其他'),
  450. -- 管网类型
  451. (1, '供水管网', '1', 'dis_event_type', '', 'primary', 'N', '0', 'admin', CURRENT_TIMESTAMP, '应急管网类型:供水管网'),
  452. (2, '燃气管网', '2', 'dis_event_type', '', 'warning', 'N', '0', 'admin', CURRENT_TIMESTAMP, '应急管网类型:燃气管网'),
  453. (3, '排水管网', '3', 'dis_event_type', '', 'info', 'N', '0', 'admin', CURRENT_TIMESTAMP, '应急管网类型:排水管网'),
  454. (4, '其他', '9', 'dis_event_type', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '应急管网类型:其他'),
  455. -- 事件类别
  456. (1, '管道泄漏', '1', 'dis_event_category', '', 'danger', 'N', '0', 'admin', CURRENT_TIMESTAMP, '事件类别:管道泄漏'),
  457. (2, '路面积水', '2', 'dis_event_category', '', 'warning', 'N', '0', 'admin', CURRENT_TIMESTAMP, '事件类别:路面积水'),
  458. (3, '设施损坏', '3', 'dis_event_category', '', 'info', 'N', '0', 'admin', CURRENT_TIMESTAMP, '事件类别:设施损坏'),
  459. (4, '管道堵塞', '4', 'dis_event_category', '', 'info', 'N', '0', 'admin', CURRENT_TIMESTAMP, '事件类别:管道堵塞'),
  460. -- 事件等级(3 级口径)
  461. (1, 'Ⅰ级(紧急)', '1', 'dis_event_level', '', 'danger', 'N', '0', 'admin', CURRENT_TIMESTAMP, '事件等级:Ⅰ级紧急'),
  462. (2, 'Ⅱ级(较大)', '2', 'dis_event_level', '', 'warning', 'N', '0', 'admin', CURRENT_TIMESTAMP, '事件等级:Ⅱ级较大'),
  463. (3, 'Ⅲ级(一般)', '3', 'dis_event_level', '', 'info', 'Y', '0', 'admin', CURRENT_TIMESTAMP, '事件等级:Ⅲ级一般'),
  464. -- 发生区域(按实际片区维护,以下为占位默认值)
  465. (1, '城东片区', '1', 'dis_event_region', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '发生区域:城东片区(按实际维护)'),
  466. (2, '城南片区', '2', 'dis_event_region', '', '', 'Y', '0', 'admin', CURRENT_TIMESTAMP, '发生区域:城南片区(按实际维护)'),
  467. (3, '城北片区', '3', 'dis_event_region', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '发生区域:城北片区(按实际维护)'),
  468. (4, '太常片区', '4', 'dis_event_region', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '发生区域:太常片区(按实际维护)'),
  469. -- 催办方式
  470. (1, '电话', '1', 'dis_event_urge_method', '', '', 'Y', '0', 'admin', CURRENT_TIMESTAMP, '催办方式:电话'),
  471. (2, '短信', '2', 'dis_event_urge_method', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '催办方式:短信'),
  472. (3, '系统消息', '3', 'dis_event_urge_method', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '催办方式:系统消息'),
  473. -- 催办结果
  474. (1, '未反馈', '0', 'dis_event_urge_result', '', 'info', 'Y', '0', 'admin', CURRENT_TIMESTAMP, '催办结果:未反馈'),
  475. (2, '已反馈', '1', 'dis_event_urge_result', '', 'success','N', '0', 'admin', CURRENT_TIMESTAMP, '催办结果:已反馈'),
  476. -- 态势评估
  477. (1, '趋于平稳', '1', 'dis_event_trend', '', 'success', 'Y', '0', 'admin', CURRENT_TIMESTAMP, '态势评估:趋于平稳'),
  478. (2, '仍在发展', '2', 'dis_event_trend', '', 'warning', 'N', '0', 'admin', CURRENT_TIMESTAMP, '态势评估:仍在发展'),
  479. (3, '明显恶化', '3', 'dis_event_trend', '', 'danger', 'N', '0', 'admin', CURRENT_TIMESTAMP, '态势评估:明显恶化'),
  480. -- 不实核销原因
  481. (1, '误报', '1', 'dis_event_false_reason', '', 'info', 'Y', '0', 'admin', CURRENT_TIMESTAMP, '核销原因:误报'),
  482. (2, '重复上报', '2', 'dis_event_false_reason', '', 'info', 'N', '0', 'admin', CURRENT_TIMESTAMP, '核销原因:重复上报'),
  483. (3, '演练测试', '3', 'dis_event_false_reason', '', 'info', 'N', '0', 'admin', CURRENT_TIMESTAMP, '核销原因:演练测试'),
  484. (4, '其他', '9', 'dis_event_false_reason', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '核销原因:其他'),
  485. -- 解除原因
  486. (1, '事件已处置完成', '1', 'dis_event_release_reason', '', 'success', 'Y', '0', 'admin', CURRENT_TIMESTAMP, '解除原因:事件已处置完成'),
  487. (2, '事件不存在', '2', 'dis_event_release_reason', '', 'info', 'N', '0', 'admin', CURRENT_TIMESTAMP, '解除原因:事件不存在'),
  488. (3, '误报', '3', 'dis_event_release_reason', '', 'info', 'N', '0', 'admin', CURRENT_TIMESTAMP, '解除原因:误报'),
  489. (4, '其他原因', '9', 'dis_event_release_reason', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '解除原因:其他原因'),
  490. -- 转接报送部门(转接弹窗多选、列表按责任单位筛选共用)
  491. (1, '市政部门', '1', 'dis_transfer_dept', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '转接部门:市政部门'),
  492. (2, '消防部门', '2', 'dis_transfer_dept', '', 'warning', 'N', '0', 'admin', CURRENT_TIMESTAMP, '转接部门:消防部门'),
  493. (3, '排水管理部', '3', 'dis_transfer_dept', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '转接部门:排水管理部'),
  494. (4, '管网维护部', '4', 'dis_transfer_dept', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '转接部门:管网维护部'),
  495. (5, '设备运维部', '5', 'dis_transfer_dept', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '转接部门:设备运维部'),
  496. (6, '安全管理部', '6', 'dis_transfer_dept', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '转接部门:安全管理部'),
  497. -- 上报报送层级(报送弹窗多选)
  498. (1, '区级应急办', '1', 'dis_report_target', '', '', 'N', '0', 'admin', CURRENT_TIMESTAMP, '报送层级:区级应急办'),
  499. (2, '市级应急办', '2', 'dis_report_target', '', 'primary', 'N', '0', 'admin', CURRENT_TIMESTAMP, '报送层级:市级应急办'),
  500. (3, '省级应急厅', '3', 'dis_report_target', '', 'warning', 'N', '0', 'admin', CURRENT_TIMESTAMP, '报送层级:省级应急厅'),
  501. (4, '国务院应急管理部', '4', 'dis_report_target', '', 'danger', 'N', '0', 'admin', CURRENT_TIMESTAMP, '报送层级:国务院应急管理部'),
  502. -- 预案类型
  503. (1, '综合', '1', 'dis_plan_type', '', 'primary', 'N', '0', 'admin', CURRENT_TIMESTAMP, '预案类型:综合'),
  504. (2, '专项', '2', 'dis_plan_type', '', 'success', 'N', '0', 'admin', CURRENT_TIMESTAMP, '预案类型:专项'),
  505. (3, '现场处置', '3', 'dis_plan_type', '', 'info', 'N', '0', 'admin', CURRENT_TIMESTAMP, '预案类型:现场处置'),
  506. -- 预案等级
  507. (1, 'Ⅰ级', '1', 'dis_plan_level', '', 'danger', 'N', '0', 'admin', CURRENT_TIMESTAMP, '预案等级:Ⅰ级'),
  508. (2, 'Ⅱ级', '2', 'dis_plan_level', '', 'warning', 'N', '0', 'admin', CURRENT_TIMESTAMP, '预案等级:Ⅱ级'),
  509. (3, 'Ⅲ级', '3', 'dis_plan_level', '', 'info', 'N', '0', 'admin', CURRENT_TIMESTAMP, '预案等级:Ⅲ级'),
  510. -- 通用是否
  511. (1, '否', '0', 'dis_yes_no', '', 'info', 'Y', '0', 'admin', CURRENT_TIMESTAMP, '通用是否:否'),
  512. (2, '是', '1', 'dis_yes_no', '', 'warning', 'N', '0', 'admin', CURRENT_TIMESTAMP, '通用是否:是');
  513. COMMIT;
  514. -- =====================================================================
  515. -- 六、执行后自检
  516. -- =====================================================================
  517. -- 1) 新表是否齐全(用 to_regclass,避免 information_schema.tables 触发
  518. -- sys_freespace 权限校验;在部分 KingbaseES 实例上普通账号会报权限错误)
  519. -- SELECT to_regclass('app_user.dis_event'), to_regclass('app_user.dis_event_log'),
  520. -- to_regclass('app_user.dis_event_grade'), to_regclass('app_user.dis_plan'),
  521. -- to_regclass('app_user.dis_plan_version'), to_regclass('app_user.dis_plan_log');
  522. -- 2) 字典是否写入
  523. -- SELECT dict_type, count(*) FROM app_user.sys_dict_data
  524. -- WHERE dict_type LIKE 'dis_%' GROUP BY dict_type ORDER BY dict_type;
  525. -- 3) 事件状态分布是否符合预期(只应是 0~4)
  526. -- SELECT status, count(*) FROM app_user.dis_event GROUP BY status ORDER BY status;
  527. -- 4) 日志是否迁移到位
  528. -- SELECT oper_type, count(*) FROM app_user.dis_event_log GROUP BY oper_type ORDER BY oper_type;