
1. 项目背景与需求分析校园水电费管理是高校后勤工作中最基础却又最繁琐的日常事务之一。传统的人工抄表、纸质账单、窗口缴费模式存在诸多痛点每月抄表耗时耗力、手工计算易出错、缴费高峰期排队拥挤、数据统计滞后等。我们系办公楼去年就发生过因人工计算错误导致整层楼水电费多收30%的事故事后核查整整花了一周时间。这个系统要解决的核心问题可以归纳为三不数据不同步抄表、核算、缴费各环节脱节过程不透明学生无法实时掌握用量和费用服务不便捷必须到固定地点线下办理2. 系统架构设计2.1 技术选型决策选择Java EE技术栈主要基于三点考量稳定性水电费系统必须保证7×24小时可靠运行扩展性需要支持未来与校园一卡通、财务系统的对接维护性学校信息中心团队主要掌握Java技术技术组件清单后端Spring Boot 2.7 MyBatis Plus前端Vue 3 Element Plus数据库MySQL 8.0需配置主从复制中间件RocketMQ用于异步处理账单生成安全框架Spring Security JWT2.2 关键业务流程数据采集流程智能电表通过Modbus协议每小时上报数据数据采集服务进行校验和格式化异常数据触发告警并记录日志费用计算流程// 阶梯电价计算示例 public BigDecimal calculateElectricFee(int usage) { if(usage 100) { return new BigDecimal(usage).multiply(BASIC_RATE); } else if(usage 300) { return BASIC_RATE.multiply(new BigDecimal(100)) .add(SECOND_RATE.multiply(new BigDecimal(usage - 100))); } else { return BASIC_RATE.multiply(new BigDecimal(100)) .add(SECOND_RATE.multiply(new BigDecimal(200))) .add(THIRD_RATE.multiply(new BigDecimal(usage - 300))); } }3. 核心功能实现3.1 实时用量监控采用WebSocket实现动态数据推送前端建立长连接后端定时查询最新读数数据变更时主动推送前端使用ECharts绘制实时曲线关键点需要处理高并发连接建议配置Nginx的WebSocket代理参数3.2 移动端缴费微信小程序端关键逻辑获取openid绑定学号调用支付接口时需验证签名支付成功后通过MQ通知系统更新状态电子发票采用PDF模板动态生成遇到的坑微信支付证书需要定期更新最初没做自动更新机制导致凌晨支付失败。4. 数据库设计要点4.1 主要表结构表名关键字段索引设计meter_data表号、读数时间、当前读数联合索引(表号,读数时间)payment_record订单号、学号、支付金额、支付状态唯一索引(订单号)price_policy生效日期、类型、阶梯值、单价普通索引(生效日期)4.2 数据归档策略实时数据保留3个月历史数据按月归档到历史库账单数据永久保存使用Spring Batch实现定时归档任务5. 安全防护方案5.1 防篡改措施电表数据采用MAC校验支付请求必须带时间戳和签名数据库敏感字段加密存储操作日志全量记录5.2 性能优化用电数据按楼宇分库分表热点数据用Redis缓存账单生成采用异步队列数据库连接池配置动态调整6. 实施经验总结电表对接坑不同品牌电表的Modbus寄存器地址不同需要做设备适配层对账技巧每日凌晨跑批核对支付系统和财务系统的数据通知优化除了短信提醒增加企业微信推送方式运维发现MySQL连接池在寒暑假期间需要调小配置系统上线后效果缴费时间从平均15分钟缩短到2分钟财务对账效率提升80%异常用电识别速度提高5倍去年冬季通过数据分析发现3处水管暗漏这套系统最让我自豪的不是技术实现而是看到同学们在校园论坛反馈终于不用排队交电费了。后续计划加入用电行为分析功能帮助学校更科学地管理能源。