alter_auto_dispatch_schema_safe.sql 5.9 KB

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