Explorar el Código

fix 平台销量

zoujiajian hace 2 años
padre
commit
4108eacfa2

+ 30 - 34
netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java

@@ -146,9 +146,7 @@ public class GoodsDonController {
                     .select(GoodsDonSku::getPrice));
             Optional.ofNullable(goodsDonSku).ifPresent(sku -> {
                 goods.setPrice(goodsDonSku.getPrice());
-                goods.setSoldNum(goods.getVirtualSold() + orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
-                        .eq(OrderDon::getGoodsId, goods.getId())
-                        .notIn(OrderDon::getStatus, Constant.noOrderStatus)));
+	            goods.setSoldNum(getGoodsSold(goods.getId(), goods.getVirtualSold()));
             });
         });
         return GatewayResponse.SUCCESS.newBuilder().toResult(search);
@@ -171,11 +169,9 @@ public class GoodsDonController {
         search.getDataList().forEach(data -> {
             data.setSpecs(beanSearcher.searchFirst(GoodsDonSpec.class, MapUtils.builder().field(GoodsDonSpec::getGoodsId, data.getId()).build()));
             data.setSkuList(beanSearcher.searchAll(GoodsDonSku.class, MapUtils.builder().field(GoodsDonSku::getGoodsId, data.getId()).field(GoodsDonSku::getStatus, true).orderBy(GoodsDonSku::getPrice).asc().build()));
-            Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
-                    .eq(OrderDon::getGoodsId, data.getId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
-            data.setSold(sold + data.getVirtualSold());
+	        data.setSold(getGoodsSold(data.getId(), data.getVirtualSold()));
 
-            Optional.ofNullable(data.getSkuList()).ifPresent(skuList -> {
+	        Optional.ofNullable(data.getSkuList()).ifPresent(skuList -> {
                 if (skuList.size() > 0) {
                     GoodsDonSku goodsDonSku = skuList.get(0);
                     data.setPrice(goodsDonSku.getPrice());
@@ -254,9 +250,7 @@ public class GoodsDonController {
 	    }
 	    DateTime now = DateTime.now();
 	    list.forEach(data -> {
-		    Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
-				    .eq(OrderDon::getGoodsId, data.getId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
-		    data.setSold(sold + data.getSold());
+		    data.setSold(getGoodsSold(data.getId(), data.getSold()));
 		    data.setNotifyMsg(getPayMsgTime(data.getId(), now, 1, null));
 
 		    //设置特定价格
@@ -299,9 +293,7 @@ public class GoodsDonController {
 
 	    DateTime now = DateTime.now();
 	    list.forEach(data -> {
-		    Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
-				    .eq(OrderDon::getGoodsId, data.getId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
-		    data.setSold(sold + data.getSold());
+		    data.setSold(getGoodsSold(data.getId(), data.getSold()));
 		    data.setNotifyMsg(getPayMsgTime(data.getId(), now, 1, null));
 
 		    //设置特定价格
@@ -371,9 +363,7 @@ public class GoodsDonController {
 				builder.orderBy(GoodsDonSkuFrontView::getSorted).asc();
 			}
 			views.setSkuList(beanSearcher.searchAll(GoodsDonSkuFrontView.class, builder.build()));
-			Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
-					.eq(OrderDon::getGoodsId, views.getId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
-			views.setSold(sold + views.getSold());
+			views.setSold(getGoodsSold(views.getId(), views.getSold()));
 			List<GoodsDonQaFrontView> donQaFrontViews = beanSearcher.searchAll(GoodsDonQaFrontView.class, MapUtils.builder().field(GoodsDonQaFrontView::getGoodsId, id).field(GoodsDonQaFrontView::getType, 1).build());
 			views.setQuestions(donQaFrontViews);
 			redisService.setNx(goodsDetailKey, views, RedisService.key.YH_HOME_PAGHE_CACHE.getTimeout() + 60 * RandomUtil.randomInt(10));
@@ -493,9 +483,8 @@ public class GoodsDonController {
 			    data.setMonths(minPriceUserOwnsSku.getMonths());
 			    data.setDays(minPriceUserOwnsSku.getDays());
 		    }
-		    Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
-				    .eq(OrderDon::getGoodsId, data.getId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
-		    data.setSold(data.getSold() + sold);
+			//销量
+		    data.setSold(getGoodsSold(data.getId(), data.getSold()));
 		    //设置特定价格
 		    setSpecificPrice(data, fUid, dsUserId.get());
 		    return true;
@@ -870,9 +859,7 @@ public class GoodsDonController {
 					}
 				});
 			}
-			Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
-					.eq(OrderDon::getGoodsId, data.getGoodsId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
-			data.setSold(sold + data.getSold());
+			data.setSold(getGoodsSold(data.getGoodsId(), data.getSold()));
 			data.setNotifyMsg(getPayMsgTime(data.getGoodsId(), now, 1, null));
 		});
 	}
@@ -926,9 +913,7 @@ public class GoodsDonController {
         }
         DateTime now = DateTime.now();
         list.forEach(data->{
-            Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
-                    .eq(OrderDon::getGoodsId, data.getId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
-            data.setSold(sold + data.getSold());
+	        data.setSold(getGoodsSold(data.getId(), data.getSold()));
             data.setNotifyMsg(getPayMsgTime(data.getId(), now, 1, yhsId));
         });
         return GatewayResponse.SUCCESS.newBuilder().toResult(list);
@@ -989,9 +974,7 @@ public class GoodsDonController {
 			}
 			List<GoodsFrontListCategoryView> goodsFrontListViews = beanSearcher.searchAll(GoodsFrontListCategoryView.class, mapBuilder.build());
 			goodsFrontListViews.forEach(data -> {
-				Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
-						.eq(OrderDon::getGoodsId, data.getId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
-				data.setSold(sold + data.getSold());
+				data.setSold(getGoodsSold(data.getId(), data.getSold()));;
 				data.setNotifyMsg(getPayMsgTime(data.getId(), now, 1, null));
 			});
 			redisService.setNx(categoryGoodsKey, goodsFrontListViews, RedisService.key.YH_HOME_PAGHE_CACHE.getTimeout() + 10 * 60);
@@ -1063,9 +1046,7 @@ public class GoodsDonController {
 			builder.put("condition", condition);
 			List<YhShopGoodsFrontCategoryView> list = beanSearcher.searchAll(YhShopGoodsFrontCategoryView.class, builder.build());
 			list.forEach(data->{
-				Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
-						.eq(OrderDon::getGoodsId, data.getId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
-				data.setSold(sold + data.getSold());
+				data.setSold(getGoodsSold(data.getId(), data.getSold()));
 				data.setNotifyMsg(getPayMsgTime(data.getId(), now, 1, yhsId));
 				//重新设置最低价格规格
 				YhShopGoodsSku sku = yhShopGoodsSkuMapper.selectMinPriceSkuByYhsId(yhsId, data.getId());
@@ -1219,9 +1200,7 @@ public class GoodsDonController {
 			subsidyDetail.setSpecs(beanSearcher.searchFirst(GoodsDonSpecFrontView.class, MapUtils.builder().field(GoodsDonSpecFrontView::getGoodsId, subsidyDetail.getId()).build()));
 			MapBuilder builder = MapUtils.builder().field(GoodsDonSkuSubsidyDetailView::getGoodsId, subsidyDetail.getId());
 			subsidyDetail.setSkuList(beanSearcher.searchAll(GoodsDonSkuSubsidyDetailView.class, builder.build()));
-			Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
-					.eq(OrderDon::getGoodsId, subsidyDetail.getId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
-			subsidyDetail.setSold(sold + subsidyDetail.getSold());
+			subsidyDetail.setSold(getGoodsSold(subsidyDetail.getId(), subsidyDetail.getSold()));
 
 			redisService.setNx(goodsDetailKey, Jsons.toJson(subsidyDetail), RedisService.key.YH_HOME_PAGHE_CACHE.getTimeout() + 60 * RandomUtil.randomInt(10));
 		}
@@ -1281,5 +1260,22 @@ public class GoodsDonController {
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
 
+	/**
+	 * 获取平台销量
+	 * @param goodsId
+	 * @param virtualSold
+	 * @return
+	 */
+	private Integer getGoodsSold(Long goodsId, Integer virtualSold) {
+		Object soldObj = redisService.get(RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "sold:" + goodsId);
+		if (soldObj == null) {
+			Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
+					.eq(OrderDon::getGoodsId, goodsId).notIn(OrderDon::getStatus, Constant.noOrderStatus));
+			soldObj = sold + virtualSold;
+			redisService.set(RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "sold:" + goodsId, soldObj, RedisService.key.YH_HOME_PAGHE_CACHE.getTimeout());
+		}
+		return Integer.parseInt(soldObj.toString());
+	}
+
 
 }