Commit cb496119 authored by Hong's avatar Hong
Browse files

首页优化查询方式

parent cb074c8a
......@@ -4,7 +4,8 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.linlinjava.litemall.core.system.SystemConfig;
import org.linlinjava.litemall.core.util.ResponseUtil;
import org.linlinjava.litemall.db.domain.*;
import org.linlinjava.litemall.db.domain.LitemallCategory;
import org.linlinjava.litemall.db.domain.LitemallGoods;
import org.linlinjava.litemall.db.service.*;
import org.linlinjava.litemall.wx.service.HomeCacheManager;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -18,6 +19,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.*;
/**
* 首页服务
......@@ -26,22 +28,35 @@ import java.util.Map;
@RequestMapping("/wx/home")
@Validated
public class WxHomeController {
private final Log logger = LogFactory.getLog(WxHomeController.class);
@Autowired
private LitemallAdService adService;
@Autowired
private LitemallGoodsService goodsService;
@Autowired
private LitemallBrandService brandService;
@Autowired
private LitemallTopicService topicService;
@Autowired
private LitemallCategoryService categoryService;
@Autowired
private LitemallGrouponRulesService grouponRulesService;
@Autowired
private LitemallCouponService couponService;
private final static ArrayBlockingQueue<Runnable> WORK_QUEUE = new ArrayBlockingQueue<>(9);
private final static RejectedExecutionHandler HANDLER = new ThreadPoolExecutor.CallerRunsPolicy();
private static ThreadPoolExecutor executorService = new ThreadPoolExecutor(9, 9, 1000, TimeUnit.MILLISECONDS, WORK_QUEUE, HANDLER);
@GetMapping("/cache")
public Object cache(@NotNull String key) {
if (!key.equals("litemall_cache")) {
......@@ -65,34 +80,67 @@ public class WxHomeController {
return ResponseUtil.ok(HomeCacheManager.getCacheData(HomeCacheManager.INDEX));
}
Map<String, Object> data = new HashMap<>();
List<LitemallAd> banner = adService.queryIndex();
data.put("banner", banner);
Callable<List> bannerListCallable = () -> adService.queryIndex();
List<LitemallCategory> channel = categoryService.queryChannel();
data.put("channel", channel);
Callable<List> channelListCallable = () -> categoryService.queryChannel();
List<LitemallCoupon> couponList = couponService.queryList(0, 3);
data.put("couponList", couponList);
Callable<List> couponListCallable = () -> couponService.queryList(0, 3);
List<LitemallGoods> newGoods = goodsService.queryByNew(0, SystemConfig.getNewLimit());
data.put("newGoodsList", newGoods);
Callable<List> newGoodsListCallable = () -> goodsService.queryByNew(0, SystemConfig.getNewLimit());
List<LitemallGoods> hotGoods = goodsService.queryByHot(0, SystemConfig.getHotLimit());
data.put("hotGoodsList", hotGoods);
Callable<List> hotGoodsListCallable = () -> goodsService.queryByHot(0, SystemConfig.getHotLimit());
List<LitemallBrand> brandList = brandService.queryVO(0, SystemConfig.getBrandLimit());
data.put("brandList", brandList);
Callable<List> brandListCallable = () -> brandService.queryVO(0, SystemConfig.getBrandLimit());
List<LitemallTopic> topicList = topicService.queryList(0, SystemConfig.getTopicLimit());
data.put("topicList", topicList);
Callable<List> topicListCallable = () -> topicService.queryList(0, SystemConfig.getTopicLimit());
//团购专区
List<Map<String, Object>> grouponList = grouponRulesService.queryList(0, 5);
data.put("grouponList", grouponList);
Callable<List> grouponListCallable = () -> grouponRulesService.queryList(0, 5);
Callable<List> floorGoodsListCallable = this::getCategoryList;
FutureTask<List> bannerTask = new FutureTask<>(bannerListCallable);
FutureTask<List> channelTask = new FutureTask<>(channelListCallable);
FutureTask<List> couponListTask = new FutureTask<>(couponListCallable);
FutureTask<List> newGoodsListTask = new FutureTask<>(newGoodsListCallable);
FutureTask<List> hotGoodsListTask = new FutureTask<>(hotGoodsListCallable);
FutureTask<List> brandListTask = new FutureTask<>(brandListCallable);
FutureTask<List> topicListTask = new FutureTask<>(topicListCallable);
FutureTask<List> grouponListTask = new FutureTask<>(grouponListCallable);
FutureTask<List> floorGoodsListTask = new FutureTask<>(floorGoodsListCallable);
executorService.submit(bannerTask);
executorService.submit(channelTask);
executorService.submit(couponListTask);
executorService.submit(newGoodsListTask);
executorService.submit(hotGoodsListTask);
executorService.submit(brandListTask);
executorService.submit(topicListTask);
executorService.submit(grouponListTask);
executorService.submit(floorGoodsListTask);
try {
data.put("banner", bannerTask.get());
data.put("channel", channelTask.get());
data.put("couponList", couponListTask.get());
data.put("newGoodsList", newGoodsListTask.get());
data.put("hotGoodsList", hotGoodsListTask.get());
data.put("brandList", brandListTask.get());
data.put("topicList", topicListTask.get());
data.put("grouponList", grouponListTask.get());
data.put("floorGoodsList", floorGoodsListTask);
}
catch (Exception e) {
e.printStackTrace();
}
//缓存数据
HomeCacheManager.loadData(HomeCacheManager.INDEX, data);
return ResponseUtil.ok(data);
}
private List<Map> getCategoryList() {
List<Map> categoryList = new ArrayList<>();
List<LitemallCategory> catL1List = categoryService.queryL1WithoutRecommend(0, SystemConfig.getCatlogListLimit());
for (LitemallCategory catL1 : catL1List) {
......@@ -102,23 +150,19 @@ public class WxHomeController {
l2List.add(catL2.getId());
}
List<LitemallGoods> categoryGoods = null;
List<LitemallGoods> categoryGoods;
if (l2List.size() == 0) {
categoryGoods = new ArrayList<>();
} else {
categoryGoods = goodsService.queryByCategory(l2List, 0, SystemConfig.getCatlogMoreLimit());
}
Map<String, Object> catGoods = new HashMap<String, Object>();
Map<String, Object> catGoods = new HashMap<>();
catGoods.put("id", catL1.getId());
catGoods.put("name", catL1.getName());
catGoods.put("goodsList", categoryGoods);
categoryList.add(catGoods);
}
data.put("floorGoodsList", categoryList);
//缓存数据
HomeCacheManager.loadData(HomeCacheManager.INDEX, data);
return ResponseUtil.ok(data);
return categoryList;
}
}
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment