Browse Source

分类商品列表速度慢

fubojin 1 week ago
parent
commit
514df591ca

+ 3 - 2
yami-shop-api/src/main/java/com/yami/shop/api/controller/ProdController.java

@@ -21,6 +21,7 @@ import com.yami.shop.bean.dto.SearchProdDto;
 import com.yami.shop.bean.model.ChannelProd;
 import com.yami.shop.bean.model.Product;
 import com.yami.shop.bean.model.Sku;
+import com.yami.shop.bean.param.CategoryProductParam;
 import com.yami.shop.bean.vo.SimilarProdListVo;
 import com.yami.shop.bean.vo.SkuBuyTogetherOftenVo;
 import com.yami.shop.bean.model.UserShopBehavior;
@@ -210,7 +211,7 @@ public class ProdController {
 
     @PostMapping("/listProdByCategoryIdAndShopId")
     @ApiOperation(value = "根据分类ID、商户ID查询归属的所有商品")
-    public ResponseEntity<IPage<Product>> listProdByCategoryIdAndShopId(@RequestBody ProdByCategoryIdAndShopIdDTO prodByCategoryIdAndShopIdDTO) {
+    public ResponseEntity<IPage<CategoryProductParam>> listProdByCategoryIdAndShopId(@RequestBody ProdByCategoryIdAndShopIdDTO prodByCategoryIdAndShopIdDTO) {
         return ResponseEntity.ok(prodService.listProdByCategoryIdAndShopId(prodByCategoryIdAndShopIdDTO));
     }
 
@@ -262,7 +263,7 @@ public class ProdController {
     @ApiOperation(value = "相似商品", notes = "传入商品id")
     public R<IPage<SimilarProdListVo>> similarProdList(PageParam<Product> page, Long prodId, Long shopId, Long channelId,String userId) {
         if (channelId == null){
-            channelId = 1L;
+            channelId = 3L;
         }
         return R.SUCCESS(prodService.similarProdList(page, prodId , shopId, channelId, userId));
     }

+ 2 - 3
yami-shop-api/src/main/java/com/yami/shop/api/listener/ConfirmOrderListener.java

@@ -65,7 +65,6 @@ public class ConfirmOrderListener {
         ShopCartOrderDto shopCartOrderDto = event.getShopCartOrderDto();
         OrderParam orderParam = event.getOrderParam();
         String userId = SecurityUtils.getUser().getUserId();
-        //String userId = "36726893042d492aba446439c5f00584";
         UserAddr userAddr = userAddrService.getUserAddrByUserId(orderParam.getAddrId(), userId);
         double total = 0.0;
         int totalCount = 0;
@@ -100,10 +99,10 @@ public class ConfirmOrderListener {
             //企业用户,计算分单规则
             if (transport2.getTargetDistance() > transport2.getDistance()) {
                 //超出配送范围使用快递
-                orderParam.setDvyType(DvyType.DELIVERY.value());
+                orderParam.setDvyType(1);
             } else {
                 //即时配送
-                orderParam.setDvyType(DvyType.NOT_DELIVERY.value());
+                orderParam.setDvyType(3);
             }
             //费用按重量计算,数据是g,现在要按kg计算,20是kg单位
             Double totalWeight = shopCartOrderDto.getTotalWeight();

+ 58 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/param/CategoryProductParam.java

@@ -0,0 +1,58 @@
+
+package com.yami.shop.bean.param;
+
+import com.yami.shop.bean.model.Sku;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 商品参数
+ * @author LGH
+ */
+@Data
+public class CategoryProductParam {
+
+    /**
+     * 产品ID
+     */
+    private Long prodId;
+
+    /**
+     * 店铺id
+     */
+    private Long shopId;
+
+
+    /**
+     * 商品名称
+     */
+
+    private String prodName;
+
+    /**
+     * 商品价格
+     */
+    private Double price;
+
+    /**
+     * 库存量
+     */
+    private Integer totalStocks;
+    /**
+     * 库存量
+     */
+    private Integer salesVolume;
+
+    /**
+     * 图片
+     */
+    private String pic;
+
+    /**
+     * sku列表字符串
+     */
+    private List<Sku> skuList;
+
+
+}

+ 2 - 1
yami-shop-service/src/main/java/com/yami/shop/dao/ProductMapper.java

@@ -23,6 +23,7 @@ import com.yami.shop.bean.model.ChannelProd;
 import com.yami.shop.bean.model.OrderItem;
 import com.yami.shop.bean.model.Product;
 import com.yami.shop.bean.model.ShopDetail;
+import com.yami.shop.bean.param.CategoryProductParam;
 import com.yami.shop.bean.param.ProdOrderParam;
 import com.yami.shop.bean.param.ProductExportParam;
 import com.yami.shop.bean.param.ProductParam;
@@ -169,7 +170,7 @@ public interface ProductMapper extends BaseMapper<Product> {
     /**
      * 根据分类ID、商户ID查询归属的所有商品
      */
-    IPage<Product> listProdByCIdAndSId(@Param("page") Page page, @Param("prodByCategoryIdAndShopIdDTO") ProdByCategoryIdAndShopIdDTO prodByCategoryIdAndShopIdDTO);
+    IPage<CategoryProductParam> listProdByCIdAndSId(@Param("page") Page page, @Param("prodByCategoryIdAndShopIdDTO") ProdByCategoryIdAndShopIdDTO prodByCategoryIdAndShopIdDTO);
 
     /**
      * 根据分类ID、商户ID查询归属的所有商品

+ 2 - 1
yami-shop-service/src/main/java/com/yami/shop/service/ProductService.java

@@ -18,6 +18,7 @@ import com.yami.shop.bean.app.dto.TagProductDto;
 import com.yami.shop.bean.app.param.SearchParam;
 import com.yami.shop.bean.dto.*;
 import com.yami.shop.bean.model.Product;
+import com.yami.shop.bean.param.CategoryProductParam;
 import com.yami.shop.bean.param.OfflineHandleEventAuditParam;
 import com.yami.shop.bean.param.ProductExportParam;
 import com.yami.shop.bean.param.ProductParam;
@@ -146,7 +147,7 @@ public interface ProductService extends IService<Product> {
     /**
      * 根据分类ID、商户ID查询归属的所有商品
      */
-    IPage<Product> listProdByCategoryIdAndShopId(ProdByCategoryIdAndShopIdDTO prodByCategoryIdAndShopIdDTO);
+    IPage<CategoryProductParam> listProdByCategoryIdAndShopId(ProdByCategoryIdAndShopIdDTO prodByCategoryIdAndShopIdDTO);
 
     /**
      * 根据商品ID查询相似商品

+ 2 - 2
yami-shop-service/src/main/java/com/yami/shop/service/impl/ProductServiceImpl.java

@@ -753,8 +753,8 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
     }
 
     @Override
-    public IPage<Product> listProdByCategoryIdAndShopId(ProdByCategoryIdAndShopIdDTO prodByCategoryIdAndShopIdDTO) {
-        IPage<Product> productIPage = productMapper.listProdByCIdAndSId(new Page<>(prodByCategoryIdAndShopIdDTO.getCurrent(), prodByCategoryIdAndShopIdDTO.getSize()),
+    public IPage<CategoryProductParam> listProdByCategoryIdAndShopId(ProdByCategoryIdAndShopIdDTO prodByCategoryIdAndShopIdDTO) {
+        IPage<CategoryProductParam> productIPage = productMapper.listProdByCIdAndSId(new Page<>(prodByCategoryIdAndShopIdDTO.getCurrent(), prodByCategoryIdAndShopIdDTO.getSize()),
                 prodByCategoryIdAndShopIdDTO);
         productIPage.getRecords().forEach(product -> {
             List<Sku> skuList = skuMapper.listByProdId(product.getProdId());

+ 66 - 58
yami-shop-service/src/main/resources/mapper/ProductMapper.xml

@@ -815,77 +815,85 @@
             p.create_time DESC
     </select>
 
-    <select id="listProdByCIdAndSId" parameterType="com.yami.shop.bean.dto.ProdByCategoryIdAndShopIdDTO" resultType="com.yami.shop.bean.model.Product">
+    <select id="listProdByCIdAndSId" parameterType="com.yami.shop.bean.dto.ProdByCategoryIdAndShopIdDTO" resultType="com.yami.shop.bean.param.CategoryProductParam" >
 
         SELECT
-            tp.prod_id,
-            tp.prod_name,
-            tcp.shop_id,
-            tp.brand_id,
-            tp.brand_name,
-            tp.ori_price,
-            MIN(cp.channel_prod_price) AS price,
-            tp.score_price,
-            tp.brief,
-            tp.video,
-            tp.pic,
-            tp.content,
-            tp.imgs,
-            tp.status,
-            tp.is_delete,
-            tp.shop_category_id,
-            tp.category_id,
-            tp.hb_front_category_id,
-            tp.sold_num,
-            COALESCE(SUM(tss.shop_sku_stocks), 0) AS total_stocks,
-            tp.delivery_mode,
-            tp.delivery_template_id,
-            tp.create_time,
-            tp.update_time,
-            tp.putaway_time,
-            tp.version,
-            tp.prod_type,
-            tp.activity_id,
-            tp.sup_id,
-            tp.hb_spu_id,
-            tp.hb_status,
-
-            COALESCE ((
-                          SELECT
-                              SUM( oi2.prod_count )
-                          FROM
-                              tz_order_item oi2
-                                  INNER JOIN tz_order o2 ON o2.order_number = oi2.order_number
-                          WHERE
-                              oi2.shop_id = #{prodByCategoryIdAndShopIdDTO.shopId}
-                            AND oi2.prod_id = tp.prod_id
-                            AND o2.hb_order_status IN ( 20, 30, 40, 70, 80 )
-                            AND o2.delete_status = 0
-                      ),
-                      0
-            ) AS salesVolume
+        tp.prod_id,
+        tp.prod_name,
+        tcp.shop_id,
+        MIN(cp.channel_prod_price) AS price,
+        tp.pic,
+        tss.shop_sku_stocks AS total_stocks,
+
+        COALESCE ((
+        SELECT
+        SUM( oi2.prod_count )
+        FROM
+        tz_order_item oi2
+        INNER JOIN tz_order o2 ON o2.order_number = oi2.order_number
+        WHERE
+        oi2.shop_id = #{prodByCategoryIdAndShopIdDTO.shopId}
+        AND oi2.prod_id = tp.prod_id
+        AND o2.hb_order_status IN ( 20, 30, 40, 70, 80 )
+        AND o2.delete_status = 0
+        ),
+        0
+        ) AS sales_volume
 
         FROM tz_prod tp
-                 INNER JOIN tz_category_prod tcp ON tp.prod_id = tcp.prod_id
-                   AND tcp.is_delete = 0 AND tcp.shop_id = #{prodByCategoryIdAndShopIdDTO.shopId}
-                   and tcp.category_id = #{prodByCategoryIdAndShopIdDTO.categoryId}
-                 LEFT JOIN tz_shop_sku tss ON tss.spu_id = tp.prod_id
-                 JOIN tz_channel_prod cp ON cp.shop_id = tcp.shop_id
-            AND cp.sku_id = tss.sku_id
-            AND cp.is_delete = 0
+        INNER JOIN tz_category_prod tcp ON tp.prod_id = tcp.prod_id
+        AND tcp.is_delete = 0 AND tcp.shop_id = #{prodByCategoryIdAndShopIdDTO.shopId}
+        and tcp.category_id = #{prodByCategoryIdAndShopIdDTO.categoryId}
+        LEFT JOIN tz_shop_sku tss ON tss.spu_id = tp.prod_id and tss.shop_id = 1
+        INNER JOIN tz_channel_prod cp ON cp.shop_id = tcp.shop_id
+        AND cp.sku_id = tss.sku_id
+        AND cp.is_delete = 0
         <if test="prodByCategoryIdAndShopIdDTO.channelId == null or prodByCategoryIdAndShopIdDTO.channelId == 0">
             and cp.channel_id = 1
         </if>
         <if test="prodByCategoryIdAndShopIdDTO.channelId != null and prodByCategoryIdAndShopIdDTO.channelId != 0">
             and cp.channel_id = #{prodByCategoryIdAndShopIdDTO.channelId}
         </if>
-            AND cp.channel_prod_price IS NOT NULL
+        AND cp.channel_prod_price IS NOT NULL
         WHERE tp.STATUS = 1
-          AND tp.`is_delete` = 0
+        AND tp.`is_delete` = 0
         GROUP BY tp.prod_id
         ORDER BY MAX(tp.create_time) DESC
     </select>
 
+<!--    <resultMap id="listProdByCIdAndSIdMap" type="com.yami.shop.bean.param.CategoryProductParam">-->
+<!--        <id property="prodId" column="prod_id"/>-->
+<!--        <result property="prodName" column="prod_name"/>-->
+<!--        <result property="shopId" column="shop_id"/>-->
+<!--        <result property="price" column="price"/>-->
+<!--        <result property="pic" column="pic"/>-->
+<!--        <result property="salesVolume" column="sales_volume"/>-->
+<!--        <result property="totalStocks" column="total_stocks"/>-->
+<!--        <collection property="skuList" javaType="list" ofType="com.yami.shop.bean.model.Sku">-->
+<!--            <id column="sku_id" jdbcType="BIGINT" property="skuId" />-->
+<!--            <result column="prod_id" jdbcType="BIGINT" property="prodId" />-->
+<!--            <result column="properties" jdbcType="VARCHAR" property="properties" />-->
+<!--            <result column="sku_prod_name" jdbcType="VARCHAR" property="prodName" />-->
+<!--            <result column="sku_ori_price" jdbcType="DECIMAL" property="oriPrice" />-->
+<!--            <result column="sku_price" jdbcType="DECIMAL" property="price" />-->
+<!--            <result column="weight" jdbcType="DECIMAL" property="weight" />-->
+<!--            <result column="volume" jdbcType="DECIMAL" property="volume" />-->
+<!--            <result column="stocks" jdbcType="INTEGER" property="stocks" />-->
+<!--            <result column="sku_score" jdbcType="INTEGER" property="skuScore" />-->
+<!--            <result column="actual_stocks" jdbcType="INTEGER" property="actualStocks" />-->
+<!--            <result column="status" jdbcType="TINYINT" property="status" />-->
+<!--            <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />-->
+<!--            <result column="rec_time" jdbcType="TIMESTAMP" property="recTime" />-->
+<!--            <result column="party_code" jdbcType="VARCHAR" property="partyCode" />-->
+<!--            <result column="model_id" jdbcType="VARCHAR" property="modelId" />-->
+<!--            <result column="sku_pic" jdbcType="VARCHAR" property="pic" />-->
+<!--            <result column="sku_name" jdbcType="VARCHAR" property="skuName" />-->
+<!--            <result column="is_delete" jdbcType="INTEGER" property="isDelete"/>-->
+<!--        </collection>-->
+
+<!--    </resultMap>-->
+
+
     <select id="listProdByCategoryIdAndShopId2" parameterType="com.yami.shop.bean.dto.ProdByCategoryIdAndShopIdDTO" resultType="com.yami.shop.bean.model.Product">
         select t.*,t1.salesVolume from (
         SELECT
@@ -993,7 +1001,7 @@
         FROM tz_category_prod cp
         INNER JOIN tz_prod p on p.prod_id = cp.prod_id
         LEFT JOIN tz_shop_sku ss on ss.spu_id = cp.prod_id and ss.is_delete = 0
-        INNER JOIN tz_channel_prod cha on cha.sku_id = ss.sku_id and cha.is_delete = 0
+        INNER JOIN tz_channel_prod cha on cha.sku_id = ss.sku_id and cha.is_delete = 0 and cha.channel_id =  #{channelId}
         LEFT JOIN tz_basket b ON b.prod_id = p.prod_id AND b.user_id = COALESCE(NULLIF(#{userId}, ''), '0')
         where p.is_delete = 0 and
         <if test="channelId == null">cha.channel_id = 1</if>
@@ -1015,7 +1023,7 @@
         FROM tz_channel_prod base_cha
         INNER JOIN tz_shop_sku base_ss ON base_cha.sku_id = base_ss.sku_id
         WHERE base_ss.spu_id = #{prodId}
-        AND base_cha.channel_id = 1
+        AND base_cha.channel_id =  #{channelId}
         AND base_cha.is_delete = 0
         AND base_ss.is_delete = 0
         AND cha.channel_prod_price BETWEEN