1 實(shí)訓(xùn)基本信息
1.1 實(shí)訓(xùn)項(xiàng)目名稱
“外賣點(diǎn)餐”系統(tǒng)。
1.2 實(shí)訓(xùn)時(shí)間及地點(diǎn)
2 實(shí)訓(xùn)內(nèi)容簡(jiǎn)介
本項(xiàng)目(“外賣點(diǎn)餐”系統(tǒng))是專門為餐飲企業(yè)(餐廳、飯店)定制的-款軟件產(chǎn)品,包括系統(tǒng)管理后臺(tái)和移動(dòng)端應(yīng)用兩部分。
其中系統(tǒng)管理后臺(tái)主要提供給餐飲企業(yè)內(nèi)部員工使用,可以對(duì)餐廳的菜品、套餐、訂單等進(jìn)行管理維護(hù)。移動(dòng)端應(yīng)用主要提供給消費(fèi)者使用,可以在線瀏覽菜品、添加購(gòu)物車、下單等。
3 需求分析
3.1 軟硬件條件
IDEA 2021.2.3
MySQL 5.5
MyBatis
MyBatisPlus
Git: 版本控制工具。
Maven: 3.6.1
Junit:?jiǎn)卧獪y(cè)試工具。
3.2?技術(shù)可行性
3.2.1 技術(shù)需求
外賣點(diǎn)單、支付、訂單管理、配送等功能是瑞吉外賣必不可少的技術(shù)需求。此外,還需要提供用戶注冊(cè)、登錄、反饋、推薦等功能。
3.2.2 市場(chǎng)需求
外賣市場(chǎng)的需求是巨大的,但競(jìng)爭(zhēng)也是非常激烈的。應(yīng)該進(jìn)行市場(chǎng)細(xì)分,并確定與眾不同的商業(yè)模式和目標(biāo)用戶,同時(shí)提供具有差異化的服務(wù)和體驗(yàn)。
3.2.3 開發(fā)成本
應(yīng)該評(píng)估開發(fā)瑞吉外賣應(yīng)用所需的成本,包括技術(shù)設(shè)計(jì)、軟件工程、移動(dòng)端應(yīng)用開發(fā)、數(shù)據(jù)分析等方面。
3.2.4 數(shù)據(jù)連通性
外賣應(yīng)用需要和多個(gè)配送和支付供應(yīng)商的應(yīng)用進(jìn)行連接,確保訂單的順利傳遞和支付的正確處理。
3.2.5 用戶體驗(yàn)
好的用戶體驗(yàn)是被用戶所贊賞和記住的重要要素。外賣應(yīng)用中,用戶體驗(yàn)包括易用、快速、準(zhǔn)確、方便等多個(gè)方面。
4 功能設(shè)計(jì)
4.1 管理端
4.1.1 登錄/退出
內(nèi)部員工必須登錄后,才可以訪問系統(tǒng)管理后臺(tái)。
4.1.2 員工管理
管理員可以在系統(tǒng)后臺(tái)對(duì)員工信息進(jìn)行管理,包含查詢、新增、編輯、禁用等功能。
4.1.3 分類管理
主要對(duì)當(dāng)前餐廳經(jīng)營(yíng)的菜品分類或套餐分類進(jìn)行管理維護(hù),包含查詢、新增、修改、刪除等功能。
4.1.4 菜品管理
主要維護(hù)各個(gè)分類下的菜品信息,包含查詢、新增、修改、刪除、啟售、停售等功能。
4.1.5 套餐管理
主要維護(hù)當(dāng)前餐廳中的套餐信息,包含查詢、新增、修改、刪除、啟售、停售等功能。
4.1.6 訂單明細(xì)
主要維護(hù)用戶在移動(dòng)端下的訂單信息,包含查詢、取消、派送、完成,以及訂單報(bào)表下載等功能。
4.2 用戶端
4.2.1 登錄/退出
在移動(dòng)端, 用戶也需要登錄后使用APP進(jìn)行點(diǎn)餐。
4.2.2 點(diǎn)餐-菜單
在點(diǎn)餐界面需要展示出菜品分類/套餐分類, 并根據(jù)當(dāng)前選擇的分類加載其中的菜品信息, 供用戶查詢選擇。
4.2.3 點(diǎn)餐-購(gòu)物車
用戶選中的菜品就會(huì)加入用戶的購(gòu)物車, 主要包含查詢購(gòu)物車、加入購(gòu)物車、刪除購(gòu)物車、清空購(gòu)物車等功能。
4.2.4 訂單支付
用戶選完菜品/套餐后, 可以對(duì)購(gòu)物車菜品進(jìn)行結(jié)算支付, 這時(shí)就需要進(jìn)行訂單的支付。
4.2.5 個(gè)人信息
在個(gè)人中心頁(yè)面中會(huì)展示當(dāng)前用戶的基本信息, 用戶可以管理收貨地址, 也可以查詢歷史訂單數(shù)據(jù)。
5 數(shù)據(jù)庫(kù)設(shè)計(jì)
用戶表
字段 |
數(shù)據(jù)類型 |
主鍵 |
外鍵 |
是否為空 |
說明 |
Id |
bigint(20) |
是 |
否 |
否 |
|
Name |
varchar(50) |
否 |
否 |
否 |
姓名 |
Phone |
varchar(100) |
否 |
否 |
否 |
手機(jī)號(hào) |
Sex |
varchar(2) |
否 |
否 |
否 |
性別 |
Id_number |
varchar(18) |
否 |
否 |
否 |
身份證號(hào) |
Avatar Status |
varchar(500) int(11) |
否 否 |
否 否 |
否 否 |
頭像 狀態(tài) |
購(gòu)物車表
字段 |
數(shù)據(jù)類型 |
主鍵 |
外鍵 |
是否為空 |
說明 |
Id |
bigint(20) |
是 |
否 |
否 |
|
Name |
varchar(50) |
否 |
否 |
否 |
名稱 |
Image |
varchar(100) |
否 |
否 |
否 |
圖片 |
User_id |
bigint(20) |
否 |
否 |
否 |
用戶ID |
Dish_Id |
bigint(20) |
否 |
否 |
否 |
菜品ID |
Setmeal_Id DishFlavor |
bigint(20)varchar(50) |
否 否 |
否 否 |
否 否 |
套餐ID 口味 |
Number |
int(11) |
否 |
否 |
否 |
數(shù)量 |
Amount CreateTime |
decimal(10) datetime |
否 否 |
否 否 |
否 否 |
金額 創(chuàng)建時(shí)間 |
地址薄表
字段 |
數(shù)據(jù)類型 |
主鍵 |
外鍵 |
是否為空 |
說明 |
Id |
bigint(20) |
是 |
否 |
否 |
|
User_Id |
bigint(20) |
否 |
否 |
否 |
用戶ID |
Consignee |
varchar(50) |
否 |
否 |
否 |
收貨人 |
Sex |
tinyint(4) |
否 |
否 |
否 |
性別 |
Phone Province |
varchar(11) varchar(12) |
否 否 |
否 否 |
否 否 |
手機(jī)號(hào) 省級(jí)編號(hào) |
Province |
Varchar(32) |
否 |
否 |
否 |
省級(jí)名稱 |
City_code City_name |
varchar(12) varchar(32) |
否 否 |
否 否 |
否 否 |
市級(jí)編號(hào) 市級(jí)名稱 |
District |
varchar(12) |
否 |
否 |
否 |
區(qū)級(jí)編號(hào) |
District |
varchar(32) |
否 |
否 |
否 |
區(qū)級(jí)名稱 |
Detail |
varchar(200) |
否 |
否 |
否 |
詳細(xì)地址 |
Label |
varchar(100) |
否 |
否 |
否 |
標(biāo)簽 |
Is_default |
tinyint(1) |
否 |
否 |
否 |
是否默認(rèn) |
Createtime |
datetime |
否 |
否 |
否 |
創(chuàng)建時(shí)間 |
Updatetime |
datetime |
否 |
否 |
否 |
更新時(shí)間 |
Createuser |
Bigint(20) |
否 |
否 |
否 |
創(chuàng)建者 |
Updateuser |
Bigint(20) |
否 |
否 |
否 |
修改者 |
Is_deleted |
int(11) |
否 |
否 |
否 |
是否刪除 |
分類表
字段 |
數(shù)據(jù)類型 |
主鍵 |
外鍵 |
是否為空 |
說明 |
Id |
bigint(20) |
是 |
否 |
否 |
|
Type |
int(11) |
否 |
否 |
否 |
類型 |
Name |
varchar(64) |
否 |
否 |
否 |
名稱 |
Sort |
int(11) |
否 |
否 |
否 |
順序 |
CreateTime UpdateTime |
datetime datetime |
否 否 |
否 否 |
否 否 |
創(chuàng)建時(shí)間 更新時(shí)間 |
Createuser |
bigint(20) |
否 |
否 |
否 |
創(chuàng)建者 |
Updateuser |
bigint(20) |
否 |
否 |
否 |
修改者 |
菜品表
字段 |
數(shù)據(jù)類型 |
主鍵 |
外鍵 |
是否為空 |
說明 |
Id |
bigint(20) |
是 |
否 |
否 |
|
Name |
varchar(64) |
否 |
否 |
否 |
菜品名稱 |
CategoryId |
bigint(20) |
否 |
否 |
否 |
菜品分類ID |
Price |
decimal(10) |
否 |
否 |
否 |
菜品價(jià)格 |
Code |
varchar(64) |
否 |
否 |
否 |
商品碼 |
Image Descripte |
varchar(200) varchar(400) |
否 否 |
否 否 |
否 否 |
圖片 描述信息 |
Status |
int(11) |
否 |
否 |
否 |
狀態(tài)碼 |
Sort |
int(11) |
否 |
否 |
否 |
順序 |
CreateTime UpdateTime |
datetime datetime |
否 否 |
否 否 |
否 否 |
創(chuàng)建時(shí)間 更新時(shí)間 |
Createuser |
Bigint(20) |
否 |
否 |
否 |
創(chuàng)建者 |
Updateuser |
Bigint(20) |
否 |
否 |
否 |
修改者 |
Is_deleted |
int(11) |
否 |
否 |
否 |
是否刪除 |
口味表
字段 |
數(shù)據(jù)類型 |
主鍵 |
外鍵 |
是否為空 |
說明 |
Id |
bigint(20) |
是 |
否 |
否 |
|
Dish_Id |
bigint(20) |
否 |
否 |
否 |
菜品ID |
Name |
varchar(64) |
否 |
否 |
否 |
口味名稱 |
Value |
varchar(500) |
否 |
否 |
否 |
口味數(shù)據(jù) |
CreateTime UpdateTime |
datetime datetime |
否 否 |
否 否 |
否 否 |
創(chuàng)建時(shí)間 更新時(shí)間 |
Createuser |
Bigint(20) |
否 |
否 |
否 |
創(chuàng)建者 |
Updateuser |
Bigint(20) |
否 |
否 |
否 |
修改者 |
Is_deleted |
int(11) |
否 |
否 |
否 |
是否刪除 |
員工表
字段 |
數(shù)據(jù)類型 |
主鍵 |
外鍵 |
是否為空 |
說明 |
Id |
bigint(20) |
是 |
否 |
否 |
|
Name |
varchar(32) |
否 |
否 |
否 |
姓名 |
Username |
varchar(32) |
否 |
否 |
否 |
用戶名 |
Password |
varchar(64) |
否 |
否 |
否 |
密碼 |
Phone |
varchar(11) |
否 |
否 |
否 |
手機(jī)號(hào) |
Sex |
varchar(2) |
否 |
否 |
否 |
性別 |
Id_Number |
varchar(18) |
否 |
否 |
否 |
身份證號(hào) |
Status |
Int(11) |
否 |
否 |
否 |
狀態(tài) |
CreateTime UpdateTime |
datetime datetime |
否 否 |
否 否 |
否 否 |
創(chuàng)建時(shí)間 更新時(shí)間 |
Createuser |
Bigint(20) |
否 |
否 |
否 |
創(chuàng)建者 |
Updateuser |
Bigint(20) |
否 |
否 |
否 |
修改者 |
訂單表
字段 |
數(shù)據(jù)類型 |
主鍵 |
外鍵 |
是否為空 |
說明 |
Id |
bigint(20) |
是 |
否 |
否 |
|
Number |
varchar(50) |
否 |
否 |
否 |
訂單號(hào) |
Status |
Int(11) |
否 |
否 |
否 |
訂單狀態(tài) |
User_Id |
bigint(20) |
否 |
否 |
否 |
下單用戶 |
Address_id |
bigint(20) |
否 |
否 |
否 |
地址ID |
Order_Time CheckTime |
datetime datetime |
否 否 |
否 否 |
否 否 |
下單時(shí)間 結(jié)賬時(shí)間 |
Pay_method |
int(11) |
否 |
否 |
否 |
支付方式 |
Amount |
decimal(10) |
否 |
否 |
否 |
實(shí)收金額 |
Remark |
varchar(100) |
否 |
否 |
否 |
備注 |
Phone |
varchar(255) |
否 |
否 |
否 |
手機(jī)號(hào) |
Address |
varchar(255) |
否 |
否 |
否 |
用戶地址 |
User_name |
varchar(255) |
否 |
否 |
否 |
用戶名 |
Consignee |
varchar(255) |
否 |
否 |
否 |
收貨人 |
訂單詳情表
字段 |
數(shù)據(jù)類型 |
主鍵 |
外鍵 |
是否為空 |
說明 |
Id |
bigint(20) |
是 |
否 |
否 |
|
Name |
varchar(50) |
否 |
否 |
否 |
名稱 |
Image |
varchar(100) |
否 |
否 |
否 |
圖片 |
Order_Id |
bigint(20) |
否 |
否 |
否 |
訂單ID |
Dish_Id |
bigint(20) |
否 |
否 |
否 |
菜品ID |
Setmeal_Id DishFlavor |
bigint(20) varchar(50) |
否 否 |
否 否 |
否 否 |
套餐ID 口味 |
Number |
int(11) |
否 |
否 |
否 |
數(shù)量 |
Amount |
decimal(10) |
否 |
否 |
否 |
金額 |
套餐表
字段 |
數(shù)據(jù)類型 |
主鍵 |
外鍵 |
是否為空 |
說明 |
Id |
bigint(20) |
是 |
否 |
否 |
|
CategoryId |
bigint(20) |
否 |
否 |
否 |
分類ID |
Name |
varchar(64) |
否 |
否 |
否 |
套餐名稱 |
Price |
decimal(10) |
否 |
否 |
否 |
套餐價(jià)格 |
Status |
Int(11) |
否 |
否 |
否 |
狀態(tài) |
Code |
varchar(32) |
否 |
否 |
否 |
編碼 |
Descripte |
varchar(512) |
否 |
否 |
否 |
描述信息 |
Image |
varchar(255) |
否 |
否 |
否 |
圖片 |
CreateTime UpdateTime |
datetime datetime |
否 否 |
否 否 |
否 否 |
創(chuàng)建時(shí)間 更新時(shí)間 |
Createuser |
Bigint(20) |
否 |
否 |
否 |
創(chuàng)建者 |
Updateuser |
Bigint(20) |
否 |
否 |
否 |
修改者 |
Is_Delete |
varchar(50) |
否 |
否 |
否 |
是否刪除 |
分類表
菜品表
口味表
員工表
套餐關(guān)系表
字段 |
數(shù)據(jù)類型 |
主鍵 |
外鍵 |
是否為空 |
說明 |
Id |
bigint(20) |
是 |
否 |
否 |
|
CategoryId |
bigint(20) |
否 |
否 |
否 |
分類ID |
Name |
varchar(64) |
否 |
否 |
否 |
套餐名稱 |
Price |
decimal(10) |
否 |
否 |
否 |
套餐價(jià)格 |
Status |
Int(11) |
否 |
否 |
否 |
狀態(tài) |
Code |
varchar(32) |
否 |
否 |
否 |
編碼 |
Descripte |
varchar(512) |
否 |
否 |
否 |
描述信息 |
Image |
varchar(255) |
否 |
否 |
否 |
圖片 |
CreateTime UpdateTime |
datetime datetime |
否 否 |
否 否 |
否 否 |
創(chuàng)建時(shí)間 更新時(shí)間 |
Createuser |
Bigint(20) |
否 |
否 |
否 |
創(chuàng)建者 |
Updateuser |
Bigint(20) |
否 |
否 |
否 |
修改者 |
Is_Delete |
varchar(50) |
否 |
否 |
否 |
是否刪除 |
用戶表
購(gòu)物車表
地址薄表
分類表
菜品表
口味表
員工表
訂單表
訂單詳情表
套餐表
套餐關(guān)系表
實(shí)體E-R圖
6 具體實(shí)現(xiàn)
6.1 員工登錄
6.1.1 登錄功能
內(nèi)部員工必須輸入員工賬號(hào)和密碼,通過驗(yàn)證后才可以訪問系統(tǒng)管理后臺(tái)。過濾器會(huì)判斷用戶是否已經(jīng)完成了登錄,如果沒有登錄則跳轉(zhuǎn)到登陸頁(yè)面。
員工登錄與退出核心代碼:
@PostMapping("/employee/login")
??? public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee){
??????? //RequestBody可以接收J(rèn)SON格式的數(shù)據(jù)并解析為實(shí)體類(Employee)
??????? String username = employee.getUsername();
??????? String password = DigestUtils.md5DigestAsHex(employee.getPassword().getBytes());
??????? System.out.println("用戶名:"+username+"--密碼:"+password);
??????? //LambdaQueryWrapper<List<Map>> lambdaQueryWrapper = new LambdaQueryWrapper<>();
??????? LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
??????? //查詢結(jié)果是單張表,用實(shí)體類接收;如果是if交叉查詢(多張表查詢)用List<Map>
??????? queryWrapper.eq(Employee::getUsername,username);
??????? //使用LambdaQueryWrapper免除寫sql,相當(dāng)于進(jìn)行select操作
??????? Employee employee1 = employeeService.getOne(queryWrapper);
??????? System.out.println("2********username:"+employee1.getPhone());
??????? if (employee1 == null){
??????????? return R.error("用戶名錯(cuò)誤,登錄失敗,請(qǐng)重試!");
??????? }
??????? if (!password.equals(employee1.getPassword())){
??????????? return R.error("密碼錯(cuò)誤,登錄失敗,請(qǐng)重試!");
??????? }
??????? if (employee1.getStatus()!=1){
??????????? return R.error("該賬戶被刪除或禁用,登錄失?。?);
??????? }
??????? request.getSession().setAttribute("employee",employee1);? //為了filter、后續(xù)調(diào)用方便
??????? BaseContext.setCurrentUserID(employee1.getId());? //為了普通類能夠調(diào)用
??????? return R.success(employee1);
??? }
??? @PostMapping("/employee/logout")
??? public R<Employee> logout(HttpServletRequest request){
??????? request.getSession().removeAttribute("employee");
??????? request.getSession().invalidate();
??????? return R.success(null);
??? }
6.2 員工管理
6.2.1 查詢功能
輸入對(duì)應(yīng)的員工名稱可查找該員工。
6.2.2 添加功能
通過輸入新員工的信息實(shí)現(xiàn)對(duì)員工的新增操作。
6.2.3 修改功能
點(diǎn)擊編輯可以對(duì)所選員工的個(gè)人信息進(jìn)行修改。
6.2.4 禁用功能
可以點(diǎn)擊禁用禁止該員工的登錄權(quán)限。
6.3 分類管理
6.3.1 查看功能
可以查看當(dāng)前顯示所有菜品或套餐類型。
6.3.2 添加功能
對(duì)新的菜品和套餐類型進(jìn)行添加操作。
6.3.3 修改功能
對(duì)于一些錯(cuò)誤的菜品或套餐信息進(jìn)行更改。
6.3.4 刪除功能
對(duì)于某些過時(shí)或者冷門的菜品或套餐進(jìn)行刪除。
6.4 菜品管理
6.4.1 查詢功能
可以根據(jù)個(gè)人需求查找當(dāng)前現(xiàn)有菜品信息。
6.4.2 添加功能
對(duì)于當(dāng)前熱門菜品可以新增到菜品管理中。
6.4.3 修改功能
對(duì)一些冷門菜品可以對(duì)其價(jià)格進(jìn)行修改。
6.4.4 刪除功能
對(duì)于一些冷門菜品可以進(jìn)行停售或刪除操作。
菜品信息修改核心代碼:
@PutMapping("/edit")
??? public R<String> update(@RequestBody DishDto dishDto) {
??????? // 更新dish表
??????? dishService.updateById(dishDto);
??????? // 清理當(dāng)前菜品口味信息,dish_flavor表的delete操作
??????? // 不能使用removeById, 因?yàn)閐ishDto的id不是dish_flavor的主鍵
??????? LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
??????? queryWrapper.eq(DishFlavor::getDishId, dishDto.getId());
??????? dishFlavorService.remove(queryWrapper);
??????? // 重新插入菜品口味信息,dish_flavor表的insert操作
? ??????List<DishFlavor> dishFlavor = new ArrayList<>();
??????? for (DishFlavor item :dishDto.getFlavors()) {
??????????? item.setDishId(dishDto.getId());
??????????? dishFlavor.add(item);
??????? }
??????? dishFlavorService.saveBatch(dishFlavor);
??????? return R.success("修改成功");
??? }
6.5 套餐管理
6.5.1 查詢功能
對(duì)于所需要的套餐類型進(jìn)行檢索。
6.5.2 添加功能
對(duì)于新的套餐類型加入到套餐管理中。
6.5.3 修改功能
針對(duì)一些信息有誤的套餐進(jìn)行修改。
6.5.4 刪除功能
某些套餐長(zhǎng)期無(wú)人購(gòu)買可以選擇性進(jìn)行刪除。
6.6 訂單明細(xì)
6.6.1 查詢功能
在訂單明細(xì)中可以查看用戶的所有訂單和派送狀態(tài)。
6.6.2 訂單查看
點(diǎn)擊查看訂單可以看到用戶的個(gè)人信息以及地址詳情等。
6.7 用戶管理
6.7.1 登錄管理
在移動(dòng)端, 手機(jī)用戶需要輸入手機(jī)號(hào)驗(yàn)證碼登錄后進(jìn)入APP進(jìn)行點(diǎn)餐。
6.7.2 點(diǎn)餐-菜單
在點(diǎn)餐界面需要展示出菜品分類/套餐分類, 并根據(jù)當(dāng)前選擇的分類加載其中的菜品信息, 供用戶查詢選擇。
6.7.3 點(diǎn)餐-購(gòu)物車
用戶選中的菜品就會(huì)加入用戶的購(gòu)物車, 主要包含查詢購(gòu)物車、加入購(gòu)物車、刪除購(gòu)物車、清空購(gòu)物車等功能。
減少購(gòu)物車菜品核心代碼:
@PostMapping("/sub")
??? public R<String> sub(@RequestBody ShoppingCart shoppingCart, HttpSession session) {
??????? // 1.獲取當(dāng)前用戶
??????? User user = (User) session.getAttribute("employee");
??????? // 2.查詢當(dāng)前用戶、當(dāng)前商品在購(gòu)物車表里是否已存在
??????? LambdaQueryWrapper<ShoppingCart> lambdaQueryWrapper = new LambdaQueryWrapper<>();
?? ?????lambdaQueryWrapper.eq(ShoppingCart::getUserId, user.getId())? // 篩選用戶ID
??????? ????????.eq(shoppingCart.getDishId() != null, ShoppingCart::getDishId, shoppingCart.getDishId())? // 如果傳入的商品ID不為空,篩選商品ID
??????????????? .eq(shoppingCart.getSetmealId() != null, ShoppingCart::getSetmealId, shoppingCart.getSetmealId());? // 如果傳入的套餐ID不為空,篩選套餐ID
??????? ShoppingCart shoppingCart1 = shoppingCartService.getOne(lambdaQueryWrapper);? // 返回符合條件的購(gòu)物車記錄
??????? int shoppingCartNumber = shoppingCart1.getNumber();
???? ???try {
??? ????????if (shoppingCartNumber > 1) {? // 如果記錄的數(shù)量大于1,則減少數(shù)量
??????????????? shoppingCartNumber = shoppingCart1.getNumber() - 1;? // 記錄的數(shù)量減1
??????????????? shoppingCart1.setNumber(shoppingCartNumber);? // 更新記錄的數(shù)量
??????????????? shoppingCartService.updateById(shoppingCart1);? // 更新購(gòu)物車記錄
??????????? } else {? // 如果記錄的數(shù)量為1,則刪除該記錄
??????????????? shoppingCartService.removeById(shoppingCart1.getId());
??????????? }
??????? } catch (Exception e) {
??????????? return R.error("刪除失敗");
??????? }
?????? ?return R.success("刪除成功");
??? }
6.7.4 訂單支付
用戶選完菜品/套餐后, 可以對(duì)購(gòu)物車菜品進(jìn)行結(jié)算支付, 這時(shí)就需要進(jìn)行訂單的支付。
6.7.5 個(gè)人信息
在個(gè)人中心頁(yè)面中會(huì)展示當(dāng)前用戶的基本信息, 用戶可以管理收貨地址, 也可以查詢歷史訂單數(shù)據(jù)。
地址修改與刪除核心代碼:???
@PutMapping
??? public R<String> addressBookupdate(@RequestBody AddressBook addressBook, HttpSession session){
??????? //設(shè)置修改時(shí)間
??????? addressBook.setUpdateTime(LocalDateTime.now());
??????? //設(shè)置修改人
??????? addressBook.setUpdateUser((Long)session.getAttribute("user"));
??????? addressBookService.updateById(addressBook);
??????? return R.success("修改地址成功!");
??? }
?? ?@DeleteMapping
??? public R<String> detele(@RequestParam("ids") Long id){
??????? addressBookService.removeById(id);
??????? return R.success("刪除地址成功!");
??? }
7 測(cè)試
7.1 員工管理功能測(cè)試
員工管理測(cè)試表
測(cè)試用例 |
期望結(jié)果 |
實(shí)際結(jié)果 |
查詢員工 |
通過賬號(hào)登錄進(jìn)入后可以根據(jù)員工姓名查找該員工信息 |
測(cè)試通過 |
添加員工 |
通過輸入新員工的信息實(shí)現(xiàn)對(duì)新員工的添加操作。 |
測(cè)試通過 |
修改員工 |
點(diǎn)擊編輯可以對(duì)所選員工的個(gè)人信息進(jìn)行修改 |
測(cè)試通過 |
禁用員工 |
點(diǎn)擊禁用能夠有效的禁止該員工的登錄權(quán)限 |
測(cè)試通過 |
根據(jù)上面的測(cè)試結(jié)果來看,該功能通過所有的測(cè)試用例并且符合需求。
7.2 分類管理功能測(cè)試
分類管理測(cè)試表
測(cè)試用例 |
期望結(jié)果 |
實(shí)際結(jié)果 |
查看菜品/套餐 |
員工可以查看當(dāng)前顯示所有菜品或套餐類型 |
測(cè)試通過 |
添加菜品/套餐 |
員工能夠?qū)π碌牟似坊蛱撞皖愋瓦M(jìn)行添加操作 |
測(cè)試通過 |
修改菜品/套餐 |
員工可以對(duì)于信息錯(cuò)誤的菜品或套餐進(jìn)行更改 |
測(cè)試通過 |
刪除菜品/套餐 |
員工能夠?qū)τ谶^時(shí)或冷門的菜品或套餐進(jìn)行刪除 |
測(cè)試通過 |
根據(jù)上面的測(cè)試結(jié)果來看,該功能通過所有的測(cè)試用例并且符合需求。
7.3 地址管理功能測(cè)試
地址管理測(cè)試表
測(cè)試用例 |
期望結(jié)果 |
實(shí)際結(jié)果 |
查看地址 |
用戶可以查看當(dāng)前顯示的所有個(gè)人地址信息 |
測(cè)試通過 |
添加地址 |
用戶能夠?qū)π碌牡刂沸畔⑦M(jìn)行添加操作 |
測(cè)試通過 |
修改地址 |
用戶可以對(duì)于錯(cuò)誤的地址信息進(jìn)行更改 |
測(cè)試通過 |
刪除地址 |
用戶能夠?qū)τ谝恍┎怀S玫牡刂愤M(jìn)行刪除 |
測(cè)試通過 |
根據(jù)上面的測(cè)試結(jié)果來看,該功能通過所有的測(cè)試用例并且符合需求。
8 部署
- 首先打開項(xiàng)目Maven工具欄,確定將要打包的模塊,點(diǎn)開Lifecycle選項(xiàng),然后選擇Install開始打包。
- 先在IDEA控制臺(tái)上單擊切換到Terminal終端頁(yè)面,然后在項(xiàng)目所在位置后的指令輸入提示位置指令部署即可。
9 總結(jié)
通過實(shí)訓(xùn)我們學(xué)習(xí)到MyBatisPlus是MyBatis的增強(qiáng)工具,它為MyBatis提供了更加方便快捷的使用方式,同時(shí)也提供了更多的擴(kuò)展功能。
它提供了大量的注解和接口,如@TableField注解可以定義表字段的屬性等等。另外它還提供了一些高級(jí)特性,如分頁(yè)查詢、邏輯刪除和多表關(guān)聯(lián)查詢等。
在這次實(shí)訓(xùn)中,我通過編寫代碼、模擬實(shí)際場(chǎng)景等方式,來提升自己的編程能力,同時(shí)需要注重代碼規(guī)范和功能的完整性,不斷優(yōu)化和完善項(xiàng)目。
其次,我深刻的認(rèn)識(shí)到Java編程需要掌握各種開發(fā)工具和框架,如IntelliJ IDEA、Spring boot等,這些工具和框架可以提高開發(fā)效率。因此,在實(shí)訓(xùn)中也應(yīng)該注重培養(yǎng)學(xué)員的獨(dú)立學(xué)習(xí)能力,讓他們自主學(xué)習(xí)并運(yùn)用各種工具和框架。
最后,Java編程需要具備良好的團(tuán)隊(duì)協(xié)作能力,因?yàn)閷?shí)際項(xiàng)目中不可能僅僅由單人完成,需要多人協(xié)作完成。在實(shí)訓(xùn)中也應(yīng)該注重培養(yǎng)個(gè)人的溝通技巧和團(tuán)隊(duì)合作精神,如果能夠在團(tuán)隊(duì)中融洽合作,就能極大地提高項(xiàng)目的實(shí)戰(zhàn)效果。文章來源:http://www.zghlxwxcb.cn/news/detail-731914.html
注:由于源碼量過多,需要的朋友可在資源中下載,也可私信我拿??!?文章來源地址http://www.zghlxwxcb.cn/news/detail-731914.html
到了這里,關(guān)于Spring Boot實(shí)訓(xùn)項(xiàng)目 瑞吉外賣功能實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!