Ver Fonte

feat:商城轮播、热门类型、热门商城

zhangwei há 2 semanas atrás
pai
commit
ee56ebca8a
24 ficheiros alterados com 229 adições e 99 exclusões
  1. 5 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/constant/BaseConstant.java
  2. 1 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProduct.java
  3. 5 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProductImage.java
  4. 1 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProductSku.java
  5. 0 5
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopSpecValue.java
  6. 6 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopProductSpecMapper.java
  7. 2 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductService.java
  8. 0 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSpecService.java
  9. 5 5
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopCategoryServiceImpl.java
  10. 18 5
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductServiceImpl.java
  11. 58 54
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductSpecServiceImpl.java
  12. 29 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ProductImageVo.java
  13. 34 8
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ProductSkuVo.java
  14. 5 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ProductSpecVo.java
  15. 27 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ShopSkuSpecValueVo.java
  16. 2 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/SpecSortVo.java
  17. 2 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/SpecValueSortVo.java
  18. 0 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopCategoryController.java
  19. 3 4
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductController.java
  20. 2 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductSpecController.java
  21. 2 1
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductImageMapper.xml
  22. 2 2
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSkuMapper.xml
  23. 19 0
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSpecMapper.xml
  24. 1 2
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopSpecValueMapper.xml

+ 5 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/constant/BaseConstant.java

@@ -14,5 +14,9 @@ public class BaseConstant {
     public static final Integer BASIC_STATUS_YES_NUM = 1;
     public static final String BASIC_STATUS_YES_STR = "1";
 
-
+    /**
+     * 删除标记 正常
+     */
+    public static final Integer BASIC_IS_DEFAULT_YES = 0;
+    public static final Integer BASIC_IS_DEFAULT_YES_NO = 1;
 }

+ 1 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProduct.java

