亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

              1. Demo購物車

                新增sku到購物車

                上次課我們開發(fā)到了顯示商品詳情

                有點(diǎn)擊”添加到購物車”的按鈕

                但是沒有反應(yīng),我們完成添加購物車的功能就能實(shí)現(xiàn)這個(gè)效果了

                打開mall-order-webapi模塊

                業(yè)務(wù)邏輯中一些基本的注意事項(xiàng)

                • * 判斷用戶是否登錄,只有登錄后才能將商品新增到購物車
                • * 驗(yàn)證購物車信息的完整性
                • * 業(yè)務(wù)邏輯層要判斷新增的sku是否在當(dāng)前用戶的購物車表中已經(jīng)存在
                • * 如果不存在是新增sku流程
                • * 如果已經(jīng)存在,是修改數(shù)量的流程

                開發(fā)持久

                持久層要按上面分析的業(yè)務(wù)邏輯,開發(fā)多個(gè)方法

              2. 判斷當(dāng)前登錄用戶購物車中是否包含指定skuid商品的方法
              3. 新增sku到購物車表中
              4. 修改購物車指定sku數(shù)量的方法
              5. mapper包創(chuàng)建OmsCartMapper接口,編寫代碼如下

                @Repositorypublic interface OmsCartMapper {// 判斷當(dāng)前用戶的購物車列表中是否包含指定sku商品的方法OmsCart selectExistsCart(@Param(“userId”) Long userId,@Param(“skuId”) Long skuId);// 新增商品到購物車表中void saveCart(OmsCart omsCart);// 修改指定購物車商品的數(shù)量的方法void updateQuantityById(OmsCart omsCart);}

                對應(yīng)的Mapper.xml文件

                id,user_id,sku_id,title,main_picture,price,quantity,gmt_create,gmt_modifiedselectfromoms_cartwhereuser_id=#{userId}andsku_id=#{skuId}insert into oms_cart(user_id,sku_id,title,main_picture,price,quantity) values(#{userId},#{skuId},#{title},#{mainPicture},#{price},#{quantity})updateoms_cartsetquantity=#{quantity}whereid=#{id}

                開發(fā)業(yè)務(wù)邏輯層

                創(chuàng)建OmsCartServiceImpl類實(shí)現(xiàn)IOmsCartService接口

                實(shí)現(xiàn)其中方法,先實(shí)現(xiàn)新增購物車的方法即可

                需要注意,我們在業(yè)務(wù)邏輯層中需要使用用戶的信息

                要單獨(dú)編寫一個(gè)方法獲取用戶信息,

                @Servicepublic class OmsCartServiceImpl implements IOmsCartService {@Autowiredprivate OmsCartMapper omsCartMapper;@Overridepublic void addCart(CartAddDTO cartDTO) {// 獲取當(dāng)前登錄用戶的userIdLong userId=getUserId();// 查詢這個(gè)userId的用戶是否已經(jīng)將指定的sku添加到購物車OmsCart omsCart=omsCartMapper.selectExistsCart(userId,cartDTO.getSkuId());// 判斷查詢結(jié)果是否為nullif(omsCart!=null){// 不等于null,表示當(dāng)前用戶這個(gè)sku已經(jīng)添加在購物車列表中// 我們需要做的就是修改它的數(shù)量,根據(jù)cartDTO對象的quantity屬性值添加omsCart.setQuantity(omsCart.getQuantity()+cartDTO.getQuantity());// 調(diào)用持久層方法修改數(shù)量omsCartMapper.updateQuantityById(omsCart);}else{// 如果omsCart是null 會運(yùn)行else代碼塊// 去完成購物車對象的新增,先實(shí)例化OmsCart對象OmsCart newOmsCart=new OmsCart();// 將參數(shù)cartDTO的同名屬性賦值給newOmsCartBeanUtils.copyProperties(cartDTO,newOmsCart);// cartDTO對象中沒有userId屬性,需要單獨(dú)賦newOmsCart.setUserId(userId);// 執(zhí)行新增omsCartMapper.saveCart(newOmsCart);}}@Overridepublic JsonPage listCarts(Integer page, Integer pageSize) {return null;}@Overridepublic void removeCart(Long[] ids) {}@Overridepublic void removeAllCarts() {}@Overridepublic void removeUserCarts(OmsCart omsCart) {}@Overridepublic void updateQuantity(CartUpdateDTO cartUpdateDTO) {}// 業(yè)務(wù)邏輯層獲得用戶信息的方法,因?yàn)槎鄠€(gè)方法需要獲得用戶信息,所以單獨(dú)編寫一個(gè)方法// 這個(gè)方法的實(shí)現(xiàn)是SpringSecurity提供的登錄用戶的容器// 方法的目標(biāo)是獲得SpringSecurity用戶容器,從容器中獲得用戶信息public CsmallAuthenticationInfo getUserInfo(){// 獲得SpringSecurity容器對象UsernamePasswordAuthenticationToken authenticationToken=(UsernamePasswordAuthenticationToken)SecurityContextHolder.getContext().getAuthentication();// 判斷獲取的容器信息是否為空if(authenticationToken!=null){// 如果容器中有內(nèi)容,證明當(dāng)前容器中有登錄用戶信息// 我們獲取這個(gè)用戶信息并返回CsmallAuthenticationInfo csmallAuthenticationInfo=(CsmallAuthenticationInfo)authenticationToken.getCredentials();return csmallAuthenticationInfo;}throw new CoolSharkServiceException(ResponseCode.UNAUTHORIZED,”沒有登錄信息”);}// 業(yè)務(wù)邏輯層中大多數(shù)方法都是獲得用戶id,所以編寫一個(gè)返回用戶id的方法public Long getUserId(){return getUserInfo().getId();}}

                開發(fā)控制層

                創(chuàng)建OmsCartController

                @RestController@RequestMapping(“/oms/cart”)@Api(tags = “購物車管理模塊”)public class OmsCartController {@Autowiredprivate IOmsCartService omsCartService;// 新增購物車信息的控制層方法@PostMapping(“/add”)@ApiOperation(“新增購物車信息”)// 判斷當(dāng)前用戶是否具有普通用戶權(quán)限ROLE_user// sso模塊登錄時(shí),會在用戶的權(quán)限列表中添加ROLE_user權(quán)限@PreAuthorize(“hasRole(‘ROLE_user’)”)// cartAddDTO參數(shù)是需要經(jīng)過SpringValidation框架驗(yàn)證的// @Validated就是激活框架驗(yàn)證功能,如果cartAddDTO不滿足驗(yàn)證要求,會自動運(yùn)行// 統(tǒng)一由異常處理類中的BingingException異常處理public JsonResult addCart(@Validated CartAddDTO cartAddDTO){omsCartService.addCart(cartAddDTO);return JsonResult.ok(“成功添加到購物車”);}}

                先注意sso模塊application-test.yml的地址和端口號(密碼有兩個(gè))

                也要注意order模塊application-test.yml的地址和端口號

                都保證正確的前提下

                啟動 leaf passport order

                sso:10002

                order:10005

                先訪問10002登錄獲得JWT 用戶名jackson密碼123456

                先登錄看到JWT 然后復(fù)制JWT

                轉(zhuǎn)到10005 order模塊 文檔管理->全局參數(shù)設(shè)置->添加參數(shù)

                參數(shù)名:Authorization

                參數(shù)值:Bearer [粘貼JWT]

                然后刷新當(dāng)前10005的界面

                然后進(jìn)行發(fā)送請求即可成功!

                javax.xml.bindjaxb-api2.3.0

                SpringSecurity驗(yàn)證規(guī)則

                SpringSecurity框架登錄后,一定會有一個(gè)權(quán)限列表

                在userDetails對象中

                我們登錄用戶的這個(gè)對象的值可能是

                {“authorities”:[“ROLE_user”],”id”:1,”userType”:”USER”,”username”:”jackson”}

                sso模塊前臺用戶登錄時(shí),會authorities屬性中添加ROLE_user權(quán)限

                而后臺管理用戶登錄時(shí)會向authorities屬性中添加下面屬性

                [“/pms/product/read”,”/pms/product/update”,”/pms/product/delete”]

                所以想要在控制器運(yùn)行前判斷權(quán)限時(shí)就可以使用下面的寫法

                @PreAuthorize(“hasAuthority(‘ROLE_user’)”)

                hasRole判斷是專用于判斷當(dāng)前用戶角色的指令

                hasRole會自動在我們判斷的內(nèi)容前添加ROLE_

                @PreAuthorize(“hasRole(‘ROLE_user’)”)

                開發(fā)查詢購物車功能

                開發(fā)持久層

                OmsCartMapper添加方法如下

                // 根據(jù)當(dāng)前用戶id查詢購物車列表List selectCartsByUserId(Long userId);

                OmsCartMapper.xml添加對應(yīng)內(nèi)容

                selectfromoms_cartwhereuser_id=#{id}

                開發(fā)業(yè)務(wù)邏輯層

                OmsCartServiceImpl業(yè)務(wù)實(shí)現(xiàn)

                返回值支持分頁結(jié)果,按分頁條件查詢

                // 根據(jù)用戶id分頁查詢當(dāng)前用戶的購物車列表@Overridepublic JsonPage listCarts(Integer page, Integer pageSize) {// 獲得用戶idLong userId=getUserId();// 執(zhí)行查詢前設(shè)置分頁條件PageHelper.startPage(page,pageSize);// 執(zhí)行分頁查詢List list=omsCartMapper.selectCartsByUserId(userId);// 實(shí)例化PageInfo對象獲得分頁信息后將它轉(zhuǎn)換為JsonPage返回return JsonPage.restPage(new PageInfo(list));}

                下面開發(fā)控制層,調(diào)用方法進(jìn)行測試

                OmsCartController添加方法如下

                // 分頁查詢當(dāng)前用戶購物車中的信息@GetMapping(“/list”)@ApiOperation(“分頁查詢當(dāng)前用戶購物車中的信息”)@ApiImplicitParams({@ApiImplicitParam(value = “頁碼”,name = “page”,dataType = “int”,example = “1”),@ApiImplicitParam(value = “每頁條數(shù)”,name = “pageSize”,dataType = “int”,example = “5”)}) @PreAuthorize(“hasRole(‘ROLE_user’)”)public JsonResult listCartByPage( // 當(dāng)控制器參數(shù)可能為空,當(dāng)空時(shí),我們要給它賦默認(rèn)值時(shí),可以用下面的格式 @RequestParam(required = false,defaultValue = WebConsts.DEFAULT_PAGE) Integer page, @RequestParam(required = false,defaultValue = WebConsts.DEFAULT_PAGE_SIZE)Integer pageSize){ // 控制層調(diào)用業(yè)務(wù)邏輯層代碼 JsonPage jsonPage=omsCartService.listCarts(page,pageSize); return JsonResult.ok(jsonPage);}

                啟動nacosseata

                啟動leafssoorder模塊

                測試http://localhost:10005/doc.html

                刪除清空購物車

                刪除購物車的持久層

                我們刪除購物車的功能支持同時(shí)刪除一個(gè)或多個(gè)購物車中的商品

                基本思路就是將一個(gè)要刪除的購物車商品的id數(shù)組傳入到Mapper中進(jìn)行刪除

                在OmsCartMapper接口中添加放方法

                // 根據(jù)購物車的id刪除商品(支持刪除多個(gè)商品)int deleteCartsByIds(Long[] ids);

                對應(yīng)的mapper.xml

                delete fromoms_cartwhereid in#{id}

                刪除購物車的業(yè)務(wù)邏輯層

                OmsCartServiceImpl添加方法

                // 按ids數(shù)組中的id值刪除cart表中信息@Overridepublic void removeCart(Long[] ids) {// 刪除是包含返回值的int rows=omsCartMapper.deleteCartsByIds(ids);if(rows==0){throw new CoolSharkServiceException(ResponseCode.NOT_FOUND,”購物車中沒有您要刪除的商品”);}}

                開發(fā)控制層代碼

                OmsCartController

                @PostMapping(“/delete”)@ApiOperation(“根據(jù)用戶選擇的購物車商品刪除(支持批量)”)@ApiImplicitParam(value = “刪除購物車的id”,name=”ids”,required = true,dataType = “array”)@PreAuthorize(“hasRole(‘ROLE_user’)”)public JsonResult removeCartsByIds(Long[] ids){omsCartService.removeCart(ids);return JsonResult.ok();}

                開發(fā)清空當(dāng)前登錄用戶購物車的功能

                delete fromoms_cartwhereuser_id=#{userId}@Overridepublic void removeAllCarts() {}

                清空購物車功能

                Mapper接口

                // 刪除當(dāng)前用戶購物車中所有內(nèi)容int deleteCartsByUserId(Long userId);

                mapper.xml

                delete fromoms_cartwhereuser_id=#{userId}

                OmsCartServiceImpl

                // 清空當(dāng)前登錄用戶購物車@Overridepublic void removeAllCarts() {Long userId=getUserId();int rows=omsCartMapper.deleteCartsByUserId(userId);if(rows==0){throw new CoolSharkServiceException(ResponseCode.NOT_FOUND,”您的購物車中沒有商品”);}}

                OmsCartController

                // 根據(jù)用戶id清空購物車@PostMapping(“/delete/all”)@ApiOperation(“根據(jù)用戶id清空購物車”)@PreAuthorize(“hasRole(‘ROLE_user’)”)public JsonResult removeCartsByUserId(){omsCartService.removeAllCarts();;return JsonResult.ok(“購物車已清空”);}

                修改購物車商品數(shù)量

                開發(fā)業(yè)務(wù)邏輯層

                因?yàn)榍懊嫖覀円呀?jīng)完成了修改購物車數(shù)量的持久層,所以不需要再編寫了,直接從業(yè)務(wù)層開始

                // 修改購物車商品數(shù)量的方法@Overridepublic void updateQuantity(CartUpdateDTO cartUpdateDTO) {// 持久層中已經(jīng)包含了修改數(shù)量的方法,但是參數(shù)是OmsCart// 將本方法的cartUpdateDTO參數(shù)值賦值給OmsCart再調(diào)用持久層方法即可OmsCart omsCart=new OmsCart();BeanUtils.copyProperties(cartUpdateDTO,omsCart);// 調(diào)用持久層實(shí)施修改omsCartMapper.updateQuantityById(omsCart);}

                控制層OmsCartController

                // 修改購物車數(shù)量@PostMapping(“/update/quantity”)@ApiOperation(“修改購物車數(shù)量”)@PreAuthorize(“hasRole(‘ROLE_user’)”)public JsonResult updateQuantity(@Validated CartUpdateDTO cartUpdateDTO){omsCartService.updateQuantity(cartUpdateDTO);return JsonResult.ok(“修改完成”);}

                重啟order測試清空和修改購物車數(shù)量的功能

                學(xué)習(xí)記錄,如有侵權(quán)請聯(lián)系刪除

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年7月18日 00:13
                下一篇 2022年7月18日 00:13

                相關(guān)推薦

                • ios手游模擬器(手游模擬器ios)

                  本文主要講的是ios手游模擬器,以及和手游模擬器ios相關(guān)的知識,如果覺得本文對您有所幫助,不要忘了將本文分享給朋友。 哪個(gè)iOS模擬器能多開手游賬號?可以推薦個(gè)好用的模擬器給我嗎…

                  2022年11月27日
                • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應(yīng)該怎么發(fā))

                  對于微商朋友來說,朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經(jīng)營一個(gè)朋友圈,有的微商看起來逼格滿滿,實(shí)際效果也不錯;而有的卻動都不動就被屏蔽甚至拉黑…

                  2022年11月27日
                • 短視頻策劃內(nèi)容的3個(gè)要點(diǎn)(短視頻策劃內(nèi)容怎么做)

                  短視頻在制作時(shí),內(nèi)容框架非常重要。如果直奔主題,然后結(jié)束,聚卓告訴你,這樣的短視頻已經(jīng)過時(shí)了?,F(xiàn)在的短視頻需要框架的,但不是任何框架,它需要一種易于理解和消化的框架。而且,現(xiàn)在大多…

                  2022年11月27日
                • 拍錯了拒收快遞運(yùn)費(fèi)誰出(淘寶退貨運(yùn)費(fèi)誰出)

                  很多人在逛淘寶店的時(shí)候覺得寶貝圖片看著不錯就買回來,結(jié)果收貨后發(fā)現(xiàn)可能不太合適就想退貨了。那么,淘寶退貨的快遞費(fèi)用應(yīng)該由誰來出呢?產(chǎn)生的快遞費(fèi)用應(yīng)該找誰來負(fù)責(zé)呢? 我們知道,根據(jù)《…

                  2022年11月27日
                • 美團(tuán)第三季度實(shí)現(xiàn)營收626億元,即時(shí)配送訂單量增至50億筆

                  新京報(bào)訊(記者秦勝南)11月25日,美團(tuán)發(fā)布業(yè)績公告顯示,第三季度營收為626億元,較去年同比增長28.2%,凈利潤為12.2億元。第三季度,美團(tuán)即時(shí)配送訂單數(shù)增長至50億筆。截至…

                  2022年11月27日
                • 存儲過程語法(sql server存儲過程語法)

                  今天小編給各位分享存儲過程語法的知識,其中也會對sql server存儲過程語法進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! oracle存儲過程基本語法…

                  2022年11月26日
                • 計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)論文(計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)論文七千字)

                  今天小編給各位分享計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)論文的知識,其中也會對計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)論文七千字進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! 計(jì)算機(jī)網(wǎng)絡(luò)方面的論文3000字…

                  2022年11月26日
                • 淘寶直播庫存哪里拿貨(淘寶哪里看庫存)

                  近年倆直播帶貨越來越火爆,抖音、淘寶、拼多多等平臺都有直播帶貨功能,其中淘寶直播時(shí)主流帶貨平臺,一些小伙伴也紛紛加入,但是作為新手不知道淘寶直播庫存哪里拿貨?下面小編為大家?guī)硖詫殹?/p>

                  2022年11月25日
                • 抖音帶貨傭金能拿多少(抖音帶貨傭金是真的嗎)

                  現(xiàn)在大家在涮抖音的時(shí)候都會看到一些商家和主播在上面直播帶貨,只要你粉絲夠多,就會有商家找你直播帶貨,一些小伙伴也想加入直播帶貨,那么抖音帶貨傭金能拿多少?下面小編為大家?guī)矶兑魩ж洝?/p>

                  2022年11月25日
                • 個(gè)人怎么做抖音帶貨(個(gè)人做抖音帶貨能賺錢嗎)

                  抖音如今是大家很熟悉的短視頻平臺,不過現(xiàn)在的抖音卻不只是短視頻那么簡單,它的功能非常豐富,其中一個(gè)就是可以帶貨,相信很多小伙伴都有在抖音上買過東西,抖音如今的變現(xiàn)能力也是不容小覷的…

                  2022年11月25日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息