999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于SpringBoot 的“喵站”寵物服務(wù)平臺的設(shè)計與實(shí)現(xiàn)

2023-12-05 09:06:56艾鈺承朱海風(fēng)劉舟
科技資訊 2023年22期

艾鈺承 朱海風(fēng) 劉舟

摘要:為了更好地幫助大多數(shù)寵物門店服務(wù)于顧客,設(shè)計并實(shí)現(xiàn)了一個基于SpringBoot的寵物服務(wù)平臺。系統(tǒng)分為管理員端和用戶端。管理員可以對已經(jīng)上架的商品進(jìn)行修改操作,也可以新增新的商品。用戶可以選擇自己需要的服務(wù)或商品進(jìn)行購買。在結(jié)算時需要添加相關(guān)的地址信息,并且可以設(shè)置默認(rèn)地址。該系統(tǒng)可以促進(jìn)寵物門店的商品的銷售,也能為用戶提供一個良好的寵物服務(wù)平臺。

關(guān)鍵詞:SpringBoot 寵物服務(wù)平臺 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

隨著中國經(jīng)濟(jì)的快速發(fā)展、中國居民可支配收入的增長,越來越多的家庭開始飼養(yǎng)寵物,寵物商店、寵物醫(yī)院和寵物寄養(yǎng)所等寵物服務(wù)機(jī)構(gòu)如雨后春筍般出現(xiàn)。為了能使這些機(jī)構(gòu)更好的服務(wù)用戶,本文設(shè)計并實(shí)現(xiàn)了一款基于SpringBoot的網(wǎng)絡(luò)寵物服務(wù)平臺。

1 系統(tǒng)分析

系統(tǒng)分為用戶端和后臺管理端。不同的使用者對應(yīng)不同的功能入口。在用戶端,用戶需要通過手機(jī)驗(yàn)證碼進(jìn)行登錄注冊,進(jìn)入用戶頁面后,用戶可以選擇自己需要的服務(wù)或商品進(jìn)行購買。在結(jié)算時需要添加相關(guān)的地址信息,并且可以設(shè)置默認(rèn)地址。后臺管理端可以對已經(jīng)上架的商品進(jìn)行修改操作,也可以新增新的商品。同時,后臺管理端可以通過設(shè)置套餐形式將商品捆綁進(jìn)行銷售。在用戶下單后,管理端的訂單明細(xì)頁面會更新,并且歷史訂單會按照時間關(guān)系排列,管理員也可以通過輸入訂單號或時間區(qū)間進(jìn)行查詢。

2 系統(tǒng)設(shè)計與實(shí)現(xiàn)

2.1 架構(gòu)設(shè)計

本系統(tǒng)以Springboot為整體框架,采用MVC設(shè)計模式,選擇MySql為系統(tǒng)數(shù)據(jù)庫[3]。依賴MyBatis-Plus和Druid數(shù)據(jù)庫連接池[4]對數(shù)據(jù)庫進(jìn)行操作實(shí)現(xiàn)對數(shù)據(jù)的增刪改查。

利用Springboot框架,可以快速創(chuàng)建基于spring的程序[5]。使用Springboot框架,不需要人為地進(jìn)行Tomcat服務(wù)器的配置,他可以直接使用Java main方法啟動內(nèi)嵌的Tomcat服務(wù)器運(yùn)行springboot程序,不需要部署war包[6,7]。同時,Springboot可以根據(jù)項(xiàng)目的Maven依賴配置,自動配置spring、springmvc等簡化了開發(fā)。

MVC包括3個模塊:模型層(Model)、視圖層(View)、控制層(Controller)。與用戶的交互順序是用戶通過視圖層發(fā)送請求(如查詢賬戶信息request),視圖層的請求發(fā)送到控制層,控制層進(jìn)行中轉(zhuǎn)后,通過模型層與數(shù)據(jù)庫交互查詢[8]。模型層的查詢結(jié)果又經(jīng)由控制層形成響應(yīng)結(jié)果(response),在視圖層展示。它的優(yōu)點(diǎn)是分層設(shè)計,可以讓各個部分的開發(fā)單獨(dú)開來,減少重復(fù)的代碼,提高應(yīng)用程序的可維護(hù)性和可擴(kuò)展性[9]。其架構(gòu)圖如圖1所示。

