🏘️ 小区业主自治管理系统

基于 RuoYi-Vue 框架构建的三端协同平台 —— 覆盖业委会筹备、成立备案、业主大会召开、小区日常自治全流程

📑 目录

01 项目概述背景、角色、核心流程 02 系统架构技术栈、分层设计、目录结构 03 数据库设计42张表、ER关系、设计决策 04 后端设计分层规范、API清单、权限控制 05 前端设计PC端、小程序、手机端 06 功能模块详解8个模块卡、业务逻辑 07 部署说明环境要求、启动步骤

01项目概述

Project Overview — 为什么要做、做什么、怎么做

项目背景

在《民法典》框架下,小区业委会的成立和运作涉及大量流程:业主身份认证、筹备组组建、业主大会召开、投票表决、日常事务公示、财务管理等。传统线下方式效率低、不透明,容易引发纠纷。本系统将全流程线上化,服务三端用户。

3
终端 (小程序+H5+PC)
22
业务数据表
8
核心功能模块
69+
前后端文件

核心流程

🏠
业主认证
📋
业委会筹备
📜
成立备案
🗳️
业主大会
🏘️
日常自治

用户角色与权限

角色编码使用端核心职责
业主OWNER微信小程序身份认证、参与投票、查看公示、提交诉求
业委会委员COMMITTEE手机H5 + PC发起大会、管控投票、处理工单、管理财务
物业人员PROPERTY手机H5 + PC业主审核、工单处理、公告发布
系统管理员ADMINPC管理端系统配置、数据管理、角色权限分配

02系统架构

System Architecture — 技术选型与分层设计

技术栈

层级技术选型版本说明
业主端微信原生小程序微信生态最佳性能,API 无阉割
手机管理端React + Ant Design Mobile18 / 5.xH5 浏览器可访问,不依赖微信审核
PC管理端RuoYi-Vue (Vue2 + Element UI)3.9.2成熟的后台管理框架,权限体系开箱即用
后端框架Spring Boot3.2.0企业级 Java 框架
ORMMyBatisXML Mapper,灵活控制 SQL
分页PageHelper与 MyBatis 深度集成
安全Spring Security + JWTRBAC 权限模型,按钮级控制
数据库MySQL8.0关系型数据库,业主/房产/投票强关系模型
缓存RedisToken 缓存、验证码、投票高峰期加速
连接池Druid阿里开源,监控完善

分层架构

🖥️ 展示层

Vue2 + Element UI (PC)
React + Antd Mobile (H5)
微信小程序 (业主端)

⚙️ 业务层

ruoyi-admin (Controller)
ruoyi-system (Service/Domain)
ruoyi-framework (Security/AOP)

💾 数据层

MySQL 8.0 (主库)
Redis (缓存/Token)
Druid (连接池监控)

项目结构

# ===== 后端 (Spring Boot 多模块) =====
src/backend/
├── ruoyi-admin/        # 启动模块 + Controller 层
│   └── controller/
│       ├── system/      # RuoYi 内置:用户/角色/菜单/部门
│       └── biz/         # ★ 业务模块:小区/楼栋/公告/工单/业委会/大会/财务/认证
├── ruoyi-common/        # 公共工具:BaseEntity、AjaxResult、注解
├── ruoyi-framework/     # 框架层:Security 配置、AOP 切面、过滤器
├── ruoyi-system/        # 业务层:Domain + Mapper + Service
│   ├── domain/          # RuoYi 内置领域模型
│   ├── biz/domain/      # ★ 业务领域模型
│   ├── biz/mapper/      # ★ 业务 Mapper 接口
│   └── biz/service/     # ★ 业务 Service
├── ruoyi-generator/     # 代码生成器
└── ruoyi-quartz/        # 定时任务

# ===== 前端 (Vue2 SPA) =====
src/admin-pc/
├── src/
│   ├── api/biz/          # ★ 业务 API 层 (8 个模块)
│   ├── views/biz/        # ★ 业务 Vue 页面 (8 个模块)
│   ├── router/           # 路由配置
│   └── utils/request.js  # Axios 封装 (Token 拦截)
└── vue.config.js         # 代理 /dev-api → 后端 :8080

