查看購物車

一.查看購物車

查看購物車使用get請求。我們要查看當前用戶的購物車,就要獲取當前用戶的userId字段進行條件查詢。因為在用戶登錄時就已經將userId封裝在token中了,因此我們只需要解析token獲取userId即可,不需要前端再傳入參數了。

Controller層

package com.sky.controller.user;import com.sky.context.BaseContext;
import com.sky.dto.ShoppingCartDTO;
import com.sky.entity.ShoppingCart;
import com.sky.result.Result;
import com.sky.service.ShoppingCartService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/user/shoppingCart")
@Slf4j
@Api(tags = "購物車相關接口")
public class ShoppingCartController {@Autowiredprivate ShoppingCartService shoppingCartService;/*** 添加購物車* @param shoppingCartDTO* @return*/@ApiOperation("添加購物車")@PostMapping("/add")public Result add(@RequestBody ShoppingCartDTO shoppingCartDTO) {log.info("向購物車中添加菜品或套餐:{}",shoppingCartDTO);shoppingCartService.add(shoppingCartDTO);return Result.success();}/*** 查看購物車* @return*/@GetMapping("/list")@ApiOperation("查看購物車")public Result<List<ShoppingCart>> list() {log.info("查看購物車:{}", BaseContext.getCurrentId());List<ShoppingCart> list = shoppingCartService.showShoppingCart();return Result.success(list);}
}

返回一個含有當前用戶所有購物車信息的列表,列表的元素為購物車對象ShoppingCart。

Service層

接口

package com.sky.service;import com.sky.dto.ShoppingCartDTO;
import com.sky.entity.ShoppingCart;
import org.springframework.stereotype.Service;import java.util.List;@Service
public interface ShoppingCartService {/*** 添加購物車* @param shoppingCartDTO*/void add(ShoppingCartDTO shoppingCartDTO);/*** 查查看購物車* @return*/List<ShoppingCart> showShoppingCart();
}

實現類

