【有源码】周边旅游平台系统+SpringBoot+VUE+前后端分离

111 阅读4分钟

以下是基于 SpringBoot + VUE + 前后端分离 的 周边旅游平台系统 的完整开发流程,涵盖需求分析、技术设计、前后端开发、联调测试到部署上线全流程,适合程序员参考实践:


一、需求分析与规划

  1. 明确核心功能

    • 用户端:景点浏览/搜索、路线规划、在线预订(门票/酒店/旅游团)、订单管理、评价分享、个性化推荐。
    • 商家端:景点/酒店/旅游团信息管理、订单处理、数据分析。
    • 管理后台:用户/商家审核、内容审核、数据统计、系统配置。
  2. 技术选型确认

    • 后端:SpringBoot 2.x + Spring Security(权限控制) + MyBatis-Plus(ORM) + Redis(缓存) + Swagger(API文档)。
    • 前端:Vue 3 + Vue Router + Pinia(状态管理) + Element Plus/Ant Design Vue(UI库) + Axios(HTTP请求)。
    • 数据库:MySQL 8.0(主库) + MongoDB(可选,存储用户行为日志)。
    • 中间件:阿里云OSS(图片存储)、RabbitMQ(异步消息,如订单超时取消)、Elasticsearch(景点搜索优化)。
    • 部署:Docker + Nginx(反向代理) + Jenkins(CI/CD,可选)。
  3. 非功能需求

    • 高并发支持(如节假日景点预订峰值)。
    • 数据安全(用户隐私、支付信息加密)。
    • 响应式设计(适配PC/移动端)。

二、技术设计与架构

  1. 系统架构图

    用户浏览器 → Nginx(静态资源/API转发) → Vue前端服务  
                                       ↓  
                      SpringBoot后端服务 → MySQL/Redis/RabbitMQ
    
  2. API设计规范

    • 使用RESTful风格,统一返回格式:

      json
      {
        "code": 200,
        "message": "success",
        "data": {...}
      }
      
    • 接口文档:Swagger UI或YAPI。

  3. 数据库设计(关键表)

    • 用户表id, username, password, avatar, role(0-用户/1-商家/2-管理员)
    • 景点表id, name, address, description, price, longitude, latitude, status
    • 订单表id, user_id, order_type(0-门票/1-酒店/2-旅游团), status, create_time
    • 评价表id, user_id, target_id(景点/酒店ID), rating, content, create_time
  4. 安全设计

    • JWT令牌认证(前后端分离通用方案)。
    • 敏感数据加密(如密码使用BCrypt)。
    • 接口权限控制(@PreAuthorize注解)。

三、开发流程

1. 后端开发(SpringBoot)

  1. 项目初始化

    • 使用Spring Initializr生成项目,集成依赖:

      xml
      <dependencies>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-security</artifactId>
          </dependency>
          <dependency>
              <groupId>com.baomidou</groupId>
              <artifactId>mybatis-plus-boot-starter</artifactId>
              <version>3.5.3</version>
          </dependency>
          <!-- 其他依赖:Redis、Swagger、Lombok等 -->
      </dependencies>
      
  2. 核心模块开发

    • 用户模块:注册/登录(短信验证码/邮箱验证)、JWT生成与验证。
    • 景点模块:分页查询、条件筛选(按价格/距离排序)、详情页数据聚合。
    • 订单模块:支付接口对接(沙箱环境测试)、订单状态机(待支付→已支付→已取消)。
    • 推荐模块:基于用户浏览历史的协同过滤算法(可先用规则引擎替代)。
  3. 代码示例(JWT工具类)

    java
    public class JwtUtil {
        private static final String SECRET = "your-secret-key";
        
        public static String generateToken(String username) {
            return Jwts.builder()
                    .setSubject(username)
                    .setExpiration(new Date(System.currentTimeMillis() + 86400000))
                    .signWith(SignatureAlgorithm.HS512, SECRET)
                    .compact();
        }
    }
    

2. 前端开发(Vue 3)

  1. 项目初始化

    • 使用Vite创建Vue项目:

      bash
      npm create vite@latest tour-platform --template vue
      
    • 安装依赖:

      bash
      npm install axios vue-router pinia element-plus
      
  2. 核心页面开发

    • 首页:景点轮播图、热门推荐(调用后端API /api/scenic/hot)。
    • 景点详情页:图片懒加载、地图集成(高德/百度地图API)。
    • 订单页:表单验证(Element Plus的el-form)、支付弹窗。
  3. 状态管理(Pinia示例)

    javascript
    // stores/user.js
    import { defineStore } from 'pinia';
     
    export const useUserStore = defineStore('user', {
      state: () => ({ token: '', userInfo: null }),
      actions: {
        async login(data) {
          const res = await axios.post('/api/auth/login', data);
          this.token = res.data.token;
          localStorage.setItem('token', this.token);
        }
      }
    });
    
  4. API请求封装

    javascript
    // utils/request.js
    import axios from 'axios';
     
    const service = axios.create({
      baseURL: '/api',
      timeout: 5000
    });
     
    service.interceptors.request.use(config => {
      const token = localStorage.getItem('token');
      if (token) config.headers.Authorization = `Bearer ${token}`;
      return config;
    });
     
    export default service;
    

3. 前后端联调

  1. 跨域配置

    • 后端添加CORS支持(@CrossOrigin或全局配置):

      java
      @Configuration
      public class CorsConfig implements WebMvcConfigurer {
          @Override
          public void addCorsMappings(CorsRegistry registry) {
              registry.addMapping("/**").allowedOrigins("*").allowedMethods("*");
          }
      }
      
    • 或前端配置代理(vite.config.js):

      javascript
      export default defineConfig({
        server: {
          proxy: {
            '/api': {
              target: 'http://localhost:8080',
              changeOrigin: true
            }
          }
        }
      });
      
  2. 联调重点

    • 用户登录后前端存储JWT,后续请求携带Authorization头。
    • 统一错误处理(如后端返回401时前端跳转登录页)。

四、测试与部署

  1. 测试策略

    • 单元测试:JUnit 5测试后端Service层。
    • 接口测试:Postman测试所有API,包括异常场景(如参数缺失、权限不足)。
    • UI测试:Cypress模拟用户操作(如预订流程)。
  2. 部署方案

    • 开发环境:本地启动前后端服务,通过Nginx代理联调。

    • 生产环境

      1. 后端打包为JAR文件,使用Docker容器化:

        dockerfile
        FROM openjdk:17-jdk-slim
        COPY target/tour-platform.jar app.jar
        ENTRYPOINT ["java", "-jar", "/app.jar"]
        
      2. 前端构建静态资源:npm run build,上传至Nginx的html目录。

      3. Nginx配置反向代理:

        nginx
        server {
            listen 80;
            server_name your-domain.com;
            
            location / {
                root /usr/share/nginx/html;
                index index.html;
            }
            
            location /api {
                proxy_pass http://backend-server:8080;
            }
        }
        

五、上线后维护

  1. 监控与日志

    • 使用Spring Boot Actuator监控服务健康状态。
    • ELK(Elasticsearch + Logstash + Kibana)收集分析日志。
  2. 迭代优化

    • 根据用户反馈优化搜索推荐算法。
    • 引入CDN加速静态资源加载。

总结:通过SpringBoot + VUE实现前后端分离,可显著提升开发效率和系统可维护性。关键点在于 :清晰的接口定义、统一的状态管理、完善的错误处理机制。实际开发中建议使用Git进行版本控制,并通过Jenkins实现自动化部署。