# ===== 小程序 + 手机端 =====
src/miniapp/             # 微信小程序 (原生框架)
src/admin-mobile/        # 手机 H5 管理端 (React)

03数据库设计

Database Design — 20 张 RuoYi 系统表 + 22 张业务表

ER 关系概要

                   ┌──────────────┐
                   │  community   │  小区信息
                   └──────┬───────┘
                          │ 1:N
                   ┌──────▼───────┐
                   │   building   │  楼栋
                   └──────┬───────┘
                          │ 1:N
                   ┌──────▼───────┐     ┌──────────────┐     ┌──────────────┐
                   │    house     │     │   sys_user   │     │   sys_role   │
                   └──────┬───────┘     └──────┬───────┘     └──────┬───────┘
                          │                    │                    │
                          └──────┬─────────────┘                    │
                                 │ N:M                              │
                          ┌──────▼───────┐                          │
                          │ owner_house  │  业主-房产绑定            │
                          └──────┬───────┘                          │
                                 │                                  │
                    ┌────────────┼────────────┐                     │
                    │            │            │                     │
             ┌──────▼──┐  ┌──────▼──┐  ┌──────▼──────┐             │
             │ meeting │  │complaint│  │announcement │             │
             │ 业主大会 │  │ 诉求工单 │  │  公示公告   │             │
             └──────┬──┘  └─────────┘  └─────────────┘             │
                    │                                               │
       ┌────────────┼────────────┐                                  │
  ┌────▼─────┐ ┌────▼─────┐ ┌───▼──────┐                            │
  │  vote    │ │ vote_    │ │ sign_in  │                            │
  │ _config  │ │ record   │ │  签到    │                            │
  └──────────┘ └──────────┘ └──────────┘                            │
                                                                    │
  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
  │  committee   │  │  financial_  │  │ preparation  │              │
  │   业委会     │  │    record    │  │   筹备记录   │              │
  └──────────────┘  └──────────────┘  └──────────────┘              │

RuoYi 系统表 (20 张)

由 RuoYi 框架提供,处理认证、权限、日志等通用功能

表名说明核心字段
sys_user用户账号user_id, user_name, password, phonenumber, status, dept_id
sys_role角色role_id, role_name, role_key, role_sort, data_scope
sys_menu菜单权限menu_id, menu_name, parent_id, path, component, perms, menu_type
sys_dept部门dept_id, parent_id, dept_name, order_num, leader
sys_user_role用户-角色关联user_id, role_id
sys_role_menu角色-菜单关联role_id, menu_id
sys_config系统配置config_name, config_key, config_value
sys_dict_type字典类型dict_name, dict_type
sys_dict_data字典数据dict_label, dict_value, dict_type
sys_oper_log操作日志oper_name, business_type, method, oper_time
sys_logininfor登录日志user_name, ipaddr, status, login_time
sys_notice系统通知notice_title, notice_type, notice_content
…… 共 20 张,详见 RuoYi 官方文档

业务表 — 小区与房产

表名说明核心字段
community小区信息 id, name, address, province, city, district, street_office(所属街道办), total_area(总面积), total_households(总户数)
building楼栋 id, community_id(FK→community), name, floors(层数), units(单元数), elevator_count
house房屋 id, building_id(FK→building), room_number(房号), floor, area(面积), house_type(户型), property_type(房屋性质)
owner_house业主-房产绑定 id, owner_id(FK→sys_user), house_id(FK→house), relation(业主/租户/家属), cert_images(证件照), audit_status(审核状态), audit_reason
certification认证记录 id, owner_house_id, type(房产证/购房合同), images, result, reason

业务表 — 业委会与大会

