From 1002cb2f9a3e2a2acea323e2047de148f43e2c6e Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Fri, 17 Sep 2021 16:23:34 +0800 Subject: [PATCH] add findMallGoodsDetailsById --- src/main/java/cc/mrbird/febs/mall/entity/MallGoodsStyle.java | 6 + src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java | 9 + src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsSkuVo.java | 37 ++++++ src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsStyleConversion.java | 21 +++ src/main/resources/mapper/modules/MallGoodsImagesMapper.xml | 8 + src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsConversion.java | 21 +++ src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsImagesMapper.java | 5 src/main/java/cc/mrbird/febs/mall/service/IApiMallGoodsService.java | 4 pom.xml | 29 ++++ src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java | 46 +++++++ src/main/resources/mapper/modules/MallGoodsMapper.xml | 51 ++++++++ src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsSkuConversion.java | 21 +++ src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java | 17 ++ src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java | 2 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java | 19 +++ src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsStyleVo.java | 25 ++++ 16 files changed, 316 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 3ca16cf..12801df 100644 --- a/pom.xml +++ b/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> diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java index 2f4e723..860e466 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java +++ b/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)); + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsConversion.java b/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsConversion.java new file mode 100644 index 0000000..407f677 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsConversion.java @@ -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); +} diff --git a/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsSkuConversion.java b/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsSkuConversion.java new file mode 100644 index 0000000..d8a0c76 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsSkuConversion.java @@ -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); +} diff --git a/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsStyleConversion.java b/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsStyleConversion.java new file mode 100644 index 0000000..55de7f5 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsStyleConversion.java @@ -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); +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java b/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java index 25ca13b..df5c4df 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java +++ b/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; } diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallGoodsStyle.java b/src/main/java/cc/mrbird/febs/mall/entity/MallGoodsStyle.java index f07408e..c3d9f23 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallGoodsStyle.java +++ b/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; } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsImagesMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsImagesMapper.java index 37fc3b1..5732c2f 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsImagesMapper.java +++ b/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); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java index 275006c..30e3ed0 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java +++ b/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); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallGoodsService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallGoodsService.java index 9c0a7a8..58ea980 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallGoodsService.java +++ b/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); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java index 6a9f5a0..7471bf9 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java +++ b/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; + } } diff --git a/src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsSkuVo.java b/src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsSkuVo.java new file mode 100644 index 0000000..4479aa1 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsSkuVo.java @@ -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; +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsStyleVo.java b/src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsStyleVo.java new file mode 100644 index 0000000..05550e8 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsStyleVo.java @@ -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; +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java new file mode 100644 index 0000000..f94ff77 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java @@ -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; +} diff --git a/src/main/resources/mapper/modules/MallGoodsImagesMapper.xml b/src/main/resources/mapper/modules/MallGoodsImagesMapper.xml new file mode 100644 index 0000000..6b3049e --- /dev/null +++ b/src/main/resources/mapper/modules/MallGoodsImagesMapper.xml @@ -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> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallGoodsMapper.xml b/src/main/resources/mapper/modules/MallGoodsMapper.xml index 85a4ea2..4b7b35d 100644 --- a/src/main/resources/mapper/modules/MallGoodsMapper.xml +++ b/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, -- Gitblit v1.9.1