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

V2__patrol_execution.sql 6.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. -- =============================================
  2. -- 智慧水务管理系统 - PostgreSQL DDL
  3. -- 版本: V2
  4. -- 描述: 巡检执行模块(检查项/GPS轨迹/异常上报)
  5. -- =============================================
  6. -- ==================== 巡检执行表 ====================
  7. CREATE TABLE IF NOT EXISTS patrol_execution (
  8. id BIGSERIAL PRIMARY KEY,
  9. task_id BIGINT NOT NULL REFERENCES patrol_task(id),
  10. inspector_id BIGINT NOT NULL REFERENCES patrol_worker(id),
  11. inspector_name VARCHAR(50),
  12. status VARCHAR(20) NOT NULL DEFAULT 'pending', -- pending/in_progress/completed/aborted
  13. start_time TIMESTAMP,
  14. end_time TIMESTAMP,
  15. total_check_items INT DEFAULT 0,
  16. completed_check_items INT DEFAULT 0,
  17. issue_count INT DEFAULT 0,
  18. total_distance DECIMAL(10,2) DEFAULT 0, -- 巡检总距离(km)
  19. start_lng DOUBLE PRECISION,
  20. start_lat DOUBLE PRECISION,
  21. end_lng DOUBLE PRECISION,
  22. end_lat DOUBLE PRECISION,
  23. remark VARCHAR(500),
  24. deleted SMALLINT DEFAULT 0,
  25. created_at TIMESTAMP DEFAULT NOW(),
  26. updated_at TIMESTAMP DEFAULT NOW()
  27. );
  28. COMMENT ON TABLE patrol_execution IS '巡检执行表';
  29. COMMENT ON COLUMN patrol_execution.status IS '状态: pending(待开始)/in_progress(进行中)/completed(已完成)/aborted(已中止)';
  30. COMMENT ON COLUMN patrol_execution.total_distance IS '巡检总距离(km)';
  31. CREATE INDEX IF NOT EXISTS idx_patrol_execution_task ON patrol_execution(task_id);
  32. CREATE INDEX IF NOT EXISTS idx_patrol_execution_inspector ON patrol_execution(inspector_id);
  33. CREATE INDEX IF NOT EXISTS idx_patrol_execution_status ON patrol_execution(status);
  34. CREATE INDEX IF NOT EXISTS idx_patrol_execution_start_time ON patrol_execution(start_time);
  35. -- ==================== 检查项记录表 ====================
  36. CREATE TABLE IF NOT EXISTS check_item_record (
  37. id BIGSERIAL PRIMARY KEY,
  38. execution_id BIGINT NOT NULL REFERENCES patrol_execution(id),
  39. point_seq INT, -- 检查点序号
  40. point_name VARCHAR(100), -- 检查点名称
  41. item_name VARCHAR(200), -- 检查项名称
  42. check_status VARCHAR(20) NOT NULL DEFAULT 'normal', -- normal/abnormal/skipped
  43. record_value DOUBLE PRECISION, -- 数值录入
  44. value_unit VARCHAR(20), -- 数值单位
  45. description TEXT, -- 文字描述
  46. photo_urls TEXT, -- 照片URL列表(逗号分隔)
  47. remark VARCHAR(500),
  48. record_time TIMESTAMP NOT NULL DEFAULT NOW(),
  49. lng DOUBLE PRECISION,
  50. lat DOUBLE PRECISION,
  51. deleted SMALLINT DEFAULT 0,
  52. created_at TIMESTAMP DEFAULT NOW(),
  53. updated_at TIMESTAMP DEFAULT NOW()
  54. );
  55. COMMENT ON TABLE check_item_record IS '检查项记录表';
  56. COMMENT ON COLUMN check_item_record.check_status IS '状态: normal(正常)/abnormal(异常)/skipped(跳过)';
  57. CREATE INDEX IF NOT EXISTS idx_check_item_record_execution ON check_item_record(execution_id);
  58. CREATE INDEX IF NOT EXISTS idx_check_item_record_point ON check_item_record(execution_id, point_seq);
  59. CREATE INDEX IF NOT EXISTS idx_check_item_record_status ON check_item_record(check_status);
  60. -- ==================== GPS轨迹点表 ====================
  61. CREATE TABLE IF NOT EXISTS gps_track_point (
  62. id BIGSERIAL PRIMARY KEY,
  63. execution_id BIGINT NOT NULL REFERENCES patrol_execution(id),
  64. lng DOUBLE PRECISION NOT NULL,
  65. lat DOUBLE PRECISION NOT NULL,
  66. altitude DOUBLE PRECISION, -- 海拔(米)
  67. speed DOUBLE PRECISION, -- 速度(m/s)
  68. bearing DOUBLE PRECISION, -- 方向(角度, 0-360)
  69. accuracy DOUBLE PRECISION, -- 精度(米)
  70. record_time TIMESTAMP NOT NULL DEFAULT NOW(),
  71. deleted SMALLINT DEFAULT 0,
  72. created_at TIMESTAMP DEFAULT NOW(),
  73. updated_at TIMESTAMP DEFAULT NOW()
  74. );
  75. COMMENT ON TABLE gps_track_point IS 'GPS轨迹点表';
  76. CREATE INDEX IF NOT EXISTS idx_gps_track_execution ON gps_track_point(execution_id);
  77. CREATE INDEX IF NOT EXISTS idx_gps_track_time ON gps_track_point(execution_id, record_time);
  78. -- ==================== 巡检问题表 ====================
  79. CREATE TABLE IF NOT EXISTS patrol_issue (
  80. id BIGSERIAL PRIMARY KEY,
  81. execution_id BIGINT NOT NULL REFERENCES patrol_execution(id),
  82. check_record_id BIGINT REFERENCES check_item_record(id), -- 关联检查项记录(可选)
  83. issue_type VARCHAR(30) NOT NULL, -- leak/damage/pollution/illegal/other
  84. severity VARCHAR(20) NOT NULL DEFAULT 'medium', -- low/medium/high/critical
  85. description TEXT NOT NULL,
  86. photo_urls TEXT, -- 照片URL列表(逗号分隔)
  87. lng DOUBLE PRECISION,
  88. lat DOUBLE PRECISION,
  89. address VARCHAR(300), -- 地址描述
  90. handle_status VARCHAR(20) NOT NULL DEFAULT 'pending', -- pending/processing/resolved/closed
  91. work_order_id BIGINT, -- 关联工单ID
  92. reporter_id BIGINT NOT NULL,
  93. reporter_name VARCHAR(50),
  94. report_time TIMESTAMP NOT NULL DEFAULT NOW(),
  95. deleted SMALLINT DEFAULT 0,
  96. created_at TIMESTAMP DEFAULT NOW(),
  97. updated_at TIMESTAMP DEFAULT NOW()
  98. );
  99. COMMENT ON TABLE patrol_issue IS '巡检问题表';
  100. COMMENT ON COLUMN patrol_issue.issue_type IS '问题类型: leak(漏水)/damage(损坏)/pollution(污染)/illegal(违规)/other(其他)';
  101. COMMENT ON COLUMN patrol_issue.severity IS '严重程度: low(低)/medium(中)/high(高)/critical(紧急)';
  102. COMMENT ON COLUMN patrol_issue.handle_status IS '处理状态: pending(待处理)/processing(处理中)/resolved(已解决)/closed(已关闭)';
  103. CREATE INDEX IF NOT EXISTS idx_patrol_issue_execution ON patrol_issue(execution_id);
  104. CREATE INDEX IF NOT EXISTS idx_patrol_issue_type ON patrol_issue(issue_type);
  105. CREATE INDEX IF NOT EXISTS idx_patrol_issue_severity ON patrol_issue(severity);
  106. CREATE INDEX IF NOT EXISTS idx_patrol_issue_handle_status ON patrol_issue(handle_status);
  107. CREATE INDEX IF NOT EXISTS idx_patrol_issue_report_time ON patrol_issue(report_time);