Helius
2021-09-17 1002cb2f9a3e2a2acea323e2047de148f43e2c6e
add findMallGoodsDetailsById
7 files added
9 files modified
321 ■■■■■ changed files
pom.xml 29 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java 17 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsConversion.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsSkuConversion.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsStyleConversion.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallGoodsStyle.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsImagesMapper.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IApiMallGoodsService.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsSkuVo.java 37 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsStyleVo.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java 46 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallGoodsImagesMapper.xml 8 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallGoodsMapper.xml 51 ●●●●● patch | view | raw | blame | history
pom.xml
@@ -22,6 +22,7 @@
        <swagger.ui>2.9.2</swagger.ui>
        <tomcat.version>9.0.31</tomcat.version>
        <hutool.version>5.3.1</hutool.version>
        <mapstruct.version>1.3.1.Final</mapstruct.version>
    </properties>
    <dependencies>
@@ -254,6 +255,12 @@
            <version>4.3.5</version>
        </dependency>
        <!-- submail邮件 end -->
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${mapstruct.version}</version>
        </dependency>
    </dependencies>
    <build>
@@ -262,6 +269,28 @@
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${mapstruct.version}</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java
@@ -3,6 +3,7 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.mall.dto.MallGoodsQueryDto;
import cc.mrbird.febs.mall.service.IApiMallGoodsService;
import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo;
import cc.mrbird.febs.mall.vo.MallGoodsListVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -11,10 +12,7 @@
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;
import org.springframework.web.bind.annotation.*;
/**
 * @author wzy
@@ -29,7 +27,7 @@
public class ApiMallGoodsController {
    private final IApiMallGoodsService mallGoodsService;
    @ApiOperation(value = "findMallGoodsList", notes = "获取商城商品列表")
    @ApiOperation(value = "获取商城商品列表", notes = "获取商城商品列表")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = MallGoodsListVo.class)
    })
@@ -38,4 +36,13 @@
        return new FebsResponse().success().data(mallGoodsService.findMallGoodsListInPage(queryDto));
    }
    @ApiOperation(value = "获取商品详情", notes = "获取商品详情")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = MallGoodsDetailsVo.class)
    })
    @GetMapping(value = "/findMallGoodsDetailsById/{id}")
    public FebsResponse findMallGoodsDetailsById(@PathVariable("id") Long id) {
        return new FebsResponse().success().data(mallGoodsService.findMallGoodsDetailsById(id));
    }
}
src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsConversion.java
New file
@@ -0,0 +1,21 @@
package cc.mrbird.febs.mall.conversion;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Mapper
public abstract class MallGoodsConversion {
    public static final MallGoodsConversion INSTANCE = Mappers.getMapper(MallGoodsConversion.class);
    public abstract MallGoodsDetailsVo entityToDetailsVo(MallGoods mallGoods);
    public abstract List<MallGoodsDetailsVo> entityListToDetailsVoList(List<MallGoods> mallGoods);
}
src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsSkuConversion.java
New file
@@ -0,0 +1,21 @@
package cc.mrbird.febs.mall.conversion;
import cc.mrbird.febs.mall.entity.MallGoodsSku;
import cc.mrbird.febs.mall.vo.GoodsDetailsSkuVo;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Mapper
public abstract class MallGoodsSkuConversion {
    public static final MallGoodsSkuConversion INSTANCE = Mappers.getMapper(MallGoodsSkuConversion.class);
    public abstract GoodsDetailsSkuVo entityToVo(MallGoodsSku sku);
    public abstract List<GoodsDetailsSkuVo> entityListToSkuVoList(List<MallGoodsSku> skus);
}
src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsStyleConversion.java
New file
@@ -0,0 +1,21 @@
package cc.mrbird.febs.mall.conversion;
import cc.mrbird.febs.mall.entity.MallGoodsStyle;
import cc.mrbird.febs.mall.vo.GoodsDetailsStyleVo;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Mapper
public abstract class MallGoodsStyleConversion {
    public static final MallGoodsStyleConversion INSTANCE = Mappers.getMapper(MallGoodsStyleConversion.class);
    public abstract GoodsDetailsStyleVo entityToStyleVo(MallGoodsStyle goodsStyle);
    public abstract List<GoodsDetailsStyleVo> entityListToStyleVoList(List<MallGoodsStyle> goodsStyleList);
}
src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java
@@ -1,8 +1,11 @@
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;
import java.util.List;
/**
 * @author wzy
@@ -33,4 +36,10 @@
    private Long categoryId;
    private Integer isHot;
    @TableField(exist = false)
    private List<MallGoodsStyle> styles;
    @TableField(exist = false)
    private List<String> images;
}
src/main/java/cc/mrbird/febs/mall/entity/MallGoodsStyle.java
@@ -1,8 +1,11 @@
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;
import java.util.List;
/**
 * @author wzy
@@ -15,4 +18,7 @@
    private Long goodsId;
    private String name;
    @TableField(exist = false)
    private List<MallGoodsSku> skus;
}
src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsImagesMapper.java
@@ -1,10 +1,15 @@
package cc.mrbird.febs.mall.mapper;
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 MallGoodsImagesMapper extends BaseMapper<MallGoodsMapper> {
    List<String> selectGoodsImagesByGoodsId(@Param("goodsId") Long goodsId);
}
src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java
@@ -12,4 +12,6 @@
public interface MallGoodsMapper extends BaseMapper<MallGoods> {
    IPage<MallGoodsListVo> selectMallGoodsListQueryInPage(@Param("record") MallGoodsQueryDto queryDto, Page<MallGoodsListVo> page);
    MallGoods selectGoodsDetailById(@Param("id") Long id);
}
src/main/java/cc/mrbird/febs/mall/service/IApiMallGoodsService.java
@@ -2,11 +2,15 @@
import cc.mrbird.febs.mall.dto.MallGoodsQueryDto;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo;
import cc.mrbird.febs.mall.vo.MallGoodsListVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
public interface IApiMallGoodsService extends IService<MallGoods> {
    IPage<MallGoodsListVo> findMallGoodsListInPage(MallGoodsQueryDto queryDto);
    MallGoodsDetailsVo findMallGoodsDetailsById(@Param("id") Long id);
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java
@@ -1,9 +1,14 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.mall.conversion.MallGoodsConversion;
import cc.mrbird.febs.mall.conversion.MallMemberConversion;
import cc.mrbird.febs.mall.dto.MallGoodsQueryDto;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.mapper.MallGoodsImagesMapper;
import cc.mrbird.febs.mall.mapper.MallGoodsMapper;
import cc.mrbird.febs.mall.service.IApiMallGoodsService;
import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo;
import cc.mrbird.febs.mall.vo.MallGoodsListVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -23,9 +28,23 @@
@RequiredArgsConstructor
public class ApiMallGoodsServiceImpl extends ServiceImpl<MallGoodsMapper, MallGoods> implements IApiMallGoodsService {
    private final MallGoodsImagesMapper goodsImagesMapper;
    @Override
    public IPage<MallGoodsListVo> findMallGoodsListInPage(MallGoodsQueryDto queryDto) {
        Page<MallGoodsListVo> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize());
        return this.baseMapper.selectMallGoodsListQueryInPage(queryDto, page);
    }
    @Override
    public MallGoodsDetailsVo findMallGoodsDetailsById(Long id) {
        MallGoods mallGoods = this.baseMapper.selectGoodsDetailById(id);
        if (mallGoods == null) {
            throw new FebsException("商品不存在");
        }
        List<String> images = goodsImagesMapper.selectGoodsImagesByGoodsId(mallGoods.getId());
        MallGoodsDetailsVo mallGoodsDetailsVo = MallGoodsConversion.INSTANCE.entityToDetailsVo(mallGoods);
        mallGoodsDetailsVo.setImages(images);
        return mallGoodsDetailsVo;
    }
}
src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsSkuVo.java
New file
@@ -0,0 +1,37 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Data
@ApiModel(value = "GoodsDetailsSkuVo", description = "商品详情sku返回参数类")
public class GoodsDetailsSkuVo {
    @ApiModelProperty(value = "id")
    private Long id;
    @ApiModelProperty(value = "sku名称")
    private String skuName;
    @ApiModelProperty(value = "sku图片")
    private String skuImage;
    @ApiModelProperty(value = "库存")
    private Integer stock;
    @ApiModelProperty(value = "销量")
    private Integer skuVolume;
    @ApiModelProperty(value = "原价")
    private BigDecimal originalPrice;
    @ApiModelProperty(value = "现价")
    private BigDecimal presentPrice;
}
src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsStyleVo.java
New file
@@ -0,0 +1,25 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Data
@ApiModel(value = "GoodsDetailsStyleVo", description = "商品详情样式返回参数类")
public class GoodsDetailsStyleVo {
    @ApiModelProperty(value = "id")
    private String id;
    @ApiModelProperty(value = "样式名称")
    private String name;
    @ApiModelProperty(value = "sku")
    private List<GoodsDetailsSkuVo> skus;
}
src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java
New file
@@ -0,0 +1,46 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Data
@ApiModel(value = "MallGoodsDetailsVo", description = "商品详情返回参数类")
public class MallGoodsDetailsVo {
    @ApiModelProperty(value = "id")
    private Long id;
    @ApiModelProperty(value = "商品编号")
    private String goodsNo;
    @ApiModelProperty(value = "商品名称")
    private String goodsName;
    @ApiModelProperty(value = "商品介绍")
    private String goodsIntrodution;
    @ApiModelProperty(value = "商品详情")
    private String goodsDetails;
    @ApiModelProperty(value = "原价")
    private String originalPrice;
    @ApiModelProperty(value = "现价")
    private String presentPrice;
    @ApiModelProperty(value = "是否上架 1-上架 2-下架")
    private Integer isSale;
    @ApiModelProperty(value = "轮播图")
    private List<String> images;
    @ApiModelProperty(value = "样式")
    private List<GoodsDetailsStyleVo> styles;
}
src/main/resources/mapper/modules/MallGoodsImagesMapper.xml
New file
@@ -0,0 +1,8 @@
<?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.MallGoodsImagesMapper">
    <select id="selectGoodsImagesByGoodsId" resultType="java.lang.String">
        select image_url from mall_goods_images where goods_id=#{goodsId}
    </select>
</mapper>
src/main/resources/mapper/modules/MallGoodsMapper.xml
@@ -2,6 +2,57 @@
<!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.MallGoodsMapper">
    <resultMap id="MallGoodsMap" type="cc.mrbird.febs.mall.entity.MallGoods">
        <id property="id" column="id" />
        <result property="goodsNo" column="goods_no" />
        <result property="goodsName" column="goods_name" />
        <result property="goodsIntrodution" column="goods_introdution" />
        <result property="unit" column="unit" />
        <result property="thumb" column="thumb" />
        <result property="goodsDetails" column="goods_details" />
        <result property="isSale" column="is_sale" />
        <result property="originalPrice" column="original_price" />
        <result property="presentPrice" column="present_price" />
        <result property="categoryId" column="category_id" />
        <collection property="styles" ofType="cc.mrbird.febs.mall.entity.MallGoodsStyle">
            <id property="id" column="style_id" />
            <result property="name" column="style_name" />
            <result property="goodsId" column="style_goods_id" />
            <collection property="skus" ofType="cc.mrbird.febs.mall.entity.MallGoodsSku">
                <id property="id" column="sku_id" />
                <result property="skuName" column="sku_name" />
                <result property="skuImage" column="sku_image" />
                <result property="stock" column="stock" />
                <result property="skuVolume" column="sku_volume" />
                <result property="originalPrice" column="sku_original_price" />
                <result property="presentPrice" column="sku_present_price" />
                <result property="styleId" column="sku_style_id"/>
                <result property="goodsId" column="sku_goods_id" />
            </collection>
        </collection>
    </resultMap>
    <select id="selectGoodsDetailById" resultMap="MallGoodsMap">
        select
            a.*,
            b.id style_id,
            b.name style_name,
            b.goods_id style_goods_id,
            c.id sku_id,
            c.sku_name,
            c.sku_image,
            c.stock,
            c.sku_volume,
            c.original_price sku_original_price,
            c.present_price sku_present_price,
            c.style_id sku_style_id,
            c.goods_id sku_goods_id
        from mall_goods a
          inner join mall_goods_style b on a.id = b.goods_id
          inner join mall_goods_sku c on b.id=c.style_id
        where a.id=#{id}
    </select>
    <select id="selectMallGoodsListQueryInPage" resultType="cc.mrbird.febs.mall.vo.MallGoodsListVo">
        select
            a.id,