2.2 功能設(shè)計

根據(jù)需求分析,本系統(tǒng)分為用戶端和后臺管理端。用戶端功能模塊有登錄模塊,購物模塊,添加地址模塊,查詢歷史訂單模塊;后臺管理端的功能模塊有新增員工模塊,新增服務(wù)模塊,新增分類模塊,新增套餐模塊以及查詢用戶訂單模塊。系統(tǒng)功能模塊圖2所示。

2.3 功能流程設(shè)計

2.3.1 用戶端功能流程設(shè)計

當(dāng)用戶輸入手機(jī)號,驗(yàn)證碼準(zhǔn)備登錄時,系統(tǒng)會判斷驗(yàn)證碼輸入是否正確。登錄成功進(jìn)入系統(tǒng)后,用戶可以選購商品,被選購的商品會進(jìn)入購物車。當(dāng)用戶完成購物后,提交訂單時,系統(tǒng)會判斷用戶是否設(shè)置了默認(rèn)密碼,如果沒有設(shè)置,頁面會自動跳到地址管理頁面;如果設(shè)置,則可以直接提交訂單。

2.3.2 管理員端功能流程設(shè)計

當(dāng)管理員輸入用戶名和密碼后點(diǎn)擊登錄,系統(tǒng)會進(jìn)行一次判斷,如果兩者之中有一個輸入錯誤,就不能成功登錄,必須重新輸入。當(dāng)進(jìn)入系統(tǒng)后,管理員可以進(jìn)行員工管理,服務(wù)信息管理,分類信息管理,套餐信息管理,訂單管理的相關(guān)方面的操作。

3 關(guān)鍵功能實(shí)現(xiàn)

3.1 用戶手機(jī)驗(yàn)證碼登錄

該功能邏輯為用戶在輸入手機(jī)號碼后收到驗(yàn)證碼并輸入后才能完成登錄,若輸入錯誤后會登錄失敗。

為了生成驗(yàn)證碼,需要創(chuàng)建一個隨機(jī)驗(yàn)證碼生成工具類。該工具類主要通過“Random().nextInt()”方法隨機(jī)生成驗(yàn)證碼。選擇的是4位驗(yàn)證碼,為了防止生成的隨機(jī)驗(yàn)證碼超過四位數(shù)需要將“nextint()”中的值定為9999,這樣的話生成的驗(yàn)證碼最大數(shù)是9 999。同時因?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ī)號碼后點(diǎn)擊獲取驗(yàn)證碼后,驗(yàn)證碼生成工具類會生成一個四位驗(yàn)證碼,通過“session.setAttribute(phone,code);”語句將生成的驗(yàn)證碼存入session中,當(dāng)用戶獲取到驗(yàn)證碼并通過鍵盤輸入后,系統(tǒng)會進(jìn)行比對,若輸入的驗(yàn)證碼與session中的驗(yàn)證碼相同時,登錄成功;若不相同,則登陸失敗。因?yàn)榇嬖谛掠脩舻那闆r,所以需要設(shè)置查詢語句“LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(User::getPhone,phone);”通過比對之前數(shù)據(jù)庫中的存儲手機(jī)號碼判斷是否為新用戶。若為新用戶,則會通過“userService.save(user);”語句自動完成注冊。

用戶登錄頁面如圖3所示。

3.2 地址簿模塊

當(dāng)用戶進(jìn)入“地址管理”頁面中,系統(tǒng)先查詢存在的地址。首先從session中取出用戶id作為查詢條件代碼為“Long userId = (Long) session.getAttribute("user");”。取出后設(shè)置泛型為Addrsessbook的查詢語句 “LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();“利用該語句創(chuàng)建queryWapper對象。隨后利用之前從session中取出的用戶id作為查詢條件進(jìn)行查詢,具體代碼為”queryWrapper.eq(AddressBook::getUserId,userId);“,這樣即可完成地址簿的查詢。

