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

V86__patrol_core.sql 3.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. -- Issue #86: 巡检管理核心(总览/轨迹/台账/设备/工单)
  2. -- 1. 巡检设备台账
  3. CREATE TABLE IF NOT EXISTS patrol_device (
  4. id BIGSERIAL PRIMARY KEY,
  5. device_no VARCHAR(50) UNIQUE,
  6. device_name VARCHAR(100) NOT NULL,
  7. device_type VARCHAR(30) NOT NULL, -- valve/meter/hydrant/pump/sensor
  8. location VARCHAR(300),
  9. lng DOUBLE PRECISION,
  10. lat DOUBLE PRECISION,
  11. status VARCHAR(20) DEFAULT 'normal', -- normal/abnormal/offline/maintenance
  12. area VARCHAR(50),
  13. point_seq INT DEFAULT 0,
  14. remark TEXT,
  15. last_maintenance_date TIMESTAMPTZ,
  16. created_at TIMESTAMPTZ DEFAULT NOW(),
  17. updated_at TIMESTAMPTZ DEFAULT NOW()
  18. );
  19. CREATE INDEX IF NOT EXISTS idx_patrol_device_area ON patrol_device(area);
  20. CREATE INDEX IF NOT EXISTS idx_patrol_device_type ON patrol_device(device_type);
  21. CREATE INDEX IF NOT EXISTS idx_patrol_device_status ON patrol_device(status);
  22. -- 2. GPS轨迹点
  23. CREATE TABLE IF NOT EXISTS patrol_track_point (
  24. id BIGSERIAL PRIMARY KEY,
  25. task_id BIGINT NOT NULL REFERENCES patrol_task(id),
  26. worker_id BIGINT,
  27. lng DOUBLE PRECISION NOT NULL,
  28. lat DOUBLE PRECISION NOT NULL,
  29. speed DOUBLE PRECISION DEFAULT 0,
  30. accuracy DOUBLE PRECISION DEFAULT 0,
  31. recorded_at TIMESTAMPTZ DEFAULT NOW()
  32. );
  33. CREATE INDEX IF NOT EXISTS idx_track_task ON patrol_track_point(task_id, recorded_at);
  34. -- 3. 巡检工单增强(如果 patrol_work_order 已存在则 ALTER,否则 CREATE)
  35. -- 先检查 patrol_work_order 是否存在
  36. DO $$
  37. BEGIN
  38. IF NOT EXISTS (SELECT FROM pg_tables WHERE tablename = 'patrol_work_order') THEN
  39. CREATE TABLE patrol_work_order (
  40. id BIGSERIAL PRIMARY KEY,
  41. order_no VARCHAR(50) UNIQUE NOT NULL,
  42. task_id BIGINT REFERENCES patrol_task(id),
  43. issue_type VARCHAR(30) NOT NULL, -- leak/damage/abnormal/pollution/other
  44. description TEXT,
  45. photos TEXT, -- JSON array
  46. severity VARCHAR(10) DEFAULT 'medium', -- low/medium/high/critical
  47. assignee_id BIGINT,
  48. assignee_name VARCHAR(50),
  49. status VARCHAR(20) DEFAULT 'pending', -- pending/assigned/processing/resolved/closed
  50. location VARCHAR(300),
  51. lng DOUBLE PRECISION,
  52. lat DOUBLE PRECISION,
  53. resolution TEXT,
  54. created_at TIMESTAMPTZ DEFAULT NOW(),
  55. resolved_at TIMESTAMPTZ,
  56. closed_at TIMESTAMPTZ
  57. );
  58. CREATE INDEX IF NOT EXISTS idx_pwo_status ON patrol_work_order(status);
  59. CREATE INDEX IF NOT EXISTS idx_pwo_assignee ON patrol_work_order(assignee_id);
  60. END IF;
  61. END $$;
  62. -- 4. 设备巡检点检记录扩展(给 patrol_record 加 device_status 字段)
  63. ALTER TABLE patrol_record ADD COLUMN IF NOT EXISTS device_status VARCHAR(20) DEFAULT 'normal';
  64. ALTER TABLE patrol_record ADD COLUMN IF NOT EXISTS remark TEXT;