我们提供安全,免费的手游软件下载!

安卓手机游戏下载_安卓手机软件下载_安卓手机应用免费下载-先锋下载

当前位置: 主页 > 软件教程 > 软件教程

实现电商平台上的商品榜单功能

来源:网络 更新时间:2024-07-08 09:31:06

在电商平台上,榜单信息如新品榜、畅销榜能够直观地展示各个商品的销量对比,促进用户下单或加购。本文将介绍如何实现一个简单的榜单功能。

榜单定义

在某多app上,可以查看小米手表排行榜,需要实现的功能包括:

  • 榜单是针对某类商品进行统计,比如手机排行是统计品类为手机的商品。
  • 排行统计可以是按照某一个维度,比如订单量、一个月回购量、或者几个指数汇总成一个分数进行排行。上图就是根据热卖指数进行排行。
  • 除了排行之外,还需要展示霸榜的天数,比如霸榜榜首n天、霸榜前三n天。上面排名第一就展示了霸榜榜首的天数。

榜单实现思路

统计榜单至少需要两张表,榜单主表和榜单明细表:

  • 主表记录榜单信息,比如"xx月xx手机畅销榜",统计维度、统计时间范围等。
  • 明细表主要记录商品信息、排行、统计销量、分数等信息。

创建好榜单之后,每天定时跑统计任务,将更新榜单明细表中。统计的维度,需要根据具体需求来查询数据库,然后在计算分数,最后计算排名。

霸榜天数

霸榜分成两种:霸榜榜首n天、霸榜前三n天。这就需要多加一个表,榜单明细日志表,记录每天榜单明细。统计连续的天数,首先定位到最后一天,也就是4日,前三的商品C、A、B三个商品。统计榜首,就一直排在榜首,直到前面不是榜首的商品。统计前三,需要统计两个数据,也就是排名三的往前统计,因为榜首已经统计了,所以只需要统计第2和第3的商品,也就是商品A和商品B。

统计榜首

创建榜单明细日志类:

@Data
@AllArgsConstructor
class RankDetailLog{
    /**
     * 商品
     */
    private String product;
    /**
     * 排行
     */
    private Integer rank;
    /**
     * 时间
    

创建模拟数据:

RankDetailLog detailLog7 = new RankDetailLog("C",1,"7月4日");
RankDetailLog detailLog8 = new RankDetailLog("A",2,"7月4日");
RankDetailLog detailLog9 = new RankDetailLog("B",3,"7月4日");
RankDetailLog detailLog1 = new RankDetailLog("D",1,"7月2日");
RankDetailLog detailLog2 = new RankDetailLog("B",2,"7月2日");
RankDetailLog detailLog3 = new RankDetailLog("C",3,"7月2日");
RankDetailLog detailLog4 = new RankDetailLog("B",1,"7月3日");
RankDetailLog detailLog5 = new RankDetailLog("C",2,"7月3日");
RankDetailLog detailLog6 = new RankDetailLog("A",3,"7月3日");
List detailLogList = new ArrayList<>();
detailLogList.add(detailLog1);
detailLogList.add(detailLog2);
detailLogList.add(detailLog3);
detailLogList.add(detailLog4);
detailLogList.add(detailLog5);
detailLogList.add(detailLog6);
detailLogList.add(detailLog7);
detailLogList.add(detailLog8);
detailLogList.add(detailLog9);

分组排序:

// 按日期分组并排序
Map> sortedCreateTimeMap = detailLogList.stream()
        .collect(Collectors.groupingBy(RankDetailLog::getCreateTimeStr, () -> new TreeMap<>(Comparator.reverseOrder()), Collectors.toList()));    

统计榜首:

String topProduct = null;
Integer topProductNum = 0;
for (Map.Entry> entry : sortedCreateTimeMap.entrySet()) {
    List rankDetailLogList = entry.getValue();
    if (!rankDetailLogList.isEmpty()) {
        RankDetailLog topLog = rankDetailLogList.get(0);
        String currentTopProduct = topLog.getProduct();
        if (topProduct == null) {
            topProduct = currentTopProduct;
            topProductNum = 1;
        } else {
            if (topProduct.equals(currentTopProduct)) {
                topProductNum++;
            } else {
                break;
            }
        }
    }
}
System.out.println("榜首商品:" + topProduct + ",天数:" + topProductNum);

统计前三

获取到最新商品详情,统计第2和第3的商品,存 threeProductSet 以及计算器集合 threeProductMap 中。为了统计连续性,使用 currentThreeProductSet 存当天的商品信息,再和前面的商品交集,交集的数据就是有连续性商品数据。

总结

商品榜单需要根据不同的统计维度、参数、统计时间来设计商品榜单表结构。再根据配置的信息,生成榜单详情信息。一般都使用定时方式生成榜单详情信息。需要统计连续霸榜天数,一般有两种方式,一种是统计榜首的连续天数,另一种是前三的连续天数。