1、购物车 -- 添加购物车:

流程分析:

接口实现:

购物车数据表结构:

购物车接口实现:

package com.qfedu.fmmall.service;import com.qfedu.fmmall.entity.ShoppingCart;
import com.qfedu.fmmall.vo.R;/*** @Description:* @Author : Jerry* @create : 2022-06-28 20:35*/
public interface ShoppingCartService {public R addShoppingCart(ShoppingCart cart);}

接口实现类:

package com.qfedu.fmmall.service.impl;import com.qfedu.fmmall.dao.ShoppingCartMapper;
import com.qfedu.fmmall.entity.ShoppingCart;
import com.qfedu.fmmall.service.ShoppingCartService;
import com.qfedu.fmmall.vo.R;
import com.qfedu.fmmall.vo.ResStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.text.SimpleDateFormat;
import java.util.Date;/*** @Description:* @Author : Jerry* @create : 2022-06-28 20:37*/
@Service
public class ShoppingCartServiceImpl implements ShoppingCartService {@Autowiredprivate ShoppingCartMapper shoppingCartMapper;private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");@Overridepublic R addShoppingCart(ShoppingCart cart) {cart.setCartTime(sdf.format(new Date()));int i = shoppingCartMapper.insert(cart);if(i > 0){return new R(ResStatus.OK,"success",null);}else{return new R(ResStatus.NO,"fail",null);}}
}

2、购物车--添加购物车(非登录状态)

流程分析:

公共类:

package com.qfedu.fmmall.vo;/*** @Description:* @Author : Jerry* @create : 2022-06-22 17:26*/
public class ResStatus {public static final int OK=10000;public static final int NO=10001;public static final int LOGIN_SUCCESS=20000; //认证成功public static final int LOGIN_FAIL_NOT=20001; //用户未登录public static final int LOGIN_FAIL_OVERDUE=20002; //用户登录失效}

拦截器:校验token

package com.qfedu.interceptor;import com.fasterxml.jackson.databind.ObjectMapper;
import com.qfedu.fmmall.vo.R;
import com.qfedu.fmmall.vo.ResStatus;
import io.jsonwebtoken.*;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;/*** @Description: 拦截器校验token* @Author : Jerry* @create : 2022-06-24 15:10*/
@Component
public class CheckTokenInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//放行option请求;String method = request.getMethod();if("OPTIONS".equalsIgnoreCase(method)){return true;}String token = request.getParameter("token");if(token == null){R r = new R(ResStatus.LOGIN_FAIL_NOT, "请先登录!", null);//提示请先登录doResponse(response,r);return false;}else{try{//验证tokenJwtParser parser = Jwts.parser();parser.setSigningKey("123456"); //解析token的SigningKey必须和生成的token时设置密码一样//如果token正确(密码正确,有效期内)则正常执行,否则抛出异常Jws<Claims> claimsJws = parser.parseClaimsJws(token);return true;}catch (ExpiredJwtException e){R r = new R(ResStatus.LOGIN_FAIL_OVERDUE, "登录过期,请重新登录!", null);doResponse(response,r);}catch (UnsupportedJwtException e){R r = new R(ResStatus.NO, "token不合法,请自重!", null);doResponse(response,r);}catch (Exception e){R r = new R(ResStatus.LOGIN_FAIL_NOT, "请先登录!", null);doResponse(response,r);}}return false;}private void doResponse(HttpServletResponse response,R r) throws IOException {response.setContentType("application/json");response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();String s = new ObjectMapper().writeValueAsString(r);out.print(s);out.flush();out.close();}
}

3、购物车--购物车列表;

流程分析:

接口实现:

sql:

实体类:productCartVO

