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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. -- ============================================================
  2. -- 水表全生命周期管理 DDL
  3. -- 包含: rev_water_meter, rev_meter_install_record,
  4. -- rev_meter_replace_record, rev_meter_lifecycle_log
  5. -- ============================================================
  6. -- 1. 水表主表
  7. CREATE TABLE IF NOT EXISTS rev_water_meter (
  8. id BIGSERIAL PRIMARY KEY,
  9. meter_no VARCHAR(64) NOT NULL UNIQUE,
  10. model VARCHAR(64),
  11. diameter INTEGER,
  12. manufacturer VARCHAR(128),
  13. production_date DATE,
  14. install_date DATE,
  15. install_address VARCHAR(512),
  16. customer_no VARCHAR(64),
  17. status VARCHAR(32) NOT NULL DEFAULT 'IN_STOCK',
  18. in_stock_time TIMESTAMP,
  19. out_stock_time TIMESTAMP,
  20. initial_reading NUMERIC(14,4) DEFAULT 0,
  21. current_reading NUMERIC(14,4) DEFAULT 0,
  22. dismantle_date DATE,
  23. scrapped_date DATE,
  24. remark VARCHAR(512),
  25. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  26. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  27. );
  28. COMMENT ON TABLE rev_water_meter IS '水表主表';
  29. COMMENT ON COLUMN rev_water_meter.meter_no IS '水表编号';
  30. COMMENT ON COLUMN rev_water_meter.model IS '水表型号';
  31. COMMENT ON COLUMN rev_water_meter.diameter IS '口径(mm)';
  32. COMMENT ON COLUMN rev_water_meter.manufacturer IS '制造商';
  33. COMMENT ON COLUMN rev_water_meter.production_date IS '生产日期';
  34. COMMENT ON COLUMN rev_water_meter.install_date IS '安装日期';
  35. COMMENT ON COLUMN rev_water_meter.install_address IS '安装地址';
  36. COMMENT ON COLUMN rev_water_meter.customer_no IS '客户编号';
  37. COMMENT ON COLUMN rev_water_meter.status IS '状态: IN_STOCK/INSTALLED/DISMANTLED/SCRAPPED/REPAIRING';
  38. COMMENT ON COLUMN rev_water_meter.in_stock_time IS '入库时间';
  39. COMMENT ON COLUMN rev_water_meter.out_stock_time IS '出库时间';
  40. COMMENT ON COLUMN rev_water_meter.initial_reading IS '初始读数';
  41. COMMENT ON COLUMN rev_water_meter.current_reading IS '当前读数';
  42. COMMENT ON COLUMN rev_water_meter.dismantle_date IS '拆除日期';
  43. COMMENT ON COLUMN rev_water_meter.scrapped_date IS '报废日期';
  44. -- 2. 水表安装记录
  45. CREATE TABLE IF NOT EXISTS rev_meter_install_record (
  46. id BIGSERIAL PRIMARY KEY,
  47. meter_no VARCHAR(64) NOT NULL,
  48. customer_no VARCHAR(64),
  49. installer VARCHAR(128),
  50. install_date DATE,
  51. install_address VARCHAR(512),
  52. old_meter_no VARCHAR(64),
  53. initial_reading NUMERIC(14,4) DEFAULT 0,
  54. remark VARCHAR(512),
  55. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  56. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  57. );
  58. COMMENT ON TABLE rev_meter_install_record IS '水表安装记录';
  59. -- 3. 水表换表记录
  60. CREATE TABLE IF NOT EXISTS rev_meter_replace_record (
  61. id BIGSERIAL PRIMARY KEY,
  62. old_meter_no VARCHAR(64) NOT NULL,
  63. new_meter_no VARCHAR(64) NOT NULL,
  64. customer_no VARCHAR(64),
  65. replace_type VARCHAR(32) NOT NULL,
  66. reason VARCHAR(512),
  67. replacer VARCHAR(128),
  68. replace_date DATE,
  69. old_reading NUMERIC(14,4),
  70. new_reading NUMERIC(14,4),
  71. approval_status VARCHAR(32) DEFAULT 'APPROVED',
  72. approver VARCHAR(128),
  73. approval_time TIMESTAMP,
  74. remark VARCHAR(512),
  75. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  76. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  77. );
  78. COMMENT ON TABLE rev_meter_replace_record IS '水表换表记录';
  79. COMMENT ON COLUMN rev_meter_replace_record.replace_type IS '换表类型: FAULT-故障, EXPIRED-到期';
  80. COMMENT ON COLUMN rev_meter_replace_record.approval_status IS '审批状态: PENDING/APPROVED/REJECTED';
  81. -- 4. 水表生命周期日志
  82. CREATE TABLE IF NOT EXISTS rev_meter_lifecycle_log (
  83. id BIGSERIAL PRIMARY KEY,
  84. meter_no VARCHAR(64) NOT NULL,
  85. action_type VARCHAR(32) NOT NULL,
  86. action_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  87. operator VARCHAR(128),
  88. detail VARCHAR(1024),
  89. old_meter_no VARCHAR(64),
  90. new_meter_no VARCHAR(64),
  91. customer_no VARCHAR(64),
  92. remark VARCHAR(512),
  93. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  94. );
  95. COMMENT ON TABLE rev_meter_lifecycle_log IS '水表生命周期日志';
  96. COMMENT ON COLUMN rev_meter_lifecycle_log.action_type IS '操作类型: STOCK_IN/INSTALL/DISMANTLE/REPLACE/SCRAP/REPAIR';
  97. -- ============================================================
  98. -- 索引
  99. -- ============================================================
  100. -- rev_water_meter 索引
  101. CREATE INDEX IF NOT EXISTS idx_water_meter_status ON rev_water_meter (status);
  102. CREATE INDEX IF NOT EXISTS idx_water_meter_customer ON rev_water_meter (customer_no);
  103. CREATE INDEX IF NOT EXISTS idx_water_meter_diameter ON rev_water_meter (diameter);
  104. CREATE INDEX IF NOT EXISTS idx_water_meter_manufacturer ON rev_water_meter (manufacturer);
  105. CREATE INDEX IF NOT EXISTS idx_water_meter_created ON rev_water_meter (created_at);
  106. -- rev_meter_install_record 索引
  107. CREATE INDEX IF NOT EXISTS idx_install_record_meter ON rev_meter_install_record (meter_no);
  108. CREATE INDEX IF NOT EXISTS idx_install_record_customer ON rev_meter_install_record (customer_no);
  109. CREATE INDEX IF NOT EXISTS idx_install_record_date ON rev_meter_install_record (install_date);
  110. -- rev_meter_replace_record 索引
  111. CREATE INDEX IF NOT EXISTS idx_replace_record_old ON rev_meter_replace_record (old_meter_no);
  112. CREATE INDEX IF NOT EXISTS idx_replace_record_new ON rev_meter_replace_record (new_meter_no);
  113. CREATE INDEX IF NOT EXISTS idx_replace_record_customer ON rev_meter_replace_record (customer_no);
  114. CREATE INDEX IF NOT EXISTS idx_replace_record_approval ON rev_meter_replace_record (approval_status);
  115. CREATE INDEX IF NOT EXISTS idx_replace_record_date ON rev_meter_replace_record (replace_date);
  116. -- rev_meter_lifecycle_log 索引
  117. CREATE INDEX IF NOT EXISTS idx_lifecycle_log_meter ON rev_meter_lifecycle_log (meter_no);
  118. CREATE INDEX IF NOT EXISTS idx_lifecycle_log_action ON rev_meter_lifecycle_log (action_type);
  119. CREATE INDEX IF NOT EXISTS idx_lifecycle_log_time ON rev_meter_lifecycle_log (action_time);
  120. CREATE INDEX IF NOT EXISTS idx_lifecycle_log_customer ON rev_meter_lifecycle_log (customer_no);