From 7043628d74a26cc09a3735c251567bf36f6219b6 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 24 Jun 2021 19:23:01 +0800
Subject: [PATCH] add goods details

---
 gc-shop/src/main/resources/mapper/shop/ScoreGoodsMapper.xml              |   49 +++++++++++++++++++++++-
 gc-shop/src/main/java/com/xzx/gc/shop/controller/ApiGoodsController.java |   15 +++++--
 gc-shop/src/main/java/com/xzx/gc/shop/dto/XcxGoodsListDto.java           |    3 +
 pom.xml                                                                  |    6 +++
 gc-shop/src/main/java/com/xzx/gc/shop/mapper/ScoreGoodsMapper.java       |    3 +
 gc-shop/src/main/java/com/xzx/gc/shop/service/GoodsService.java          |   25 ++++++++++--
 gc-shop/src/main/java/com/xzx/gc/shop/vo/XcxGoodsDetailVo.java           |   18 ++++++++
 7 files changed, 108 insertions(+), 11 deletions(-)

diff --git a/gc-shop/src/main/java/com/xzx/gc/shop/controller/ApiGoodsController.java b/gc-shop/src/main/java/com/xzx/gc/shop/controller/ApiGoodsController.java
index 9adebb7..4addc19 100644
--- a/gc-shop/src/main/java/com/xzx/gc/shop/controller/ApiGoodsController.java
+++ b/gc-shop/src/main/java/com/xzx/gc/shop/controller/ApiGoodsController.java
@@ -6,6 +6,7 @@
 import com.xzx.gc.shop.dto.XcxGoodsListDto;
 import com.xzx.gc.shop.service.GoodsService;
 import com.xzx.gc.shop.vo.GoodsCategoryVo;
+import com.xzx.gc.shop.vo.XcxGoodsDetailVo;
 import com.xzx.gc.shop.vo.XcxGoodsListVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -13,10 +14,7 @@
 import io.swagger.annotations.ApiResponses;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
@@ -47,4 +45,13 @@
         return JsonResult.success(goodsService.findGoodsListInPage(xcxGoodsListDto));
     }
 
+    @ApiOperation("商品详情")
+    @ApiResponses(
+            @ApiResponse(code = 200, message = "success", response = XcxGoodsDetailVo.class)
+    )
+    @PostMapping(value = "/goods/goodsDetails/{id}")
+    public JsonResult<XcxGoodsDetailVo> goodsDetails(@PathVariable("id") Long id) {
+        return JsonResult.success(goodsService.findGoodsDetails(id));
+    }
+
 }
diff --git a/gc-shop/src/main/java/com/xzx/gc/shop/dto/XcxGoodsListDto.java b/gc-shop/src/main/java/com/xzx/gc/shop/dto/XcxGoodsListDto.java
index 2e6267f..3dd8626 100644
--- a/gc-shop/src/main/java/com/xzx/gc/shop/dto/XcxGoodsListDto.java
+++ b/gc-shop/src/main/java/com/xzx/gc/shop/dto/XcxGoodsListDto.java
@@ -11,6 +11,9 @@
 @ApiModel(value = "XcxGoodsListDto", description = "小程序商品列表参数接受类")
 public class XcxGoodsListDto {
 
+    @ApiModelProperty(hidden = true)
+    private Long id;
+
     @ApiModelProperty(value = "名称搜索")
     private String name;
 
diff --git a/gc-shop/src/main/java/com/xzx/gc/shop/mapper/ScoreGoodsMapper.java b/gc-shop/src/main/java/com/xzx/gc/shop/mapper/ScoreGoodsMapper.java
index 0319ae0..25d623a 100644
--- a/gc-shop/src/main/java/com/xzx/gc/shop/mapper/ScoreGoodsMapper.java
+++ b/gc-shop/src/main/java/com/xzx/gc/shop/mapper/ScoreGoodsMapper.java
@@ -5,6 +5,7 @@
 import com.xzx.gc.model.order.OrderInfoVo;
 import com.xzx.gc.shop.dto.XcxGoodsListDto;
 import com.xzx.gc.shop.vo.QueryGoodsListVo;
+import com.xzx.gc.shop.vo.XcxGoodsDetailVo;
 import com.xzx.gc.shop.vo.XcxGoodsListVo;
 import com.xzx.gc.util.GcMapper;
 import org.apache.ibatis.annotations.Param;
@@ -20,4 +21,6 @@
     List<QueryGoodsListVo> queryGoodsList(@Param("name")String name, @Param("delFlag")int delFlag);
 
     List<XcxGoodsListVo> selectXcxGoodsList(@Param("record") XcxGoodsListDto xcxGoodsListDto);
+
+    XcxGoodsDetailVo selectGoodsDetailsById(@Param("id") Long id);
 }
diff --git a/gc-shop/src/main/java/com/xzx/gc/shop/service/GoodsService.java b/gc-shop/src/main/java/com/xzx/gc/shop/service/GoodsService.java
index 58b7316..906944e 100644
--- a/gc-shop/src/main/java/com/xzx/gc/shop/service/GoodsService.java
+++ b/gc-shop/src/main/java/com/xzx/gc/shop/service/GoodsService.java
@@ -2,6 +2,8 @@
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -22,10 +24,7 @@
 import tk.mybatis.mapper.entity.Example;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Service
 @Transactional
@@ -300,4 +299,22 @@
 
         return new PageInfo<>(data);
     }
