| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- -- ============================================================
- -- 水表全生命周期管理 DDL
- -- 包含: rev_water_meter, rev_meter_install_record,
- -- rev_meter_replace_record, rev_meter_lifecycle_log
- -- ============================================================
-
- -- 1. 水表主表
- CREATE TABLE IF NOT EXISTS rev_water_meter (
- id BIGSERIAL PRIMARY KEY,
- meter_no VARCHAR(64) NOT NULL UNIQUE,
- model VARCHAR(64),
- diameter INTEGER,
- manufacturer VARCHAR(128),
- production_date DATE,
- install_date DATE,
- install_address VARCHAR(512),
- customer_no VARCHAR(64),
- status VARCHAR(32) NOT NULL DEFAULT 'IN_STOCK',
- in_stock_time TIMESTAMP,
- out_stock_time TIMESTAMP,
- initial_reading NUMERIC(14,4) DEFAULT 0,
- current_reading NUMERIC(14,4) DEFAULT 0,
- dismantle_date DATE,
- scrapped_date DATE,
- remark VARCHAR(512),
- created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
- );
-
- COMMENT ON TABLE rev_water_meter IS '水表主表';
- COMMENT ON COLUMN rev_water_meter.meter_no IS '水表编号';
- COMMENT ON COLUMN rev_water_meter.model IS '水表型号';
- COMMENT ON COLUMN rev_water_meter.diameter IS '口径(mm)';
- COMMENT ON COLUMN rev_water_meter.manufacturer IS '制造商';
- COMMENT ON COLUMN rev_water_meter.production_date IS '生产日期';
- COMMENT ON COLUMN rev_water_meter.install_date IS '安装日期';
- COMMENT ON COLUMN rev_water_meter.install_address IS '安装地址';
- COMMENT ON COLUMN rev_water_meter.customer_no IS '客户编号';
- COMMENT ON COLUMN rev_water_meter.status IS '状态: IN_STOCK/INSTALLED/DISMANTLED/SCRAPPED/REPAIRING';
- COMMENT ON COLUMN rev_water_meter.in_stock_time IS '入库时间';
- COMMENT ON COLUMN rev_water_meter.out_stock_time IS '出库时间';
- COMMENT ON COLUMN rev_water_meter.initial_reading IS '初始读数';
- COMMENT ON COLUMN rev_water_meter.current_reading IS '当前读数';
- COMMENT ON COLUMN rev_water_meter.dismantle_date IS '拆除日期';
- COMMENT ON COLUMN rev_water_meter.scrapped_date IS '报废日期';
-
- -- 2. 水表安装记录
- CREATE TABLE IF NOT EXISTS rev_meter_install_record (
- id BIGSERIAL PRIMARY KEY,
- meter_no VARCHAR(64) NOT NULL,
- customer_no VARCHAR(64),
- installer VARCHAR(128),
- install_date DATE,
- install_address VARCHAR(512),
- old_meter_no VARCHAR(64),
- initial_reading NUMERIC(14,4) DEFAULT 0,
- remark VARCHAR(512),
- created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
- );
-
- COMMENT ON TABLE rev_meter_install_record IS '水表安装记录';
-
- -- 3. 水表换表记录
- CREATE TABLE IF NOT EXISTS rev_meter_replace_record (
- id BIGSERIAL PRIMARY KEY,
- old_meter_no VARCHAR(64) NOT NULL,
- new_meter_no VARCHAR(64) NOT NULL,
- customer_no VARCHAR(64),
- replace_type VARCHAR(32) NOT NULL,
- reason VARCHAR(512),
- replacer VARCHAR(128),
- replace_date DATE,
- old_reading NUMERIC(14,4),
- new_reading NUMERIC(14,4),
- approval_status VARCHAR(32) DEFAULT 'APPROVED',
- approver VARCHAR(128),
- approval_time TIMESTAMP,
- remark VARCHAR(512),
- created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
- );
-
- COMMENT ON TABLE rev_meter_replace_record IS '水表换表记录';
- COMMENT ON COLUMN rev_meter_replace_record.replace_type IS '换表类型: FAULT-故障, EXPIRED-到期';
- COMMENT ON COLUMN rev_meter_replace_record.approval_status IS '审批状态: PENDING/APPROVED/REJECTED';
-
- -- 4. 水表生命周期日志
- CREATE TABLE IF NOT EXISTS rev_meter_lifecycle_log (
- id BIGSERIAL PRIMARY KEY,
- meter_no VARCHAR(64) NOT NULL,
- action_type VARCHAR(32) NOT NULL,
- action_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- operator VARCHAR(128),
- detail VARCHAR(1024),
- old_meter_no VARCHAR(64),
- new_meter_no VARCHAR(64),
- customer_no VARCHAR(64),
- remark VARCHAR(512),
- created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
- );
-
- COMMENT ON TABLE rev_meter_lifecycle_log IS '水表生命周期日志';
- COMMENT ON COLUMN rev_meter_lifecycle_log.action_type IS '操作类型: STOCK_IN/INSTALL/DISMANTLE/REPLACE/SCRAP/REPAIR';
-
- -- ============================================================
- -- 索引
- -- ============================================================
-
- -- rev_water_meter 索引
- CREATE INDEX IF NOT EXISTS idx_water_meter_status ON rev_water_meter (status);
- CREATE INDEX IF NOT EXISTS idx_water_meter_customer ON rev_water_meter (customer_no);
- CREATE INDEX IF NOT EXISTS idx_water_meter_diameter ON rev_water_meter (diameter);
- CREATE INDEX IF NOT EXISTS idx_water_meter_manufacturer ON rev_water_meter (manufacturer);
- CREATE INDEX IF NOT EXISTS idx_water_meter_created ON rev_water_meter (created_at);
-
- -- rev_meter_install_record 索引
- CREATE INDEX IF NOT EXISTS idx_install_record_meter ON rev_meter_install_record (meter_no);
- CREATE INDEX IF NOT EXISTS idx_install_record_customer ON rev_meter_install_record (customer_no);
- CREATE INDEX IF NOT EXISTS idx_install_record_date ON rev_meter_install_record (install_date);
-
- -- rev_meter_replace_record 索引
- CREATE INDEX IF NOT EXISTS idx_replace_record_old ON rev_meter_replace_record (old_meter_no);
- CREATE INDEX IF NOT EXISTS idx_replace_record_new ON rev_meter_replace_record (new_meter_no);
- CREATE INDEX IF NOT EXISTS idx_replace_record_customer ON rev_meter_replace_record (customer_no);
- CREATE INDEX IF NOT EXISTS idx_replace_record_approval ON rev_meter_replace_record (approval_status);
- CREATE INDEX IF NOT EXISTS idx_replace_record_date ON rev_meter_replace_record (replace_date);
-
- -- rev_meter_lifecycle_log 索引
- CREATE INDEX IF NOT EXISTS idx_lifecycle_log_meter ON rev_meter_lifecycle_log (meter_no);
- CREATE INDEX IF NOT EXISTS idx_lifecycle_log_action ON rev_meter_lifecycle_log (action_type);
- CREATE INDEX IF NOT EXISTS idx_lifecycle_log_time ON rev_meter_lifecycle_log (action_time);
- CREATE INDEX IF NOT EXISTS idx_lifecycle_log_customer ON rev_meter_lifecycle_log (customer_no);
|