亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

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

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

        1 系統(tǒng)分析

        系統(tǒng)分為用戶(hù)端和后臺(tái)管理端。不同的使用者對(duì)應(yīng)不同的功能入口。在用戶(hù)端,用戶(hù)需要通過(guò)手機(jī)驗(yàn)證碼進(jìn)行登錄注冊(cè),進(jìn)入用戶(hù)頁(yè)面后,用戶(hù)可以選擇自己需要的服務(wù)或商品進(jìn)行購(gòu)買(mǎi)。在結(jié)算時(shí)需要添加相關(guān)的地址信息,并且可以設(shè)置默認(rèn)地址。后臺(tái)管理端可以對(duì)已經(jīng)上架的商品進(jìn)行修改操作,也可以新增新的商品。同時(shí),后臺(tái)管理端可以通過(guò)設(shè)置套餐形式將商品捆綁進(jìn)行銷(xiāo)售。在用戶(hù)下單后,管理端的訂單明細(xì)頁(yè)面會(huì)更新,并且歷史訂單會(huì)按照時(shí)間關(guān)系排列,管理員也可以通過(guò)輸入訂單號(hào)或時(shí)間區(qū)間進(jìn)行查詢(xú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]。依賴(lài)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依賴(lài)配置,自動(dòng)配置spring、springmvc等簡(jiǎn)化了開(kāi)發(fā)。

        MVC包括3個(gè)模塊:模型層(Model)、視圖層(View)、控制層(Controller)。與用戶(hù)的交互順序是用戶(hù)通過(guò)視圖層發(fā)送請(qǐng)求(如查詢(xún)賬戶(hù)信息request),視圖層的請(qǐng)求發(fā)送到控制層,控制層進(jìn)行中轉(zhuǎn)后,通過(guò)模型層與數(shù)據(jù)庫(kù)交互查詢(xún)[8]。模型層的查詢(xún)結(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)分為用戶(hù)端和后臺(tái)管理端。用戶(hù)端功能模塊有登錄模塊,購(gòu)物模塊,添加地址模塊,查詢(xún)歷史訂單模塊;后臺(tái)管理端的功能模塊有新增員工模塊,新增服務(wù)模塊,新增分類(lèi)模塊,新增套餐模塊以及查詢(xún)用戶(hù)訂單模塊。系統(tǒng)功能模塊圖2所示。

        2.3 功能流程設(shè)計(jì)

        2.3.1 用戶(hù)端功能流程設(shè)計(jì)

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

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

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

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

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

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

        為了生成驗(yàn)證碼,需要?jiǎng)?chuàng)建一個(gè)隨機(jī)驗(yàn)證碼生成工具類(lèi)。該工具類(lèi)主要通過(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)用戶(hù)輸入手機(jī)號(hào)碼后點(diǎn)擊獲取驗(yàn)證碼后,驗(yàn)證碼生成工具類(lèi)會(huì)生成一個(gè)四位驗(yàn)證碼,通過(guò)“session.setAttribute(phone,code);”語(yǔ)句將生成的驗(yàn)證碼存入session中,當(dāng)用戶(hù)獲取到驗(yàn)證碼并通過(guò)鍵盤(pán)輸入后,系統(tǒng)會(huì)進(jìn)行比對(duì),若輸入的驗(yàn)證碼與session中的驗(yàn)證碼相同時(shí),登錄成功;若不相同,則登陸失敗。因?yàn)榇嬖谛掠脩?hù)的情況,所以需要設(shè)置查詢(xún)語(yǔ)句“LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(User::getPhone,phone);”通過(guò)比對(duì)之前數(shù)據(jù)庫(kù)中的存儲(chǔ)手機(jī)號(hào)碼判斷是否為新用戶(hù)。若為新用戶(hù),則會(huì)通過(guò)“userService.save(user);”語(yǔ)句自動(dòng)完成注冊(cè)。

        用戶(hù)登錄頁(yè)面如圖3所示。

        3.2 地址簿模塊

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

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

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

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

        “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ì)用戶(hù)信息進(jìn)行保存,具體代碼為:“employeeService.save(employee);”。

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

        “LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();

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

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

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

        通過(guò)以上操作就能完成員工的新增和分頁(yè)查詢(xún)。

        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 flavors = serviceDto.getFlavors();flavors = flavors.stream().map((item) -> {??? item.setServiceId(serviceId);??? return item;}).collect(Collectors.toList());serviceFlavorService.saveBatch(flavors);”。

        若要?jiǎng)h除某個(gè)服務(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ù)組,最后通過(guò)”removeBatchByIds()”方法可以完成刪除操作,這樣做既可以刪除單個(gè)商品,也能進(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 新增套餐功能

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

        ”。接下來(lái)創(chuàng)建stream流將新增的套餐id賦予配置信息表中,最后再通過(guò)”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);”。

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

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

        3.6 公共字段自動(dòng)填充

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

        為了完成上述功能,關(guān)鍵的是需要讓工具類(lèi)繼承“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ù)、套餐、分類(lèi)的功能,并且可以通過(guò)訂單號(hào)和時(shí)間區(qū)間進(jìn)行對(duì)訂單的查詢(xún)。用戶(hù)端用戶(hù)也能通過(guò)手機(jī)驗(yàn)證碼進(jìn)行登錄注冊(cè)并且可以進(jìn)行對(duì)商品的購(gòu)買(mǎi)、購(gòu)物車(chē)的管理、地址簿的管理,也具有查詢(xún)歷史訂單的功能。本平臺(tái)兼具用戶(hù)與后臺(tái),能較好地滿(mǎn)足用戶(hù)與門(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的汽車(chē)維修企業(yè)智能化管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2022.

        国产v视频| 亚洲av一二三区成人影片| 激情综合色综合久久综合| 在线看片无码永久免费aⅴ | 久久久精品欧美一区二区免费| 国产免费人成视频在线播放播| 国产女人成人精品视频| AV中文码一区二区三区| 国产三级精品和三级男人| 精品无码国产自产拍在线观看| 精品国产制服丝袜高跟| 久久亚洲精品成人AV无码网址| 亚洲精品中文字幕导航| 大地资源在线观看官网第三页 | 日韩在线第二页| 极品少妇在线观看视频| 婷婷亚洲岛国热超碰中文字幕| 黑人巨大av在线播放无码| 99精品欧美一区二区三区美图| 成人在线观看视频免费播放| 18岁日韩内射颜射午夜久久成人| 最近中文字幕在线mv视频在线| 超清无码AV丝袜片在线观看| 亚洲精品女同一区二区三区| 久久天天躁夜夜躁狠狠85麻豆 | 噜噜噜色97| 精品国产一区二区三区av免费| 久久青青草原亚洲av无码麻豆| 国产精品欧美日韩在线一区| 久久五月精品中文字幕| 国产免费观看黄av片| 亚洲精品久久久久久动漫| 无码91 亚洲| 国产一区二区三区视频地址| 色噜噜av亚洲色一区二区| 色欲国产精品一区成人精品| 人妖与人妖免费黄色片| 国产大片内射1区2区| 日本夜爽爽一区二区三区| 99久久免费中文字幕精品| 人妻无码第一区二区三区|