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

V1__revenue.sql 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. -- =============================================
  2. -- 智慧水务管理系统 - 营业收费相关 DDL
  3. -- 版本: V1
  4. -- =============================================
  5. -- 用水户
  6. CREATE TABLE IF NOT EXISTS rev_customer (
  7. id BIGSERIAL PRIMARY KEY,
  8. customer_no VARCHAR(30) UNIQUE NOT NULL,
  9. customer_name VARCHAR(100) NOT NULL,
  10. customer_type VARCHAR(20) NOT NULL, -- residential/business/enterprise/institution
  11. area VARCHAR(50) NOT NULL,
  12. address VARCHAR(300),
  13. phone VARCHAR(20),
  14. id_card VARCHAR(18),
  15. contract_no VARCHAR(50),
  16. open_date DATE,
  17. meter_count INT DEFAULT 0,
  18. status VARCHAR(20) DEFAULT 'active', -- active/suspended/closed
  19. remark VARCHAR(500),
  20. created_at TIMESTAMP DEFAULT NOW(),
  21. updated_at TIMESTAMP DEFAULT NOW()
  22. );
  23. COMMENT ON TABLE rev_customer IS '用水户表';
  24. -- 水价阶梯
  25. CREATE TABLE IF NOT EXISTS rev_water_price (
  26. id BIGSERIAL PRIMARY KEY,
  27. customer_type VARCHAR(20) NOT NULL, -- residential/business/enterprise/institution
  28. tier_no INT NOT NULL, -- 第几阶梯
  29. range_start DECIMAL(12,2) DEFAULT 0, -- 起始水量(立方米)
  30. range_end DECIMAL(12,2), -- 结束水量(null=无上限)
  31. water_price DECIMAL(10,4) NOT NULL, -- 水价(元/立方米)
  32. sewage_price DECIMAL(10,4) DEFAULT 0, -- 污水处理费
  33. effective_date DATE NOT NULL,
  34. status SMALLINT DEFAULT 1,
  35. created_at TIMESTAMP DEFAULT NOW()
  36. );
  37. COMMENT ON TABLE rev_water_price IS '水价阶梯配置表';
  38. -- 水表档案
  39. CREATE TABLE IF NOT EXISTS rev_meter (
  40. id BIGSERIAL PRIMARY KEY,
  41. meter_no VARCHAR(50) UNIQUE NOT NULL,
  42. customer_id BIGINT REFERENCES rev_customer(id),
  43. device_id BIGINT, -- 关联 IoT 设备
  44. caliber VARCHAR(10), -- DN15/DN20/DN40/DN80+
  45. meter_type VARCHAR(20), -- mechanical/ultrasonic/electromagnetic
  46. manufacturer VARCHAR(100),
  47. max_reading DECIMAL(10,2) DEFAULT 99999,
  48. initial_reading DECIMAL(10,2) DEFAULT 0,
  49. current_reading DECIMAL(10,2) DEFAULT 0,
  50. install_date DATE,
  51. install_address VARCHAR(300),
  52. status VARCHAR(20) DEFAULT 'active', -- active/dismantled/scrapped/repaired/warehouse
  53. remark VARCHAR(500),
  54. created_at TIMESTAMP DEFAULT NOW(),
  55. updated_at TIMESTAMP DEFAULT NOW()
  56. );
  57. COMMENT ON TABLE rev_meter IS '水表档案表';
  58. -- 水表操作记录(全生命周期)
  59. CREATE TABLE IF NOT EXISTS rev_meter_log (
  60. id BIGSERIAL PRIMARY KEY,
  61. meter_id BIGINT REFERENCES rev_meter(id),
  62. operation_type VARCHAR(30) NOT NULL, -- install/dismantle/repair/change/scrap/calibrate/refurbish
  63. old_reading DECIMAL(10,2),
  64. new_reading DECIMAL(10,2),
  65. new_meter_no VARCHAR(50),
  66. operator_id BIGINT,
  67. operator_name VARCHAR(50),
  68. photos JSONB, -- 现场照片URL数组
  69. remark VARCHAR(500),
  70. created_at TIMESTAMP DEFAULT NOW()
  71. );
  72. COMMENT ON TABLE rev_meter_log IS '水表操作记录表(全生命周期)';
  73. -- 抄表记录
  74. CREATE TABLE IF NOT EXISTS rev_reading (
  75. id BIGSERIAL PRIMARY KEY,
  76. meter_id BIGINT REFERENCES rev_meter(id),
  77. reading_date DATE NOT NULL,
  78. reading_period VARCHAR(10), -- 2026-06
  79. prev_reading DECIMAL(10,2),
  80. curr_reading DECIMAL(10,2),
  81. consumption DECIMAL(10,2),
  82. read_type VARCHAR(20) DEFAULT 'manual', -- manual/remote/estimate
  83. reader_id BIGINT,
  84. reader_name VARCHAR(50),
  85. photo_urls JSONB, -- 拍照图片URL数组
  86. abnormal_flag SMALLINT DEFAULT 0, -- 0:正常 1:异常
  87. verified SMALLINT DEFAULT 0, -- 0:未审核 1:已审核
  88. verified_by BIGINT,
  89. verified_at TIMESTAMP,
  90. created_at TIMESTAMP DEFAULT NOW()
  91. );
  92. COMMENT ON TABLE rev_reading IS '抄表记录表';
  93. CREATE INDEX IF NOT EXISTS idx_reading_period ON rev_reading(reading_period);
  94. -- 水费账单
  95. CREATE TABLE IF NOT EXISTS rev_bill (
  96. id BIGSERIAL PRIMARY KEY,
  97. bill_no VARCHAR(30) UNIQUE NOT NULL,
  98. customer_id BIGINT REFERENCES rev_customer(id),
  99. meter_id BIGINT REFERENCES rev_meter(id),
  100. reading_id BIGINT REFERENCES rev_reading(id),
  101. bill_period VARCHAR(10) NOT NULL, -- 2026-06
  102. prev_reading DECIMAL(10,2),
  103. curr_reading DECIMAL(10,2),
  104. consumption DECIMAL(10,2),
  105. water_fee DECIMAL(10,2),
  106. sewage_fee DECIMAL(10,2),
  107. other_fee DECIMAL(10,2) DEFAULT 0, -- 污水处理费/垃圾处理费等
  108. total_fee DECIMAL(10,2),
  109. paid_fee DECIMAL(10,2) DEFAULT 0,
  110. discount_fee DECIMAL(10,2) DEFAULT 0,
  111. status VARCHAR(20) DEFAULT 'pending', -- pending/partial/paid/overdue/cancelled
  112. due_date DATE,
  113. paid_at TIMESTAMP,
  114. created_at TIMESTAMP DEFAULT NOW(),
  115. updated_at TIMESTAMP DEFAULT NOW()
  116. );
  117. COMMENT ON TABLE rev_bill IS '水费账单表';
  118. CREATE INDEX IF NOT EXISTS idx_bill_customer ON rev_bill(customer_id, bill_period);
  119. CREATE INDEX IF NOT EXISTS idx_bill_status ON rev_bill(status);
  120. -- 缴费记录
  121. CREATE TABLE IF NOT EXISTS rev_payment (
  122. id BIGSERIAL PRIMARY KEY,
  123. bill_id BIGINT REFERENCES rev_bill(id),
  124. customer_id BIGINT REFERENCES rev_customer(id),
  125. payment_no VARCHAR(50) UNIQUE NOT NULL,
  126. amount DECIMAL(10,2) NOT NULL,
  127. pay_method VARCHAR(20), -- wechat/alipay/cash/bank_transfer/pos
  128. pay_channel VARCHAR(30), -- counter/app/wechat_mini/third_party
  129. transaction_id VARCHAR(100),
  130. operator_id BIGINT,
  131. remark VARCHAR(500),
  132. paid_at TIMESTAMP DEFAULT NOW()
  133. );
  134. COMMENT ON TABLE rev_payment IS '缴费记录表';
  135. -- 报装申请
  136. CREATE TABLE IF NOT EXISTS rev_install (
  137. id BIGSERIAL PRIMARY KEY,
  138. application_no VARCHAR(30) UNIQUE NOT NULL,
  139. applicant_name VARCHAR(50) NOT NULL,
  140. applicant_phone VARCHAR(20) NOT NULL,
  141. applicant_id_card VARCHAR(18),
  142. area VARCHAR(50),
  143. address VARCHAR(300),
  144. customer_type VARCHAR(20), -- residential/business/enterprise
  145. caliber VARCHAR(10), -- 申请管径
  146. purpose VARCHAR(200),
  147. status VARCHAR(20) DEFAULT 'pre_apply', -- pre_apply/engineering/pending_review/approved/rejected/completed
  148. survey_date DATE,
  149. survey_result TEXT,
  150. approved_by BIGINT,
  151. approved_at TIMESTAMP,
  152. completed_at TIMESTAMP,
  153. created_at TIMESTAMP DEFAULT NOW(),
  154. updated_at TIMESTAMP DEFAULT NOW()
  155. );
  156. COMMENT ON TABLE rev_install IS '报装申请表';