# frontend-comprehension
**Repository Path**: cyddcydd/frontend-comprehension
## Basic Information
- **Project Name**: frontend-comprehension
- **Description**: 天津大学软件工程专业elm课程设计,来自某一小组
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2026-02-01
- **Last Updated**: 2026-02-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 软件工程综合实践饿了么项目
## 1 项目结构
后端代码存放目录 elm_bk
前端代码存放目录 elmclient
## 2 项目部署
**本项目已部署至小组的服务器上**
- 如果想直接查看效果请访问:[http://bobchasm.cn:8081/](http://bobchasm.cn:8081/)
- 后端部分接口前缀:[http://bobchasm.cn:8080](http://bobchasm.cn:8080)
- 接口文档路径:[http://bobchasm.cn:8080/swagger-ui/index.html](http://bobchasm.cn:8080/swagger-ui/index.html)
**提供一些测试账号 (非管理员账号也可以自行注册)**
普通用户:
- username: common_user
- password: Common123
商家用户:
- username: business_user
- password: Business123
商家端入口位于 **我的** 页面中的 **切换到商家端**

管理员:
- username: admin_user
- password: Admin123
---
**若自己部署请注意:**
1. 如需验收整个项目(即前后端完整效果),请使用我们提供的sql建库并在配置文件中使用它,以下会详细说明
2. 以下部署说明主要针对win系统,Linux系统部署方法命令行操作类似
可参考 [从0开始在linux服务器上部署SpringBoot和Vue_vue项目linux部署-CSDN博客](https://blog.csdn.net/m0_53140426/article/details/144745031?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522061248a22aceb1ff2288a8b50a813a59%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=061248a22aceb1ff2288a8b50a813a59&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-144745031-null-null.142^v102^pc_search_result_base7&utm_term=Linux%E9%83%A8%E7%BD%B2spingboot%E5%92%8Cvue&spm=1018.2226.3001.4187)
3. 本项目在版本 `4eeb319c5eb4eccae252fffdf04004a9eb6daf05 (积分系统开始)` 后使用了redis、rabbitmq,当前设置均为服务器的配置信息,如需使用自己本地的中间件,请在本地启动相关服务并修改配置文件
#### 2.1 后端部分
**技术栈**
- SpringBoot
- Maven
- Mybatis
- redis
- rabbitmq
##### 开发环境
JDK 17
SpringBoot 3.4.6
Mybatis 3.0.4
MySQL版本信息:
```
Source Server : localhost
Source Server Type : MySQL
Source Server Version : 80040 (8.0.40)
Source Host : localhost:3306
Source Schema : elm_v2
Target Server Type : MySQL
Target Server Version : 80040 (8.0.40)
File Encoding : 65001
```
##### 配置
- 配后端置文件
```
frontend-comprehension/elm_bk/src/main/resources/application.yml
```
可修改配置:数据库、redis、rabbitmq,若您想尝试使用这些本地服务
- 数据库
使用本地数据库服务时,请新建一个名为 **elm_v2** 的数据库,并运行以下路径中的建表语句:
```
frontend-comprehension/elm_bk/sql/elm_v2.sql
```
sql中已包含实例数据的插入
##### 部署运行
1.中间件服务准备
如果您想使用自己的中间件(已经修改相关配置文件的情况下),请先启动自己的服务,否则忽略这一步
2.打包
若使用IDEA打包项目,先 clean,再 package,成功控制台如图
若使用命令行打包:
在 /frontend-comprehension/elm_bk 中打开cmd,执行:
```bash
mvn clean package
```
成功如下图:

生成的项目jar包路径在:
```
frontend-comprehension/elm_bk/target/elm_bk-0.0.1-SNAPSHOT.jar
```
3.命令行在jar包存放的目录中执行:
```bash
java -jar elm_bk-0.0.1-SNAPSHOT.jar
```
如果出现报错 "error='页面文件太小,无法完成操作。' (DOS error/errno=1455)" 请重新执行以下命令:
```bash
java -Xmx128m -Xms64m -XX:MaxMetaspaceSize=64m -XX:+UseSerialGC -jar elm_bk-0.0.1-SNAPSHOT.jar
```
注:该命令进行了内存配置
后端配置端口为 8080,请注意端口占用
4.当终端出现以下界面,则启动成功:

如使用IDEA在启动或打包项目时遇到控制台报错如 "找不到符号",请确保以下位置选择正确


### 2.2 前端部分
基于 Vue3
##### 环境准备
- 保证npm可用
可参见 [VUE安装及环境配置(完整版)-CSDN博客](https://blog.csdn.net/qq_52611686/article/details/142653081?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522b9220596f6cbffa1a2f0eb8c533005ed%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=b9220596f6cbffa1a2f0eb8c533005ed&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-142653081-null-null.142^v102^pc_search_result_base7&utm_term=vue%E5%AE%89%E8%A3%85%E5%8F%8A%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE&spm=1018.2226.3001.4187)
- node
可参见 [Node.js安装与配置(详细步骤)_nodejs安装及环境配置-CSDN博客](https://blog.csdn.net/qq_42006801/article/details/124830995?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522363c66d0a867fcac896383171b678743%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=363c66d0a867fcac896383171b678743&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-124830995-null-null.142^v102^pc_search_result_base7&utm_term=%E9%85%8D%E7%BD%AEnode&spm=1018.2226.3001.4187)
##### 运行
- 如在ide里直接启动
1.可以使用 Visual Studio Code 打开项目前端部分:
```
frontend-comprehension/elmclient
```
2.在其终端 TERMINAL 安装依赖 (请先确保具有vue环境与npm):
```bash
npm -i
```
如果失败,则尝试:
```bash
cnpm -i
```
3.启动
```bash
npm run serve
```
当终端出现访问url,则启动成功。访问url即可跳转至项目首页(在此之前请保证后端项目已启动)
- 如要进行部署(已配置node)
以下内容参考 [Vue前端项目部署的三种方案_vue项目部署-CSDN博客](https://blog.csdn.net/qq_44741577/article/details/139236697?ops_request_misc=%257B%2522request%255Fid%2522%253A%252201c3d7a19a919480657fd6784f177099%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=01c3d7a19a919480657fd6784f177099&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-139236697-null-null.142^v102^pc_search_result_base7&utm_term=%E5%89%8D%E7%AB%AFvue%E9%A1%B9%E7%9B%AE%E9%83%A8%E7%BD%B2&spm=1018.2226.3001.4187)
注:由于前端请求接口时使用本地路径前缀,请将前后端部署在同一台计算机上,保证可以localhost本地访问,否则需要修改所有前端代码接口请求路径localhost为指定域名或ip,以及前端AdminHome.vue、MerchantOrders.vue、MyInformation.vue、Notifications.vue、OrderList.vue中的WebSocket请求路径(目前是{wsProtocol}//localhost:8080/ws/{sid})
1.在 **/node/nodejs/** 下新建一个名为 **my_server** 的文件夹,在此文件夹下打开cmd命令行终端 (注:最好使用管理员身份打开)
2.执行:
```bash
npm init -y
```
出现以下输出则成功:

3.安装快速部署插件 **express**
```bash
npm i express
```
4.在前面创建的 **my_server** 目录下新建文件 server.js,内容如下:
```js
// 引入express
const express = require("express");
// 配置端口号
const PORT = 8081;
// 创建一个app服务实例
const app = express();
// 配置静态资源
app.use(express.static(__dirname + "/public"));
// 绑定端口监听
app.listen(PORT, () => {
console.log(`本地服务器启动成功,http://localhost:${PORT}`);
});
```
5.在 **my_server** 文件夹下新建文件夹 **public**,后续用于存放vue项目的文件
6.打包前端代码
- 直接将以下路径目录中的所有东西复制到前面创建的 **my_server** 文件夹下的 **public** 中。若之后在下面第7点出现失败,请尝试自己打包(如下一点)
```
frontend-comprehension/elmclient/dist/
```
- 自己打包:
使用ide (Visual Studio Code) 或者是命令行终端打开项目的前端部分:
```
frontend-comprehension/elmclient
```
执行:
```bash
npm i #如失败则尝试 cnpm i
npm run build
```
项目文件 **elmclient** 下中将出现文件夹 **dist**,之后同上
7.在 **my_server** 目录下打开cmd,执行:
```bash
node .\server.js
```
出现以下输出则启动成功,可以通过输出的url访问到app的首页
```
本地服务器启动成功,http://localhost:8081
```
## 3 自动测试接口异常情况描述 (针对软件工程综合实践必须实现的接口)
以下将说明对于老师需要测试的接口我们的设计,具体设计在什么情况下响应为 *false* 或验证点
(1) POST /api/users - 新增用户(仅登录账号)
- 请求头中未携带有效的认证token,或token已过期、签名无效
- 非管理员角色尝试创建用户
- 传入的用户名为空字符串、纯空格或null
- 创建时使用的用户名在数据库中已存在
- 插入用户权限时权限名称不存在于authority表
- 用户保存成功后查询用户详情时返回null
(2) GET /api/user - 获取当前登录用户
- 请求头中未携带有效的认证token,或token已过期、签名无效
- 当前用户已被删除(is_deleted=true)
- 当前用户已被禁用(activated=false)
- 从SecurityContextHolder中获取用户信息失败
(3) POST /api/password - 修改密码
- 请求头中未携带有效的认证token,或token已过期、签名无效
- 普通用户尝试修改其他用户的密码(非管理员)
- 传入的用户名或密码为null
- 请求中指定的目标用户名不存在
(4) POST /api/persons - 新增自然人用户
- 请求头中未携带有效的认证token,或token已过期、签名无效
- 非管理员用户尝试创建自然人用户
- 用户名长度不在**1-100**个字符之间
- 自然人信息中邮箱格式不符合规范
- 电话号码格式不符合规范
- 指定的权限列表包含authority表中不存在的权限名称
- 用户创建成功但自然人信息插入失败导致数据不一致
(5) POST /api/register - 顾客注册接口
- 注册时用户名已被其他用户占用
- 用户名长度不在**1-100**个字符之间
- 邮箱格式不符合规范
- 手机号码格式不符合规范
- 数据库authority表中USER角色被意外删除或禁用
- 事务处理过程中出现回滚情况
(6) POST /api/auth - 身份认证获取令牌
- 用户名或密码为null
- 用户名长度不在**1-100**个字符之间
- 用户名在系统中不存在
- 用户输入的密码与数据库存储的加密密码不匹配
- 用户账户被禁用(activated=false)
- 用户账户被标记为已删除(is_deleted=true)
- 令牌生成过程中出现加密异常
(7) POST /api/addresses - 新增地址
- 请求头中未携带有效的认证token,或token已过期、签名无效
- 联系人电话不符合手机号格式
- 关联用户信息中用户名为空字符串、纯空格或null
- 当前登录用户在数据库中不存在
- 目标关联用户在数据库中不存在
- 普通用户尝试为其他用户创建地址(非管理员权限)
(8) GET /api/businesses/{id} - 根据ID获取店铺详情
- 传入的id 为空或≤ 0,抛异常
- 返回商铺的is_delete字段为0
- 考虑到现实生活场景,未设置权限验证
(9) PUT&PATCH /api/businesses/{id} - 更新某店铺信息
- 传入的id 为空或≤ 0,抛异常
- 检测到当前用户为null,抛异常NOT_FOUND
- 用户没有 BUSINESS 或 ADMIN 权限,抛异常权限不足
- 如果不是管理员,且传入的商铺id不属于当前用户、如果不是管理员,且传入的businessOwner的username对应的user_id不是自己的,两种都抛异常:无法对别的用户进行操作
- 如果是管理员,需要将传入的username对应的user_id传入business表的user_id,不然会导致数据不一致的情况
- 如果数据库返回result为0,跑异常商家不存在;
- 如果传入的BusinessOwner的username字段为空,抛异常(根据教师的apifox文档说明设置的)
(10) DELETE /api/businesses/{id} - 删除某商家
- 传入的id 为空或≤ 0,抛异常
- 如果没有 BUSINESS 权限且不是 ADMIN,则抛出权限不足
- 如果不是管理员,判断是不是自己操作自己的店铺,获取当前用户的id,根据user_id查询business表获取该用户所拥有的所有店铺id的List,判断要修改的id是否在里面,如果不在,抛权限不足
- 如果数据库执行的结果返回0,抛商铺不存在
(11) GET /api/businesses - 获取所有商铺列表
考虑到现实生活场景,未设置权限验证
(12) POST /api/businesses - 新增商铺
- 如果当前用户不在users表里面,抛用户不存在
- 检查用户是否有 BUSINESS 或 ADMIN 权限,都不是,抛权限不足异常
- 是商家:传入的username对应的user_id与currentUser的user_id是否一致
(13) GET /api/foods 获取某商家或某订单的商品列表
考虑到现实生活场景,未设置特别验证
(14) PATCH /api/foods/{id} 修改商品的信息
- 管理员可以修改所有的商品信息
- 普通商家仅能修改自己商铺的商品
- 若传入的id不存在对应食品,抛异常
(15) POST /api/foods - 添加商品
- 管理员可以为指定商铺添加
- 普通商家仅能添加自己商铺的商品
- 校验商铺id以及数据库必填字段不为空
- 价格不能为负
(16) GET /api/foods/{id} - 返回查询到的一条商品记录
考虑到现实生活场景,未设置特别验证
(17) POST /api/carts - 向用户购物车添加商品
- 不能向别的用户的购物车添加商品
(18) GET /api/orders - 获取某用户的订单列表
- 非管理员不能查看别的用户的订单
(19) POST /api/orders - 创建订单
- 不能为别的用户创建订单
(20) GET /api/orders/{id} - 根据id获取指定订单信息
- 不能查看不是自己下的订单,商家用户不能查看非本商家的订单
## 4 迭代记录
**仓库创建**
- 2025-05-12 本仓库创建,开始于前端开发技术实践
**前端开发技术实践**
- 2025-06-15 前端开发技术实践最终版
855118c99b6b834de79cd181daa44fb3a8da8745
保留分支:frontend-comprehension
**软件工程综合实践**
- 2025-09-08 开始
大改框架
9cf74e36a2c986e3929a8bb0d91d69c314c5ed81
- 2025-09-27 课程代码验收版
4811b39329c8ba900ab6f9af88818abaea970d2a
- 2025-10-06 添加服务器配置
9cf1660403b491e5dbe273ef5ae54e1d30fe9667
- 2025-10-08 软件工程综合实践最终版
8f63541c7e2861148d53ea6d732003642b58fa9c
保留分支:comprehension
**软件工程中级实践**
- 2025-10-17 更换服务器配置
af1d1ac56e61b9a3f4c87d4afef4aa2e2d30b0fd
- 2025-11-10 虚拟钱包开始
0aaddb0a3bf536cc800726d5a948dc6c109060d8
- 2025-11-14 虚拟钱包最终版
0a27a93732bfd996522399ff9b158ea32ec77394
- 2025-11-23 积分系统开始
4eeb319c5eb4eccae252fffdf04004a9eb6daf05
- 2025-12-12 积分系统最终版
b85e5e60c423314d371852b9596d1448c680721d
保留分支:mid-comprehension
## 5 一些说明
欢迎贡献代码、报告问题或提出建议!
### 5.1 提交问题
- 描述问题现象
- 提供复现步骤
- 附上错误日志
- 说明环境信息
### 5.2 提交代码
1. Fork本仓库
2. 创建功能分支
3. 提交代码并编写测试
4. 提交Pull Request
### 5.3 联系方式
如有问题或建议,请通过以下方式联系:
- **邮箱**:
zengyicydd@tju.edu.cn
gaocan@tju.edu.cn
yxy641121@gmail.com
daimingjing142857@tju.edu.cn
jsyy@tju.edu.cn
- **Gitee Issues**:提交问题到项目仓库