# 软件工程高级实践 **Repository Path**: haluns-deepblue/sep_plus ## Basic Information - **Project Name**: 软件工程高级实践 - **Description**: 天津大学23级软件工程高级实践 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-04-04 - **Last Updated**: 2026-05-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 饿了么外卖系统 (ELM) - Spring Boot + Vue 3 版本 ## 天津大学软件学院 - 软件工程(系列)实践项目 ## 项目概述 本项目是一个基于Spring Boot后端和Vue 3前端的饿了么外卖系统,实现了用户点餐、商家管理、订单处理、钱包支付、积分商城等核心功能。系统分为用户端和商家端两大模块(商家版内嵌在用户端的"我的"页面的"更多功能"里),提供了完整的外卖服务流程。 ## 系统架构 系统采用前后端分离架构: - **前端**:Vue 3 + Vite - **后端**:Spring Boot 2.x - **认证方式**:JWT (JSON Web Token) - **数据交互**:RESTful API + JSON ## 项目结构 ``` sep/ ├── elm-backened/ # 后端项目 │ ├── src/main/java/cn/edu/tju/ │ │ ├── core/ # 核心模块 │ │ │ ├── config/ # 配置类 │ │ │ ├── model/ # 基础模型(User等) │ │ │ ├── security/ # 安全认证 │ │ │ └── utils/ # 工具类 │ │ ├── elm/ # 业务模块 │ │ │ ├── controller/ # 控制器 │ │ │ ├── dto/ # 数据传输对象 │ │ │ ├── model/ # 业务模型 │ │ │ │ ├── wallet/ # 钱包模型 │ │ │ │ └── point/ # 积分模型 │ │ │ ├── repository/ # 数据访问层 │ │ │ └── service/ # 业务逻辑层 │ │ │ ├── domain/ # 领域模型(VirtualWallet) │ │ │ ├── impl/ # 服务实现 │ │ │ └── strategy/ # 策略模式(积分获取策略) │ │ └── MyApplication.java # 应用入口 │ ├── src/test/ # 测试代码 │ │ └── java/cn/edu/tju/elm/ │ │ ├── integration/ # 集成测试 │ │ └── service/ # 单元测试 │ └── resources/ # 资源文件 ├── elm-frontend/ # 前端项目 │ └── frontend/ │ ├── src/ │ │ ├── api/ # API接口封装 │ │ ├── assets/ # 静态资源 │ │ ├── components/ # 公共组件 │ │ ├── router/ # 路由配置 │ │ ├── store/ # Pinia状态管理 │ │ ├── views/ # 页面视图 │ │ ├── App.vue # 根组件 │ │ └── main.js # 入口文件 │ └── public/ # 公共资源 └── uploads/ # 上传文件存储 ``` ## 技术栈 ### 后端技术栈 - **核心框架**: Spring Boot 2.7.x - **安全框架**: Spring Security + JWT - **数据访问**: Spring Data JPA - **数据库**: MySQL - **API文档**: Swagger/OpenAPI - **构建工具**: Maven - **设计模式**: 充血领域模型、策略模式 ### 前端技术栈 - **核心框架**: Vue 3 - **构建工具**: Vite - **状态管理**: Pinia - **HTTP客户端**: Axios - **UI组件**: 自定义组件 - **路由管理**: Vue Router ## 功能特性 ### 一、基础功能 #### 1. 用户管理 > 提示:商家版入口在登录个人账号之后的"我的"页面的"更多功能"中 - 用户注册与登录 - **手机号验证**:严格校验11位手机号格式 - **实时检测**:用户名和手机号实时检测是否已被注册 - 个人信息管理 - 收货地址管理 #### 2. 店铺管理 > 提示:店铺依附于个人账号,一人名下可有多家店铺 - 店铺注册与登录 - 店铺信息管理 - 商品管理(新增、编辑、删除、上下架) #### 3. 购物车 - 添加商品到购物车 - 修改商品数量 - 删除购物车商品 #### 4. 订单系统 - 创建订单 - **多级订单状态流程**:已下单 → 已支付 → 商家接单 → 制作中 → 配送中 → 已送达 - **双向状态展示**:用户端和商家端同步显示订单状态变化 - **状态时间线**:直观展示订单全流程及每个状态的时间点 - 订单历史查询 #### 5. 退款系统 - **灵活退款申请**:用户可在多个订单阶段申请退款 - **退款理由说明**:支持用户提交详细退款理由 - **商家审核流程**:商家可审核退款申请,选择同意或拒绝 - **拒绝理由反馈**:商家拒绝退款时需提供理由,增强沟通透明度 #### 6. 评价系统 - **一键好评**:快速完成评价 - **自定义评分**:支持1-5星评分 - **多维度评价**:可评价配送速度、商品质量等多个维度 --- ### 二、钱包系统(新增) 采用**充血领域模型(VirtualWallet)**实现,业务逻辑封装在领域对象中,确保业务规则的一致性和可维护性。 #### 1. 基础功能 - **钱包创建**:用户首次访问时自动创建钱包 - **余额查询**:实时查看可用余额、冻结金额、奖励金额 - **交易记录**:分页查看历史交易流水,支持按时间段筛选 #### 2. 资金操作 - **充值**:支持充值,可配置充值奖励规则 - **提现**:支持提现到外部账户,可配置手续费 - **支付**:优先使用奖励金额,支持透支额度 - **转账**:用户间转账功能 - **退款**:订单退款自动退回钱包 #### 3. 透支功能 - **透支额度设置**:管理员可为用户设置透支额度 - **透支使用**:余额不足时可使用透支额度完成支付 - **透支归还**:充值时优先归还透支金额 - **透支状态查询**:查看当前透支使用情况 #### 4. 冻结/解冻 - **金额冻结**:支持冻结指定金额 - **入账冻结**:商家侧订单金额可先冻结后释放 - **金额解冻**:订单完成后解冻商家资金 #### 5. 会员系统 - **SVIP会员**:支持购买SVIP会员(30天) - **会员等级**:根据消费金额自动升级会员等级 - **会员权益**:不同等级享有不同透支额度和充值奖励 #### 6. 规则管理 - **充值奖励规则**:可配置满额充值送奖励金额 - **规则启用/禁用**:灵活管理营销规则 --- ### 三、积分系统(新增) 采用**策略模式**实现积分获取逻辑,便于扩展新的积分来源。 #### 1. 积分获取 - **签到获取**:每日签到获得积分(SignInStrategy) - **下单获取**:订单完成后按金额比例获得积分(OrderStrategy) - **评论获取**:提交评论获得积分(CommentStrategy) - **活动获取**:特殊活动积分奖励(Active11等) #### 2. 积分管理 - **积分余额查询**:实时查看可用积分 - **积分流水记录**:查看积分变动历史(获取/消费) - **积分有效期**:积分有过期时间,采用FIFO策略优先扣除即将过期的积分 #### 3. 积分消费 - **优先扣除即将过期积分**:FIFO过期策略,避免积分浪费 - **订单抵扣**:支持使用积分抵扣订单金额 --- ### 四、积分商城(新增) #### 1. 商品展示 - **商品列表**:展示所有可兑换商品 - **商品分类**:优惠券、实物商品等 #### 2. 积分兑换 - **兑换商品**:使用积分兑换商品或优惠券 - **兑换记录**:查看历史兑换记录 #### 3. 优惠券管理 - **优惠券使用**:兑换的优惠券可在下单时使用 - **优惠券状态**:标记优惠券已使用/未使用 --- ### 五、商家管理系统 - **多店铺管理**:支持商家管理多个店铺 - **实时订单通知**:商家端实时显示新订单 - **批量操作**:支持批量处理订单和商品 - **商家钱包**:商家收入管理、资金冻结与解冻 - **数据统计**:提供销售额、订单量等数据统计 --- ### 六、安全特性 - **JWT认证**:基于JWT的安全认证机制 - **权限控制**:细粒度的权限控制系统 - **数据验证**:前后端双重验证,确保数据有效性 - **防XSS攻击**:输入数据过滤和转义 - **事务保障**:钱包操作采用类级别@Transactional确保原子性 --- ## 运行指南 ### 环境要求 - JDK 17+ - Node.js 16+ - Maven 3.6+ - MySQL 5.7+ ### 获取项目 ```bash git clone https://gitee.com/haluns-deepblue/sep.git cd sep ``` ### 运行后端 1. **配置数据库** > 提示:提供elm.sql以导入MySQL中(包含结构和全部数据) - 默认使用MySQL数据库 - 修改配置文件:`elm-backened/src/main/resources/application.properties` 2. **直接运行** - 在IDE中直接运行`MyApplication.java`文件 - 后端服务将在 http://localhost:8080 上启动 - API文档访问地址: http://localhost:8080/swagger-ui.html ### 运行前端 1. **进入前端目录** ```bash cd elm-frontend/frontend ``` 2. **安装依赖** ```bash npm install ``` 3. **启动开发服务** ```bash npm run dev ``` - 前端开发服务将在 http://localhost:5173 上启动 4. **开发服务器配置** 前端开发服务器配置位于`vite.config.js`文件中,已设置反向代理: ```js server: { proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true, ws: true } } } ``` --- ## 生产环境部署 ### 后端打包 ```bash cd elm-backened mvn clean package java -jar target/myapp-1.0.jar ``` ### 前端构建 ```bash cd elm-frontend/frontend npm run build ``` ### 部署选项 **方案一:静态资源整合** ```bash cp -r dist/* ../elm-backened/src/main/resources/static/ ``` **方案二:Nginx反向代理** ```nginx server { listen 80; server_name your-domain.com; location / { root /path/to/elm-frontend/frontend/dist; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` --- ## 核心API服务 前端的API调用集中在`src/api`目录下: - `config.js`:环境配置,包括基础URL和超时设置 - `routes.js`:API路由定义 - `index.js`:API调用封装 ### 已实现的接口模块 | 模块 | 主要接口 | |------|----------| | 用户认证 | 登录、注册 | | 商家相关 | 列表、详情、注册、管理 | | 食品相关 | 按商家获取列表、新增、编辑、删除 | | 购物车 | 查询、添加、更新、删除 | | 地址管理 | 查询、添加、更新、删除 | | 订单系统 | 创建、查询、状态更新 | | 退款系统 | 申请、审核、查询 | | 评价系统 | 提交、查询 | | 钱包系统 | 充值、提现、支付、转账、透支管理 | | 积分系统 | 积分查询、获取、消费 | | 积分商城 | 商品列表、兑换、记录查询 | --- ## 测试 项目包含完整的测试覆盖: ### 单元测试 - `VirtualWalletTest`:钱包领域模型测试 - `PointServiceImplTest`:积分服务测试 ### 集成测试 - `WalletControllerIntegrationTest`:钱包接口集成测试 - `OrderWalletIntegrationTest`:订单与钱包集成测试 - `PointSystemIntegrationTest`:积分系统集成测试 - `PointControllerIntegrationTest`:积分接口集成测试 运行测试: ```bash cd elm-backened mvn test ``` --- ## 常见问题与解决方案 ### CORS问题 - 后端已配置CORS支持,默认允许前端开发服务器访问 - 如需修改CORS配置,请查看`CorsConfig.java` ### JWT认证问题 JWT认证失败通常有以下原因: - Token格式不正确 - Token已过期(默认有效期24小时) - 签名验证失败 请检查`src/api/index.js`中的请求拦截器确保正确设置了Authorization头。 ### API路径不匹配 如果遇到404错误,请检查: - 前端API路径是否与后端Controller映射的路径匹配 - API的HTTP方法是否正确(GET、POST、PUT、DELETE) ### 文件上传 - 默认上传目录为项目根目录下的`uploads`文件夹 - 可通过修改`FileUploadConfig.java`更改上传路径 --- ## 联系方式 如有问题或建议,请提交Issue或联系项目维护者。 ## 许可证 [MIT](LICENSE)