瀏覽代碼

fix 缓存客户端首页平台列表

zoujiajian 3 年之前
父節點
當前提交
1d97270792

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDon.java

@@ -100,6 +100,26 @@ public class GoodsDon extends BaseEntity {
      */
     private Integer virtualSold;
 
+    /**
+     * 最小规格价格
+     */
+    private BigDecimal minPrice;
+
+    /**
+     * 最小规格价格月份
+     */
+    private Integer minMonths;
+
+    /**
+     * 最大规格价格
+     */
+    private BigDecimal maxPrice;
+
+    /**
+     * 最大规格价格月份
+     */
+    private Integer maxMonths;
+
     @TableField(exist = false)
     @DbIgnore
     private BigDecimal price;

+ 2 - 0
netflix-service/src/main/java/com/cyksj/redis/RedisService.java

@@ -602,6 +602,8 @@ public class RedisService {
         CMS_USER_PERMISSION_KEY("cms:user:permission:%s:", "user权限缓存前缀", 60 * 60 * 24L * 7),
         REPEAT_USER_KEY("repeat_user_key:%s:", "重复用户插入key", 60l),
         BUSINESS_FIRST_ORDER_USER_KEY("business_first_order_user_key:%s:", "商务分销首单提成key", 60l),
+        PC_WEB_CACHE("pc_web_cache", "官网首页平台缓存", 5 * 60),
+        H5_WEB_CACHE("h5_web_cache", "h5首页平台缓存", 5 * 60),
         ;
 
         private String name;

+ 1 - 3
netflix-service/src/main/java/com/cyksj/service/mange/CmsGoodsDonService.java

@@ -1,10 +1,7 @@
 package com.cyksj.service.mange;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.cyksj.mapper.GoodsDonMapper;
 import com.cyksj.model.entity.GoodsDon;
-import org.springframework.stereotype.Service;
 
 /**
  * @author chan
@@ -12,4 +9,5 @@ import org.springframework.stereotype.Service;
  */
 public interface CmsGoodsDonService extends IService<GoodsDon> {
 
+	void updateGoodsSkuPrice(Long goodsId, GoodsDon goodsDon);
 }

+ 35 - 0
netflix-service/src/main/java/com/cyksj/service/mange/goods/CmsGoodsDonServiceImpl.java

@@ -3,14 +3,49 @@ package com.cyksj.service.mange.goods;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.mapper.GoodsDonMapper;
 import com.cyksj.model.entity.GoodsDon;
+import com.cyksj.model.views.GoodsDonFrontSkuView;
 import com.cyksj.service.mange.CmsGoodsDonService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Optional;
+
 /**
  * @author chan
  * @date 2022/9/27 5:31 PM
  */
 @Service
+@RequiredArgsConstructor
 public class CmsGoodsDonServiceImpl extends ServiceImpl<GoodsDonMapper, GoodsDon> implements CmsGoodsDonService {
+	private final BeanSearcher beanSearcher;
+
+	private final GoodsDonMapper goodsDonMapper;
 
+	@Override
+	public void updateGoodsSkuPrice(Long goodsId, GoodsDon goods) {
+		goods = Optional.ofNullable(goods).orElse(goodsDonMapper.selectById(goodsId));
+		List<GoodsDonFrontSkuView> skuViews = beanSearcher.searchAll(GoodsDonFrontSkuView.class, MapUtils.builder()
+				.field(GoodsDonFrontSkuView::getGoodsId, goodsId)
+				.field(GoodsDonFrontSkuView::getStatus, true)
+				.orderBy(GoodsDonFrontSkuView::getPrice).asc().onlySelect(GoodsDonFrontSkuView::getPrice, GoodsDonFrontSkuView::getMonths).build());
+		if (!skuViews.isEmpty()) {
+			GoodsDonFrontSkuView min = skuViews.get(0);
+			if (skuViews.size() == 1) {
+				goods.setMinPrice(min.getPrice());
+				goods.setMinMonths(min.getMonths());
+				goods.setMaxPrice(min.getPrice());
+				goods.setMaxMonths(min.getMonths());
+			} else {
+				GoodsDonFrontSkuView max = skuViews.get(skuViews.size() - 1);
+				goods.setMinPrice(min.getPrice());
+				goods.setMinMonths(min.getMonths());
+				goods.setMaxPrice(max.getPrice());
+				goods.setMaxMonths(max.getMonths());
+			}
+			goodsDonMapper.updateById(goods);
+		}
+	}
 }

+ 35 - 12
netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java

@@ -1,17 +1,20 @@
 package com.cyksj.web.controller.goods;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.RandomUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
+import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.mapper.OrderDonMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.views.*;
+import com.cyksj.redis.RedisService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
 import com.ejlchina.searcher.param.Operator;
@@ -22,8 +25,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.math.BigDecimal;
-import java.util.*;
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
 
 /**
  * @author chan
@@ -43,6 +47,8 @@ public class GoodsDonController {
 
     private final GoodsDonSkuMapper goodsDonSkuMapper;
 
+    private final RedisService redisService;
+
     /**
      * 获取商品列表
      */
@@ -148,11 +154,21 @@ public class GoodsDonController {
      * 官网首页 平台列表
      */
     @GetMapping("/get/list")
-    public Result<SearchResult<GoodsFrontListView>> getGoodsList() {
-        SearchResult<GoodsFrontListView> search = beanSearcher.search(GoodsFrontListView.class, MapUtils.flatBuilder(request.getParameterMap())
+    public Result<List<GoodsFrontListView>> getGoodsList() {
+        Object value = redisService.get(RedisService.key.PC_WEB_CACHE.getName());
+        if (value != null) {
+            try {
+                List<GoodsFrontListView> list = Jsons.parseObject(value, List.class);
+                if (CollUtil.isNotEmpty(list)) {
+                    return GatewayResponse.SUCCESS.newBuilder().toResult(list);
+                }
+            } catch (Exception e) {
+            }
+        }
+        List<GoodsFrontListView> list = beanSearcher.searchAll(GoodsFrontListView.class, MapUtils.flatBuilder(request.getParameterMap())
                 .build());
         DateTime now = DateTime.now();
-        search.getDataList().forEach(data -> {
+        list.forEach(data -> {
             data.setSpecs(beanSearcher.searchFirst(GoodsDonSpec.class, MapUtils.builder().field(GoodsDonSpec::getGoodsId, data.getId()).build()));
             data.setSkuList(beanSearcher.searchAll(GoodsDonFrontSkuView.class, MapUtils.builder().field(GoodsDonFrontSkuView::getGoodsId, data.getId()).field(GoodsDonFrontSkuView::getStatus, true).orderBy(GoodsDonFrontSkuView::getPrice).asc().build()));
             Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
@@ -166,7 +182,6 @@ public class GoodsDonController {
                     data.setMonths(donFrontSkuView.getMonths());
                 }
             });
-
             OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
                     .eq(OrderDon::getGoodsId, data.getId())
                     .notIn(OrderDon::getStatus, Constant.noOrderStatus).select(OrderDon::getCreatedTime, OrderDon::getPayTime, OrderDon::getId)
@@ -202,7 +217,8 @@ public class GoodsDonController {
             notifyMsg.append("前有人购买");
             data.setNotifyMsg(notifyMsg.toString());
         });
-        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+        redisService.setNx(RedisService.key.PC_WEB_CACHE.getName(), list, RedisService.key.PC_WEB_CACHE.getTimeout());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(list);
     }
 
     /**
@@ -210,9 +226,18 @@ public class GoodsDonController {
      */
     @GetMapping("/get/homePage")
     public Result<List<GoodsHomePageView>> getGoodsHomePage() {
+        Object value = redisService.get(RedisService.key.H5_WEB_CACHE.getName());
+        if (value != null) {
+            try {
+                List<GoodsHomePageView> list = Jsons.parseObject(value, List.class);
+                if (CollUtil.isNotEmpty(list)) {
+                    return GatewayResponse.SUCCESS.newBuilder().toResult(list);
+                }
+            } catch (Exception e) {
+            }
+        }
         List<GoodsHomePageView> dataList = beanSearcher.searchAll(GoodsHomePageView.class, MapUtils.flatBuilder(request.getParameterMap())
                 .build());
-        List<GoodsHomePageView> collect = new ArrayList<>();
         dataList.forEach(data -> {
             Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
                     .eq(OrderDon::getGoodsId, data.getId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
@@ -222,11 +247,9 @@ public class GoodsDonController {
                 data.setPrice(skuView.getPrice());
                 data.setMonths(skuView.getMonths());
             }
-            if (data.getPrice() != null && data.getPrice().compareTo(BigDecimal.ZERO) > 0) {
-                collect.add(data);
-            }
         });
-        return GatewayResponse.SUCCESS.newBuilder().toResult(collect);
+        redisService.setNx(RedisService.key.H5_WEB_CACHE.getName(), dataList, RedisService.key.H5_WEB_CACHE.getTimeout());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(dataList);
     }
 
 

+ 7 - 1
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonSkuController.java

@@ -217,7 +217,8 @@ public class CmsGoodsDonSkuController {
             goodsDonSkuService.save(goodsDonSku);
 
         }
-        
+        //给平台更新额外属性
+        goodsDonService.updateGoodsSkuPrice(goods.getId(), goods);
        return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
@@ -229,6 +230,8 @@ public class CmsGoodsDonSkuController {
     @Log(module = "平台管理/编辑规格", businessType = BusinessType.PUT, isSaveRequestData = true)
     public Result<String> skuUpdate(@RequestBody GoodsDonSku sku){
         goodsDonSkuService.saveOrUpdate(sku);
+        //给平台更新额外属性
+        goodsDonService.updateGoodsSkuPrice(sku.getGoodsId(), null);
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
@@ -241,6 +244,9 @@ public class CmsGoodsDonSkuController {
     @Log(module = "平台管理/删除规格", businessType = BusinessType.DELETE)
     public Result<String> skuDelete(@PathVariable Long skuId) {
         goodsDonSkuService.removeById(skuId);
+        //给平台更新额外属性
+        GoodsDonSku sku = goodsDonSkuService.getById(skuId);
+        goodsDonService.updateGoodsSkuPrice(sku.getGoodsId(), null);
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }