艾鈺承 朱海風(fēng) 劉舟
摘要:為了更好地幫助大多數(shù)寵物門(mén)店服務(wù)于顧客,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于SpringBoot的寵物服務(wù)平臺(tái)。系統(tǒng)分為管理員端和用戶端。管理員可以對(duì)已經(jīng)上架的商品進(jìn)行修改操作,也可以新增新的商品。用戶可以選擇自己需要的服務(wù)或商品進(jìn)行購(gòu)買。在結(jié)算時(shí)需要添加相關(guān)的地址信息,并且可以設(shè)置默認(rèn)地址。該系統(tǒng)可以促進(jìn)寵物門(mén)店的商品的銷售,也能為用戶提供一個(gè)良好的寵物服務(wù)平臺(tái)。
關(guān)鍵詞:SpringBoot 寵物服務(wù)平臺(tái) MVC MyBatis-Plus
Design and Implementation of the "Miao Zhan" Pet Service Platform Based on Springboot
AI Yucheng ZHU Haifeng LIU Zhou
(Pujiang Institute, Nanjing Tech University, Nanjing, Jiangsu Province, 210000 China)
Abstract: In order to better assist most pet stores in serving customers, this article designs and implements a pet service platform based on springboot. The system is divided into the administrator side and the user side. Administrators can edit goods that have already been listed and also add new goods. Users can choose the services or goods they need to purchase, and they need to add relevant address information and can set a default addresses at checkout. This system can promote the sales of goods in pet stores and also provide users with the good pet service platform.
Key Words: SpringBoot; Pet service platform; MVC; MyBatis-Plus
隨著中國(guó)經(jīng)濟(jì)的快速發(fā)展、中國(guó)居民可支配收入的增長(zhǎng),越來(lái)越多的家庭開(kāi)始飼養(yǎng)寵物,寵物商店、寵物醫(yī)院和寵物寄養(yǎng)所等寵物服務(wù)機(jī)構(gòu)如雨后春筍般出現(xiàn)。為了能使這些機(jī)構(gòu)更好的服務(wù)用戶,本文設(shè)計(jì)并實(shí)現(xiàn)了一款基于SpringBoot的網(wǎng)絡(luò)寵物服務(wù)平臺(tái)。
1 系統(tǒng)分析
系統(tǒng)分為用戶端和后臺(tái)管理端。不同的使用者對(duì)應(yīng)不同的功能入口。在用戶端,用戶需要通過(guò)手機(jī)驗(yàn)證碼進(jìn)行登錄注冊(cè),進(jìn)入用戶頁(yè)面后,用戶可以選擇自己需要的服務(wù)或商品進(jìn)行購(gòu)買。在結(jié)算時(shí)需要添加相關(guān)的地址信息,并且可以設(shè)置默認(rèn)地址。后臺(tái)管理端可以對(duì)已經(jīng)上架的商品進(jìn)行修改操作,也可以新增新的商品。同時(shí),后臺(tái)管理端可以通過(guò)設(shè)置套餐形式將商品捆綁進(jìn)行銷售。在用戶下單后,管理端的訂單明細(xì)頁(yè)面會(huì)更新,并且歷史訂單會(huì)按照時(shí)間關(guān)系排列,管理員也可以通過(guò)輸入訂單號(hào)或時(shí)間區(qū)間進(jìn)行查詢。
2 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
2.1 架構(gòu)設(shè)計(jì)
本系統(tǒng)以Springboot為整體框架,采用MVC設(shè)計(jì)模式,選擇MySql為系統(tǒng)數(shù)據(jù)庫(kù)[3]。依賴MyBatis-Plus和Druid數(shù)據(jù)庫(kù)連接池[4]對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作實(shí)現(xiàn)對(duì)數(shù)據(jù)的增刪改查。
利用Springboot框架,可以快速創(chuàng)建基于spring的程序[5]。使用Springboot框架,不需要人為地進(jìn)行Tomcat服務(wù)器的配置,他可以直接使用Java main方法啟動(dòng)內(nèi)嵌的Tomcat服務(wù)器運(yùn)行springboot程序,不需要部署war包[6,7]。同時(shí),Springboot可以根據(jù)項(xiàng)目的Maven依賴配置,自動(dòng)配置spring、springmvc等簡(jiǎn)化了開(kāi)發(fā)。
MVC包括3個(gè)模塊:模型層(Model)、視圖層(View)、控制層(Controller)。與用戶的交互順序是用戶通過(guò)視圖層發(fā)送請(qǐng)求(如查詢賬戶信息request),視圖層的請(qǐng)求發(fā)送到控制層,控制層進(jìn)行中轉(zhuǎn)后,通過(guò)模型層與數(shù)據(jù)庫(kù)交互查詢[8]。模型層的查詢結(jié)果又經(jīng)由控制層形成響應(yīng)結(jié)果(response),在視圖層展示。它的優(yōu)點(diǎn)是分層設(shè)計(jì),可以讓各個(gè)部分的開(kāi)發(fā)單獨(dú)開(kāi)來(lái),減少重復(fù)的代碼,提高應(yīng)用程序的可維護(hù)性和可擴(kuò)展性[9]。其架構(gòu)圖如圖1所示。
2.2 功能設(shè)計(jì)
根據(jù)需求分析,本系統(tǒng)分為用戶端和后臺(tái)管理端。用戶端功能模塊有登錄模塊,購(gòu)物模塊,添加地址模塊,查詢歷史訂單模塊;后臺(tái)管理端的功能模塊有新增員工模塊,新增服務(wù)模塊,新增分類模塊,新增套餐模塊以及查詢用戶訂單模塊。系統(tǒng)功能模塊圖2所示。
2.3 功能流程設(shè)計(jì)
當(dāng)用戶輸入手機(jī)號(hào),驗(yàn)證碼準(zhǔn)備登錄時(shí),系統(tǒng)會(huì)判斷驗(yàn)證碼輸入是否正確。登錄成功進(jìn)入系統(tǒng)后,用戶可以選購(gòu)商品,被選購(gòu)的商品會(huì)進(jìn)入購(gòu)物車。當(dāng)用戶完成購(gòu)物后,提交訂單時(shí),系統(tǒng)會(huì)判斷用戶是否設(shè)置了默認(rèn)密碼,如果沒(méi)有設(shè)置,頁(yè)面會(huì)自動(dòng)跳到地址管理頁(yè)面;如果設(shè)置,則可以直接提交訂單。
當(dāng)管理員輸入用戶名和密碼后點(diǎn)擊登錄,系統(tǒng)會(huì)進(jìn)行一次判斷,如果兩者之中有一個(gè)輸入錯(cuò)誤,就不能成功登錄,必須重新輸入。當(dāng)進(jìn)入系統(tǒng)后,管理員可以進(jìn)行員工管理,服務(wù)信息管理,分類信息管理,套餐信息管理,訂單管理的相關(guān)方面的操作。
3 關(guān)鍵功能實(shí)現(xiàn)
3.1 用戶手機(jī)驗(yàn)證碼登錄
該功能邏輯為用戶在輸入手機(jī)號(hào)碼后收到驗(yàn)證碼并輸入后才能完成登錄,若輸入錯(cuò)誤后會(huì)登錄失敗。
為了生成驗(yàn)證碼,需要?jiǎng)?chuàng)建一個(gè)隨機(jī)驗(yàn)證碼生成工具類。該工具類主要通過(guò)“Random().nextInt()”方法隨機(jī)生成驗(yàn)證碼。選擇的是4位驗(yàn)證碼,為了防止生成的隨機(jī)驗(yàn)證碼超過(guò)四位數(shù)需要將“nextint()”中的值定為9999,這樣的話生成的驗(yàn)證碼最大數(shù)是9 999。同時(shí)因?yàn)樯傻尿?yàn)證碼在0~9 999之間,所以有概率生成的驗(yàn)證碼是三位數(shù)。所以需要進(jìn)行判斷,若生成的驗(yàn)證碼小于四位數(shù),需要將該驗(yàn)證碼加1000。相關(guān)代碼如下:
public static Integer generateValidateCode(int length){??? Integer code =null;??? if(length == 4){??????? code = new Random().nextInt(9999);//生成隨機(jī)數(shù),最大為9999??????? if(code < 1000){??????????? code = code + 1000;//保證隨機(jī)數(shù)為4位數(shù)字}
return code;}
當(dāng)用戶輸入手機(jī)號(hào)碼后點(diǎn)擊獲取驗(yàn)證碼后,驗(yàn)證碼生成工具類會(huì)生成一個(gè)四位驗(yàn)證碼,通過(guò)“session.setAttribute(phone,code);”語(yǔ)句將生成的驗(yàn)證碼存入session中,當(dāng)用戶獲取到驗(yàn)證碼并通過(guò)鍵盤(pán)輸入后,系統(tǒng)會(huì)進(jìn)行比對(duì),若輸入的驗(yàn)證碼與session中的驗(yàn)證碼相同時(shí),登錄成功;若不相同,則登陸失敗。因?yàn)榇嬖谛掠脩舻那闆r,所以需要設(shè)置查詢語(yǔ)句“LambdaQueryWrapper
用戶登錄頁(yè)面如圖3所示。
3.2 地址簿模塊
當(dāng)用戶進(jìn)入“地址管理”頁(yè)面中,系統(tǒng)先查詢存在的地址。首先從session中取出用戶id作為查詢條件代碼為“Long userId = (Long) session.getAttribute("user");”。取出后設(shè)置泛型為Addrsessbook的查詢語(yǔ)句 “LambdaQueryWrapper
如果沒(méi)有地址,則用戶需要進(jìn)行地址的添加。首先需要設(shè)置地址簿的用戶id以確保該地址簿綁定在正確的用戶上。之后利用IService接口中提供的”save()”方法進(jìn)行對(duì)地址的保存。
當(dāng)用戶需要更改時(shí),利用“addressBookService.updateById(addressBook);”該語(yǔ)句進(jìn)行對(duì)地址的修改;當(dāng)用戶需要?jiǎng)h除某個(gè)地址時(shí),利用“addressBookService.removeBatchByIds(ids);”進(jìn)行對(duì)地址的刪除。更新和刪除操作的原理皆是利用了IService接口中的方法,分別為“updateById()”和“removeBatchByIds ()”方法。
為了方便用戶在結(jié)算時(shí)可以不用手動(dòng)添加地址,可以設(shè)置默認(rèn)地址。首先需要?jiǎng)?chuàng)建查詢對(duì)象,代碼為“LambdaUpdateWrapper
“addressBook.setIsDefault(1);addressBookService.updateById(addressBook);”。
3.3 新增員工
首先為員工設(shè)置默認(rèn)的登錄密碼123456。利用setPassword()方法完成添加,其中通過(guò)MD5加密對(duì)密碼加密。具體代碼為:
“employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));”。
在完成相關(guān)信息填寫(xiě)后,系統(tǒng)調(diào)用IService接口中“save()”方法對(duì)用戶信息進(jìn)行保存,具體代碼為:“employeeService.save(employee);”。
在新增完員工后需要將所有員工進(jìn)行分頁(yè)查詢后反映到相關(guān)頁(yè)面中。首先建立一個(gè)條件構(gòu)造器,以姓名作為查詢條件進(jìn)行查詢,其中需要添加過(guò)濾條件,防止姓名為空。具體代碼為:
“LambdaQueryWrapper
queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName,name);“
在查詢結(jié)束后,引入分頁(yè)構(gòu)造器,利用員工新增的時(shí)間進(jìn)行降序排序。具體代碼為“Page
queryWrapper.orderByDesc(Employee::getUpdateTime);“。
通過(guò)以上操作就能完成員工的新增和分頁(yè)查詢。
3.4 新增服務(wù)
新增功能主要通過(guò)IService接口中提供“save()”方法實(shí)現(xiàn),但是不同的是,一個(gè)服務(wù)可能有多種配置信息,所以新增服務(wù)功能實(shí)現(xiàn)了對(duì)兩張表的插入操作,一張表保存基本信息,另一張表保存服務(wù)的配置信息。
保存基本信息利用“save()”方法即可。具體代碼為“this.save(serviceDto);”。保存配置信息,需要先創(chuàng)建一個(gè)stream流來(lái)將服務(wù)的id與配置信息進(jìn)行綁定,使服務(wù)與配置信息之間存在關(guān)聯(lián)。完成綁定后,再利用IService接口中提供的”saveBatch()”方法將配置信息進(jìn)行保存。功能具體代碼為:
“Long serviceId = serviceDto.getId();//菜品idList
若要?jiǎng)h除某個(gè)服務(wù),利用IService接口中提供的”removeBatchByIds()”方法進(jìn)行刪除。具體代碼為:
”public R
在代碼中使用了split方法和ArrayList數(shù)組將選中的服務(wù)id封裝成數(shù)組,最后通過(guò)”removeBatchByIds()”方法可以完成刪除操作,這樣做既可以刪除單個(gè)商品,也能進(jìn)行批量刪除。
若要進(jìn)行更新,仍然是利用IService接口中提供的”updateById()”方法。具體代碼為:
“@PutMappingpublic R
3.5 新增套餐功能
一個(gè)套餐可以包含多個(gè)商品,所以若要進(jìn)行套餐的新增,就要進(jìn)行兩張表的操作。首先通過(guò)“save()”方法將套餐的基本信息存入基本信息表中,具體代碼為”this.save(setMealDto);
”。接下來(lái)創(chuàng)建stream流將新增的套餐id賦予配置信息表中,最后再通過(guò)”saveBatch()”方法將配置信息批量保存進(jìn)配置信息表中。功能具體代碼為:
”List
若要?jiǎng)h除套餐,先利用”removeByIds()”方法將套餐表中的數(shù)據(jù)刪除。具體代碼為“this.removeByIds(ids);”。刪掉基本內(nèi)容后,也需要清理配置信息表中的數(shù)據(jù)。首先建立一個(gè)條件構(gòu)造器,利用被刪除套餐的套餐id作為查詢條件將相關(guān)配置信息查詢出來(lái),最后利用”remove()”方法將相關(guān)配置信息刪除。具體代碼為:
”LambdaQueryWrapper
3.6 公共字段自動(dòng)填充
本系統(tǒng)多涉及到時(shí)間,創(chuàng)建者等方面的問(wèn)題,如用戶注冊(cè)時(shí)的時(shí)間、服務(wù)更新時(shí)的時(shí)間、是誰(shuí)進(jìn)行了服務(wù)的更新等。為了解決這些問(wèn)題,可以創(chuàng)建一個(gè)工具類,每當(dāng)進(jìn)行插入和更新操作以及其他操作時(shí),系統(tǒng)會(huì)自動(dòng)記錄下這些信息。
為了完成上述功能,關(guān)鍵的是需要讓工具類繼承“MetaObjectHandler”接口,該接口是MyBatis-Plus提供的一個(gè)擴(kuò)展接口,可以利用這個(gè)接口在插入或者更新數(shù)據(jù)的時(shí)候,為一些字段指定默認(rèn)值。利用該接口可以快速的實(shí)現(xiàn)該功能。當(dāng)進(jìn)行插入操作時(shí)除了填充創(chuàng)建者和創(chuàng)建時(shí)間外,不能讓更新者和更新時(shí)間為空。所以要同時(shí)插入相關(guān)的值。具體代碼為:
”metaObject.setValue("createTime", LocalDateTime.now());metaObject.setValue("updateTime", LocalDateTime.now());metaObject.setValue("createUser", BaseContext.getCurrentId());metaObject.setValue("updateUser", BaseContext.getCurrentId());”。
當(dāng)進(jìn)行更新操作時(shí),只需要改變更新時(shí)間和更新者就行,創(chuàng)建時(shí)間和創(chuàng)建者則不需要改變。具體代碼為:
”metaObject.setValue("updateTime", LocalDateTime.now());metaObject.setValue("updateUser", BaseContext.getCurrentId());”。
通過(guò)上述操作,系統(tǒng)就能實(shí)現(xiàn)公共字段的自動(dòng)填充的功能。
4? 結(jié)語(yǔ)
“喵站”寵物綜合服務(wù)平臺(tái)成功實(shí)現(xiàn)了管理員新增服務(wù)、套餐、分類的功能,并且可以通過(guò)訂單號(hào)和時(shí)間區(qū)間進(jìn)行對(duì)訂單的查詢。用戶端用戶也能通過(guò)手機(jī)驗(yàn)證碼進(jìn)行登錄注冊(cè)并且可以進(jìn)行對(duì)商品的購(gòu)買、購(gòu)物車的管理、地址簿的管理,也具有查詢歷史訂單的功能。本平臺(tái)兼具用戶與后臺(tái),能較好地滿足用戶與門(mén)店操作方面的需求。
參考文獻(xiàn)
[1]姜麗莉,孫自梅.基于SSM的“C++微課堂”在線實(shí)驗(yàn)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代信息科技,2022,6(3):36-38.
[2]郭建衛(wèi).基于SpringBoot+Mybatis+Vue的學(xué)生德育量化考核系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代信息科技,2023,7(1):18-22.
[3]李煥,彭科,姜琳琳,朱進(jìn).學(xué)生成長(zhǎng)檔案管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代信息科技,2022,6(3):5-8.
[4]楊華.基于SSM的寵物店信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].長(zhǎng)春:吉林大學(xué),2019.
[5]唐蘇旭.基于SpringBoot的房屋租賃系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:首都經(jīng)濟(jì)貿(mào)易大學(xué),2021.
[6]田成龍,陸曉寒,嚴(yán)夢(mèng)瑤,周鑫.基于SpringBoot的成績(jī)排名系統(tǒng)[J].軟件,2021,42(10):129-132.
[7]蘇小偉.基于SpringBoot的汽車維修企業(yè)智能化管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2022.