表名说明核心字段
preparation筹备申请 id, community_id, initiator_id, status(申请/审核中/公示/完成), street_office, filing_no
preparation_member筹备组成员 id, preparation_id, owner_id, role(组长/副组长/成员), audit_status
committee业委会 id, community_id, name, established_date, term(届期), term_start/term_end(任期), member_count, status(在任/到期/解散), filing_no
committee_member委员 id, committee_id, user_id, position(主任/副主任/委员), duty(分管职责), term_start, term_end
meeting业主大会 id, community_id, title, meeting_type(年度/临时/换届), start_time, end_time, location, online_url, content, status(草稿/已发布/进行中/已结束)
meeting_topic大会议题 id, meeting_id, title, description, topic_type(选举/表决/维修资金)

业务表 — 投票

表名说明核心字段
vote_config投票配置 id, topic_id, start_time, end_time, vote_type(单选/多选), anonymity, min_vote_rate(最低投票率)
vote_option投票选项 id, config_id, content(同意/反对/弃权/候选人), sort, vote_count(实时计票)
vote_record投票记录 id, config_id, option_id, voter_id, vote_weight(票权权重), vote_time — 唯一约束(voter_id+config_id)
vote_right投票权 id, owner_id, meeting_id, house_id, vote_weight, status
sign_in会议签到 id, meeting_id, owner_id, sign_type(线上/线下扫码), sign_time

业务表 — 运营管理

表名说明核心字段
announcement公示公告 id, community_id, title, content, summary, type(政策/财务/维修/表决), is_top, audit_status, publish_time
complaint诉求工单 id, owner_id, community_id, type(报修/建议/投诉/咨询), title, content, images, status(待处理→已分派→处理中→已解决→已关闭), assignee_id, result, rating(1-5星)
financial_record收支记录 id, community_id, record_type(收入/支出), category, amount, description, occur_date, voucher(凭证), audit_status
public_revenue公共收益 id, community_id, source(来源), amount, period(期间)
maintenance_fund维修资金 id, community_id, house_id, total_amount, used_amount, balance

关键设计决策

决策说明
票权权重模型vote_right 表按业主房产面积计算票权权重,一人一票 + 权重系数,确保投票公正
一人一票防刷vote_record 的 UNIQUE(voter_id, config_id) 约束,每个投票每人只能投一次
工单状态机PENDING → ASSIGNED → PROCESSING → RESOLVED → CLOSED,五阶段状态流转
审核流程业主认证、公告发布、财务记录均设计多级审核:草稿 → 待审核 → 通过/驳回
业委会任期term_start/term_end 记录每届任期,支持换届历史追溯

04后端设计

Backend Design — 代码组织、分层规范、API 设计

代码分层规范

每个业务模块遵循统一的分层结构(以 Community 为例):

// 1. Domain — 数据模型,继承 RuoYi 的 BaseEntity
public class Community extends BaseEntity {
    private Long id;
    private String name;
    private String address;
    // ... getter / setter
}

// 2. Mapper 接口 — MyBatis 数据访问
public interface CommunityMapper {
    List<Community> selectCommunityList(Community c);
    Community selectCommunityById(Long id);
    int insertCommunity(Community c);
    int updateCommunity(Community c);
    int deleteCommunityByIds(Long[] ids);
}

// 3. Mapper XML — SQL 映射,支持动态条件查询
<!-- CommunityMapper.xml -->
<!-- 使用 <include refid="selectVo"/> 复用字段列表 -->
<!-- <if test="..."> 实现动态 WHERE 条件 -->

// 4. Service 接口 + 实现
public interface ICommunityService { ... }
// CommunityServiceImpl — 注入 Mapper,委托调用

// 5. Controller — RESTful API,继承 BaseController
@RestController
@RequestMapping("/biz/community")
public class CommunityController extends BaseController {
    @Autowired private ICommunityService service;

    @GetMapping("/list")
    public TableDataInfo list(Community c) {
        startPage();                     // PageHelper 分页
        List<Community> list = service.selectCommunityList(c);
        return getDataTable(list);        // 统一分页响应体
    }

    @PostMapping
    @PreAuthorize("@ss.hasPermi('biz:community:add')")  // 按钮级权限
    public AjaxResult add(@RequestBody Community c) {
        return toAjax(service.insertCommunity(c));
    }
}