+
+    public XcxGoodsDetailVo findGoodsDetails(Long id) {
+        XcxGoodsDetailVo data = scoreGoodsMapper.selectGoodsDetailsById(id);
+        XcxGoodsListDto dto = new XcxGoodsListDto();
+        dto.setId(id);
+        List<XcxGoodsListVo> list = scoreGoodsMapper.selectXcxGoodsList(dto);
+
+        if (CollUtil.isNotEmpty(list)) {
+            data.setQuantity(list.get(0).getQuantity());
+            data.setStock(list.get(0).getStock());
+        }
+
+        if (ScoreGoods.ISQG_YES.equals(data.getIsQg())) {
+            Long remain = DateUtil.between(new Date(), data.getQgEndTime(), DateUnit.SECOND, false);
+            data.setRemainTime(remain);
+        }
+        return data;
+    }
 }
diff --git a/gc-shop/src/main/java/com/xzx/gc/shop/vo/XcxGoodsDetailVo.java b/gc-shop/src/main/java/com/xzx/gc/shop/vo/XcxGoodsDetailVo.java
index 6e02c2a..22df6b0 100644
--- a/gc-shop/src/main/java/com/xzx/gc/shop/vo/XcxGoodsDetailVo.java
+++ b/gc-shop/src/main/java/com/xzx/gc/shop/vo/XcxGoodsDetailVo.java
@@ -4,6 +4,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -18,7 +19,7 @@
     private String name;
 
     @ApiModelProperty(value = "列表缩略图")
-    private String image;
+    private String thumb;
 
     @ApiModelProperty(value = "现价")
     private String presentPrice;
@@ -38,6 +39,21 @@
     @ApiModelProperty(value = "轮播图")
     private List<String> images;
 
+    @ApiModelProperty(value = "上下架 1-上架 2-下架")
+    private Integer isSale;
+
+    @ApiModelProperty(value = "是否抢购 1-是 2-否")
+    private Integer isQg;
+
+    @ApiModelProperty(value = "抢购开始时间")
+    private Date qgStartTime;
+
+    @ApiModelProperty(value = "抢购结束时间")
+    private Date qgEndTime;
+
+    @ApiModelProperty(value = "剩余时间")
+    private Long remainTime;
+
     @ApiModelProperty(value = "样式")
     private List<XcxGoodsDetailStyleVo> styles;
 
diff --git a/gc-shop/src/main/resources/mapper/shop/ScoreGoodsMapper.xml b/gc-shop/src/main/resources/mapper/shop/ScoreGoodsMapper.xml
index 776eeb4..2eb9cab 100644
--- a/gc-shop/src/main/resources/mapper/shop/ScoreGoodsMapper.xml
+++ b/gc-shop/src/main/resources/mapper/shop/ScoreGoodsMapper.xml
@@ -43,14 +43,59 @@
         from xzx_score_goods a
         inner join xzx_score_goods_sku b on a.id=b.goods_id and b.del_flag=0
         <where>
-            a.del_flag=0
+            a.del_flag=0 and a.is_sale=1
             <if test="record.name != null and record.name != ''">
                 and a.name like CONCAT(CONCAT(#{record.name}, "%"), "%")
+            </if>
+            <if test="record.id != null and record.id != ''">
+                and a.id=#{record.id}
             </if>
             <if test="record.cateId != null and record.cateId != ''">
                 and (a.category_id = #{record.cateId} or a.category in (select id from xzx_score_goods_category where parent_id=#{record.cateId}))
             </if>
         </where>
-        order by a.CREATED_TIME desc
+        group by a.id
+        order by a.id desc
+    </select>
+
+    <resultMap id="goodsDetailsMap" type="com.xzx.gc.shop.vo.XcxGoodsDetailVo">
+        <result property="name" column="name" />
+        <result property="thumb" column="thumb" />
+        <result property="presentPrice" column="present_price" />
+        <result property="originalPrice" column="original_price" />
+        <result property="isSale" column="is_sale" />
+        <result property="isQg" column="is_qg" />
+        <result property="qgStartTime" column="qg_start_time" />
+        <result property="qgEndTime" column="qg_end_time" />
+        <result property="details" column="details" />
+        <collection property="styles" ofType="com.xzx.gc.shop.vo.XcxGoodsDetailStyleVo" >
+            <id property="id" column="s_id" />
+            <result property="name" column="s_name" />
+            <collection property="skus" ofType="com.xzx.gc.shop.vo.XcxGoodsDetailSkuVo">
+                <id property="id" column="sku_id" />
+                <result property="name" column="sku_name" />
+                <result property="originalPrice" column="sku_original_price" />
+                <result property="presentPrice" column="sku_present_price" />
+                <result property="stock" column="sku_stock" />
+                <result property="quantity" column="sku_quantity" />
+            </collection>
+        </collection>
+    </resultMap>
+
+    <select id="selectGoodsDetailsById" resultMap="goodsDetailsMap">
+        select
+            a.*,
+            b.id s_id,
+            b.name s_name,
+            c.id sku_id,
+            c.name sku_name,
+            c.original_price sku_original_price,
+            c.present_price sku_present_price,
+            c.stock sku_stock,
+            c.quantity sku_quantity
+        from xzx_score_goods a
+        inner join xzx_score_goods_style b on a.id = b.goods_id and b.del_flag = 0
+        inner join xzx_score_goods_sku c on a.id = c.goods_id and c.del_flag = 0
+        where a.id=#{id}
     </select>
 </mapper>
diff --git a/pom.xml b/pom.xml
index a0d43e8..a662f32 100644
--- a/pom.xml
+++ b/pom.xml
@@ -120,6 +120,12 @@
             <version>1.3.7</version>
         </dependency>
 
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.2</version>
+        </dependency>
+
     </dependencies>
 
     <build>

--
Gitblit v1.9.1