package com.qfedu.fmmall.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import javax.persistence.Column;
import javax.persistence.Table;
import java.math.BigDecimal;/*** 新增productName,productImg*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ShoppingCartVO {private Integer cartId;private String productId;private String skuId;private String userId;private String cartNum;private String cartTime;private BigDecimal productPrice;private String skuProps;private String productName;private String productImg;private Double originalPrice;private Double sellPrice;private String skuName;
}

在mapper接口定义查询方法:

package com.qfedu.fmmall.dao;import com.qfedu.fmmall.entity.ShoppingCart;
import com.qfedu.fmmall.entity.ShoppingCartVO;
import com.qfedu.fmmall.general.GeneralDAO;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
public interface ShoppingCartMapper extends GeneralDAO<ShoppingCart> {public List<ShoppingCartVO> selectShopCartByUserId(int 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.qfedu.fmmall.dao.ShoppingCartMapper">
<resultMap id="ShoppingCartVOMap" type="com.qfedu.fmmall.entity.ShoppingCartVO"><result column="cart_id" jdbcType="INTEGER" property="cartId" /><result column="product_id" jdbcType="VARCHAR" property="productId" /><result column="sku_id" jdbcType="VARCHAR" property="skuId" /><result column="user_id" jdbcType="VARCHAR" property="userId" /><result column="cart_num" jdbcType="VARCHAR" property="cartNum" /><result column="cart_time" jdbcType="VARCHAR" property="cartTime" /><result column="product_price" jdbcType="DECIMAL" property="productPrice" /><result column="sku_props" jdbcType="VARCHAR" property="skuProps" /><result column="product_name" jdbcType="VARCHAR" property="productName" /><result column="url" jdbcType="VARCHAR" property="productImg" /><result column="original_price" jdbcType="VARCHAR" property="originalPrice" /><result column="sell_price" jdbcType="VARCHAR" property="sellPrice" /><result column="sku_name" jdbcType="VARCHAR" property="skuName" />
</resultMap><select id="selectShopCartByUserId" resultMap="ShoppingCartVOMap">select c.cart_id,c.product_id,c.sku_id,c.user_id,c.cart_num,c.cart_time,c.product_price,c.sku_props,p.product_name, i.url,s.original_price,s.sell_price,s.sku_namefrom shopping_cart cINNER JOIN product pINNER JOIN product_img iINNER JOIN product_sku sON c.product_id = p.product_idand i.item_id = p.product_idand c.sku_id = s.sku_idwhere user_id = #{userId}and i.is_main=1
</select>
</mapper>

service接口:

package com.qfedu.fmmall.service.impl;import com.qfedu.fmmall.dao.ShoppingCartMapper;
import com.qfedu.fmmall.entity.ShoppingCart;
import com.qfedu.fmmall.entity.ShoppingCartVO;
import com.qfedu.fmmall.service.ShoppingCartService;
import com.qfedu.fmmall.vo.R;
import com.qfedu.fmmall.vo.ResStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;/*** @Description:* @Author : Jerry* @create : 2022-06-28 20:37*/
@Service
public class ShoppingCartServiceImpl implements ShoppingCartService {@Autowiredprivate ShoppingCartMapper shoppingCartMapper;private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");@Overridepublic R addShoppingCart(ShoppingCart cart) {cart.setCartTime(sdf.format(new Date()));int i = shoppingCartMapper.insert(cart);if(i > 0){return new R(ResStatus.OK,"success",null);}else{return new R(ResStatus.NO,"fail",null);}}@Transactional(propagation = Propagation.SUPPORTS)public R listShoppingCartByUserId(int userId) {List<ShoppingCartVO> list = shoppingCartMapper.selectShopCartByUserId(userId);R r = new R(ResStatus.OK, "success", list);return r;}
}

4、购物车--修改购物车数量

流程分析:

在mapper接口定义修改方法:

package com.qfedu.fmmall.dao;import com.qfedu.fmmall.entity.ShoppingCart;
import com.qfedu.fmmall.entity.ShoppingCartVO;
import com.qfedu.fmmall.general.GeneralDAO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
public interface ShoppingCartMapper extends GeneralDAO<ShoppingCart> {public List<ShoppingCartVO> selectShopCartByUserId(int userId);public int updateCartNumByCartId(@Param("cartId") int cartId,@Param("cartNum") int cartNum);}

映射文件:

<update id="updateCartNumByCartId">update shopping_cart set cart_num=#{cartNum} where cart_id=#{cartId}
</update>

service接口:

package com.qfedu.fmmall.service;import com.qfedu.fmmall.entity.ShoppingCart;
import com.qfedu.fmmall.vo.R;/*** @Description:* @Author : Jerry* @create : 2022-06-28 20:35*/
public interface ShoppingCartService {public R addShoppingCart(ShoppingCart cart);public R listShoppingCartByUserId(int userId);public R updateCartNum(int cartId,int cartNum);}

service实现类:

package com.qfedu.fmmall.service.impl;import com.qfedu.fmmall.dao.ShoppingCartMapper;
import com.qfedu.fmmall.entity.ShoppingCart;
import com.qfedu.fmmall.entity.ShoppingCartVO;
import com.qfedu.fmmall.service.ShoppingCartService;
import com.qfedu.fmmall.vo.R;
import com.qfedu.fmmall.vo.ResStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;/*** @Description:* @Author : Jerry* @create : 2022-06-28 20:37*/
@Service
public class ShoppingCartServiceImpl implements ShoppingCartService {@Autowiredprivate ShoppingCartMapper shoppingCartMapper;private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");@Overridepublic R updateCartNum(int cartId, int cartNum) {int i = shoppingCartMapper.updateCartNumByCartId(cartId, cartNum);if(i>0){return new R(ResStatus.OK,"update success",null);}else{return new R(ResStatus.NO,"update fail",null);}}
}

controller:

package com.qfedu.controller;import com.qfedu.fmmall.entity.ShoppingCart;
import com.qfedu.fmmall.service.ShoppingCartService;
import com.qfedu.fmmall.vo.R;
import com.qfedu.fmmall.vo.ResStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** @Description:* @Author : Jerry* @create : 2022-06-23 16:32*/
@RestController
@RequestMapping("/shopcart")
@CrossOrigin
public class ShopcartController {@Autowiredprivate ShoppingCartService shoppingCartService;@PutMapping("/update/{cid}/{cnum}")public R updateNum(@PathVariable("cid") Integer cartId,@PathVariable("cnum") Integer cartNum,@RequestHeader("token")String token){R r = shoppingCartService.updateCartNum(cartId, cartNum);return r;}}