统一响应规范

场景返回类型示例
分页列表TableDataInfo{code:200, rows:[], total:100, msg:"查询成功"}
单条/非分页AjaxResult{code:200, data:{...}, msg:"操作成功"}
操作结果AjaxResult{code:200, msg:"修改成功"} 或 {code:500, msg:"错误信息"}

API 全量清单

模块Base URL方法权限标识
小区管理/biz/communityGET list · GET :id · POST · PUT · DELETEbiz:community:list/add/edit/remove
楼栋管理/biz/buildingGET list · GET :id · POST · PUT · DELETEbiz:building:list
公示公告/biz/announcementGET list · GET :id · POST · PUT · DELETEbiz:announcement:list/add/edit/remove
诉求工单/biz/complaintGET list · GET :id · PUT assign · PUT resolve · DELETEbiz:complaint:list
业主认证/biz/owner-houseGET list · GET :id · PUT audit · DELETEbiz:owner:list/remove
业委会管理/biz/committeeGET list · GET :id · POST · PUT · DELETEbiz:committee:list/add/edit/remove
业主大会/biz/meetingGET list · GET :id · POST · PUT · DELETEbiz:meeting:list
财务管理/biz/financialGET list · GET :id · POST · PUT · DELETEbiz:financial:list/add/edit/remove

权限控制体系

基于 Spring Security + RBAC 的三级权限控制:

级别实现方式示例
菜单级sys_menu 表 + 前端 v-hasPermi 指令无权限者看不到菜单入口
接口级@PreAuthorize("@ss.hasPermi('xxx')")无权限者调 API 返回 403
按钮级前端 v-hasPermi="['biz:community:add']"无权限者看不到"新增"按钮

05前端设计

Frontend Design — PC 管理端、小程序端、手机端

PC 管理端 (Vue2 + Element UI)

基于 RuoYi-Vue 前端框架,所有业务页面遵循统一模板:

  1. 搜索区el-form :inline 内联搜索表单,支持条件筛选 + 重置
  2. 工具栏 — 新增/修改/删除按钮,用 v-hasPermi 指令控制显隐
  3. 数据表格el-table + pagination 分页组件,多选支持批量删除
  4. 弹窗表单el-dialog 内嵌 el-form,新增/编辑复用同一组件
  5. API 调用 — 统一通过 @/api/biz/xxx.js 模块封装,自动携带 Token

前端 API 层示例

// src/api/biz/community.js
import request from '@/utils/request'

export function listCommunity(query) {
  return request({ url: '/biz/community/list', method: 'get', params: query })
}
export function getCommunity(id) {
  return request({ url: '/biz/community/' + id, method: 'get' })
}
export function addCommunity(data) {
  return request({ url: '/biz/community', method: 'post', data })
}
export function updateCommunity(data) {
  return request({ url: '/biz/community', method: 'put', data })
}
export function delCommunity(ids) {
  return request({ url: '/biz/community/' + ids, method: 'delete' })
}

菜单配置

业务菜单存储在 sys_menu 表中,通过数据库动态配置(无需重启前端):

menu_idmenu_nameparent_idpathcomponentperms
1061业主自治0biz
1062小区管理1061communitybiz/community/indexbiz:community:list
1063楼栋管理1061buildingbiz/community/buildingbiz:building:list
1064公示公告1061announcementbiz/announcement/indexbiz:announcement:list
1065诉求工单1061complaintbiz/complaint/indexbiz:complaint:list
1066业主认证1061owner-certbiz/owner/indexbiz:owner:list
1067业委会管理1061committeebiz/committee/indexbiz:committee:list
1068业主大会1061meetingbiz/meeting/indexbiz:meeting:list
1069财务管理1061financialbiz/financial/indexbiz:financial:list

小程序端 (微信原生)

Tab页面功能
首页pages/index/index轮播通知、快速入口(业主认证/投票/诉求/报修)、最新公告
筹备/大会pages/preparation/preparation业委会筹备进度、业主大会列表
投票pages/vote/vote进行中的投票列表、跳转投票详情
服务pages/service/service提交诉求、费用查询、车位管理、自治章程
我的pages/mine/mine登录、我的房产、投票记录、诉求记录、设置

