| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- -- =============================================
- -- 智慧水务管理系统 - PostgreSQL DDL
- -- 版本: V2
- -- 描述: 巡检执行模块(检查项/GPS轨迹/异常上报)
- -- =============================================
-
- -- ==================== 巡检执行表 ====================
- CREATE TABLE IF NOT EXISTS patrol_execution (
- id BIGSERIAL PRIMARY KEY,
- task_id BIGINT NOT NULL REFERENCES patrol_task(id),
- inspector_id BIGINT NOT NULL REFERENCES patrol_worker(id),
- inspector_name VARCHAR(50),
- status VARCHAR(20) NOT NULL DEFAULT 'pending', -- pending/in_progress/completed/aborted
- start_time TIMESTAMP,
- end_time TIMESTAMP,
- total_check_items INT DEFAULT 0,
- completed_check_items INT DEFAULT 0,
- issue_count INT DEFAULT 0,
- total_distance DECIMAL(10,2) DEFAULT 0, -- 巡检总距离(km)
- start_lng DOUBLE PRECISION,
- start_lat DOUBLE PRECISION,
- end_lng DOUBLE PRECISION,
- end_lat DOUBLE PRECISION,
- remark VARCHAR(500),
- deleted SMALLINT DEFAULT 0,
- created_at TIMESTAMP DEFAULT NOW(),
- updated_at TIMESTAMP DEFAULT NOW()
- );
- COMMENT ON TABLE patrol_execution IS '巡检执行表';
- COMMENT ON COLUMN patrol_execution.status IS '状态: pending(待开始)/in_progress(进行中)/completed(已完成)/aborted(已中止)';
- COMMENT ON COLUMN patrol_execution.total_distance IS '巡检总距离(km)';
- CREATE INDEX IF NOT EXISTS idx_patrol_execution_task ON patrol_execution(task_id);
- CREATE INDEX IF NOT EXISTS idx_patrol_execution_inspector ON patrol_execution(inspector_id);
- CREATE INDEX IF NOT EXISTS idx_patrol_execution_status ON patrol_execution(status);
- CREATE INDEX IF NOT EXISTS idx_patrol_execution_start_time ON patrol_execution(start_time);
-
- -- ==================== 检查项记录表 ====================
- CREATE TABLE IF NOT EXISTS check_item_record (
- id BIGSERIAL PRIMARY KEY,
- execution_id BIGINT NOT NULL REFERENCES patrol_execution(id),
- point_seq INT, -- 检查点序号
- point_name VARCHAR(100), -- 检查点名称
- item_name VARCHAR(200), -- 检查项名称
- check_status VARCHAR(20) NOT NULL DEFAULT 'normal', -- normal/abnormal/skipped
- record_value DOUBLE PRECISION, -- 数值录入
- value_unit VARCHAR(20), -- 数值单位
- description TEXT, -- 文字描述
- photo_urls TEXT, -- 照片URL列表(逗号分隔)
- remark VARCHAR(500),
- record_time TIMESTAMP NOT NULL DEFAULT NOW(),
- lng DOUBLE PRECISION,
- lat DOUBLE PRECISION,
- deleted SMALLINT DEFAULT 0,
- created_at TIMESTAMP DEFAULT NOW(),
- updated_at TIMESTAMP DEFAULT NOW()
- );
- COMMENT ON TABLE check_item_record IS '检查项记录表';
- COMMENT ON COLUMN check_item_record.check_status IS '状态: normal(正常)/abnormal(异常)/skipped(跳过)';
- CREATE INDEX IF NOT EXISTS idx_check_item_record_execution ON check_item_record(execution_id);
- CREATE INDEX IF NOT EXISTS idx_check_item_record_point ON check_item_record(execution_id, point_seq);
- CREATE INDEX IF NOT EXISTS idx_check_item_record_status ON check_item_record(check_status);
-
- -- ==================== GPS轨迹点表 ====================
- CREATE TABLE IF NOT EXISTS gps_track_point (
- id BIGSERIAL PRIMARY KEY,
- execution_id BIGINT NOT NULL REFERENCES patrol_execution(id),
- lng DOUBLE PRECISION NOT NULL,
- lat DOUBLE PRECISION NOT NULL,
- altitude DOUBLE PRECISION, -- 海拔(米)
- speed DOUBLE PRECISION, -- 速度(m/s)
- bearing DOUBLE PRECISION, -- 方向(角度, 0-360)
- accuracy DOUBLE PRECISION, -- 精度(米)
- record_time TIMESTAMP NOT NULL DEFAULT NOW(),
- deleted SMALLINT DEFAULT 0,
- created_at TIMESTAMP DEFAULT NOW(),
- updated_at TIMESTAMP DEFAULT NOW()
- );
- COMMENT ON TABLE gps_track_point IS 'GPS轨迹点表';
- CREATE INDEX IF NOT EXISTS idx_gps_track_execution ON gps_track_point(execution_id);
- CREATE INDEX IF NOT EXISTS idx_gps_track_time ON gps_track_point(execution_id, record_time);
-
- -- ==================== 巡检问题表 ====================
- CREATE TABLE IF NOT EXISTS patrol_issue (
- id BIGSERIAL PRIMARY KEY,
- execution_id BIGINT NOT NULL REFERENCES patrol_execution(id),
- check_record_id BIGINT REFERENCES check_item_record(id), -- 关联检查项记录(可选)
- issue_type VARCHAR(30) NOT NULL, -- leak/damage/pollution/illegal/other
- severity VARCHAR(20) NOT NULL DEFAULT 'medium', -- low/medium/high/critical
- description TEXT NOT NULL,
- photo_urls TEXT, -- 照片URL列表(逗号分隔)
- lng DOUBLE PRECISION,
- lat DOUBLE PRECISION,
- address VARCHAR(300), -- 地址描述
- handle_status VARCHAR(20) NOT NULL DEFAULT 'pending', -- pending/processing/resolved/closed
- work_order_id BIGINT, -- 关联工单ID
- reporter_id BIGINT NOT NULL,
- reporter_name VARCHAR(50),
- report_time TIMESTAMP NOT NULL DEFAULT NOW(),
- deleted SMALLINT DEFAULT 0,
- created_at TIMESTAMP DEFAULT NOW(),
- updated_at TIMESTAMP DEFAULT NOW()
- );
- COMMENT ON TABLE patrol_issue IS '巡检问题表';
- COMMENT ON COLUMN patrol_issue.issue_type IS '问题类型: leak(漏水)/damage(损坏)/pollution(污染)/illegal(违规)/other(其他)';
- COMMENT ON COLUMN patrol_issue.severity IS '严重程度: low(低)/medium(中)/high(高)/critical(紧急)';
- COMMENT ON COLUMN patrol_issue.handle_status IS '处理状态: pending(待处理)/processing(处理中)/resolved(已解决)/closed(已关闭)';
- CREATE INDEX IF NOT EXISTS idx_patrol_issue_execution ON patrol_issue(execution_id);
- CREATE INDEX IF NOT EXISTS idx_patrol_issue_type ON patrol_issue(issue_type);
- CREATE INDEX IF NOT EXISTS idx_patrol_issue_severity ON patrol_issue(severity);
- CREATE INDEX IF NOT EXISTS idx_patrol_issue_handle_status ON patrol_issue(handle_status);
- CREATE INDEX IF NOT EXISTS idx_patrol_issue_report_time ON patrol_issue(report_time);
|