国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于SpringBoot+Redis的前后端分離外賣項(xiàng)目-蒼穹外賣微信小程序端(十二)

這篇具有很好參考價(jià)值的文章主要介紹了基于SpringBoot+Redis的前后端分離外賣項(xiàng)目-蒼穹外賣微信小程序端(十二)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.添加購(gòu)物車

1.1 需求分析和設(shè)計(jì)

1.1.1 產(chǎn)品原型

用戶可以將菜品或者套餐添加到購(gòu)物車。對(duì)于菜品來說,如果設(shè)置了口味信息,則需要選擇規(guī)格后才能加入購(gòu)物車;對(duì)于套餐來說,可以直接點(diǎn)擊+將當(dāng)前套餐加入購(gòu)物車。在購(gòu)物車中可以修改菜品和套餐的數(shù)量,也可以清空購(gòu)物車。

效果圖:

基于SpringBoot+Redis的前后端分離外賣項(xiàng)目-蒼穹外賣微信小程序端(十二),蒼穹外賣項(xiàng)目,spring boot,redis,微信小程序,后端,mybatis,spring,java

1.1.2 接口設(shè)計(jì)

通過上述原型圖,設(shè)計(jì)出對(duì)應(yīng)的添加購(gòu)物車接口。
基于SpringBoot+Redis的前后端分離外賣項(xiàng)目-蒼穹外賣微信小程序端(十二),蒼穹外賣項(xiàng)目,spring boot,redis,微信小程序,后端,mybatis,spring,java

說明:添加購(gòu)物車時(shí),有可能添加菜品,也有可能添加套餐。故傳入?yún)?shù)要么是菜品id,要么是套餐id。

1.1.3 表設(shè)計(jì)

用戶的購(gòu)物車數(shù)據(jù),也是需要保存在數(shù)據(jù)庫(kù)中的,購(gòu)物車對(duì)應(yīng)的數(shù)據(jù)表為shopping_cart表,具體表結(jié)構(gòu)如下:

字段名 數(shù)據(jù)類型 說明 備注
id bigint 主鍵 自增
name varchar(32) 商品名稱 冗余字段
image varchar(255) 商品圖片路徑 冗余字段
user_id bigint 用戶id 邏輯外鍵
dish_id bigint 菜品id 邏輯外鍵
setmeal_id bigint 套餐id 邏輯外鍵
dish_flavor varchar(50) 菜品口味
number int 商品數(shù)量
amount decimal(10,2) 商品單價(jià) 冗余字段
create_time datetime 創(chuàng)建時(shí)間

說明:

  • 購(gòu)物車數(shù)據(jù)是關(guān)聯(lián)用戶的,在表結(jié)構(gòu)中,我們需要記錄,每一個(gè)用戶的購(gòu)物車數(shù)據(jù)是哪些
  • 菜品列表展示出來的既有套餐,又有菜品,如果用戶選擇的是套餐,就保存套餐ID(setmeal_id),如果用戶選擇的是菜品,就保存菜品ID(dish_id)
  • 對(duì)同一個(gè)菜品/套餐,如果選擇多份不需要添加多條記錄,增加數(shù)量number即可

1.2 代碼開發(fā)

1.2.1 DTO設(shè)計(jì)

根據(jù)添加購(gòu)物車接口的參數(shù)設(shè)計(jì)DTO:

基于SpringBoot+Redis的前后端分離外賣項(xiàng)目-蒼穹外賣微信小程序端(十二),蒼穹外賣項(xiàng)目,spring boot,redis,微信小程序,后端,mybatis,spring,java

在sky-pojo模塊,ShoppingCartDTO.java已定義

package com.sky.dto;

import lombok.Data;
import java.io.Serializable;

@Data
public class ShoppingCartDTO implements Serializable {

    private Long dishId;
    private Long setmealId;
    private String dishFlavor;

}

1.2.2 Controller層

根據(jù)添加購(gòu)物車接口創(chuàng)建ShoppingCartController:

package com.sky.controller.user;


/**
 * 購(gòu)物車
 */
@RestController
@RequestMapping("/user/shoppingCart")
@Slf4j
@Api(tags = "C端-購(gòu)物車接口")
public class ShoppingCartController {