使用 wx.login 获取 code → 后端换取 openid → JWT Token 认证

手机管理端 (React H5)

Tab页面功能
工作台pages/Dashboard待审核数、进行中投票、待处理工单、超时工单
审核pages/OwnerAudit业主认证审核列表
投票pages/VoteManage投票管控、新建投票
工单pages/ComplaintManage诉求工单处理、分派
我的pages/Mine委员信息、工作台账、系统设置

06功能模块详解

Module Details — 每个模块的业务逻辑与交互设计

🏘️ 小区管理

管理小区基础信息(名称、省市区、所属街道、面积、户数)。新增小区后,方可创建楼栋和房屋。

CRUD 关联楼栋

🏢 楼栋管理

管理每个小区下的楼栋信息,关联所属小区。信息包含:楼栋名称、层数、单元数、电梯数。

CRUD 关联小区 关联房屋

📢 公示公告

发布小区公告(政策/财务/维修/表决结果),支持置顶、草稿/发布状态切换、富文本内容。

CRUD 审核流程 置顶排序

📋 诉求工单

业主提交报修/建议/投诉/咨询,管理员分派处理、跟踪状态、记录结果、业主评价。

状态机 5 阶段流转 评价体系

👤 业主认证

业委会/物业审核业主身份绑定申请。查看业主姓名、手机号、房屋信息、证件材料,支持通过/驳回操作。

审核流 通过/驳回 关联房屋

🏛️ 业委会管理

管理业委会信息:名称、所属小区、成立日期、届期、任期起止、委员人数、备案编号、状态(在任/到期/解散)。

CRUD 任期管理 状态流转

🗳️ 业主大会

创建业主大会(年度/临时/换届),设置会议时间、地点、线上链接、会议内容。支持草稿→发布流程。

CRUD 发布流程 关联投票

💰 财务管理

管理小区收支记录:收入/支出类型、类别(物业费/公共收益/维修资金)、金额、发生日期、凭证、审核状态。

CRUD 审核流程 收支分类

07部署说明

Deployment Guide — 环境要求与启动步骤

环境要求

组件版本说明
JDK17+Spring Boot 3.2 最低要求
MySQL8.0+支持窗口函数、CTE
Redis6.0+缓存 + Token 存储
Node.js14+前端构建(开发环境)
Maven3.6+后端构建

启动步骤

1. 数据库初始化

# 导入 RuoYi 系统表
mysql -h host -u user -p lianyue < src/backend/sql/ry_20260417.sql
mysql -h host -u user -p lianyue < src/backend/sql/quartz.sql

# 业务表已通过 application.yml 自动建表(MyBatis)
# 如需手动创建,执行 src/backend/wuye-server/.../sql/init.sql

2. 修改配置

# 编辑 src/backend/ruoyi-admin/src/main/resources/application-druid.yml
datasource:
  druid:
    master:
      url: jdbc:mysql://YOUR_HOST:PORT/lianyue?...   # 修改数据库连接
      username: YOUR_USER                              # 修改用户名
      password: YOUR_PASSWORD                          # 修改密码

3. 启动后端

cd src/backend
mvn clean package -DskipTests     # 编译打包
java -jar ruoyi-admin/target/ruoyi-admin.jar   # 启动 (端口 8080)

4. 启动前端

cd src/admin-pc
npm install                        # 安装依赖
npm run dev                        # 启动开发服务器 (默认端口 1024)

# 访问 http://localhost:1024
# 默认账号: admin / admin123

当前运行状态

后端运行中http://localhost:8080
PC管理端运行中http://localhost:1024
数据库连接正常47.91.3.189:3562 / lianyue (45 张表)
Redis连接正常localhost:6379

小区业主自治管理系统 · 设计文档 · 2026-06-08

基于 RuoYi-Vue 3.9.2 · Spring Boot 3.2.0 · Vue 2.6 · MySQL 8.0