如果沒有地址,則用戶需要進(jìn)行地址的添加。首先需要設(shè)置地址簿的用戶id以確保該地址簿綁定在正確的用戶上。之后利用IService接口中提供的”save()”方法進(jìn)行對地址的保存。

當(dāng)用戶需要更改時,利用“addressBookService.updateById(addressBook);”該語句進(jìn)行對地址的修改;當(dāng)用戶需要刪除某個地址時,利用“addressBookService.removeBatchByIds(ids);”進(jìn)行對地址的刪除。更新和刪除操作的原理皆是利用了IService接口中的方法,分別為“updateById()”和“removeBatchByIds ()”方法。

為了方便用戶在結(jié)算時可以不用手動添加地址,可以設(shè)置默認(rèn)地址。首先需要創(chuàng)建查詢對象,代碼為“LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();”。創(chuàng)建完成后利用當(dāng)前用戶id作為查詢條件對地址簿進(jìn)行查詢,代碼為“updateWrapper.eq(AddressBook::getUserId,userId);”。因?yàn)槟J(rèn)地址有且僅有一個,所以在設(shè)置默認(rèn)地址前需要將所有地址設(shè)置為非默認(rèn)地址。在數(shù)據(jù)庫中,地址的狀態(tài)被設(shè)置為布爾類型,0代表非默認(rèn)地址,1代表默認(rèn)地址,所以利用“updateWrapper.set(AddressBook::getIsDefault,0);”該語句把所有地址的狀態(tài)設(shè)置為0。完成以上操作后,通過setIsDefault()方法將用戶想要修改的地址的狀態(tài)設(shè)置為1。最后利用updateById()方法將地址簿進(jìn)行更新。具體代碼為:

“addressBook.setIsDefault(1);addressBookService.updateById(addressBook);”。

3.3 新增員工

首先為員工設(shè)置默認(rèn)的登錄密碼123456。利用setPassword()方法完成添加,其中通過MD5加密對密碼加密。具體代碼為:

“employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));”。

在完成相關(guān)信息填寫后,系統(tǒng)調(diào)用IService接口中“save()”方法對用戶信息進(jìn)行保存,具體代碼為:“employeeService.save(employee);”。

在新增完員工后需要將所有員工進(jìn)行分頁查詢后反映到相關(guān)頁面中。首先建立一個條件構(gòu)造器,以姓名作為查詢條件進(jìn)行查詢,其中需要添加過濾條件,防止姓名為空。具體代碼為:

“LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();

queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName,name);“

在查詢結(jié)束后,引入分頁構(gòu)造器,利用員工新增的時間進(jìn)行降序排序。具體代碼為“Page pageInfo = new Page<>(page,pageSize);

queryWrapper.orderByDesc(Employee::getUpdateTime);“。

通過以上操作就能完成員工的新增和分頁查詢。

3.4 新增服務(wù)

新增功能主要通過IService接口中提供“save()”方法實(shí)現(xiàn),但是不同的是,一個服務(wù)可能有多種配置信息,所以新增服務(wù)功能實(shí)現(xiàn)了對兩張表的插入操作,一張表保存基本信息,另一張表保存服務(wù)的配置信息。

保存基本信息利用“save()”方法即可。具體代碼為“this.save(serviceDto);”。保存配置信息,需要先創(chuàng)建一個stream流來將服務(wù)的id與配置信息進(jìn)行綁定,使服務(wù)與配置信息之間存在關(guān)聯(lián)。完成綁定后,再利用IService接口中提供的”saveBatch()”方法將配置信息進(jìn)行保存。功能具體代碼為:

“Long serviceId = serviceDto.getId();//菜品idList flavors = serviceDto.getFlavors();flavors = flavors.stream().map((item) -> {??? item.setServiceId(serviceId);??? return item;}).collect(Collectors.toList());serviceFlavorService.saveBatch(flavors);”。

若要刪除某個服務(wù),利用IService接口中提供的”removeBatchByIds()”方法進(jìn)行刪除。具體代碼為:

”public R delete(String ids) {??? String[] split = ids.split(",");??? List list = new ArrayList<>(Arrays.asList(split));serviceService.removeBatchByIds(list);??? return R.success("刪除成功!");}”

