alter_auto_dispatch_schema_safe_v3.sql 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. -- ============================================
  2. -- 自动分派功能 - 数据库扩改动议脚本(达梦 DM8)- V3.0
  3. -- 使用达梦原生 SQL 实现安全扩改
  4. -- ============================================
  5. -- ====================================================
  6. -- 1. complaint_workorder 表扩展现有结构
  7. -- ====================================================
  8. -- 扩展字段 1: dispatch_note (仅当不存在时添加)
  9. DO $do$
  10. DECLARE
  11. v_count INT;
  12. BEGIN
  13. SELECT COUNT(*) INTO v_count
  14. FROM user_col$
  15. WHERE name = 'DISPATCH_NOTE' AND table_name = 'COMPLAINT_WORKORDER';
  16. IF v_count = 0 THEN
  17. EXECUTE IMMEDIATE 'ALTER TABLE complaint_workorder ADD dispatch_note VARCHAR(200)';
  18. END IF;
  19. END
  20. $do$;
  21. /
  22. COMMENT ON COLUMN complaint_workorder.dispatch_note IS '系统分派备注';
  23. -- 扩展字段 2: is_archived (仅当不存在时添加)
  24. DO $do$
  25. DECLARE
  26. v_count INT;
  27. BEGIN
  28. SELECT COUNT(*) INTO v_count
  29. FROM user_col$
  30. WHERE name = 'IS_ARCHIVED' AND table_name = 'COMPLAINT_WORKORDER';
  31. IF v_count = 0 THEN
  32. EXECUTE IMMEDIATE 'ALTER TABLE complaint_workorder ADD is_archived CHAR(1) DEFAULT ''0'' ';
  33. END IF;
  34. END
  35. $do$;
  36. /
  37. COMMENT ON COLUMN complaint_workorder.is_archived IS '是否已归档(0 否 1 是)';
  38. -- 扩展字段 3: archive_time (仅当不存在时添加)
  39. DO $do$
  40. DECLARE
  41. v_count INT;
  42. BEGIN
  43. SELECT COUNT(*) INTO v_count
  44. FROM user_col$
  45. WHERE name = 'ARCHIVE_TIME' AND table_name = 'COMPLAINT_WORKORDER';
  46. IF v_count = 0 THEN
  47. EXECUTE IMMEDIATE 'ALTER TABLE complaint_workorder ADD archive_time TIMESTAMP';
  48. END IF;
  49. END
  50. $do$;
  51. /
  52. COMMENT ON COLUMN complaint_workorder.archive_time IS '归档时间(T+90 天后填充)';
  53. -- 更新 status 列注释(覆盖原有注释)
  54. COMMENT ON COLUMN complaint_workorder.status IS '状态:-1 待分派 0 待受理 1 处理中 2 已办结 3 已驳回 5 复核中';
  55. -- ====================================================
  56. -- 2. 创建投诉工单归档表(如果不存在)
  57. -- ====================================================
  58. DROP TABLE IF EXISTS complaint_archive;
  59. CREATE TABLE complaint_archive (
  60. id BIGINT NOT NULL IDENTITY(1,1),
  61. complaint_no VARCHAR(32) NOT NULL,
  62. openid VARCHAR(64) DEFAULT '',
  63. name VARCHAR(30) DEFAULT '',
  64. phone VARCHAR(11) DEFAULT '',
  65. "identity" VARCHAR(10) DEFAULT '',
  66. city VARCHAR(30) DEFAULT '',
  67. district VARCHAR(30) DEFAULT '',
  68. unit_uid VARCHAR(64) DEFAULT '',
  69. school_name VARCHAR(100) DEFAULT '',
  70. school_type VARCHAR(20) DEFAULT '',
  71. category VARCHAR(30) DEFAULT '',
  72. content VARCHAR(1000) DEFAULT '',
  73. images VARCHAR(2000) DEFAULT '',
  74. status TINYINT DEFAULT 2,
  75. investigation VARCHAR(2000) DEFAULT '',
  76. conclusion VARCHAR(2000) DEFAULT '',
  77. process_images VARCHAR(2000) DEFAULT '',
  78. reject_reason VARCHAR(1000) DEFAULT '',
  79. accept_time TIMESTAMP,
  80. close_time TIMESTAMP,
  81. create_by VARCHAR(64) DEFAULT '',
  82. create_time TIMESTAMP,
  83. update_by VARCHAR(64) DEFAULT '',
  84. update_time TIMESTAMP,
  85. remark VARCHAR(500) DEFAULT '',
  86. original_submit_time TIMESTAMP NOT NULL,
  87. archive_time TIMESTAMP NOT NULL,
  88. PRIMARY KEY (id)
  89. );
  90. COMMENT ON TABLE complaint_archive IS '投诉工单归档表(T+90 天自动迁移)';
  91. COMMENT ON COLUMN complaint_archive.original_submit_time IS '原始提交时间(查询优化用)';
  92. COMMENT ON COLUMN complaint_archive.archive_time IS '归档操作时间';
  93. -- 归档表索引优化
  94. CREATE INDEX idx_archive_no ON complaint_archive (complaint_no);
  95. CREATE INDEX idx_archive_unit ON complaint_archive (unit_uid);
  96. CREATE INDEX idx_archive_status ON complaint_archive (status);
  97. CREATE INDEX idx_archive_create ON complaint_archive (original_submit_time);
  98. -- ====================================================
  99. -- 3. 重复检测辅助视图(提升查询性能)
  100. -- ====================================================
  101. DROP VIEW IF EXISTS v_recent_complaints;
  102. CREATE VIEW v_recent_complaints AS
  103. SELECT
  104. phone,
  105. unit_uid,
  106. LEFT(content, 50) AS content_snippet,
  107. create_time,
  108. complaint_no
  109. FROM complaint_workorder
  110. WHERE del_flag = '0' AND create_time >= DATE_SUB(NOW(), INTERVAL 30 DAY);
  111. -- ====================================================
  112. -- 4. 最终校验输出
  113. -- ====================================================
  114. SELECT '==== 扩改进度总结 ==== ' as message;
  115. SELECT
  116. CASE WHEN COUNT(*) > 0 THEN '✓ dispatch_note 已就绪' ELSE '✗ dispatch_note 缺失' END as check1
  117. FROM user_col$ WHERE name = 'DISPATCH_NOTE' AND table_name = 'COMPLAINT_WORKORDER';
  118. SELECT
  119. CASE WHEN COUNT(*) > 0 THEN '✓ is_archived 已就绪' ELSE '✗ is_archived 缺失' END as check2
  120. FROM user_col$ WHERE name = 'IS_ARCHIVED' AND table_name = 'COMPLAINT_WORKORDER';
  121. SELECT
  122. CASE WHEN COUNT(*) > 0 THEN '✓ archive_time 已就绪' ELSE '✗ archive_time 缺失' END as check3
  123. FROM user_col$ WHERE name = 'ARCHIVE_TIME' AND table_name = 'COMPLAINT_WORKORDER';
  124. SELECT
  125. CASE WHEN COUNT(*) > 0 THEN '✓ complaint_archive 表已就绪' ELSE '✗ complaint_archive 表缺失' END as check4
  126. FROM user_table$ WHERE name = 'COMPLAINT_ARCHIVE';
  127. -- ====================================================
  128. -- 结束
  129. -- ====================================================
  130. COMMIT;