@@ -87,7 +87,7 @@ public class ShopProduct extends BaseEntity {
     private Long warehouseId;
 
     /**
-     * 0 上架 1 下架
+     * 国家ID
      */
     @TableField(value = "`country_id`")
     private Integer countryId;

+ 5 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProductImage.java

@@ -54,6 +54,10 @@ public class ShopProductImage extends BaseEntity {
      */
     @TableField(value = "sort_order")
     private Integer sortOrder;
-
+    /**
+     * 是否默认列表
+     */
+    @TableField(value = "is_default")
+    private Integer isDefault;
 
 }

+ 1 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProductSku.java

@@ -85,7 +85,7 @@ public class ShopProductSku extends BaseEntity {
     @TableField(value = "barcodes")
     private Integer barcodes;
     /**
-     * 条码
+     * 成本价格
      */
     @TableField(value = "cost_price")
     private BigDecimal costPrice;

+ 0 - 5
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopSpecValue.java

@@ -43,10 +43,5 @@ public class ShopSpecValue extends BaseEntity {
     @TableField(value = "sort_order")
     private String sortOrder;
 
-    /**
-     * 商品ID
-     */
-    @TableField(value = "product_id")
-    private String productId;
 
 }

+ 6 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopProductSpecMapper.java

@@ -2,6 +2,12 @@ package edu.travel.commodity.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import edu.travel.commodity.entity.ShopProductSpec;
+import edu.travel.commodity.vo.ShopSkuSpecValueVo;
+
+import java.util.List;
+import java.util.Set;
 
 public interface ShopProductSpecMapper extends BaseMapper<ShopProductSpec> {
+
+    List<ShopSkuSpecValueVo> getSkuValue(Set<String> skus,String project);
 }

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductService.java

@@ -1,13 +1,13 @@
 package edu.travel.commodity.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.dto.GetProductByTypeDto;
 import edu.travel.commodity.entity.ShopProduct;
 import com.baomidou.mybatisplus.extension.service.IService;
 import edu.travel.commodity.vo.ShopProductVo;
 
-import java.util.List;
 
 public interface ShopProductService extends IService<ShopProduct>{
 
-    List<ShopProductVo> getHotProduct(GetProductByTypeDto param);
+    Page<ShopProductVo> getHotProduct(GetProductByTypeDto param);
 }

+ 0 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSpecService.java

@@ -5,8 +5,6 @@ import edu.travel.commodity.entity.ShopProductSpec;
 import com.baomidou.mybatisplus.extension.service.IService;
 import edu.travel.commodity.vo.ProductSpecVo;
 
-import java.util.List;
-
 public interface ShopProductSpecService extends IService<ShopProductSpec>{
 
 

+ 5 - 5
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopCategoryServiceImpl.java

@@ -38,7 +38,7 @@ public class ShopCategoryServiceImpl extends ServiceImpl<ShopCategoryMapper, Sho
         }else {
             redisKey=RedisKey.PRODUCT_TYPE;
         }
-        String string = redisUtil.getString(redisKey);
+        String string = redisUtil.getString(redisKey+shopTypeDto.getCountryId());
         if(!ObjectUtil.isEmpty(string)){
             JSONArray objects = JSONUtil.parseArray(string);
             return JSONUtil.toList(objects, ShopTypeVo.class);
@@ -69,16 +69,16 @@ public class ShopCategoryServiceImpl extends ServiceImpl<ShopCategoryMapper, Sho
         }
         if(shopTypeDto.getIsHeat().equals(BaseConstant.BASIC_STATUS_NO_STR)){
             //24小时热门过期
-            redisUtil.setString(RedisKey.PRODUCT_TYPE,JSONUtil.toJsonStr(parent),24*60*60*60, TimeUnit.SECONDS);
+            redisUtil.setString(RedisKey.PRODUCT_HOT_TYPE+shopTypeDto.getCountryId(),JSONUtil.toJsonStr(parent),24*60*60*60, TimeUnit.SECONDS);
         }else {
-            redisUtil.setString(RedisKey.PRODUCT_TYPE,JSONUtil.toJsonStr(parent));
+            redisUtil.setString(RedisKey.PRODUCT_TYPE+shopTypeDto.getCountryId(),JSONUtil.toJsonStr(parent));
         }
         return parent;
     }
 
     @Override
     public List<ShopTypeVo> getLevelToShopType(BaseDto param) {
-        String string = redisUtil.getString(RedisKey.PRODUCT_TO_HOT_TYPE);
+        String string = redisUtil.getString(RedisKey.PRODUCT_TO_HOT_TYPE+param.getCountryId());
         if(!ObjectUtil.isEmpty(string)){
             JSONArray objects = JSONUtil.parseArray(string);
             return JSONUtil.toList(objects, ShopTypeVo.class);
@@ -93,7 +93,7 @@ public class ShopCategoryServiceImpl extends ServiceImpl<ShopCategoryMapper, Sho
         }
         List<ShopTypeVo> parent = BeanUtil.copyToList(list, ShopTypeVo.class);
         //24小时热门过期
-        redisUtil.setString(RedisKey.PRODUCT_TO_HOT_TYPE,JSONUtil.toJsonStr(parent),24*60*60*60, TimeUnit.SECONDS);
+        redisUtil.setString(RedisKey.PRODUCT_TO_HOT_TYPE+param.getCountryId(),JSONUtil.toJsonStr(parent),24*60*60*60, TimeUnit.SECONDS);
         return parent;
     }
 }

+ 18 - 5
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductServiceImpl.java

@@ -1,12 +1,19 @@
 package edu.travel.commodity.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.injector.methods.SelectPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import edu.travel.commodity.constant.BaseConstant;
 import edu.travel.commodity.dto.GetProductByTypeDto;
 import edu.travel.commodity.entity.ShopProduct;
 import edu.travel.commodity.mapper.ShopProductMapper;
 import edu.travel.commodity.service.ShopProductService;
+import edu.travel.commodity.utils.PageUtil;
 import edu.travel.commodity.vo.ShopProductVo;
 import org.springframework.stereotype.Service;
 
