以下是一个基于Spring Boot + Vue的小区物业智能卡管理系统实现方案,包含技术选型、系统架构、核心功能模块设计和实现细节说明:
一、技术选型
类别 | 技术栈 |
---|---|
前端 | Vue3 + Element Plus + Axios |
后端 | Spring Boot 3.x + MyBatis-Plus |
数据库 | MySQL 8.0 + Redis |
权限认证 | Spring Security + JWT |
智能卡协议 | M1卡(模拟IC卡) |
硬件对接 | 树莓派/读卡器(模拟开发) |
部署 | Docker + Nginx |
二、系统架构
用户浏览器 → Nginx → Vue前端 → Spring Boot API → MySQL数据库
↗
智能卡设备 → 树莓派 → HTTP API
- 前后端分离:Vue负责视图层,Spring Boot提供RESTful API
- 硬件交互:通过树莓派模拟读卡器硬件,与后端HTTP通信
- 安全层:JWT实现无状态认证,Spring Security控制接口权限
三、核心功能模块
1. 住户管理
- 功能:新增/删除住户、家庭成员管理、房屋信息绑定
- 接口示例:
@PostMapping("/residents")
public Result addResident(@RequestBody Resident resident) {
return residentService.save(resident) ? Result.success() : Result.fail();
}
2. 智能卡管理
- 功能:
- 发卡/挂失/补办
- 卡-住户绑定(一对多)
- 有效期管理(自动过期)
- 数据库表设计:
CREATE TABLE smart_card (
card_id VARCHAR(20) PRIMARY KEY, -- 物理卡号
resident_id INT, -- 关联住户
status TINYINT, -- 0-正常 1-挂失
expire_date DATETIME
);
3. 门禁权限
- 实现逻辑:
- 读卡器获取卡号 → 调用后端验证接口
- 校验卡状态、有效期、权限
- 返回是否放行 + 记录日志
- 权限验证代码片段:
public boolean checkAccess(String cardId, Integer gateId) {
return lambdaQuery()
.eq(SmartCard::getCardId, cardId)
.gt(SmartCard::getExpireDate, LocalDateTime.now())
.eq(SmartCard::getStatus, 0)
.exists();
}
4. 物业缴费
- 功能亮点:
- 自动生成月度账单(水电气费)
- 在线支付对接(模拟接口)
- 欠费提醒(短信/微信通知)
- 账单生成策略:
@Scheduled(cron = "0 0 1 1 * ?") // 每月1号执行
public void generateBills() {
List<Resident> residents = residentService.list();
residents.forEach(res -> {
Bill bill = new Bill(res.getId(), calculateAmount());
billService.save(bill);
});
}
5. 报修投诉
- 流程:
- 住户提交报修单(文字+图片)
- 物业派单 → 维修人员处理
- 完成确认 → 评价
- 文件上传实现:
<el-upload
action="/api/upload"
:before-upload="checkFileType"
:limit="3">
<el-button type="primary">上传图片</el-button>
</el-upload>
四、智能卡交互模拟
硬件端伪代码(Python模拟):
import requests
while True:
card_id = read_from_reader() # 模拟读卡操作
resp = requests.post(
"http://backend/api/access/check",
json={"cardId": card_id, "gateId": 1}
)
if resp.json()["data"]["allow"]:
open_gate()
log_access(card_id, "SUCCESS")
else:
beep_alarm()
五、安全设计
- 数据传输:HTTPS + 敏感字段AES加密
- 接口防护:
- 防SQL注入:MyBatis-Plus自动过滤
- 防重放攻击:timestamp + nonce校验
- 权限控制:
@PreAuthorize("hasRole('ADMIN') or #residentId == authentication.principal.id")
@GetMapping("/resident/{residentId}")
public Resident getResident(@PathVariable Long residentId) {
// ...
}
六、部署方案
- 前端部署:
npm run build
docker run -d -p 80:80 -v ./dist:/usr/share/nginx/html nginx
- 后端部署:
FROM openjdk:17
ADD target/property-system.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
七、扩展性设计
- 设备兼容:通过抽象硬件接口层,支持多种读卡器
- 多小区支持:增加小区信息表,数据隔离
- 移动端扩展:Uniapp生成微信小程序版本
该方案可实现基础物业管理的数字化,实际开发中需根据硬件具体协议调整通信模块,建议先完成核心功能再逐步集成硬件设备。