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