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

V87__patrol_setup.sql 2.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. -- Issue #87: 巡查设置(区域/路线/表单/模版)
  2. -- PAT-16: 巡检区域
  3. CREATE TABLE IF NOT EXISTS patrol_area (
  4. id BIGSERIAL PRIMARY KEY,
  5. name VARCHAR(100) NOT NULL,
  6. code VARCHAR(50) UNIQUE,
  7. parent_id BIGINT DEFAULT 0,
  8. description TEXT,
  9. lng DOUBLE PRECISION,
  10. lat DOUBLE PRECISION,
  11. radius DOUBLE PRECISION DEFAULT 0,
  12. status VARCHAR(20) DEFAULT 'active',
  13. created_at TIMESTAMPTZ DEFAULT NOW(),
  14. updated_at TIMESTAMPTZ DEFAULT NOW()
  15. );
  16. CREATE INDEX IF NOT EXISTS idx_patrol_area_parent ON patrol_area(parent_id);
  17. -- PAT-17: 巡检路线扩展
  18. -- patrol_route 已在 V1__production.sql 创建,此处补充缺失字段
  19. ALTER TABLE patrol_route ADD COLUMN IF NOT EXISTS area_id BIGINT;
  20. ALTER TABLE patrol_route ADD COLUMN IF NOT EXISTS description TEXT;
  21. ALTER TABLE patrol_route ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ DEFAULT NOW();
  22. -- 巡检路线巡检点
  23. CREATE TABLE IF NOT EXISTS patrol_route_checkpoint (
  24. id BIGSERIAL PRIMARY KEY,
  25. route_id BIGINT NOT NULL,
  26. checkpoint_seq INT NOT NULL,
  27. device_id BIGINT,
  28. device_name VARCHAR(100),
  29. lng DOUBLE PRECISION,
  30. lat DOUBLE PRECISION,
  31. check_items TEXT, -- JSON array
  32. created_at TIMESTAMPTZ DEFAULT NOW()
  33. );
  34. CREATE INDEX IF NOT EXISTS idx_route_checkpoint ON patrol_route_checkpoint(route_id);
  35. -- PAT-18: 自定义巡检表单
  36. CREATE TABLE IF NOT EXISTS patrol_form (
  37. id BIGSERIAL PRIMARY KEY,
  38. name VARCHAR(100) NOT NULL,
  39. type VARCHAR(30) NOT NULL, -- daily/special/safety/quality
  40. fields TEXT NOT NULL, -- JSON array of field definitions
  41. status VARCHAR(20) DEFAULT 'active',
  42. created_at TIMESTAMPTZ DEFAULT NOW(),
  43. updated_at TIMESTAMPTZ DEFAULT NOW()
  44. );
  45. -- PAT-19: 表单绑定关系
  46. CREATE TABLE IF NOT EXISTS patrol_form_binding (
  47. id BIGSERIAL PRIMARY KEY,
  48. form_id BIGINT NOT NULL,
  49. target_type VARCHAR(20) NOT NULL, -- route/device/area
  50. target_id BIGINT NOT NULL,
  51. created_at TIMESTAMPTZ DEFAULT NOW(),
  52. UNIQUE(form_id, target_type, target_id)
  53. );
  54. CREATE INDEX IF NOT EXISTS idx_form_binding_target ON patrol_form_binding(target_type, target_id);
  55. -- PAT-20: 巡检模板
  56. CREATE TABLE IF NOT EXISTS patrol_template (
  57. id BIGSERIAL PRIMARY KEY,
  58. name VARCHAR(100) NOT NULL,
  59. type VARCHAR(20) NOT NULL, -- daily/weekly/monthly/special
  60. config TEXT NOT NULL, -- JSON: frequency, routes, workers, schedule
  61. status VARCHAR(20) DEFAULT 'active',
  62. created_at TIMESTAMPTZ DEFAULT NOW(),
  63. updated_at TIMESTAMPTZ DEFAULT NOW()
  64. );