在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    Demo購物車

    新增sku到購物車

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

    有點擊”添加到購物車”的按鈕

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

    打開mall-order-webapi模塊

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

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

    開發(fā)持久

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

  • 判斷當(dāng)前登錄用戶購物車中是否包含指定skuid商品的方法
  • 新增sku到購物車表中
  • 修改購物車指定sku數(shù)量的方法
  • 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類實現(xiàn)IOmsCartService接口

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

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

    要單獨編寫一個方法獲取用戶信息,

    @Servicepublic class OmsCartServiceImpl implements IOmsCartService {@Autowiredprivate OmsCartMapper omsCartMapper;@Overridepublic void addCart(CartAddDTO cartDTO) {// 獲取當(dāng)前登錄用戶的userIdLong userId=getUserId();// 查詢這個userId的用戶是否已經(jīng)將指定的sku添加到購物車OmsCart omsCart=omsCartMapper.selectExistsCart(userId,cartDTO.getSkuId());// 判斷查詢結(jié)果是否為nullif(omsCart!=null){// 不等于null,表示當(dāng)前用戶這個sku已經(jīng)添加在購物車列表中// 我們需要做的就是修改它的數(shù)量,根據(jù)cartDTO對象的quantity屬性值添加omsCart.setQuantity(omsCart.getQuantity()+cartDTO.getQuantity());// 調(diào)用持久層方法修改數(shù)量omsCartMapper.updateQuantityById(omsCart);}else{// 如果omsCart是null 會運行else代碼塊// 去完成購物車對象的新增,先實例化OmsCart對象OmsCart newOmsCart=new OmsCart();// 將參數(shù)cartDTO的同名屬性賦值給newOmsCartBeanUtils.copyProperties(cartDTO,newOmsCart);// cartDTO對象中沒有userId屬性,需要單獨賦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ù)邏輯層獲得用戶信息的方法,因為多個方法需要獲得用戶信息,所以單獨編寫一個方法// 這個方法的實現(xiàn)是SpringSecurity提供的登錄用戶的容器// 方法的目標(biāo)是獲得SpringSecurity用戶容器,從容器中獲得用戶信息public CsmallAuthenticationInfo getUserInfo(){// 獲得SpringSecurity容器對象UsernamePasswordAuthenticationToken authenticationToken=(UsernamePasswordAuthenticationToken)SecurityContextHolder.getContext().getAuthentication();// 判斷獲取的容器信息是否為空if(authenticationToken!=null){// 如果容器中有內(nèi)容,證明當(dāng)前容器中有登錄用戶信息// 我們獲取這個用戶信息并返回CsmallAuthenticationInfo csmallAuthenticationInfo=(CsmallAuthenticationInfo)authenticationToken.getCredentials();return csmallAuthenticationInfo;}throw new CoolSharkServiceException(ResponseCode.UNAUTHORIZED,”沒有登錄信息”);}// 業(yè)務(wù)邏輯層中大多數(shù)方法都是獲得用戶id,所以編寫一個返回用戶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模塊登錄時,會在用戶的權(quán)限列表中添加ROLE_user權(quán)限@PreAuthorize(“hasRole(‘ROLE_user’)”)// cartAddDTO參數(shù)是需要經(jīng)過SpringValidation框架驗證的// @Validated就是激活框架驗證功能,如果cartAddDTO不滿足驗證要求,會自動運行// 統(tǒng)一由異常處理類中的BingingException異常處理public JsonResult addCart(@Validated CartAddDTO cartAddDTO){omsCartService.addCart(cartAddDTO);return JsonResult.ok(“成功添加到購物車”);}}

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

    也要注意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驗證規(guī)則

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

    在userDetails對象中

    我們登錄用戶的這個對象的值可能是

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

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

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

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

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

    @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ù)實現(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);// 實例化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)空時,我們要給它賦默認(rèn)值時,可以用下面的格式 @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

    刪除清空購物車

    刪除購物車的持久層

    我們刪除購物車的功能支持同時刪除一個或多個購物車中的商品

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

    在OmsCartMapper接口中添加放方法

    // 根據(jù)購物車的id刪除商品(支持刪除多個商品)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ù)邏輯層

    因為前面我們已經(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)用持久層實施修改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)推薦

    聯(lián)系我們

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