master:APP商品访问榜调优;

pull/1121/head
liujiang 2025-12-04 22:36:08 +08:00
parent 60a76e9c7b
commit 9dad51c9a5
3 changed files with 24 additions and 15 deletions

View File

@ -22,6 +22,7 @@ public class StoreProdAppViewRankResDTO {
private List<SPAVRViewCountDTO> viewCountList;
@Data
@Accessors(chain = true)
public static class SPAVRViewCountDTO {
@ApiModelProperty(value = "档口ID")
private Long storeId;

View File

@ -3,6 +3,8 @@ package com.ruoyi.xkt.service.impl;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.xkt.dto.StoreProductStatistics.StoreProdAppViewRankResDTO;
import com.ruoyi.xkt.dto.storeProduct.StoreProdPriceAndMainPicAndTagDTO;
import com.ruoyi.xkt.mapper.StoreProductMapper;
import com.ruoyi.xkt.mapper.StoreProductStatisticsMapper;
import com.ruoyi.xkt.service.IStoreProductStatisticsService;
import lombok.RequiredArgsConstructor;
@ -13,8 +15,11 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
*
@ -27,6 +32,7 @@ public class StoreProductStatisticsServiceImpl implements IStoreProductStatistic
final StoreProductStatisticsMapper prodStatisticsMapper;
final RedisCache redisCache;
final StoreProductMapper storeProdMapper;
/**
* 访
@ -48,7 +54,18 @@ public class StoreProductStatisticsServiceImpl implements IStoreProductStatistic
if (CollectionUtils.isEmpty(viewCountList)) {
return redisAppViewRank;
}
redisAppViewRank.setViewCountList(viewCountList);
final List<Long> storeProdIdList = viewCountList.stream().map(StoreProdAppViewRankResDTO.SPAVRViewCountDTO::getStoreProdId).collect(Collectors.toList());
List<StoreProdPriceAndMainPicAndTagDTO> prodInfoList = this.storeProdMapper.selectPriceAndMainPicAndTagList(storeProdIdList);
Map<Long, StoreProdPriceAndMainPicAndTagDTO> prodInfoMap = CollectionUtils.isEmpty(prodInfoList) ? new HashMap<>()
: prodInfoList.stream().collect(Collectors.toMap(StoreProdPriceAndMainPicAndTagDTO::getStoreProdId, v -> v));
List<StoreProdAppViewRankResDTO.SPAVRViewCountDTO> retViewList = viewCountList.stream()
.filter(x -> prodInfoMap.containsKey(x.getStoreProdId()))
.map(x -> {
StoreProdPriceAndMainPicAndTagDTO prodInfo = prodInfoMap.get(x.getStoreProdId());
return x.setStoreId(prodInfo.getStoreId()).setStoreProdId(x.getStoreProdId()).setStoreName(prodInfo.getStoreName())
.setMainPicUrl(prodInfo.getMainPicUrl()).setProdArtNum(prodInfo.getProdArtNum()).setPrice(prodInfo.getMinPrice());
}).collect(Collectors.toList());
redisAppViewRank.setViewCountList(retViewList);
// 放到redis中
redisCache.setCacheObject(CacheConstants.STORE_PROD_VIEW_COUNT_CACHE, redisAppViewRank, 1, TimeUnit.DAYS);
return redisAppViewRank;

View File

@ -60,25 +60,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectTop10ProdViewCount">
SELECT
sps.store_id,
s.store_name,
sps.store_prod_id,
sp.prod_art_num,
spcp.min_price AS price,
sps.view_count,
sf.file_url AS mainPicUrl
SUM( sps.view_count ) AS viewCount
FROM
store_product_statistics sps
JOIN store s ON sps.store_id = s.id
JOIN store_product sp ON sps.store_prod_id = sp.id AND sp.prod_status IN (2)
JOIN store_product_file spf ON sps.store_prod_id = spf.store_prod_id AND spf.del_flag = 0 AND spf.file_type = 1 AND spf.order_num = 1
JOIN sys_file sf ON spf.file_id = sf.id
LEFT JOIN ( SELECT store_prod_id, MIN( price ) AS min_price FROM store_product_color_size GROUP BY store_prod_id ) spcp ON sp.id = spcp.store_prod_id
WHERE
sps.del_flag = 0
AND sps.voucher_date BETWEEN #{threeMonthAgo} AND #{yesterday}
sps.del_flag = 0 AND sps.voucher_date BETWEEN #{threeMonthAgo} AND #{yesterday}
GROUP BY
sps.store_prod_id
ORDER BY
sps.view_count DESC
viewCount DESC
LIMIT 10
</select>