添加购物车及展示购物车列表,修改购物车数量相关推荐

  1. Day16-购物车页面-商品列表修改购物车商品的勾选状态

    提纲挈领: 我的操作: 1>当用户点击 radio 组件,希望修改当前商品的勾选状态,此时用户可以为 my-goods 组件绑定 @radio-change 事件,从而获取当前商品的 goods ...

  2. 显示购物车列表和修改商品数量

    显示购物车列表 购物车-显示列表-持久层 规划需要执行的SQL语句 显示某用户的购物车列表数据的SQL语句大致是. SELECTcid,uid,pid,t_cart.price,t_cart.num, ...

  3. SpringBoot-项目4-购物车(添加入购物车,购物车列表,购物车商品数量加减操作)

    64. 购物车-创建数据表 # 注意:没有添加相应的not null约束 CREATE TABLE t_cart (cid INT AUTO_INCREMENT COMMENT '购物车数据id',u ...

  4. 黑马瑞吉外卖之购物车功能开发(添加购物车和购物车数据展示)

    黑马瑞吉外卖之购物车功能 前端界面分析 后台购物车功能逻辑实现 前端界面分析 当我们点击选择规格的时候,数据参数item会传入按钮绑定的方法中 我们点击到这个按钮的时候,那么就会绑定到这个方法.这个方 ...

  5. 写一个循环,不断的问用户想买什么,用户选择一个商品编号,就把对应的商品添加到购物车里,最终用户输入q退出时,打印购物车里的商品列表

    写一个循环,不断的问用户想买什么,用户选择一个商品编号,就把对应的商品添加到购物车里,最终用户输入q退出时,打印购物车里的商品列表 写一个循环,不断的问用户想买什么,用户选择一个商品编号,就把对应的商 ...

  6. 宜立方商城—— 购物车增加、删除、修改数量、删除选中商品和清空购物车的实现

    1.  购物车的实现 1.1. 功能分析 1.购物车是一个独立的表现层工程. 2.添加购物车不要求登录.可以指定购买商品的数量. 3.展示购物车列表页面 4.修改购物车商品数量 5.删除购物车商品 模 ...

  7. 购物车+确定订单+订单列表

    [[[购物车的主布局]]]] <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...

  8. 美多商城之购物车(展示商品页面简单购物车)

    三.展示商品页面简单购物车 需求:用户鼠标悬停在商品页面右上角购物车标签上,以下拉框形式展示当前购物车数据. 3.1. 简单购物车数据接口设计和定义 1.请求方式 选项 方案 请求方法 GET 请求地 ...

  9. 阿语python美多商城-商品-购物车管理之第7.3节展示商品页面简单购物车

    展示商品页面简单购物车 需求:用户鼠标悬停在商品页面右上角购物车标签上,以下拉框形式展示当前购物车数据. 1. 简单购物车数据接口设计和定义 1.请求方式 选项 方案 请求方法 GET 请求地址 /c ...

最新文章

  1. K8s deployments的故障排查可视化指南
  2. 数据结构实验之链表五:单链表的拆分-sdut
  3. 第三讲:WCF介绍(3)
  4. java hashmap 缓存
  5. 经典面试题(7):下面的代码运行结果是什么么?
  6. YSlow[转:大众点评]
  7. VS2008 更改项目名称
  8. 插入网站连接_网站开发与网页制作
  9. php 输出数据库取出来的html源码 正常显示解决,替换显示数据库中的html代码
  10. 云计算引入可能破坏之前建立的IT秩序
  11. java导入包srcy有红叉_eclipse导入web项目之后项目中出现小红叉解决办法
  12. The Elements of Style 4ed ---英文写作指南(一)
  13. linux中怎么粘贴复制文件路径,如何在Linux中复制文件和目录
  14. Linux下使用alsamixer配置系统默认的声卡设备(默认音频输出设备、输入设备、系统音量)
  15. 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第九章 深入理解GPS
  16. Crtl+Enter提交留言
  17. CF, SD, MiniSD, HPI,
  18. python处理输入无效数据异常_python异常的处理
  19. Au入门系列之一:认识 Audition
  20. EDA软件常用技巧-SCL配置

热门文章

  1. PCB如何输出Gerber文件和IPC网表
  2. lssvm聚类研究(Matlab代码实现)
  3. 免费常用的API接口大全
  4. 网易buff服务器不稳定啥时候好,精准验货!BUFF社区服检视功能介绍
  5. 电脑主板测试卡代码说明大全
  6. SharePoint 2010文档库批量下载文档的实现
  7. 蓝桥杯JAVA-7.集合(容器)在竞赛中的使用
  8. 【机器学习-周志华】学习笔记-第七章
  9. 使用 svg-sprite-loader、svgo-loader 优化 svg symbols
  10. Mingw使用HPSocket的包装类