在代碼中使用了split方法和ArrayList數(shù)組將選中的服務(wù)id封裝成數(shù)組,最后通過”removeBatchByIds()”方法可以完成刪除操作,這樣做既可以刪除單個商品,也能進(jìn)行批量刪除。

若要進(jìn)行更新,仍然是利用IService接口中提供的”updateById()”方法。具體代碼為:

“@PutMappingpublic R update(@RequestBody DishDto dishDto){??? boolean ret = dishService.updateById(dishDto);??? return ret? R.success("更新成功"):R.error("更新失敗");}”。

3.5 新增套餐功能

一個套餐可以包含多個商品,所以若要進(jìn)行套餐的新增,就要進(jìn)行兩張表的操作。首先通過“save()”方法將套餐的基本信息存入基本信息表中,具體代碼為”this.save(setMealDto);

”。接下來創(chuàng)建stream流將新增的套餐id賦予配置信息表中,最后再通過”saveBatch()”方法將配置信息批量保存進(jìn)配置信息表中。功能具體代碼為:

”List setmealServices = setMealDto.getSetmealServices();List< SetMealService> collect = setmealServices.stream().map((item) -> {??? item.setSetmealId(setMealDto.getId());??? return item;}).collect(Collectors.toList());setMealServiceService.saveBatch(collect);”。

若要刪除套餐,先利用”removeByIds()”方法將套餐表中的數(shù)據(jù)刪除。具體代碼為“this.removeByIds(ids);”。刪掉基本內(nèi)容后,也需要清理配置信息表中的數(shù)據(jù)。首先建立一個條件構(gòu)造器,利用被刪除套餐的套餐id作為查詢條件將相關(guān)配置信息查詢出來,最后利用”remove()”方法將相關(guān)配置信息刪除。具體代碼為:

”LambdaQueryWrapperlambdaQueryWrapper=newLambdaQueryWrapper<>();lambdaQueryWrapper.in(SetMealService::getSetmealId,ids);setmealServiceService.remove(lambdaQueryWrapper);”。

3.6 公共字段自動填充

本系統(tǒng)多涉及到時間,創(chuàng)建者等方面的問題,如用戶注冊時的時間、服務(wù)更新時的時間、是誰進(jìn)行了服務(wù)的更新等。為了解決這些問題,可以創(chuàng)建一個工具類,每當(dāng)進(jìn)行插入和更新操作以及其他操作時,系統(tǒng)會自動記錄下這些信息。

為了完成上述功能,關(guān)鍵的是需要讓工具類繼承“MetaObjectHandler”接口,該接口是MyBatis-Plus提供的一個擴(kuò)展接口,可以利用這個接口在插入或者更新數(shù)據(jù)的時候,為一些字段指定默認(rèn)值。利用該接口可以快速的實(shí)現(xiàn)該功能。當(dāng)進(jìn)行插入操作時除了填充創(chuàng)建者和創(chuàng)建時間外,不能讓更新者和更新時間為空。所以要同時插入相關(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)行更新操作時,只需要改變更新時間和更新者就行,創(chuàng)建時間和創(chuàng)建者則不需要改變。具體代碼為:

”metaObject.setValue("updateTime", LocalDateTime.now());metaObject.setValue("updateUser", BaseContext.getCurrentId());”。

通過上述操作,系統(tǒng)就能實(shí)現(xiàn)公共字段的自動填充的功能。

4? 結(jié)語

“喵站”寵物綜合服務(wù)平臺成功實(shí)現(xiàn)了管理員新增服務(wù)、套餐、分類的功能,并且可以通過訂單號和時間區(qū)間進(jìn)行對訂單的查詢。用戶端用戶也能通過手機(jī)驗(yàn)證碼進(jìn)行登錄注冊并且可以進(jìn)行對商品的購買、購物車的管理、地址簿的管理,也具有查詢歷史訂單的功能。本平臺兼具用戶與后臺,能較好地滿足用戶與門店操作方面的需求。

參考文獻(xiàn)