package com.sky.service.impl;import com.sky.context.BaseContext;
import com.sky.dto.ShoppingCartDTO;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.entity.ShoppingCart;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.mapper.ShoppingCartMapper;
import com.sky.service.ShoppingCartService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.time.LocalDateTime;
import java.util.List;@Service
public class ShoppingCartServiceImpl implements ShoppingCartService {@Autowiredprivate ShoppingCartMapper shoppingCartMapper;@Autowiredprivate DishMapper dishMapper;@Autowiredprivate SetmealMapper setmealMapper;/*** 添加購物車* @param shoppingCartDTO*/@Overridepublic void add(ShoppingCartDTO shoppingCartDTO) {// 首先判斷這次添加購物車的操作加入的菜品或套餐是否已經存在,如果存在就把份數+1,如果不存在就新增ShoppingCart shoppingCart = new ShoppingCart();BeanUtils.copyProperties(shoppingCartDTO,shoppingCart);Long userId = BaseContext.getCurrentId();shoppingCart.setUserId(userId);// 1.首先查詢該菜品或套餐在數據庫中是否存在List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);    // 每次添加的要么是菜品,要么是套餐。且如果重復添加只會增加份數而不會新增一條數據,因此每次查詢要么為空,要么查詢出1條數據if (list != null && list.size() > 0) {      // 已存在,數量+1ShoppingCart cart = list.get(0);    // 將已存在的購物車對象取出cart.setNumber(cart.getNumber() + 1);   // 并將其菜品/套餐數量+1shoppingCartMapper.updateNumberById(cart);      // 通過id更新} else {// 2.不存在,先判斷是套餐還是菜品,因為套餐和菜品在購物車中所需要的屬性是不一樣的Long dishId = shoppingCartDTO.getDishId();if (dishId != null) {// 3.如果是菜品,那么從菜品數據庫中查找并將對應屬性賦值給購物車對象Dish dish = dishMapper.getById(dishId);shoppingCart.setName(dish.getName());shoppingCart.setImage(dish.getImage());shoppingCart.setAmount(dish.getPrice());} else {// 4.如果是套餐,那么從套餐數據庫中查找并將對應屬性賦值給購物車對象Long setmealId = shoppingCartDTO.getSetmealId();Setmeal setmeal = setmealMapper.getById(setmealId);shoppingCart.setName(setmeal.getName());shoppingCart.setImage(setmeal.getImage());shoppingCart.setAmount(setmeal.getPrice());}// 5.將新增的菜品/套餐加入數據庫中shoppingCart.setNumber(1);shoppingCart.setCreateTime(LocalDateTime.now());shoppingCartMapper.insert(shoppingCart);}}/*** 查看購物車* @return*/@Overridepublic List<ShoppingCart> showShoppingCart() {Long userId = BaseContext.getCurrentId();ShoppingCart shoppingCart = ShoppingCart.builder().userId(userId).build();List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);return list;}
}

我們要根據userId來篩選要查看哪個用戶的購物車,因此要通過token令牌獲得userId,然后構建shoppingCart對象并將該屬性賦值,最后通過數據庫進行查找符合該用戶的購物車列表。

Mapper層

接口

package com.sky.mapper;import com.sky.dto.ShoppingCartDTO;
import com.sky.entity.ShoppingCart;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Update;import java.util.List;@Mapper
public interface ShoppingCartMapper {/*** 查詢菜品/套餐是否存在* @param shoppingCart* @return*/List<ShoppingCart> list(ShoppingCart shoppingCart);/*** 更新購物車中套餐/菜品份數* @param shoppingCart*/@Update("update shopping_cart set number = #{number} where id = #{id}")void updateNumberById(ShoppingCart shoppingCart);/*** 向購物車中加入菜品/套餐* @param shoppingCart*/@Insert("insert into shopping_cart(name, image, user_id, dish_id, setmeal_id, dish_flavor, number, amount, create_time) " +"VALUES (#{name}, #{image}, #{userId}, #{dishId}, #{setmealId}, #{dishFlavor}, #{number}, #{amount},#{createTime})")void insert(ShoppingCart shoppingCart);
}

XML映射文件

只有userId,根據userId查詢即可。

<?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" resultType="com.sky.entity.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></select>
</mapper>

成功?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80746.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80746.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80746.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C/C++ 內存管理深度解析:從內存分布到實踐應用(malloc和new,free和delete的對比與使用,定位 new )

一、引言&#xff1a;理解內存管理的核心價值 在系統級編程領域&#xff0c;內存管理是決定程序性能、穩定性和安全性的關鍵因素。C/C 作為底層開發的主流語言&#xff0c;賦予開發者直接操作內存的能力&#xff0c;卻也要求開發者深入理解內存布局與生命周期管理。本文將從內…

使用Stable Diffusion(SD)中CFG參數指的是什么?該怎么用!

1.定義&#xff1a; CFG參數控制模型在生成圖像時&#xff0c;對提示詞&#xff08;Prompt&#xff09;的“服從程度”。 它衡量模型在“完全根據提示詞生成圖像”和“自由生成圖像”&#xff08;不參考提示詞&#xff09;之間的權衡程度。 數值范圍&#xff1a;常見范圍是 1 …

【GESP】C++三級練習 luogu-B2156 最長單詞 2

GESP三級練習&#xff0c;字符串練習&#xff08;C三級大綱中6號知識點&#xff0c;字符串&#xff09;&#xff0c;難度★★☆☆☆。 題目題解詳見&#xff1a;https://www.coderli.com/gesp-3-luogu-b2156/ 【GESP】C三級練習 luogu-B2156 最長單詞 2 | OneCoderGESP三級練…

Linux網絡基礎 -- 局域網,廣域網,網絡協議,網絡傳輸的基本流程,端口號,網絡字節序

目錄 1. 計算機網絡背景 1.1 局域網 1.1.2 局域網的組成 1.2 廣域網 1.1.2 廣域網的組成 2. 初始網絡協議 2.1 網絡協議的定義和作用 2.2 網絡協議的分層結構 2.2.1 OSI七層模型 2.2.2 TCP/IP 五層&#xff08;四層&#xff09;模型 3. 再識網絡協議 3.1 為什么要有…

【PostgreSQL】超簡單的主從節點部署

1. 啟動數據庫 啟動主節點 docker run --name postgres-master -e POSTGRES_PASSWORDmysecretpassword -p 5432:5432 -d postgres啟動從節點 docker run --name postgres-slave -e POSTGRES_PASSWORDmysecretpassword -p 5432:5432 -d postgres需要配置掛載的存儲卷 2. 數據…

c#修改ComboBox當前選中項的文本

對于一個C#的Combobox列表&#xff0c;類型設置為下拉樣式&#xff0c;不允許輸入&#xff0c;只能選擇&#xff0c;樣子如下&#xff1a; 該控件的名字為 cbb1&#xff0c;如果要修改當前這個“A1區”的文件&#xff0c;則用如下方式&#xff1a; cbb1.Items[cbb1.SelectedInd…

Java設計模式之適配器模式:從入門到精通

適配器模式(Adapter Pattern)是Java中最常用的結構型設計模式之一,它像一座橋梁連接兩個不兼容的接口,使得原本由于接口不兼容而不能一起工作的類可以協同工作。本文將全面深入地解析適配器模式,從基礎概念到高級應用,包含豐富的代碼示例、詳細注釋、使用場景分析以及多維對…

中國黃土高原中部XF剖面磁化率和粒度數據

時間分辨率&#xff1a;1000年 < x空間分辨率為&#xff1a;空共享方式&#xff1a;申請獲取數據大小&#xff1b;35.75 KB數據時間范圍&#xff1a;743-0 ka元數據更新時間&#xff1a;2023-08-15 數據集摘要 該數據集包括中國黃土高原中部XF剖面磁化率和粒度數據。將所有…

【Python訓練營打卡】day23 @浙大疏錦行

test pipeline管道 知識回顧: 1. 轉化器和估計器的概念 2. 管道工程 3. ColumnTransformer和Pipeline類 作業&#xff1a; 整理下全部邏輯的先后順序&#xff0c;看看能不能制作出適合所有機器學習的通用pipeline 偽代碼 # 適合所有機器學習的通用pipeline #偽代碼 import p…

【android bluetooth 框架分析 02】【Module詳解 13】【CounterMetrics 模塊介紹】

1. CounterMetrics 介紹 CounterMetrics 模塊代碼很少&#xff0c; 我簡單介紹一下。 // system/gd/metrics/counter_metrics.cc #define LOG_TAG "BluetoothCounterMetrics"#include "metrics/counter_metrics.h"#include "common/bind.h" #i…

QMK鍵盤固件配置詳解

QMK鍵盤固件配置詳解 前言 大家好&#xff01;今天給大家帶來QMK鍵盤固件配置的詳細指南。如果你正在DIY機械鍵盤或者想要給自己的鍵盤刷固件&#xff0c;這篇文章絕對不容錯過。QMK是目前最流行的開源鍵盤固件框架之一&#xff0c;它允許我們對鍵盤進行高度自定義。接下來&a…

基于STM32、HAL庫的DPS368XTSA1氣壓傳感器 驅動程序設計

一、簡介: DPS368XTSA1 是 InvenSense(TDK 集團旗下公司)生產的一款高精度數字氣壓傳感器,專為需要精確測量氣壓和溫度的應用場景設計。它具有超低功耗、高精度、快速響應等特點,非常適合物聯網、可穿戴設備和無人機等應用。 二、硬件接口: DPS368XTSA1 引腳STM32L4XX 引…

因子分析——數學原理及R語言代碼

正交因子分析 目的數學原理參數估計方法主成分法主因子法極大似然法 因子旋轉模型檢驗因子得分加權最小二乘法回歸法 代碼實現注意事項例子 Reference 目的 FactorAnalysis的目的是從多個高度相關的觀測變量中提取出少數幾個LatentFactor&#xff0c;這些因子代表了變量背后的…

ACL訪問控制列表:access-list 10 permit 192.168.10.1

ACL訪問控制列表 標準ACL語法 1. 創建ACL access-list <編號> <動作> <源IP> <通配符掩碼> // 編號范圍 1-99 // 動作&#xff1a;permit 允許 、 deny 拒絕2. 示例 //允許192.168.1.0/24g整個網絡,0.0.0.255 反掩碼 access-list 10 permit 192.1…

解決社區錄音應用橫屏狀態下,錄音后無法播放的bug

最近看到社區有小伙伴反映&#xff0c;社區錄音應用橫屏時&#xff0c;錄音后無法播放的問題。現分享解決辦法。 社區錄音應用的來源&#xff1a;https://gitee.com/openharmony/applications_app_samples/tree/OpenHarmony-5.0.2-Release/code/SystemFeature/Media/Recorder …

每周靶點分享:Angptl3、IgE、ADAM9及文獻分享:抗體的多樣性和特異性以及結構的新見解

本期精選了《脂質代謝的關鍵調控者Angptl3》《T細胞活化抑制因子VISTA靶點》《文獻分享&#xff1a;雙特異性抗體重輕鏈配對設計》三篇文章。以下為各研究內容的概述&#xff1a; 1. 脂質代謝的關鍵調控者Angptl3 血管生成素相關蛋白3&#xff08;Angptl3&#xff09;是血管生…

保持Word中插入圖片的清晰度

大家有沒有遇到這個問題&#xff0c;原本繪制的高清晰度圖片&#xff0c;插入word后就變模糊了。先說原因&#xff0c;word默認啟動了自動壓縮圖片功能&#xff0c;分享一下如何關閉這項功能&#xff0c;保持Word中插入圖片的清晰度。 ①在Word文檔中&#xff0c;點擊左上角的…

Datawhale AI春訓營 day

待補充 2025星火杯應用賽入門應用 創空間 魔搭社區 {"default": {"system": "你是星火大模型&#xff0c;一個由科大訊飛研發的人工智能助手。請用簡潔、專業、友好的方式回答問題。","description": "默認系統提示詞"}…

項目全棧實戰-基于智能體、工作流、API模塊化Docker集成的創業分析平臺

目錄 思維導圖 前置知識 Docker是什么&#xff1f; Docker的核心概念&#xff1a; Docker在本項目中的作用 1. 環境隔離與一致性 2. 簡化部署流程 3. 資源管理與擴展性 4. 服務整合與通信 5. 版本控制和回滾 6. 開發與生產環境一致性 總結 前端 1.小程序 2.web …

正則表達式實用指南:原理、場景、優化與引擎對比

正則表達式實用指南&#xff1a;原理、場景、優化與引擎對比 正則表達式&#xff08;Regular Expression&#xff0c;簡稱 regex 或 regexp&#xff09;是程序員處理文本數據時不可或缺的“瑞士軍刀”。無論是表單校驗、日志分析、數據清洗&#xff0c;還是敏感信息脫敏&#…