# tourism_platform **Repository Path**: suouyu/tourism_platform ## Basic Information - **Project Name**: tourism_platform - **Description**: 旅游1111111111 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-22 - **Last Updated**: 2026-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 多源旅游信息整合服务平台 基于 Spring Boot + Vue 3 的现代化旅游信息管理系统,提供景点信息管理、用户交互、数据统计分析等功能。 ## 项目简介 本系统是一个集成了多源旅游信息的综合服务平台,支持景点管理、用户评价、收藏推荐、热度分析等功能,为用户提供全面的旅游信息服务。 ### 核心功能 - 🏛️ **景点管理**: 景点信息维护、图片上传、分类管理 - 👥 **用户系统**: 用户注册登录、个人中心、收藏历史 - ⭐ **评价互动**: 景点评分、用户评论、互动交流 - 📊 **数据分析**: 热度趋势、访问统计、数据可视化 - 🗺️ **周边服务**: 周边设施信息、交通指南 - 🔥 **热度计算**: 基于用户行为的智能热度分析 ## 技术栈 ### 后端技术 | 技术 | 版本 | 说明 | |------|------|------| | Spring Boot | 3.x | 核心框架 | | MyBatis Plus | 3.5.x | ORM框架 | | MySQL | 8.0+ | 数据库 | | JWT | - | 身份认证 | | Lombok | - | 代码简化 | | Hutool | - | 工具类库 | ### 前端技术 | 技术 | 版本 | 说明 | |------|------|------| | Vue | 3.x | 前端框架 | | Vite | 5.x | 构建工具 | | Element Plus | - | UI组件库 | | Vue Router | 4.x | 路由管理 | | Pinia | - | 状态管理 | | Axios | - | HTTP客户端 | | ECharts | 5.x | 数据可视化 | ## 项目结构 ``` tourism_platform/ ├── backend/ # 后端项目 │ ├── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/tourism/platform/ │ │ │ ├── config/ # 配置类 │ │ │ ├── controller/ # 控制器 │ │ │ ├── service/ # 业务逻辑 │ │ │ ├── mapper/ # 数据访问 │ │ │ ├── entity/ # 实体类 │ │ │ ├── common/ # 公共类 │ │ │ └── interceptor/ # 拦截器 │ │ └── resources/ │ │ ├── application.yml # 配置文件 │ │ └── mapper/ # MyBatis映射 │ └── uploads/ # 文件上传目录 │ ├── frontend/ # 前端项目 │ ├── src/ │ │ ├── api/ # API接口 │ │ ├── assets/ # 静态资源 │ │ ├── components/ # 公共组件 │ │ ├── router/ # 路由配置 │ │ ├── stores/ # 状态管理 │ │ ├── utils/ # 工具函数 │ │ ├── views/ # 页面组件 │ │ │ ├── admin/ # 管理后台页面 │ │ │ ├── Home.vue # 首页 │ │ │ ├── Login.vue # 登录页 │ │ │ ├── ScenicList.vue # 景点列表 │ │ │ └── ScenicDetail.vue # 景点详情 │ │ ├── App.vue # 根组件 │ │ └── main.js # 入口文件 │ ├── vite.config.js # Vite配置 │ └── package.json │ ├── sql/ # 数据库脚本 │ ├── tourism_platform.sql # 完整数据库 │ └── generate_history_heat_data.sql # 历史数据 │ └── README.md # 项目文档 ``` ## 快速开始 ### 环境要求 - JDK 17+ - Node.js 16+ - MySQL 8.0+ - Maven 3.6+ ### 数据库配置 1. 创建数据库: ```sql CREATE DATABASE tourism_platform DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ``` 2. 导入数据: ```bash mysql -u root -p tourism_platform < sql/tourism_platform.sql ``` 3. (可选) 生成历史热度数据: ```bash mysql -u root -p tourism_platform < sql/generate_history_heat_data.sql ``` ### 后端启动 1. 修改配置文件 `backend/src/main/resources/application.yml`: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/tourism_platform username: root password: 你的密码 ``` 2. 编译并启动: ```bash cd backend mvn clean install mvn spring-boot:run ``` 后端服务运行在: `http://localhost:8080` ### 前端启动 1. 安装依赖: ```bash cd frontend npm install ``` 2. 启动开发服务器: ```bash npm run dev ``` 前端服务运行在: `http://localhost:5173` ### 默认账号 | 角色 | 用户名 | 密码 | 说明 | |------|--------|------|------| | 管理员 | admin | admin123 | 管理后台访问 | | 普通用户 | user1 | password123 | 前台用户 | ## 主要功能说明 ### 1. 景点管理 **前台功能**: - 景点列表展示 (支持分页) - 多维度筛选 (关键词、类型、位置) - 景点详情查看 - 图片展示 (支持外部URL和本地上传) **后台功能**: - 景点增删改查 - 图片上传管理 (最大10MB) - 基本信息维护 (名称、类型、地址、门票等) ### 2. 用户系统 **注册登录**: - JWT token认证 - 用户信息存储在localStorage - 自动登录状态维护 **用户中心**: - 个人信息查看 - 浏览历史记录 - 收藏景点管理 - 我的评价查看 ### 3. 评价系统 **评价功能**: - 5星评分机制 - 评论内容发布 - 评价时间记录 - 用户评价展示 **管理功能**: - 评价列表查看 - 不良评价删除 - 评价统计分析 ### 4. 数据统计 **Dashboard展示**: - 景点总数、用户总数、评价总数 - 今日浏览量实时统计 - 热门景点排行 (基于浏览量) - 近7日热度趋势图 - 景点分类分布 - 评分分布统计 **所有数据均为真实数据库查询结果,非假数据** ### 5. 热度计算 **自动计算功能**: - 计算公式: `热度 = 浏览次数 × 0.3 + 收藏数 × 0.5 + 评论数 × 0.2` - 对数归一化到0-100范围 - 支持计算所有景点或指定景点 - 每日可多次计算更新 **使用方法**: 1. 进入"管理后台" → "热度趋势管理" 2. (可选) 选择指定景点 3. 点击"计算热度"按钮 4. 系统自动计算并保存当日热度 ### 6. 周边信息 **功能特性**: - 周边餐饮、住宿、交通信息 - 距离、电话、地址等详细信息 - 按类型筛选展示 - 后台增删改查管理 ### 7. 图片管理 **支持两种图片方式**: 1. **外部URL图片**: - 直接使用HTTP/HTTPS链接 - 适合使用图床服务 - 示例: `https://images.unsplash.com/photo-xxxxx` 2. **本地上传图片**: - 通过后台上传功能 - 存储在 `backend/uploads/` 目录 - 自动按年/月/日分类存储 - 路径格式: `/uploads/images/YYYY/MM/DD/UUID.jpg` **上传配置**: - 最大文件大小: 10MB - 支持格式: JPG, JPEG, PNG, GIF - 存储结构: 按日期分级目录 - 文件命名: UUID防止冲突 ## API接口说明 ### 认证接口 ``` POST /user/login # 用户登录 POST /user/register # 用户注册 GET /user/info # 获取用户信息 ``` ### 景点接口 ``` GET /scenic/list # 景点列表 GET /scenic/{id} # 景点详情 GET /scenic/categories # 获取分类 GET /scenic/locations # 获取位置 ``` ### 评价接口 ``` GET /reviews/scenic/{id} # 景点评价列表 POST /reviews/add # 添加评价 GET /reviews/my # 我的评价 ``` ### 管理后台接口 ``` # 景点管理 GET /admin/scenic # 列表 POST /admin/scenic # 新增 PUT /admin/scenic/{id} # 修改 DELETE /admin/scenic/{id} # 删除 # 热度管理 GET /admin/heat-trend # 热度列表 POST /admin/heat-trend/calculate # 计算热度 # 统计数据 GET /admin/statistics/overview # 概览统计 GET /admin/statistics/hot-scenic # 热门景点 GET /admin/statistics/heat-trend # 热度趋势 GET /admin/statistics/category-distribution # 分类分布 GET /admin/statistics/rating-distribution # 评分分布 ``` ### 文件上传 ``` POST /api/upload/image # 上传图片 DELETE /api/upload/image # 删除图片 ``` ## 数据库设计 ### 核心表结构 | 表名 | 说明 | 主要字段 | |------|------|----------| | users | 用户表 | id, username, password, role | | scenic_spots | 景点表 | id, name, location, category, image_url | | visitor_reviews | 评价表 | id, scenic_spot_id, user_id, rating, review | | user_favorites | 收藏表 | id, user_id, scenic_spot_id | | user_history | 浏览历史 | id, user_id, scenic_spot_id, action_type | | scenic_heat_trends | 热度趋势 | id, scenic_spot_id, date, heat_value, source | | surrounding_info | 周边信息 | id, scenic_spot_id, type, name, address | ### 关键字段说明 **scenic_spots.image_url**: - 外部URL: `https://xxx.com/photo.jpg` - 本地路径: `/uploads/images/2026/01/24/xxx.jpg` **scenic_heat_trends.source**: - `系统自动计算`: 通过计算功能生成 - `历史数据`: 初始化或导入的数据 **user_history.action_type**: - `浏览`: 用户查看景点详情 - 其他自定义类型可扩展 ## 开发规范 ### 后端规范 遵循 Spring Boot 3 企业级最佳实践: 1. **分层架构**: Controller → Service → Mapper 2. **统一响应**: 使用 Result 类封装响应 3. **异常处理**: 全局异常处理器统一处理 4. **参数校验**: 使用 Validation 注解 5. **代码规范**: Lombok 简化代码,遵循阿里Java规范 ### 前端规范 遵循 Vue 3 最佳实践: 1. **组合式API**: 使用 Composition API 2. **组件化**: 合理拆分组件,提高复用性 3. **状态管理**: Pinia 管理全局状态 4. **路由管理**: Vue Router 配置路由守卫 5. **代码规范**: ESLint + Prettier 格式化 ## 部署说明 ### 开发环境 - 后端: `mvn spring-boot:run` (端口8080) - 前端: `npm run dev` (端口5173) - 前端通过Vite代理访问后端API ### 生产环境 1. **前端构建**: ```bash cd frontend npm run build ``` 2. **后端打包**: ```bash cd backend mvn clean package ``` 3. **部署建议**: - 使用 Nginx 反向代理 - 配置 `/api` 和 `/uploads` 路径转发 - 建议将 uploads 目录迁移到对象存储 (OSS/COS) ### Nginx配置示例 ```nginx server { listen 80; server_name your-domain.com; # 前端静态文件 location / { root /path/to/frontend/dist; try_files $uri $uri/ /index.html; } # 后端API location /api/ { proxy_pass http://localhost:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 上传文件 location /uploads/ { proxy_pass http://localhost:8080/uploads/; } } ``` ## 常见问题 ### 1. 本地图片不显示 **原因**: Vite未代理 `/uploads` 路径 **解决**: - 确认 `vite.config.js` 中已配置 `/uploads` 代理 - 重启前端开发服务器 ### 2. 登录后跳转失败 **原因**: token或userInfo未正确存储 **解决**: - 检查浏览器localStorage - 清除缓存后重新登录 ### 3. 热度数据不显示 **原因**: 未执行热度计算 **解决**: - 进入"热度趋势管理" - 点击"计算热度"按钮 - 或导入历史数据SQL ### 4. Dashboard图表不显示 **原因**: API路径错误或数据不足 **解决**: - 已修复API路径 - 导入历史数据SQL生成测试数据 ## 项目特色 ✨ **前后端分离**: 清晰的架构,便于维护和扩展 🔐 **安全认证**: JWT token + 拦截器,保证系统安全 📊 **数据可视化**: ECharts图表,直观展示统计数据 🖼️ **灵活的图片管理**: 支持外部URL和本地上传两种方式 🧮 **智能热度算法**: 基于用户行为的自动计算,无需手动维护 📱 **响应式设计**: 支持PC端和移动端访问 ## 开发团队 本项目为个人毕业设计项目,基于现代化技术栈开发,遵循企业级开发规范。 ## 许可证 本项目仅用于学习和研究目的。 ## 更新日志 ### v1.0.0 (2026-01-24) - ✅ 完成基础功能开发 - ✅ 实现用户系统和景点管理 - ✅ 添加图片上传功能 - ✅ 实现热度自动计算 - ✅ 完善Dashboard数据统计 - ✅ 修复图片显示问题 - ✅ 优化前后端交互 ## 技术支持 如有问题或建议,欢迎提Issue或联系开发者。 --- **基于 Spring Boot 3 + Vue 3 构建** | **最后更新: 2026-01-24**