[1]姜麗莉,孫自梅.基于SSM的“C++微課堂”在線實(shí)驗(yàn)平臺的設(shè)計與實(shí)現(xiàn)[J].現(xiàn)代信息科技,2022,6(3):36-38.

[2]郭建衛(wèi).基于SpringBoot+Mybatis+Vue的學(xué)生德育量化考核系統(tǒng)設(shè)計與實(shí)現(xiàn)[J].現(xiàn)代信息科技,2023,7(1):18-22.

[3]李煥,彭科,姜琳琳,朱進(jìn).學(xué)生成長檔案管理系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J].現(xiàn)代信息科技,2022,6(3):5-8.

[4]楊華.基于SSM的寵物店信息系統(tǒng)的設(shè)計與實(shí)現(xiàn)[D].長春:吉林大學(xué),2019.

[5]唐蘇旭.基于SpringBoot的房屋租賃系統(tǒng)的設(shè)計與實(shí)現(xiàn)[D].北京:首都經(jīng)濟(jì)貿(mào)易大學(xué),2021.

[6]田成龍,陸曉寒,嚴(yán)夢瑤,周鑫.基于SpringBoot的成績排名系統(tǒng)[J].軟件,2021,42(10):129-132.

[7]蘇小偉.基于SpringBoot的汽車維修企業(yè)智能化管理系統(tǒng)的設(shè)計與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2022.

主站蜘蛛池模板: 日韩欧美国产成人| 无码内射中文字幕岛国片| 亚洲精品中文字幕无乱码| 91人妻日韩人妻无码专区精品| 亚洲免费黄色网| 免费无码AV片在线观看中文| 日韩午夜福利在线观看| 久久亚洲国产视频| 18禁黄无遮挡免费动漫网站| 国产chinese男男gay视频网| 最新亚洲av女人的天堂| 国产av一码二码三码无码| 亚洲男人天堂2018| 亚洲福利网址| 日本www在线视频| 国产白浆视频| 91精品久久久久久无码人妻| 精品无码视频在线观看| 亚洲永久免费网站| 久久这里只有精品免费| 亚洲欧美色中文字幕| 久久精品无码一区二区国产区| 91在线无码精品秘九色APP | 日韩av手机在线| 国产亚洲欧美在线人成aaaa| 无码专区国产精品一区| 欧美午夜视频在线| 国产在线观看一区精品| 狠狠色丁香婷婷综合| 亚洲欧美在线精品一区二区| 亚洲人成网18禁| 婷婷亚洲视频| 一本大道无码日韩精品影视| 亚洲精品国产日韩无码AV永久免费网| 美臀人妻中出中文字幕在线| 在线亚洲小视频| 精品天海翼一区二区| 午夜啪啪网| 国产激情第一页| 中文字幕精品一区二区三区视频| 久久夜色精品| aaa国产一级毛片| 日韩精品一区二区三区视频免费看| 日韩精品免费一线在线观看| 日韩av高清无码一区二区三区| 波多野结衣AV无码久久一区| 亚洲天堂自拍| 国产成人一区在线播放| 免费av一区二区三区在线| 亚洲无线一二三四区男男| 亚洲综合香蕉| 欧美中文一区| 亚洲无限乱码一二三四区| 色天堂无毒不卡| 性视频一区| 欧美国产日韩一区二区三区精品影视| 欧美97欧美综合色伦图| 香蕉蕉亚亚洲aav综合| 国产日韩欧美一区二区三区在线| 在线看片中文字幕| 日韩123欧美字幕| 国产精品蜜臀| 亚洲高清资源| 99久久国产综合精品2023| 久久成人18免费| 在线播放真实国产乱子伦| 亚洲永久精品ww47国产| 毛片免费视频| 成人免费一级片| 一区二区午夜| 国产激爽爽爽大片在线观看| 97视频免费在线观看| 国产伦精品一区二区三区视频优播| 精品综合久久久久久97超人该| 亚洲最新网址| 天天做天天爱天天爽综合区| 久久这里只有精品8| 亚洲天堂网视频| 影音先锋亚洲无码| 欧美日韩国产在线观看一区二区三区 | 欧美性久久久久| 成人无码区免费视频网站蜜臀|