    @Autowired
    private ShoppingCartService shoppingCartService;

    /**
     * 添加購(gòu)物車
     * @param shoppingCartDTO
     * @return
     */
    @PostMapping("/add")
    @ApiOperation("添加購(gòu)物車")
    public Result<String> add(@RequestBody ShoppingCartDTO shoppingCartDTO){
        log.info("添加購(gòu)物車:{}", shoppingCartDTO);
        shoppingCartService.addShoppingCart(shoppingCartDTO);//后緒步驟實(shí)現(xiàn)
        return Result.success();
    }
}

1.2.3 Service層接口

創(chuàng)建ShoppingCartService接口:

package com.sky.service;

public interface ShoppingCartService {

    /**
     * 添加購(gòu)物車
     * @param shoppingCartDTO
     */
    void addShoppingCart(ShoppingCartDTO shoppingCartDTO);
}

1.2.4 Service層實(shí)現(xiàn)類

創(chuàng)建ShoppingCartServiceImpl實(shí)現(xiàn)類,并實(shí)現(xiàn)add方法:

package com.sky.service.impl;

@Service
public class ShoppingCartServiceImpl implements ShoppingCartService {

    @Autowired
    private ShoppingCartMapper shoppingCartMapper;
    @Autowired
    private DishMapper dishMapper;
    @Autowired
    private SetmealMapper setmealMapper;
    
    /**
     * 添加購(gòu)物車
     *
     * @param shoppingCartDTO
     */
    public void addShoppingCart(ShoppingCartDTO shoppingCartDTO) {
        ShoppingCart shoppingCart = new ShoppingCart();
        BeanUtils.copyProperties(shoppingCartDTO, shoppingCart);
        //只能查詢自己的購(gòu)物車數(shù)據(jù)
        shoppingCart.setUserId(BaseContext.getCurrentId());

        //判斷當(dāng)前商品是否在購(gòu)物車中
        List<ShoppingCart> shoppingCartList = shoppingCartMapper.list(shoppingCart);

        if (shoppingCartList != null && shoppingCartList.size() == 1) {
            //如果已經(jīng)存在,就更新數(shù)量,數(shù)量加1
            shoppingCart = shoppingCartList.get(0);
            shoppingCart.setNumber(shoppingCart.getNumber() + 1);
            shoppingCartMapper.updateNumberById(shoppingCart);
        } else {
            //如果不存在,插入數(shù)據(jù),數(shù)量就是1

            //判斷當(dāng)前添加到購(gòu)物車的是菜品還是套餐
            Long dishId = shoppingCartDTO.getDishId();
            if (dishId != null) {
                //添加到購(gòu)物車的是菜品
                Dish dish = dishMapper.getById(dishId);
                shoppingCart.setName(dish.getName());
                shoppingCart.setImage(dish.getImage());
                shoppingCart.setAmount(dish.getPrice());
            } else {
                //添加到購(gòu)物車的是套餐
                Setmeal setmeal = setmealMapper.getById(shoppingCartDTO.getSetmealId());
                shoppingCart.setName(setmeal.getName());
                shoppingCart.setImage(setmeal.getImage());
                shoppingCart.setAmount(setmeal.getPrice());
            }
            shoppingCart.setNumber(1);
            shoppingCart.setCreateTime(LocalDateTime.now());
            shoppingCartMapper.insert(shoppingCart);
        }
    }
}

1.2.5 Mapper層

創(chuàng)建ShoppingCartMapper接口:

package com.sky.mapper;

@Mapper
public interface ShoppingCartMapper {
    /**
     * 條件查詢
     *
     * @param shoppingCart
     * @return
     */
    List<ShoppingCart> list(ShoppingCart shoppingCart);

    /**
     * 更新商品數(shù)量
     *
     * @param shoppingCart
     */
    @Update("update shopping_cart set number = #{number} where id = #{id}")
    void updateNumberById(ShoppingCart shoppingCart);

