智慧水务管理系统 - 精河县供水工程综合管理平台

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. -- =============================================
  2. -- 智慧水务管理系统 - 巡检问题上报 + 工单管理 DDL
  3. -- 版本: V1
  4. -- =============================================
  5. -- 巡检问题上报表
  6. CREATE TABLE IF NOT EXISTS patrol_problem (
  7. id BIGSERIAL PRIMARY KEY,
  8. problem_no VARCHAR(30) UNIQUE NOT NULL, -- 问题编号:WQ-2026-001
  9. task_id BIGINT REFERENCES patrol_task(id),
  10. point_seq INT,
  11. device_id BIGINT,
  12. device_name VARCHAR(200),
  13. problem_type VARCHAR(50) NOT NULL, -- 设备故障/水质异常/安全隐患/环境卫生/其他
  14. problem_level VARCHAR(20) DEFAULT 'normal', -- low/normal/high/critical
  15. problem_title VARCHAR(200) NOT NULL,
  16. problem_description TEXT,
  17. location VARCHAR(300),
  18. lng DOUBLE PRECISION,
  19. lat DOUBLE PRECISION,
  20. photo_urls JSONB, -- 现场照片URL数组
  21. reporter_id BIGINT REFERENCES sys_user(id),
  22. reporter_name VARCHAR(50),
  23. report_time TIMESTAMP DEFAULT NOW(),
  24. status VARCHAR(20) DEFAULT 'reported', -- reported/processing/completed/closed
  25. work_order_id BIGINT, -- 关联工单ID
  26. created_at TIMESTAMP DEFAULT NOW(),
  27. updated_at TIMESTAMP DEFAULT NOW()
  28. );
  29. COMMENT ON TABLE patrol_problem IS '巡检问题上报表';
  30. CREATE INDEX IF NOT EXISTS idx_problem_task ON patrol_problem(task_id);
  31. CREATE INDEX IF NOT EXISTS idx_problem_status ON patrol_problem(status);
  32. CREATE INDEX IF NOT EXISTS idx_problem_device ON patrol_problem(device_id);
  33. CREATE INDEX IF NOT EXISTS idx_problem_type ON patrol_problem(problem_type);
  34. -- 工单表
  35. CREATE TABLE IF NOT EXISTS work_order (
  36. id BIGSERIAL PRIMARY KEY,
  37. order_no VARCHAR(30) UNIQUE NOT NULL, -- 工单编号:WO-2026-001
  38. problem_id BIGINT REFERENCES patrol_problem(id),
  39. order_type VARCHAR(50) NOT NULL, -- 设备维修/水质处理/安全隐患处理/清洁/其他
  40. priority VARCHAR(20) DEFAULT 'normal', -- low/normal/high/critical
  41. title VARCHAR(200) NOT NULL,
  42. description TEXT,
  43. location VARCHAR(300),
  44. contact_person VARCHAR(50),
  45. contact_phone VARCHAR(20),
  46. reporter_id BIGINT REFERENCES sys_user(id),
  47. reporter_name VARCHAR(50),
  48. assignee_id BIGINT REFERENCES sys_user(id),
  49. assignee_name VARCHAR(50),
  50. status VARCHAR(20) DEFAULT 'pending', -- pending/assigned/processing/completed/cancelled
  51. process_status VARCHAR(20) DEFAULT 'created', -- created/accepted/in_progress/completed
  52. estimated_duration INT, -- 预计工时(分钟)
  53. actual_start_time TIMESTAMP,
  54. actual_end_time TIMESTAMP,
  55. completion_time TIMESTAMP,
  56. photos_before JSONB, -- 处理前照片
  57. photos_after JSONB, -- 处理后照片
  58. solution_description TEXT, -- 处理方案描述
  59. solution_result TEXT, -- 处理结果
  60. customer_feedback TEXT, -- 客户反馈
  61. created_at TIMESTAMP DEFAULT NOW(),
  62. updated_at TIMESTAMP DEFAULT NOW()
  63. );
  64. COMMENT ON TABLE work_order IS '工单表';
  65. CREATE INDEX IF NOT EXISTS idx_order_problem ON work_order(problem_id);
  66. CREATE INDEX IF NOT EXISTS idx_order_status ON work_order(status, process_status);
  67. CREATE INDEX IF NOT EXISTS idx_order_assignee ON work_order(assignee_id);
  68. -- 工单处理记录表
  69. CREATE TABLE IF NOT EXISTS work_order_process (
  70. id BIGSERIAL PRIMARY KEY,
  71. work_order_id BIGINT REFERENCES work_order(id),
  72. process_step VARCHAR(50) NOT NULL, -- created/accepted/in_progress/completed
  73. processor_id BIGINT REFERENCES sys_user(id),
  74. processor_name VARCHAR(50),
  75. action VARCHAR(50) NOT NULL, -- create/assign/start/complete/cancel
  76. comment TEXT,
  77. photos JSONB, -- 处理过程照片
  78. created_at TIMESTAMP DEFAULT NOW()
  79. );
  80. COMMENT ON TABLE work_order_process IS '工单处理记录表';
  81. CREATE INDEX IF NOT EXISTS idx_process_order ON work_order_process(work_order_id);
  82. CREATE INDEX IF NOT EXISTS idx_process_step ON work_order_process(process_step);
  83. -- 工单附件表
  84. CREATE TABLE IF NOT EXISTS work_order_attachment (
  85. id BIGSERIAL PRIMARY KEY,
  86. work_order_id BIGINT REFERENCES work_order(id),
  87. file_name VARCHAR(200) NOT NULL,
  88. file_path VARCHAR(500) NOT NULL,
  89. file_type VARCHAR(50), -- image/pdf/doc/other
  90. file_size BIGINT,
  91. uploaded_by BIGINT REFERENCES sys_user(id),
  92. uploaded_at TIMESTAMP DEFAULT NOW()
  93. );
  94. COMMENT ON TABLE work_order_attachment IS '工单附件表';
  95. CREATE INDEX IF NOT EXISTS idx_attachment_order ON work_order_attachment(work_order_id);
  96. -- 巡检问题与工单关联触发记录
  97. CREATE TABLE IF NOT EXISTS patrol_work_order_trigger (
  98. id BIGSERIAL PRIMARY KEY,
  99. patrol_problem_id BIGINT REFERENCES patrol_problem(id),
  100. work_order_id BIGINT REFERENCES work_order(id),
  101. trigger_type VARCHAR(20) NOT NULL, -- auto/manual
  102. trigger_condition JSONB, -- 触发条件
  103. created_at TIMESTAMP DEFAULT NOW()
  104. );
  105. COMMENT ON TABLE patrol_work_order_trigger IS '巡检问题与工单关联触发记录';
  106. CREATE INDEX IF NOT EXISTS idx_trigger_problem ON patrol_work_order_trigger(patrol_problem_id);
  107. CREATE INDEX IF NOT EXISTS idx_trigger_order ON patrol_work_order_trigger(work_order_id);