添加购物车及展示购物车列表,修改购物车数量
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;}}
添加购物车及展示购物车列表,修改购物车数量相关推荐
- Day16-购物车页面-商品列表修改购物车商品的勾选状态
提纲挈领: 我的操作: 1>当用户点击 radio 组件,希望修改当前商品的勾选状态,此时用户可以为 my-goods 组件绑定 @radio-change 事件,从而获取当前商品的 goods ...
- 显示购物车列表和修改商品数量
显示购物车列表 购物车-显示列表-持久层 规划需要执行的SQL语句 显示某用户的购物车列表数据的SQL语句大致是. SELECTcid,uid,pid,t_cart.price,t_cart.num, ...
- SpringBoot-项目4-购物车(添加入购物车,购物车列表,购物车商品数量加减操作)
64. 购物车-创建数据表 # 注意:没有添加相应的not null约束 CREATE TABLE t_cart (cid INT AUTO_INCREMENT COMMENT '购物车数据id',u ...
- 黑马瑞吉外卖之购物车功能开发(添加购物车和购物车数据展示)
黑马瑞吉外卖之购物车功能 前端界面分析 后台购物车功能逻辑实现 前端界面分析 当我们点击选择规格的时候,数据参数item会传入按钮绑定的方法中 我们点击到这个按钮的时候,那么就会绑定到这个方法.这个方 ...
- 写一个循环,不断的问用户想买什么,用户选择一个商品编号,就把对应的商品添加到购物车里,最终用户输入q退出时,打印购物车里的商品列表
写一个循环,不断的问用户想买什么,用户选择一个商品编号,就把对应的商品添加到购物车里,最终用户输入q退出时,打印购物车里的商品列表 写一个循环,不断的问用户想买什么,用户选择一个商品编号,就把对应的商 ...
- 宜立方商城—— 购物车增加、删除、修改数量、删除选中商品和清空购物车的实现
1. 购物车的实现 1.1. 功能分析 1.购物车是一个独立的表现层工程. 2.添加购物车不要求登录.可以指定购买商品的数量. 3.展示购物车列表页面 4.修改购物车商品数量 5.删除购物车商品 模 ...
- 购物车+确定订单+订单列表
[[[购物车的主布局]]]] <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...
- 美多商城之购物车(展示商品页面简单购物车)
三.展示商品页面简单购物车 需求:用户鼠标悬停在商品页面右上角购物车标签上,以下拉框形式展示当前购物车数据. 3.1. 简单购物车数据接口设计和定义 1.请求方式 选项 方案 请求方法 GET 请求地 ...
- 阿语python美多商城-商品-购物车管理之第7.3节展示商品页面简单购物车
展示商品页面简单购物车 需求:用户鼠标悬停在商品页面右上角购物车标签上,以下拉框形式展示当前购物车数据. 1. 简单购物车数据接口设计和定义 1.请求方式 选项 方案 请求方法 GET 请求地址 /c ...
最新文章
- K8s deployments的故障排查可视化指南
- 数据结构实验之链表五:单链表的拆分-sdut
- 第三讲:WCF介绍(3)
- java hashmap 缓存
- 经典面试题(7):下面的代码运行结果是什么么?
- YSlow[转:大众点评]
- VS2008 更改项目名称
- 插入网站连接_网站开发与网页制作
- php 输出数据库取出来的html源码 正常显示解决,替换显示数据库中的html代码
- 云计算引入可能破坏之前建立的IT秩序
- java导入包srcy有红叉_eclipse导入web项目之后项目中出现小红叉解决办法
- The Elements of Style 4ed ---英文写作指南(一)
- linux中怎么粘贴复制文件路径,如何在Linux中复制文件和目录
- Linux下使用alsamixer配置系统默认的声卡设备(默认音频输出设备、输入设备、系统音量)
- 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第九章 深入理解GPS
- Crtl+Enter提交留言
- CF, SD, MiniSD, HPI,
- python处理输入无效数据异常_python异常的处理
- Au入门系列之一:认识 Audition
- EDA软件常用技巧-SCL配置