    /**
     * 插入購(gòu)物車數(shù)據(jù)
     *
     * @param shoppingCart
     */
    @Insert("insert into shopping_cart (name, user_id, dish_id, setmeal_id, dish_flavor, number, amount, image, create_time) " +
            " values (#{name},#{userId},#{dishId},#{setmealId},#{dishFlavor},#{number},#{amount},#{image},#{createTime})")
    void insert(ShoppingCart shoppingCart);

}

創(chuàng)建ShoppingCartMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.mapper.ShoppingCartMapper">
    <select id="list" parameterType="ShoppingCart" resultType="ShoppingCart">
        select * from shopping_cart
        <where>
            <if test="userId != null">
                and user_id = #{userId}
            </if>
            <if test="dishId != null">
                and dish_id = #{dishId}
            </if>
            <if test="setmealId != null">
                and setmeal_id = #{setmealId}
            </if>
            <if test="dishFlavor != null">
                and dish_flavor = #{dishFlavor}
            </if>
        </where>
        order by create_time desc
    </select>
</mapper>

2. 查看購(gòu)物車

2.1 需求分析和設(shè)計(jì)

2.1.1 產(chǎn)品原型

當(dāng)用戶添加完菜品和套餐后,可進(jìn)入到購(gòu)物車中,查看購(gòu)物中的菜品和套餐。

2.1.2 接口設(shè)計(jì)

基于SpringBoot+Redis的前后端分離外賣項(xiàng)目-蒼穹外賣微信小程序端(十二),蒼穹外賣項(xiàng)目,spring boot,redis,微信小程序,后端,mybatis,spring,java

2.2 代碼開發(fā)

2.2.1 Controller層

在ShoppingCartController中創(chuàng)建查看購(gòu)物車的方法:

	/**
     * 查看購(gòu)物車
     * @return
     */
    @GetMapping("/list")
    @ApiOperation("查看購(gòu)物車")
    public Result<List<ShoppingCart>> list(){
        return Result.success(shoppingCartService.showShoppingCart());
    }

2.2.2 Service層接口

在ShoppingCartService接口中聲明查看購(gòu)物車的方法:

	/**
     * 查看購(gòu)物車
     * @return
     */
    List<ShoppingCart> showShoppingCart();

2.2.3 Service層實(shí)現(xiàn)類

在ShoppingCartServiceImpl中實(shí)現(xiàn)查看購(gòu)物車的方法:

	/**
     * 查看購(gòu)物車
     * @return
     */
    public List<ShoppingCart> showShoppingCart() {
        return shoppingCartMapper.list(ShoppingCart.
                                       builder().
                                       userId(BaseContext.getCurrentId()).
                                       build());
    }

2.3 功能測(cè)試

基于SpringBoot+Redis的前后端分離外賣項(xiàng)目-蒼穹外賣微信小程序端(十二),蒼穹外賣項(xiàng)目,spring boot,redis,微信小程序,后端,mybatis,spring,java

3. 清空購(gòu)物車

3.1 需求分析和設(shè)計(jì)

3.1.1 產(chǎn)品原型

當(dāng)點(diǎn)擊清空按鈕時(shí),會(huì)把購(gòu)物車中的數(shù)據(jù)全部清空。
基于SpringBoot+Redis的前后端分離外賣項(xiàng)目-蒼穹外賣微信小程序端(十二),蒼穹外賣項(xiàng)目,spring boot,redis,微信小程序,后端,mybatis,spring,java

3.1.2 接口設(shè)計(jì)

基于SpringBoot+Redis的前后端分離外賣項(xiàng)目-蒼穹外賣微信小程序端(十二),蒼穹外賣項(xiàng)目,spring boot,redis,微信小程序,后端,mybatis,spring,java

3.2 代碼開發(fā)

3.2.1 Controller層

在ShoppingCartController中創(chuàng)建清空購(gòu)物車的方法:

	/**
     * 清空購(gòu)物車商品
     * @return
     */
    @DeleteMapping("/clean")
    @ApiOperation("清空購(gòu)物車商品")
    public Result<String> clean(){
        shoppingCartService.cleanShoppingCart();
        return Result.success();
    }

3.2.2 Service層接口

在ShoppingCartService接口中聲明清空購(gòu)物車的方法:

	/**
     * 清空購(gòu)物車商品
     */
    void cleanShoppingCart();

3.2.3 Service層實(shí)現(xiàn)類

