Helius
2021-09-17 9e5c3243c77592378830754c5a22e53affe8fc95
add shopping cart
10 files added
2 files modified
302 ■■■■■ changed files
sql/xc_mall.sql 15 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java 48 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/conversion/MallShoppingCartConversion.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/AddCartDto.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallShoppingCart.java 31 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IApiMallShoppingCartService.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallShoppingCartServiceImpl.java 64 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ShoppingCartGoodsVo.java 27 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallGoodsSkuMapper.xml 9 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallShoppingCartMapper.xml 23 ●●●●● patch | view | raw | blame | history
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 = '购物车';
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;
src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
New file
@@ -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;
    }
}
src/main/java/cc/mrbird/febs/mall/conversion/MallShoppingCartConversion.java
New file
@@ -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);
}
src/main/java/cc/mrbird/febs/mall/dto/AddCartDto.java
New file
@@ -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;
}
src/main/java/cc/mrbird/febs/mall/entity/MallShoppingCart.java
New file
@@ -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;
}
src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java
New file
@@ -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);
}
src/main/java/cc/mrbird/febs/mall/service/IApiMallShoppingCartService.java
New file
@@ -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);
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallShoppingCartServiceImpl.java
New file
@@ -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);
        }
    }
}
src/main/java/cc/mrbird/febs/mall/vo/ShoppingCartGoodsVo.java
New file
@@ -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;
}
src/main/resources/mapper/modules/MallGoodsSkuMapper.xml
New file
@@ -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>
src/main/resources/mapper/modules/MallShoppingCartMapper.xml
New file
@@ -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>