@@ -16,11 +23,17 @@ import java.util.List;
 public class ShopProductServiceImpl extends ServiceImpl<ShopProductMapper, ShopProduct> implements ShopProductService {
 
     @Override
-    public List<ShopProductVo> getHotProduct(GetProductByTypeDto type) {
-        List<ShopProduct> list = lambdaQuery().eq(ShopProduct::getCategoryId, type.getType())
+    public Page<ShopProductVo> getHotProduct(GetProductByTypeDto type) {
+        LambdaQueryWrapper<ShopProduct> query = Wrappers.<ShopProduct>lambdaQuery()
                 .eq(ShopProduct::getStatus, BaseConstant.BASIC_STATUS_NO_NUM)
-                .eq(ShopProduct::getCountryId, type.getCountryId())
-                .orderByDesc(ShopProduct::getHeatValue).list();
-        return BeanUtil.copyToList(list, ShopProductVo.class);
+                .eq(ShopProduct::getCountryId, type.getCountryId());
+
+        if(!ObjectUtil.isEmpty(type.getType())){
+            query.eq(ShopProduct::getCategoryId, type.getType());
+        }
+        query.orderByDesc(ShopProduct::getHeatValue);
+        Page<ShopProduct> shopProductPage = baseMapper.selectPage(new Page<ShopProduct>(type.getCurrentPage(), type.getPageSize()), query);
+
+        return PageUtil.toPageEntity(shopProductPage, ShopProductVo.class);
     }
 }

+ 58 - 54
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductSpecServiceImpl.java

@@ -2,6 +2,7 @@ package edu.travel.commodity.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -10,13 +11,13 @@ import edu.travel.commodity.dto.ProductSpecDto;
 import edu.travel.commodity.entity.*;
 import edu.travel.commodity.mapper.ShopProductSpecMapper;
 import edu.travel.commodity.service.*;
-import edu.travel.commodity.vo.ProductSkuVo;
-import edu.travel.commodity.vo.ProductSpecVo;
-import edu.travel.commodity.vo.SpecSortVo;
-import edu.travel.commodity.vo.SpecValueVo;
+import edu.travel.commodity.vo.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -29,21 +30,22 @@ public class ShopProductSpecServiceImpl extends ServiceImpl<ShopProductSpecMappe
     @Autowired
     private ShopProductSkuService shopProductSkuService;
     @Autowired
-    private ShopSkuSpecValueService shopSkuSpecValueService;
-    @Autowired
-    private ShopSpecService shopSpecService;
+    private ShopProductImageService shopProductImageService;
     @Autowired
     private ShopProductSpecService shopProductSpecService;
+    @Autowired
+    private ShopProductSpecMapper shopProductSpecMapper;
 
     @Override
     public ProductSpecVo getShopSpec(ProductSpecDto param) {
-        LambdaQueryChainWrapper<ShopProduct> query = shopProductService.lambdaQuery().eq(ShopProduct::getId, param.getProductId())
+        LambdaQueryWrapper<ShopProduct> query =  Wrappers.<ShopProduct>lambdaQuery().eq(ShopProduct::getId, param.getProductId())
                 .eq(ShopProduct::getCountryId, param.getCountryId());
         //商品信息
         ShopProduct one = shopProductService.getOne(query);
         if(ObjectUtil.isEmpty(one)){
             return null;
         }
+
         List<ShopProductSku> list1 = shopProductSkuService.list(Wrappers.<ShopProductSku>lambdaQuery()
                 .eq(ShopProductSku::getStatus, BaseConstant.BASIC_STATUS_NO_NUM)
                 .eq(ShopProductSku::getProductId, one.getId()));
@@ -51,59 +53,61 @@ public class ShopProductSpecServiceImpl extends ServiceImpl<ShopProductSpecMappe
         if(ObjectUtil.isEmpty(list1)){
             return null;
         }
+
         ProductSpecVo bean = BeanUtil.toBean(one, ProductSpecVo.class);
+        //商品的全部图片
+        List<ShopProductImage> list = shopProductImageService.lambdaQuery()
+                .eq(ShopProductImage::getProductId, one.getId()).list();
+        List<ProductImageVo> productImageVos = BeanUtil.copyToList(list, ProductImageVo.class);
+
+        List<ProductImageVo> collect = productImageVos.stream().filter(item -> item.getIsDefault().equals(BaseConstant.BASIC_IS_DEFAULT_YES)).collect(Collectors.toList());
+        bean.setImages(collect);
+
+        Map<String, List<ProductImageVo>> imageMap = collect.stream().collect(Collectors.groupingBy(ProductImageVo::getSkuId));
         //SKU
-        Set<Long> skus = list1.stream().map(ShopProductSku::getSkuId).collect(Collectors.toSet());
-        //规格和规格对应的值
-        List<ShopSkuSpecValue> skuValues = shopSkuSpecValueService.lambdaQuery().eq(ShopSkuSpecValue::getSkuId, skus).list();
-        //规格值ID
-        Set<Long> collect = skuValues.stream().map(ShopSkuSpecValue::getSpecValueId).collect(Collectors.toSet());
-        List<ShopSpecValue> list2 = shopSpecValueService.list(Wrappers.<ShopSpecValue>lambdaQuery()
-                .orderByAsc(ShopSpecValue::getSortOrder)
-                .in(ShopSpecValue::getId, collect));
-
-        //规格ID
-        List<ShopProductSpec> list = shopProductSpecService.lambdaQuery().eq(ShopProductSpec::getProductId, one.getId())
-                .orderByAsc(ShopProductSpec::getSortOrder).list();
-        Set<Long> collect3 = list.stream().map(ShopProductSpec::getSpecId).collect(Collectors.toSet());
-        Map<String, ShopSpec> specs = new HashMap<>();
-        List<ShopSpec> list11 = shopSpecService.lambdaQuery().in(ShopSpec::getId, collect3).list();
-
-        for (ShopSpec spec : list11) {
-            specs.put(spec.getId().toString(), spec);
-        }
-        List<SpecSortVo> specSortVoList = new ArrayList<>();
-        for (ShopProductSpec shopProductSpec : list) {
-            SpecSortVo specSortVo = new SpecSortVo();
-            specSortVo.setId(shopProductSpec.getSpecId().toString());
-            specSortVo.setSpecName(shopProductSpec.getSpecName());
-        }
+        Set<String> skus = list1.stream().map(item->item.getSkuId().toString()).collect(Collectors.toSet());
 
-        bean.setSpecSortVoList(specSortVoList);
+        HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
+        String project = request.getHeader("project");
+
+        //sku规格和规格对应的值
+        List<ShopSkuSpecValueVo> skuValue=shopProductSpecMapper.getSkuValue(skus,project);
+        Map<String, List<ShopSkuSpecValueVo>> map = skuValue.stream().collect(Collectors.groupingBy(ShopSkuSpecValueVo::getSkuId));
 
-        Set<Long> skuIds = skuValues.stream().map(ShopSkuSpecValue::getSkuId).collect(Collectors.toSet());
-        //SKU -> ShopSpecValue
         ArrayList<ProductSkuVo> productSkuVos = new ArrayList<>();
-        for (Long skuId : skuIds) {
-            List<Long> collect2 = skuValues.stream().filter(item -> item.getSkuId().equals(skuId)).map(ShopSkuSpecValue::getSpecValueId).collect(Collectors.toList());
-            List<ShopSpecValue> collect1 = list2.stream().filter(item -> collect2.contains(item.getId())).collect(Collectors.toList());
-
-            ProductSkuVo productSkuVo = new ProductSkuVo();
-            List<SpecValueVo> specValueVos = new ArrayList<>();
-            for (ShopSpecValue shopSpecValue : collect1) {
-                SpecValueVo specValueVo = new SpecValueVo();
-//                ShopSpec shopSpec = specs.get(shopSpecValue.getSpecId().toString());
-//                specValueVo.setKeyId(shopSpecValue.getSpecId().toString());
-//                specValueVo.setKey(shopSpec.getSpecName());
-                specValueVo.setValueId(shopSpecValue.getId().toString());
-                specValueVo.setValue(shopSpecValue.getSpecValue());
-                specValueVos.add(specValueVo);
-            }
-            productSkuVo.setSpecValue(specValueVos);
-            productSkuVos.add(productSkuVo);
+        for (ShopProductSku info : list1) {
+            ProductSkuVo infoVo = BeanUtil.toBean(info, ProductSkuVo.class);
+            infoVo.setDescription(one.getDescription());
+            infoVo.setProductName(one.getProductName());
+            bean.setImages(imageMap.get(info.getSkuId().toString()));
+            List<ShopSkuSpecValueVo> shopSkuSpecValueVos = map.get(info.getSkuId().toString());
+            infoVo.setSpecValue(shopSkuSpecValueVos);
+            productSkuVos.add(infoVo);
         }
+        List<SpecSortVo> specSortVoList= getSpecSortVoList(param.getProductId());
+        bean.setSpecSortVoList(specSortVoList);
         bean.setSkuList(productSkuVos);
-
         return bean;
     }
+
+
+    public  List<SpecSortVo> getSpecSortVoList(String productId){
+        List<ShopProductSpec> specs = shopProductSpecService.lambdaQuery().eq(ShopProductSpec::getProductId, productId).orderByAsc(ShopProductSpec::getSortOrder).list();
+        List<SpecSortVo> list = BeanUtil.copyToList(specs, SpecSortVo.class);
+        if(ObjectUtil.isEmpty(list)){
+            return list;
+        }
+        Set<Long> collect = specs.stream().map(ShopProductSpec::getId).collect(Collectors.toSet());
+        List<ShopSpecValue> list1 = shopSpecValueService.lambdaQuery().in(ShopSpecValue::getProductSpecId, collect).list();
+        for (SpecSortVo spec : list) {
+            List<ShopSpecValue> collect1 = list1.stream().filter(item -> item.getProductSpecId().toString().equals(spec.getId()))
+                    .sorted(Comparator.comparing(ShopSpecValue::getSortOrder)).collect(Collectors.toList());
+            List<SpecValueSortVo> specValueSortVos = BeanUtil.copyToList(collect1, SpecValueSortVo.class);
+            spec.setList(specValueSortVos);
+        }
+        return list;
+    }
+
+
+
 }

+ 29 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ProductImageVo.java

@@ -0,0 +1,29 @@
+package edu.travel.commodity.vo;
+
+import lombok.Data;
+
+@Data
+public class ProductImageVo {
+    /**
+     * sku
+     */
+    private String skuId;
+
+    /**
+     * 商品ID
+     */
+    private String productId;
+
+    /**
+     * 图片/视频地址
+     */
+    private String url;
+
+    /**
+     * 判断图片/视频,默认0,0图片,1视频
+     */
+    private Integer urlType;
+
+    /**是否默认列表图片*/
+    private Integer isDefault;
+}

+ 34 - 8
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ProductSkuVo.java

@@ -2,6 +2,9 @@ package edu.travel.commodity.vo;
 
 
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -11,6 +14,10 @@ import java.util.List;
 @Data
 public class ProductSkuVo {
     /**
+     * 商品SKU表ID
+     */
+    private String id;
+    /**
      * SKU ID
      */
     private String skuId;
@@ -29,26 +36,45 @@ public class ProductSkuVo {
     private String description;
 
     /**
-     * SKU商品图片
+     * 库房ID
      */
-    private String skuImage;
+    private String warehouseId;
 
     /**
-     * 销量
+     * 库存
      */
-    private Integer salesVolume;
+    private Integer inventory;
+
+    /**
+     * 0 上架 1 下架
+     */
+    private Integer status;
+
     /**
      * 价格
      */
-    private BigDecimal defaultPrice;
+    private BigDecimal price;
 
     /**
-     * 库存
+     * 商品SKU图片
      */
-    private Integer inventory;
+    private List<ProductImageVo> imageUrl;
+    /**
+     * 销量
+     */
+    private Integer salesVolume;
+
+    /**
+     * 条码
+     */
+    private Integer barcodes;
+    /**
+     * 成本价格
+     */
+    private BigDecimal costPrice;
 
     /**
      * 规格值
      */
-    private List<SpecValueVo> specValue;
+    private List<ShopSkuSpecValueVo> specValue;
 }

+ 5 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ProductSpecVo.java

@@ -21,7 +21,11 @@ public class ProductSpecVo {
     /**
      * 列表展示图片
      */
-    private List<String> images;
+    private String mainImageUrl;
+    /**
+     *  详情商品图片集
+     */
+    private List<ProductImageVo> images;
 
     /**
      * 商品描述

+ 27 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ShopSkuSpecValueVo.java

@@ -0,0 +1,27 @@
+package edu.travel.commodity.vo;
+
+import lombok.Data;
+
+@Data
+public class ShopSkuSpecValueVo {
+    /**
+     * SKU规格值关联表ID
+     */
+    private String id;
+    /**
+     * SKU
+     */
+    private String skuId;
+    /**
+     * 规格值id
+     */
+    private String specValueId;
+    /**规格值*/
+    private String specValue;
+    /**
+     * 规格值id
+     */
+    private String specId;
+    /**规格名称*/
+    private String specName;
+}

+ 2 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/SpecSortVo.java

@@ -11,6 +11,8 @@ public class SpecSortVo {
 
     /**规格ID*/
     private String specName;
+    /**规格排序*/
+    private Long sortOrder;
 
     private List<SpecValueSortVo> list;
 }

+ 2 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/SpecValueSortVo.java

@@ -9,5 +9,6 @@ public class SpecValueSortVo {
 
     /**规制值*/
     private String specValue;
-
+    /**规格值排序*/
+    private Long sortOrder;
 }

+ 0 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopCategoryController.java

@@ -1,13 +1,11 @@
 package edu.travel.commodity.web;
 
-import cn.hutool.core.bean.BeanUtil;
 import edu.travel.commodity.dto.BaseDto;
 import edu.travel.commodity.dto.ShopTypeDto;
 import edu.travel.commodity.entity.ShopCategory;
 import edu.travel.commodity.service.ShopCategoryService;
 import edu.travel.commodity.vo.ShopTypeVo;
 import edu.travel.remote.feign.mode.vo.tenant.AddMenuVo;
-import edu.travel.remote.feign.mode.vo.tenant.SysRoleVo;
 import edu.travel.resp.BaseResponse;
 import edu.travel.web.BaseController;
 import org.springframework.web.bind.annotation.*;

+ 3 - 4
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductController.java

@@ -1,5 +1,6 @@
 package edu.travel.commodity.web;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.dto.GetProductByTypeDto;
 import edu.travel.commodity.entity.ShopProduct;
 import edu.travel.commodity.service.ShopProductService;
@@ -32,14 +33,12 @@ public class ShopProductController extends BaseController<ShopProduct> {
      * @return {@link BaseResponse }<{@link List }<{@link ShopProductVo }>>
      */
     @GetMapping("/getHotProduct")
-    public BaseResponse<List<ShopProductVo>> getHotProduct(GetProductByTypeDto param){
+    public BaseResponse<Page<ShopProductVo>> getHotProduct(GetProductByTypeDto param){
         return new BaseResponse<>(200,"success",shopProductService.getHotProduct(param));
     }
 
 
-    /**
-     * 搜索商品
-     */
+
 
 
 }

+ 2 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductSpecController.java

@@ -28,7 +28,8 @@ public class ShopProductSpecController extends BaseController<ShopProductSpec> {
     private ShopProductSpecService shopProductSpecService;
 
     /**
-     * @param param 查询商品
+     * 查询商品详情
+     * @param param
      * @return {@link BaseResponse }<{@link List }<{@link ShopProductVo }>>
      */
     @GetMapping("/getShopSpec")

+ 2 - 1
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductImageMapper.xml

@@ -16,10 +16,11 @@
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
     <result column="update_user_id" jdbcType="VARCHAR" property="updateUserId" />
     <result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
+    <result column="is_default" jdbcType="INTEGER" property="isDefault" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, sku_id, product_id, url, url_type, sort_order, project, create_time, create_user_id, 
-    update_time, update_user_id, delete_flag
+    update_time, update_user_id, delete_flag,is_default
   </sql>
 </mapper>

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSkuMapper.xml

@@ -42,7 +42,7 @@
         JOIN shop_spec_value s ON ssv.spec_value_id = s.id
         JOIN shop_product_spec sv ON ssv.spec_id = sv.id
     <where>
-      <if test="skuId =null and skuId.size()>0">
+      <if test="skuId !=null and skuId.size()>0">
         ssv.sku_id
         <foreach collection="skuId" item="sku" open="IN(" separator="," close=")">
           #{sku}
@@ -65,7 +65,7 @@
         JOIN shop_spec_value s ON ss.spec_value_id = s.id
         JOIN shop_product_spec sv ON ss.spec_id = sv.id
       <where>
-        <if test="shopProductSkuIds =null and shopProductSkuIds.size()>0">
+        <if test="shopProductSkuIds !=null and shopProductSkuIds.size()>0">
           p.product_id
           <foreach collection="shopProductSkuIds" item="productId" open="IN(" separator="," close=")">
             #{productId}

+ 19 - 0
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSpecMapper.xml

@@ -21,4 +21,23 @@
     id, product_id, spec_name, project, create_time, create_user_id, update_time, update_user_id, 
     delete_flag,sort_order,spec_id
   </sql>
+
+  <select id="getSkuValue" resultType="edu.travel.commodity.vo.ShopSkuSpecValueVo">
+    SELECT sk.id,sk.sku_id,sk.spec_id,sp.spec_name,sk.spec_value_id,sv.spec_value
+    FROM
+        shop_sku_spec_value  sk
+    inner JOIN shop_product_spec sp
+        on sp.id=sk.spec_id
+    inner JOIN shop_spec_value sv
+        on sv.id=sk.spec_value_id
+    WHERE
+    sk.project=#{project}
+    AND sk.delete_flag=0
+    AND sp.delete_flag=0
+    AND sv.delete_flag=0
+    AND sk.sku_id
+    <foreach collection="skus" item="sku" open="IN(" separator="," close=")">
+      #{sku}
+    </foreach>
+    </select>
 </mapper>

+ 1 - 2
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopSpecValueMapper.xml

@@ -14,11 +14,10 @@
     <result column="update_user_id" jdbcType="VARCHAR" property="updateUserId" />
     <result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
     <result column="sort_order" jdbcType="BIGINT" property="sortOrder" />
-    <result column="product_id" jdbcType="BIGINT" property="productId" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, product_spec_id, spec_value, project, create_time, create_user_id, update_time, update_user_id,
-    delete_flag,sort_order,product_id
+    delete_flag,sort_order
   </sql>
 </mapper>