# Smart Park **Repository Path**: kungfupan/smart-park ## Basic Information - **Project Name**: Smart Park - **Description**: 基于SpringBoot3.2+Vue3+Three.js的智慧园区系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-05 - **Last Updated**: 2026-08-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpringBoot + Vue 智慧园区系统 ## 技术栈 ### 后端 - **Spring Boot 3.2.0** - 核心框架 - **MyBatis-Plus 3.5.5** - ORM 框架(分页、逻辑删除、自动填充) - **Spring Security** - 安全框架(认证 + 授权) - **JWT (jjwt 0.12.3)** - 无状态认证 - **MySQL 8.0** - 数据库(Docker 部署或本地安装) - **Hutool 5.8.24** - Java 工具类库 - **Lombok** - 简化代码 - **Jakarta Validation** - 参数校验 ### 前端 - **Vite 5.0.0** - 前端构建工具 - **Vue 3.4.21** - 前端框架 - **Element Plus 2.6.1** - 前端 UI 组件库 - **Axios 1.6.7** - 前端 HTTP 客户端 - **TypeScript 5.4.0** - 前端类型检查和工具支持 ## 项目结构 ``` src/main/java/com/demo/ ├── WorkSearchApplication.java # 启动类 ├── common/ # 公共模块 │ ├── Result.java # 统一响应结果 │ ├── PageResult.java # 分页响应结果 │ ├── config/ │ │ ├── JwtProperties.java # JWT 配置属性 │ │ ├── MyBatisPlusConfig.java # MyBatis-Plus 配置 │ │ └── MetaObjectHandlerConfig.java # 自动填充配置 │ ├── exception/ │ │ ├── BusinessException.java # 业务异常 │ │ └── GlobalExceptionHandler.java # 全局异常处理 │ └── util/ │ └── JwtUtil.java # JWT 工具类 ├── security/ # 安全模块 │ ├── JwtAuthenticationFilter.java # JWT 认证过滤器 │ └── SecurityConfig.java # Spring Security 配置 └── module/ # 业务模块 ├── system/ # 系统管理模块 │ ├── entity/ # 实体类 │ │ ├── SysUser.java # 用户 │ │ ├── SysRole.java # 角色 │ │ ├── SysPermission.java # 权限 │ │ ├── SysUserRole.java # 用户-角色关联 │ │ └── SysRolePermission.java # 角色-权限关联 │ ├── mapper/ # Mapper 接口 │ ├── service/ # 服务层 │ │ ├── AuthService.java # 认证服务 │ │ ├── SysUserService.java # 用户服务 │ │ ├── SysRoleService.java # 角色服务 │ │ └── SysPermissionService.java# 权限服务 │ ├── dto/ # 数据传输对象 │ └── controller/ # 控制器 │ ├── AuthController.java # 登录注册 │ ├── UserController.java # 用户管理 │ ├── RoleController.java # 角色管理 │ └── PermissionController.java# 权限管理 ├── biz/ # 业务扩展模块(文章管理) │ ├── entity/ # 实体类 │ │ ├── BizCategory.java # 分类 │ │ └── BizArticle.java # 文章 │ ├── mapper/ # Mapper │ ├── service/ # 服务层 │ ├── dto/ # DTO │ └── controller/ # 控制器 │ ├── ArticleController.java # 文章管理 │ └── CategoryController.java # 分类管理 └── park/ # 园区空间管理模块 ├── entity/ # 实体类 │ ├── ParkPark.java # 园区 │ ├── ParkBuilding.java # 楼宇 │ └── ParkFloor.java # 楼层 ├── mapper/ # Mapper 接口 │ ├── ParkParkMapper.java # 园区 Mapper │ ├── ParkBuildingMapper.java # 楼宇 Mapper │ └── ParkFloorMapper.java # 楼层 Mapper ├── service/ # 服务层 │ ├── ParkParkService.java # 园区服务 │ ├── ParkBuildingService.java # 楼宇服务 │ ├── ParkFloorService.java # 楼层服务 │ └── impl/ # 服务实现 ├── dto/ # 数据传输对象 │ ├── ParkParkCreateDTO.java # 园区新增 DTO │ ├── ParkParkQueryDTO.java # 园区查询 DTO │ ├── ParkParkUpdateDTO.java # 园区修改 DTO │ ├── ParkBuildingCreateDTO.java # 楼宇新增 DTO │ ├── ParkBuildingQueryDTO.java # 楼宇查询 DTO │ ├── ParkBuildingUpdateDTO.java # 楼宇修改 DTO │ ├── ParkFloorCreateDTO.java # 楼层新增 DTO │ ├── ParkFloorQueryDTO.java # 楼层查询 DTO │ └── ParkFloorUpdateDTO.java # 楼层修改 DTO └── controller/ # 控制器 ├── ParkParkController.java # 园区管理 ├── ParkBuildingController.java # 楼宇管理 └── ParkFloorController.java # 楼层管理 ``` ## 快速启动 ### 前置要求 - JDK 17+ - Maven 3.6+ ### 前置条件 - JDK 17+ - Maven 3.6+ - MySQL 8.0(推荐使用 Docker 部署,见下方) ### MySQL 部署(Docker) ```bash # 进入 Docker 脚本目录 cd docker/mysql # Linux / Mac chmod +x deploy.sh && ./deploy.sh # Windows(双击运行或 PowerShell 执行) .\deploy.bat # 或者使用 docker-compose(在项目根目录) docker-compose up -d ``` 部署后会自动创建 `smart_park` 数据库、表结构和初始数据。 ### 启动步骤 ```bash # 1. 进入项目目录 cd smart-park # 2. 编译并启动 mvn clean spring-boot:run # 3. 启动前端 cd smart-park-ui npm install && npm start # 4. 项目启动后访问 # 应用地址: http://localhost:3000 ``` ## 预置测试账号 | 用户名 | 密码 | 角色 | 权限范围 | |--------|------|------|----------| | admin | 123456 | 超级管理员 | 所有权限 | | user | 123456 | 普通用户 | 文章列表查看 | | editor | 123456 | 编辑 | 文章完整管理 | ## API 接口文档 ### 一、认证模块 `/api/auth` #### 1. 用户注册 ``` POST /api/auth/register Content-Type: application/json { "username": "test", "password": "123456", "nickname": "测试用户", "email": "test@example.com" } ``` #### 2. 用户登录 ``` POST /api/auth/login Content-Type: application/json { "username": "admin", "password": "123456" } ``` **响应示例:** ```json { "code": 200, "message": "操作成功", "data": { "token": "eyJhbGciOiJIUzI1NiJ9...", "user": { "id": 1, "username": "admin", "nickname": "系统管理员", ... } } } ``` #### 3. 获取当前用户信息 ``` GET /api/auth/user-info Authorization: Bearer {token} ``` --- ### 二、用户管理 `/api/user`(需管理员权限) #### 1. 用户列表(分页) ``` GET /api/user/list?page=1&size=10&username=&nickname=&status= Authorization: Bearer {token} ``` #### 2. 用户详情 ``` GET /api/user/{id} Authorization: Bearer {token} ``` #### 3. 新增用户 ``` POST /api/user Authorization: Bearer {token} Content-Type: application/json { "username": "newuser", "password": "123456", "nickname": "新用户", "email": "new@example.com", "roleIds": [2] } ``` #### 4. 修改用户 ``` PUT /api/user Authorization: Bearer {token} Content-Type: application/json { "id": 4, "nickname": "修改后的昵称", "status": 1 } ``` #### 5. 删除用户 ``` DELETE /api/user/{id} Authorization: Bearer {token} ``` #### 6. 重置密码 ``` PUT /api/user/{id}/reset-password Authorization: Bearer {token} Content-Type: application/json { "password": "newpassword" } ``` --- ### 三、角色管理 `/api/role`(需管理员权限) #### 1. 角色列表 ``` GET /api/role/list Authorization: Bearer {token} ``` #### 2. 新增角色 ``` POST /api/role Authorization: Bearer {token} Content-Type: application/json { "roleName": "测试角色", "roleCode": "ROLE_TEST", "description": "这是一个测试角色" } ``` #### 3. 为角色分配权限 ``` PUT /api/role/{id}/permissions Authorization: Bearer {token} Content-Type: application/json [1, 2, 3, 4, 5] ``` --- ### 四、权限管理 `/api/permission` #### 1. 权限列表 ``` GET /api/permission/list Authorization: Bearer {token} ``` --- ### 五、文章管理 `/api/article` #### 1. 文章列表(分页) ``` GET /api/article/list?page=1&size=10&title=&categoryId=&status= Authorization: Bearer {token} ``` #### 2. 文章详情(自动浏览量+1) ``` GET /api/article/{id} Authorization: Bearer {token} ``` #### 3. 新增文章 ``` POST /api/article Authorization: Bearer {token} Content-Type: application/json { "title": "SpringBoot入门教程", "content": "这是一篇SpringBoot入门教程...", "summary": "快速上手SpringBoot", "categoryId": 3, "tags": "SpringBoot,Java", "status": 1 } ``` #### 4. 修改文章 ``` PUT /api/article Authorization: Bearer {token} Content-Type: application/json { "id": 1, "title": "修改后的标题", "status": 1 } ``` #### 5. 删除文章 ``` DELETE /api/article/{id} Authorization: Bearer {token} ``` #### 6. 点赞文章 ``` POST /api/article/{id}/like Authorization: Bearer {token} ``` --- ### 六、文章分类 `/api/category` #### 1. 分类树 ``` GET /api/category/tree Authorization: Bearer {token} ``` --- ### 七、园区管理 `/api/park/parks` 园区、楼宇、楼层三级层级结构:`园区 → 楼宇 → 楼层`,每个实体都支持数字孪生模型(`twinModelId`)集成。 #### 1. 园区列表(分页) ``` GET /api/park/parks/list?page=1&size=10&parkName=&status= Authorization: Bearer {token} ``` #### 2. 园区详情 ``` GET /api/park/parks/{id} Authorization: Bearer {token} ``` #### 3. 新增园区 ``` POST /api/park/parks Authorization: Bearer {token} Content-Type: application/json { "parkName": "智慧园区A", "address": "XX市XX区XX路100号", "areaSize": 50000.0, "description": "现代化智慧园区", "coverImage": "https://example.com/cover.jpg", "status": 1 } ``` #### 4. 修改园区 ``` PUT /api/park/parks/{id} Authorization: Bearer {token} Content-Type: application/json { "parkName": "智慧园区A(改造)", "status": 1 } ``` #### 5. 删除园区 ``` DELETE /api/park/parks/{id} Authorization: Bearer {token} ``` --- ### 八、楼宇管理 `/api/park/buildings` #### 1. 楼宇列表(分页) ``` GET /api/park/buildings/list?page=1&size=10&parkId=&buildingName=&status= Authorization: Bearer {token} ``` #### 2. 楼宇详情 ``` GET /api/park/buildings/{id} Authorization: Bearer {token} ``` #### 3. 新增楼宇 ``` POST /api/park/buildings Authorization: Bearer {token} Content-Type: application/json { "parkId": 1, "buildingName": "A栋研发中心", "buildingCode": "BLD-A01", "floorCount": 12, "areaSize": 8000.0, "status": 1 } ``` #### 4. 修改楼宇 ``` PUT /api/park/buildings/{id} Authorization: Bearer {token} Content-Type: application/json { "buildingName": "A栋研发中心(扩建)", "status": 1 } ``` #### 5. 删除楼宇 ``` DELETE /api/park/buildings/{id} Authorization: Bearer {token} ``` --- ### 九、楼层管理 `/api/park/floors` #### 1. 楼层列表(分页) ``` GET /api/park/floors/list?page=1&size=10&buildingId=&floorNo=&status= Authorization: Bearer {token} ``` #### 2. 楼层详情 ``` GET /api/park/floors/{id} Authorization: Bearer {token} ``` #### 3. 新增楼层 ``` POST /api/park/floors Authorization: Bearer {token} Content-Type: application/json { "buildingId": 1, "floorNo": 1, "floorName": "F1", "areaSize": 1500.0, "floorPlan": "https://example.com/floor-plan.jpg", "status": 1 } ``` #### 4. 修改楼层 ``` PUT /api/park/floors/{id} Authorization: Bearer {token} Content-Type: application/json { "floorName": "F1(大堂层)", "status": 1 } ``` #### 5. 删除楼层 ``` DELETE /api/park/floors/{id} Authorization: Bearer {token} ``` --- ## MyBatis-Plus 功能演示 本项目使用了 MyBatis-Plus 以下核心功能: | 功能 | 说明 | 示例位置 | |------|------|----------| | **BaseMapper** | 内置 CRUD 方法 | 所有 Mapper 继承 | | **ServiceImpl** | 内置 Service CRUD | 所有 Service 继承 | | **LambdaQueryWrapper** | 类型安全的条件构造 | `SysUserService.pageUsers()` | | **分页插件** | 物理分页 | `MyBatisPlusConfig.java` | | **逻辑删除** | `@TableLogic` | `SysUser.deleted` 字段 | | **自动填充** | createTime/updateTime | `MetaObjectHandlerConfig.java` | | **自定义SQL** | XML/注解方式 | `BizArticleMapper.selectArticlePage()` | ## 权限控制说明 项目采用 RBAC(基于角色的访问控制)模型: ``` 用户(User) → 用户角色关联(UserRole) → 角色(Role) → 角色权限关联(RolePermission) → 权限(Permission) ``` - 通过 `@PreAuthorize` 注解实现方法级权限控制 - JWT Token 中存储用户信息,每次请求从 Token 中解析 - 权限编码格式:`模块:操作`(如 `user:create`、`article:delete`) ## 自定义数据库配置 如果 MySQL 不在本地或使用不同端口/密码,修改 `application.yml`: ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://你的IP:3306/smart_park?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true username: demo password: demo123456 ``` 分页插件已配置为 `DbType.MYSQL`,无需额外修改。