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

quality_ledger_ddl.sql 8.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. -- ============================================================
  2. -- V4__quality_ledger.sql
  3. -- 水质检测台账模块 DDL
  4. -- 包含: 检测记录、水质标准、检测计划
  5. -- ============================================================
  6. -- 1. 水质检测记录表
  7. CREATE TABLE IF NOT EXISTS prod_quality_test_record (
  8. id BIGSERIAL PRIMARY KEY,
  9. test_type VARCHAR(20) NOT NULL DEFAULT 'routine', -- routine/special/complaint
  10. water_type VARCHAR(20) NOT NULL DEFAULT 'treated', -- raw/treated/network
  11. sampling_point VARCHAR(100), -- 采样点
  12. area VARCHAR(50), -- 所属区域
  13. test_date DATE NOT NULL, -- 检测日期
  14. test_time TIME, -- 检测时间
  15. tester VARCHAR(50), -- 检测人
  16. turbidity NUMERIC(10,2), -- 浊度 (NTU)
  17. ph NUMERIC(5,2), -- pH值
  18. residual_chlorine NUMERIC(6,3), -- 余氯 (mg/L)
  19. color NUMERIC(8,2), -- 色度 (度)
  20. odor NUMERIC(4,1), -- 嗅味 (级)
  21. ecoli NUMERIC(10,2), -- 大肠杆菌 (CFU/100mL)
  22. colony_count NUMERIC(10,2), -- 菌落总数 (CFU/mL)
  23. compliance_status VARCHAR(20) NOT NULL DEFAULT 'pending', -- qualified/unqualified/pending
  24. unqualified_items TEXT, -- 不合格项 (JSON)
  25. remark VARCHAR(500), -- 备注
  26. deleted INTEGER NOT NULL DEFAULT 0,
  27. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  28. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  29. );
  30. CREATE INDEX IF NOT EXISTS idx_quality_record_type ON prod_quality_test_record(test_type);
  31. CREATE INDEX IF NOT EXISTS idx_quality_record_water_type ON prod_quality_test_record(water_type);
  32. CREATE INDEX IF NOT EXISTS idx_quality_record_area ON prod_quality_test_record(area);
  33. CREATE INDEX IF NOT EXISTS idx_quality_record_date ON prod_quality_test_record(test_date);
  34. CREATE INDEX IF NOT EXISTS idx_quality_record_compliance ON prod_quality_test_record(compliance_status);
  35. CREATE INDEX IF NOT EXISTS idx_quality_record_deleted ON prod_quality_test_record(deleted);
  36. COMMENT ON TABLE prod_quality_test_record IS '水质检测记录表';
  37. COMMENT ON COLUMN prod_quality_test_record.test_type IS '检测类型: routine-常规/special-专项/complaint-投诉';
  38. COMMENT ON COLUMN prod_quality_test_record.water_type IS '水样类型: raw-原水/treated-出厂水/network-管网末梢水';
  39. COMMENT ON COLUMN prod_quality_test_record.compliance_status IS '合格状态: qualified-合格/unqualified-不合格/pending-待判定';
  40. -- 2. 水质标准表 (GB5749-2022)
  41. CREATE TABLE IF NOT EXISTS prod_quality_standard (
  42. id BIGSERIAL PRIMARY KEY,
  43. standard_name VARCHAR(100) NOT NULL,
  44. standard_code VARCHAR(50) NOT NULL DEFAULT 'GB5749-2022',
  45. param_name VARCHAR(50) NOT NULL, -- 参数编码
  46. param_label VARCHAR(50), -- 参数显示名
  47. param_unit VARCHAR(20), -- 单位
  48. min_value NUMERIC(12,4), -- 最小值 (NULL=无下限)
  49. max_value NUMERIC(12,4), -- 最大值 (NULL=无上限)
  50. water_type VARCHAR(20) NOT NULL DEFAULT 'all', -- 适用水样类型
  51. enabled INTEGER NOT NULL DEFAULT 1,
  52. deleted INTEGER NOT NULL DEFAULT 0,
  53. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  54. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  55. );
  56. CREATE INDEX IF NOT EXISTS idx_quality_standard_code ON prod_quality_standard(standard_code);
  57. CREATE INDEX IF NOT EXISTS idx_quality_standard_param ON prod_quality_standard(param_name);
  58. CREATE INDEX IF NOT EXISTS idx_quality_standard_deleted ON prod_quality_standard(deleted);
  59. COMMENT ON TABLE prod_quality_standard IS '水质标准表 (基于GB5749-2022)';
  60. -- 初始化 GB5749-2022 默认标准
  61. INSERT INTO prod_quality_standard (standard_name, standard_code, param_name, param_label, param_unit, min_value, max_value, water_type)
  62. VALUES
  63. ('生活饮用水卫生标准', 'GB5749-2022', 'turbidity', '浊度', 'NTU', NULL, 1.0, 'treated'),
  64. ('生活饮用水卫生标准', 'GB5749-2022', 'turbidity', '浊度', 'NTU', NULL, 3.0, 'network'),
  65. ('生活饮用水卫生标准', 'GB5749-2022', 'ph', 'pH', '', 6.5, 8.5, 'all'),
  66. ('生活饮用水卫生标准', 'GB5749-2022', 'residual_chlorine', '余氯', 'mg/L', 0.3, 2.0, 'treated'),
  67. ('生活饮用水卫生标准', 'GB5749-2022', 'residual_chlorine', '余氯', 'mg/L', 0.05, 2.0, 'network'),
  68. ('生活饮用水卫生标准', 'GB5749-2022', 'color', '色度', '度', NULL, 15.0, 'all'),
  69. ('生活饮用水卫生标准', 'GB5749-2022', 'odor', '嗅味', '级', NULL, 2.0, 'all'),
  70. ('生活饮用水卫生标准', 'GB5749-2022', 'ecoli', '大肠杆菌', 'CFU/100mL', NULL, 0.0, 'all'),
  71. ('生活饮用水卫生标准', 'GB5749-2022', 'colony_count', '菌落总数', 'CFU/mL', NULL, 100.0, 'all')
  72. ON CONFLICT DO NOTHING;
  73. -- 3. 水质检测计划表
  74. CREATE TABLE IF NOT EXISTS prod_quality_test_plan (
  75. id BIGSERIAL PRIMARY KEY,
  76. plan_name VARCHAR(100) NOT NULL,
  77. test_type VARCHAR(20) NOT NULL DEFAULT 'routine', -- routine/special
  78. water_type VARCHAR(20) NOT NULL DEFAULT 'treated',
  79. sampling_point VARCHAR(100),
  80. area VARCHAR(50),
  81. frequency VARCHAR(20) NOT NULL DEFAULT 'daily', -- daily/weekly/monthly
  82. test_params VARCHAR(200), -- 检测参数 (逗号分隔)
  83. start_date DATE NOT NULL,
  84. end_date DATE, -- NULL=长期
  85. next_test_date DATE,
  86. status VARCHAR(20) NOT NULL DEFAULT 'active', -- active/paused/completed
  87. execution_count INTEGER NOT NULL DEFAULT 0,
  88. remark VARCHAR(500),
  89. deleted INTEGER NOT NULL DEFAULT 0,
  90. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  91. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  92. );
  93. CREATE INDEX IF NOT EXISTS idx_quality_plan_status ON prod_quality_test_plan(status);
  94. CREATE INDEX IF NOT EXISTS idx_quality_plan_frequency ON prod_quality_test_plan(frequency);
  95. CREATE INDEX IF NOT EXISTS idx_quality_plan_next_date ON prod_quality_test_plan(next_test_date);
  96. CREATE INDEX IF NOT EXISTS idx_quality_plan_deleted ON prod_quality_test_plan(deleted);
  97. COMMENT ON TABLE prod_quality_test_plan IS '水质检测计划表';
  98. COMMENT ON COLUMN prod_quality_test_plan.frequency IS '检测频率: daily-日检/weekly-周检/monthly-月检';
  99. COMMENT ON COLUMN prod_quality_test_plan.status IS '计划状态: active-启用/paused-暂停/completed-已完成';
  100. -- 4. 水质检测点位表
  101. CREATE TABLE IF NOT EXISTS prod_quality_test_point (
  102. id BIGSERIAL PRIMARY KEY,
  103. point_name VARCHAR(200) NOT NULL,
  104. point_type VARCHAR(50) NOT NULL DEFAULT 'factory',
  105. location VARCHAR(500),
  106. longitude NUMERIC(10,7),
  107. latitude NUMERIC(10,7),
  108. sampling_frequency VARCHAR(20) NOT NULL DEFAULT 'daily',
  109. area VARCHAR(200),
  110. water_plant VARCHAR(200),
  111. status VARCHAR(20) NOT NULL DEFAULT 'active',
  112. remark TEXT,
  113. deleted INTEGER NOT NULL DEFAULT 0,
  114. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  115. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  116. );
  117. CREATE INDEX IF NOT EXISTS idx_quality_point_type ON prod_quality_test_point(point_type);
  118. CREATE INDEX IF NOT EXISTS idx_quality_point_area ON prod_quality_test_point(area);
  119. CREATE INDEX IF NOT EXISTS idx_quality_point_status ON prod_quality_test_point(status);
  120. CREATE INDEX IF NOT EXISTS idx_quality_point_deleted ON prod_quality_test_point(deleted);
  121. COMMENT ON TABLE prod_quality_test_point IS '水质检测点位表';
  122. COMMENT ON COLUMN prod_quality_test_point.point_type IS '点位类型: waterSource-水源/factory-出厂/endpoint-末梢';
  123. COMMENT ON COLUMN prod_quality_test_point.sampling_frequency IS '采样频率: daily/weekly/monthly/quarterly';