在ShoppingCartServiceImpl中實(shí)現(xiàn)清空購(gòu)物車的方法:

	/**
     * 清空購(gòu)物車商品
     */
    public void cleanShoppingCart() {
        shoppingCartMapper.deleteByUserId(BaseContext.getCurrentId());
    }

3.2.4 Mapper層

在ShoppingCartMapper接口中創(chuàng)建刪除購(gòu)物車數(shù)據(jù)的方法:

	/**
     * 根據(jù)用戶id刪除購(gòu)物車數(shù)據(jù)
     *
     * @param userId
     */
    @Delete("delete from shopping_cart where user_id = #{userId}")
    void deleteByUserId(Long userId);

后記
????????美好的一天,到此結(jié)束,下次繼續(xù)努力!欲知后續(xù),請(qǐng)看下回分解,寫作不易,感謝大家的支持?。???????
文章來源地址http://www.zghlxwxcb.cn/news/detail-799437.html

到了這里,關(guān)于基于SpringBoot+Redis的前后端分離外賣項(xiàng)目-蒼穹外賣微信小程序端(十二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于SpringBoot+Redis的前后端分離外賣項(xiàng)目-蒼穹外賣集成Redis(九)

    基于SpringBoot+Redis的前后端分離外賣項(xiàng)目-蒼穹外賣集成Redis(九)

    1.1 Redis的Java客戶端 Redis 的 Java 客戶端很多,常用的幾種: Jedis Lettuce Spring Data Redis Spring 對(duì) Redis 客戶端進(jìn)行了整合,提供了 Spring Data Redis,在Spring Boot項(xiàng)目中還提供了對(duì)應(yīng)的Starter,即 spring-boot-starter-data-redis。 1.2 Spring Data Redis使用方式 1.2.1 介紹 Spring Data Redis 是 Spring 的一部分

    2024年02月05日
    瀏覽(31)
  • 基于SpringBoot+WebSocket+Spring Task的前后端分離外賣項(xiàng)目-訂單管理(十七)

    基于SpringBoot+WebSocket+Spring Task的前后端分離外賣項(xiàng)目-訂單管理(十七)

    1.1 介紹 Spring Task 是Spring框架提供的任務(wù)調(diào)度工具,可以按照約定的時(shí)間自動(dòng)執(zhí)行某個(gè)代碼邏輯。 定位 :定時(shí)任務(wù)框架 作用 :定時(shí)自動(dòng)執(zhí)行某段Java代碼 應(yīng)用場(chǎng)景: 1). 信用卡每月還款提醒 2). 銀行貸款每月還款提醒 3). 火車票售票系統(tǒng)處理未支付訂單 4). 入職紀(jì)念日為用戶發(fā)

    2024年02月21日
    瀏覽(23)
  • 基于springboot+Redis的前后端分離項(xiàng)目(一)-【黑馬點(diǎn)評(píng)】

    基于springboot+Redis的前后端分離項(xiàng)目(一)-【黑馬點(diǎn)評(píng)】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 黑馬點(diǎn)評(píng)項(xiàng)目是前后端分離項(xiàng)目,前端部署在nginx服務(wù)器上,后端部署在tomcat上,具體將實(shí)現(xiàn)以下功能。 短信登錄 這一塊我們會(huì)使用redis共享session來實(shí)現(xiàn)。 商戶查詢緩存 通過學(xué)習(xí),我們會(huì)理

    2024年02月08日
    瀏覽(29)
  • 基于springboot+Redis的前后端分離項(xiàng)目(八)-【黑馬點(diǎn)評(píng)】

    基于springboot+Redis的前后端分離項(xiàng)目(八)-【黑馬點(diǎn)評(píng)】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 針對(duì)用戶的操作:可以對(duì)用戶進(jìn)行關(guān)注和取消關(guān)注功能。 實(shí)現(xiàn)思路: 需求:基于該表數(shù)據(jù)結(jié)構(gòu),實(shí)現(xiàn)兩個(gè)接口: 關(guān)注和取關(guān)接口 判斷是否關(guān)注的接口 關(guān)注是User之間的關(guān)系,是博主與粉絲的

    2024年02月16日
    瀏覽(27)
  • 基于springboot+Redis的前后端分離項(xiàng)目(二)-【黑馬點(diǎn)評(píng)】

    基于springboot+Redis的前后端分離項(xiàng)目(二)-【黑馬點(diǎn)評(píng)】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 緩存( Cache),就是數(shù)據(jù)交換的 緩沖區(qū) ,俗稱的緩存就是 緩沖區(qū)內(nèi)的數(shù)據(jù) ,一般從數(shù)據(jù)庫(kù)中獲取,存儲(chǔ)于本地代碼。(例如: 由于其被 Static 修飾,所以隨著類的加載而被加載到 內(nèi)存之中 ,作為本地緩存

    2024年02月10日
    瀏覽(26)
  • 基于springboot+Redis的前后端分離項(xiàng)目(九)-【黑馬點(diǎn)評(píng)】

    基于springboot+Redis的前后端分離項(xiàng)目(九)-【黑馬點(diǎn)評(píng)】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 GEO就是Geolocation的簡(jiǎn)寫形式,代表地理坐標(biāo)。Redis在3.2版本中加入了對(duì)GEO的支持,允許存儲(chǔ)地理坐標(biāo)信息,幫助我們根據(jù)經(jīng)緯度來檢索數(shù)據(jù)。常見的命令有: GEOADD:添加一個(gè)地理空間信息,包含

    2024年02月16日
    瀏覽(28)
  • 基于springboot+Redis的前后端分離項(xiàng)目(三)-【黑馬點(diǎn)評(píng)】

    基于springboot+Redis的前后端分離項(xiàng)目(三)-【黑馬點(diǎn)評(píng)】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 每個(gè)店鋪都可以發(fā)布優(yōu)惠券: 當(dāng)用戶搶購(gòu)時(shí),就會(huì)生成訂單并保存到tb_voucher_order這張表中,而訂單表如果使用數(shù)據(jù)庫(kù)自增ID就存在一些問題: id的規(guī)律性太明顯 受單表數(shù)據(jù)量的限制 場(chǎng)景分析

    2024年02月10日
    瀏覽(22)
  • 基于springboot+Redis的前后端分離項(xiàng)目(七)-【黑馬點(diǎn)評(píng)】

    基于springboot+Redis的前后端分離項(xiàng)目(七)-【黑馬點(diǎn)評(píng)】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 發(fā)布探店筆記 探店筆記類似點(diǎn)評(píng)網(wǎng)站的評(píng)價(jià),往往是圖文結(jié)合。對(duì)應(yīng)的表有兩個(gè): tb_blog:探店筆記表,包含筆記中的標(biāo)題、文字、圖片等 tb_blog_comments:其他用戶對(duì)探店筆記的評(píng)價(jià) 具體發(fā)布

    2024年02月13日
    瀏覽(39)
  • 基于springboot+Redis的前后端分離項(xiàng)目之消息隊(duì)列(六)-【黑馬點(diǎn)評(píng)】

    基于springboot+Redis的前后端分離項(xiàng)目之消息隊(duì)列(六)-【黑馬點(diǎn)評(píng)】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 我們來回顧一下下單流程 當(dāng)用戶發(fā)起請(qǐng)求,此時(shí)會(huì)請(qǐng)求nginx,nginx會(huì)訪問到tomcat,而tomcat中的程序,會(huì)進(jìn)行串行操作,分成如下幾個(gè)步驟 1、查詢優(yōu)惠卷 2、判斷秒殺庫(kù)存是否足夠 3、查詢訂單

    2024年02月12日
    瀏覽(23)
  • 基于springboot+Redis的前后端分離項(xiàng)目之分布式鎖(四)-【黑馬點(diǎn)評(píng)】

    基于springboot+Redis的前后端分離項(xiàng)目之分布式鎖(四)-【黑馬點(diǎn)評(píng)】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 分布式鎖:滿足分布式系統(tǒng)或集群模式下多進(jìn)程可見并且互斥的鎖。 分布式鎖的核心思想就是讓大家都使用同一把鎖,只要大家使用的是同一把鎖,那么我們就能鎖住線程,不讓線程進(jìn)行,讓

    2024年02月11日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包