From 9e5c3243c77592378830754c5a22e53affe8fc95 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 17 Sep 2021 18:52:48 +0800
Subject: [PATCH] add shopping cart
---
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallShoppingCartServiceImpl.java | 64 ++++++++++
src/main/java/cc/mrbird/febs/mall/conversion/MallShoppingCartConversion.java | 21 +++
src/main/java/cc/mrbird/febs/mall/vo/ShoppingCartGoodsVo.java | 27 ++++
src/main/resources/mapper/modules/MallShoppingCartMapper.xml | 23 +++
src/main/java/cc/mrbird/febs/mall/entity/MallShoppingCart.java | 31 +++++
src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java | 18 +++
src/main/java/cc/mrbird/febs/mall/service/IApiMallShoppingCartService.java | 20 +++
sql/xc_mall.sql | 15 ++
src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java | 2
src/main/java/cc/mrbird/febs/mall/dto/AddCartDto.java | 24 ++++
src/main/resources/mapper/modules/MallGoodsSkuMapper.xml | 9 +
src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java | 48 ++++++++
12 files changed, 301 insertions(+), 1 deletions(-)
diff --git a/sql/xc_mall.sql b/sql/xc_mall.sql
index ac34e58..3dec379 100644
--- a/sql/xc_mall.sql
+++ b/sql/xc_mall.sql
@@ -110,4 +110,19 @@
ALTER TABLE `mall_goods_category` ADD COLUMN `is_recommend` int(11) NULL COMMENT '是否推荐 1:是 2:否' AFTER `parent_ids`;
alter table mall_goods add is_hot int default 2 null comment '是否热卖 1-是 2-否';
+DROP TABLE IF EXISTS mall_shopping_cart;
+CREATE TABLE mall_shopping_cart(
+ REVISION INT COMMENT '乐观锁' ,
+ CREATED_BY VARCHAR(32) COMMENT '创建人' ,
+ CREATED_TIME DATETIME COMMENT '创建时间' ,
+ UPDATED_BY VARCHAR(32) COMMENT '更新人' ,
+ UPDATED_TIME DATETIME COMMENT '更新时间' ,
+ ID BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键' ,
+ member_id BIGINT COMMENT '用户ID' ,
+ goods_id BIGINT COMMENT '商品ID' ,
+ style_id BIGINT COMMENT '样式ID' ,
+ sku_id BIGINT COMMENT 'skuId' ,
+ cnt VARCHAR(255) COMMENT '数量' ,
+ PRIMARY KEY (ID)
+) COMMENT = '购物车';
diff --git a/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java b/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java
index 81c706b..06878ae 100644
--- a/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java
+++ b/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java
@@ -87,7 +87,7 @@
}
private Boolean verifyTokenExpired(Long time) {
- boolean isDebug = false;
+ boolean isDebug = true;
if (!isDebug) {
long currentTime = System.currentTimeMillis();
return currentTime - time <= 30000;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
new file mode 100644
index 0000000..5b4d427
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
@@ -0,0 +1,48 @@
+package cc.mrbird.febs.mall.controller;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.mall.dto.AddCartDto;
+import cc.mrbird.febs.mall.service.IApiMallShoppingCartService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author wzy
+ * @date 2021-09-17
+ **/
+@Slf4j
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(value = "/api/cart")
+@Api(value = "ApiMallShoppingCartController", tags = "商城购物车接口请求类")
+public class ApiMallShoppingCartController {
+
+ private final IApiMallShoppingCartService mallShoppingCartService;
+
+ @ApiOperation(value = "获取购物车商品列表", notes = "获取购物车商品列表")
+ @PostMapping(value = "/findCartGoodsList")
+ public FebsResponse findCartGoodsList() {
+ return new FebsResponse().success().data(mallShoppingCartService.findCartGoodsList());
+ }
+
+ @ApiOperation(value = "添加商品到购物车", notes = "添加商品到购物车")
+ @PostMapping(value = "/addGoodsToCart")
+ public FebsResponse addGoodsToCart(@RequestBody AddCartDto addCartDto) {
+ mallShoppingCartService.addGoodsToCart(addCartDto);
+ return new FebsResponse().success().data("添加成功");
+ }
+
+ @ApiOperation(value = "从购物车中删除商品", notes = "从购物车中删除商品")
+ @PostMapping(value = "/delGoods")
+ public FebsResponse delGoods() {
+ return null;
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/conversion/MallShoppingCartConversion.java b/src/main/java/cc/mrbird/febs/mall/conversion/MallShoppingCartConversion.java
new file mode 100644
index 0000000..1ee9c8d
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/conversion/MallShoppingCartConversion.java
@@ -0,0 +1,21 @@
+package cc.mrbird.febs.mall.conversion;
+
+import cc.mrbird.febs.mall.entity.MallShoppingCart;
+import cc.mrbird.febs.mall.vo.ShoppingCartGoodsVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * @author wzy
+ * @date 2021-09-17
+ **/
+@Mapper
+public abstract class MallShoppingCartConversion {
+ public static final MallShoppingCartConversion INSTANCE = Mappers.getMapper(MallShoppingCartConversion.class);
+
+ public abstract ShoppingCartGoodsVo entityToVo(MallShoppingCart cart);
+
+ public abstract List<ShoppingCartGoodsVo> entityListToVoList(List<MallShoppingCart> carts);
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AddCartDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AddCartDto.java
new file mode 100644
index 0000000..4e6f6ec
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/AddCartDto.java
@@ -0,0 +1,24 @@
+package cc.mrbird.febs.mall.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author wzy
+ * @date 2021-09-17
+ **/
+@Data
+@ApiModel(value = "AddCartDto", description = "添加到购物车接收参数类")
+public class AddCartDto {
+
+ @NotNull(message = "参数不能为空")
+ @ApiModelProperty(value = "skuId")
+ private Long skuId;
+
+ @NotNull(message = "参数不能为空")
+ @ApiModelProperty(value = "数量")
+ private Integer cnt;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallShoppingCart.java b/src/main/java/cc/mrbird/febs/mall/entity/MallShoppingCart.java
new file mode 100644
index 0000000..f23fc07
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallShoppingCart.java
@@ -0,0 +1,31 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @author wzy
+ * @date 2021-09-17
+ **/
+@Data
+@TableName("mall_shopping_cart")
+public class MallShoppingCart extends BaseEntity {
+
+ private Long memberId;
+
+ private Long goodsId;
+
+ private Long styleId;
+
+ private Long skuId;
+
+ private Integer cnt;
+
+ @TableField(exist = false)
+ private MallGoods goods;
+
+ @TableField(exist = false)
+ private MallGoodsSku sku;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java
new file mode 100644
index 0000000..8b79d93
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java
@@ -0,0 +1,18 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.MallShoppingCart;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author wzy
+ * @date 2021-09-17
+ **/
+public interface MallShoppingCartMapper extends BaseMapper<MallShoppingCart> {
+
+ List<MallShoppingCart> selectCartGoodsList(@Param("memberId") Long memberId);
+
+ MallShoppingCart selectCartGoodsBySkuId(@Param("skuId") Long skuId, @Param("memberId") Long memberId);
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallShoppingCartService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallShoppingCartService.java
new file mode 100644
index 0000000..6a790d1
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallShoppingCartService.java
@@ -0,0 +1,20 @@
+package cc.mrbird.febs.mall.service;
+
+import cc.mrbird.febs.mall.dto.AddCartDto;
+import cc.mrbird.febs.mall.entity.MallShoppingCart;
+import cc.mrbird.febs.mall.vo.ShoppingCartGoodsVo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * @author wzy
+ * @date 2021-09-17
+ **/
+public interface IApiMallShoppingCartService extends IService<MallShoppingCart> {
+
+ List<ShoppingCartGoodsVo> findCartGoodsList();
+
+ void addGoodsToCart(AddCartDto addCartDto);
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallShoppingCartServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallShoppingCartServiceImpl.java
new file mode 100644
index 0000000..f6215dc
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallShoppingCartServiceImpl.java
@@ -0,0 +1,64 @@
+package cc.mrbird.febs.mall.service.impl;
+
+import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.utils.LoginUserUtil;
+import cc.mrbird.febs.mall.conversion.MallShoppingCartConversion;
+import cc.mrbird.febs.mall.dto.AddCartDto;
+import cc.mrbird.febs.mall.entity.MallGoodsSku;
+import cc.mrbird.febs.mall.entity.MallShoppingCart;
+import cc.mrbird.febs.mall.mapper.MallGoodsSkuMapper;
+import cc.mrbird.febs.mall.mapper.MallShoppingCartMapper;
+import cc.mrbird.febs.mall.service.IApiMallShoppingCartService;
+import cc.mrbird.febs.mall.vo.ShoppingCartGoodsVo;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author wzy
+ * @date 2021-09-17
+ **/
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class ApiMallShoppingCartServiceImpl extends ServiceImpl<MallShoppingCartMapper, MallShoppingCart> implements IApiMallShoppingCartService {
+
+ private final MallGoodsSkuMapper mallGoodsSkuMapper;
+
+ @Override
+ public List<ShoppingCartGoodsVo> findCartGoodsList() {
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ List<MallShoppingCart> carts = this.baseMapper.selectCartGoodsList(memberId);
+
+ return MallShoppingCartConversion.INSTANCE.entityListToVoList(carts);
+ }
+
+ @Override
+ public void addGoodsToCart(AddCartDto addCartDto) {
+ MallGoodsSku sku = mallGoodsSkuMapper.selectById(addCartDto.getSkuId());
+
+ if (sku == null) {
+ throw new FebsException("sku不存在");
+ }
+
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+
+ MallShoppingCart cartGoods = this.baseMapper.selectCartGoodsBySkuId(sku.getId(), memberId);
+ if (cartGoods == null) {
+ cartGoods = new MallShoppingCart();
+ cartGoods.setGoodsId(sku.getGoodsId());
+ cartGoods.setSkuId(sku.getId());
+ cartGoods.setStyleId(sku.getStyleId());
+ cartGoods.setCnt(addCartDto.getCnt());
+ cartGoods.setMemberId(memberId);
+
+ this.baseMapper.insert(cartGoods);
+ } else {
+ cartGoods.setCnt(cartGoods.getCnt() + addCartDto.getCnt());
+ this.baseMapper.updateById(cartGoods);
+ }
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ShoppingCartGoodsVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ShoppingCartGoodsVo.java
new file mode 100644
index 0000000..01a4f82
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ShoppingCartGoodsVo.java
@@ -0,0 +1,27 @@
+package cc.mrbird.febs.mall.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author wzy
+ * @date 2021-09-17
+ **/
+@Data
+@ApiModel(value = "ShoppingCartGoodsVo", description = "购物车返回参数类")
+public class ShoppingCartGoodsVo {
+
+ @ApiModelProperty(value = "id")
+ private Long id;
+
+ @ApiModelProperty(value = "数量")
+ private Integer cnt;
+
+ @ApiModelProperty(value = "商品详情 若该字段为null则提示商品已删除")
+ private MallGoodsDetailsVo goods;
+
+ @ApiModelProperty(value = "sku信息 若该字段为null则提示sku已删除")
+ private GoodsDetailsSkuVo sku;
+
+}
diff --git a/src/main/resources/mapper/modules/MallGoodsSkuMapper.xml b/src/main/resources/mapper/modules/MallGoodsSkuMapper.xml
new file mode 100644
index 0000000..176ea27
--- /dev/null
+++ b/src/main/resources/mapper/modules/MallGoodsSkuMapper.xml
@@ -0,0 +1,9 @@
+<?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="cc.mrbird.febs.mall.mapper.MallGoodsSkuMapper">
+
+
+ <select id="selectSkuInfoById" resultType="cc.mrbird.febs.mall.entity.MallGoodsSku">
+ select * from mall_goods_sku where id=#{id}
+ </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallShoppingCartMapper.xml b/src/main/resources/mapper/modules/MallShoppingCartMapper.xml
new file mode 100644
index 0000000..1dd5d8d
--- /dev/null
+++ b/src/main/resources/mapper/modules/MallShoppingCartMapper.xml
@@ -0,0 +1,23 @@
+<?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="cc.mrbird.febs.mall.mapper.MallShoppingCartMapper">
+
+ <resultMap id="ShoppingCartMap" type="cc.mrbird.febs.mall.entity.MallShoppingCart">
+ <id property="id" column="id" />
+ <result property="goodsId" column="goods_id" />
+ <result property="styleId" column="style_id" />
+ <result property="skuId" column="sku_id" />
+ <result property="cnt" column="cnt" />
+ <association property="goods" select="cc.mrbird.febs.mall.mapper.MallGoodsMapper.selectGoodsDetailById" column="{id=goods_id}"></association>
+ <association property="sku" select="cc.mrbird.febs.mall.mapper.MallGoodsSkuMapper.selectSkuInfoById" column="{id=sku_id}"></association>
+ </resultMap>
+
+ <select id="selectCartGoodsList" resultMap="ShoppingCartMap">
+ select * from mall_shopping_cart where member_id=#{memberId}
+ </select>
+
+ <select id="selectCartGoodsBySkuId" resultType="cc.mrbird.febs.mall.entity.MallShoppingCart">
+ select * from mall_shopping_cart
+ where member_id=#{memberId} and sku_id=#{skuId}
+ </select>
+</mapper>
\ No newline at end of file
--
Gitblit v1.9.1