From 076c7f1df538ed9c04701ebda3f6fe11c47e91e4 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 25 九月 2025 17:16:11 +0800
Subject: [PATCH] 订单统计

---
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoViewCompletionRateVO.java    |   22 +++
 framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java    |  152 +++++++++++++++++++++
 framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java           |    2 
 framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java   |   91 ++++++++++++
 framework/src/main/java/cn/lili/modules/member/mapper/FootprintMapper.java              |   67 +++++++++
 framework/src/main/java/cn/lili/modules/statistics/entity/dto/StatisticsQueryParam.java |    6 
 manager-api/src/main/java/cn/lili/controller/lmk/StatisticsController.java              |   19 ++
 framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java             |   14 ++
 framework/src/main/java/cn/lili/modules/member/service/FootprintService.java            |    2 
 9 files changed, 369 insertions(+), 6 deletions(-)

diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoViewCompletionRateVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoViewCompletionRateVO.java
new file mode 100644
index 0000000..6ee9b34
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoViewCompletionRateVO.java
@@ -0,0 +1,22 @@
+package cn.lili.modules.lmk.domain.vo;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * lmk-shop-java
+ *
+ * @author : zxl
+ * @date : 2025-09-25 15:36
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class VideoViewCompletionRateVO {
+    private String complete_rate;
+
+    private Long total_views;
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/member/mapper/FootprintMapper.java b/framework/src/main/java/cn/lili/modules/member/mapper/FootprintMapper.java
index f1897f4..d8af27e 100644
--- a/framework/src/main/java/cn/lili/modules/member/mapper/FootprintMapper.java
+++ b/framework/src/main/java/cn/lili/modules/member/mapper/FootprintMapper.java
@@ -3,6 +3,12 @@
 import cn.lili.modules.member.entity.dos.FootPrint;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 娴忚鍘嗗彶鏁版嵁澶勭悊灞�
@@ -32,4 +38,65 @@
             "WHERE li_foot_print.member_id = ${memberId} AND latest_footprints.id IS NULL; ")
     void deleteLastFootPrint(String memberId);
 
+
+    @Select("SELECT " +
+            "lfp.ref_id AS GoodsId, " +
+            "lg.goods_name AS GoodsName, "+
+            "COUNT(*) AS view_count " +
+            "FROM li_foot_print lfp " +
+            "LEFT JOIN li_goods lg ON lfp.ref_id = lg.id " +
+            "WHERE lfp.delete_flag = 0 " +
+            "AND lfp.create_time BETWEEN #{startTime} AND #{endTime} " +
+            "AND lfp.view_type = 'goods' " +
+            "AND lg.goods_name is not null " +
+            "GROUP BY lfp.ref_id " +  // 鎸夊晢鍝両D鍒嗙粍
+            "ORDER BY view_count DESC " +
+            "LIMIT #{currentLimit}"
+            )
+    List<Map<String,Object>> selectViewAndCompletionRateCountByDay(Date startTime,
+                                                                   Date endTime,
+                                                                   Integer currentLimit);
+
+    /**
+     * 鎸夎棰戠淮搴︾粺璁★細姣忎釜瑙嗛鐨勬�绘祻瑙堟暟鍜屽畬鎾巼
+     * @param startTime 寮�濮嬫椂闂�
+     * @param endTime 缁撴潫鏃堕棿
+     * @return 鍖呭惈瑙嗛ID銆佸悕绉般�佹�绘祻瑙堟暟銆佸畬鎾巼鐨勫垪琛�
+     */
+    @Select({
+            "SELECT",
+            "  lfp.ref_id AS video_id, " +
+            "  lmk.title, " +
+            "  COUNT(*) AS total_views, " +
+            "  ROUND(" +
+                    "    IF(COUNT(*) = 0, 0," +
+                    "      (SUM(" +
+                    "          CASE WHEN ( " +
+                    "            CAST(lfp.play_at AS DECIMAL(10,3)) >= CAST(lmk.video_duration AS DECIMAL(10,3)) " +
+                    "            OR " +
+                    "            CAST(lfp.play_at AS DECIMAL(10,3)) / CAST(lmk.video_duration AS DECIMAL(10,3)) > 0.9 " +
+                    "          ) THEN 1  " +
+                    "          ELSE 0 " +
+                    "        END " +
+                    "      ) / COUNT(*)) * 100  " +
+                    "    ), 2  " +
+                    "  ) AS complete_rate " +
+            "FROM li_foot_print lfp" +
+            "  LEFT JOIN lmk_video lmk ON lfp.ref_id = lmk.id " +  // 鎸夊疄闄呭叧鑱斿瓧娈佃皟鏁�
+            "WHERE " +
+            "  lfp.delete_flag = 0",
+            "  AND lfp.view_type = 'video' " +// 鍙粺璁¤棰戠被鍨�
+            "  AND lfp.create_time BETWEEN #{startTime} AND #{endTime} " +
+            "  AND lmk.video_duration > 0 " +
+            "  AND ref_id IS NOT NULL AND lmk.title IS NOT NULL "+
+            "GROUP BY lfp.ref_id "+
+            "ORDER BY total_views DESC " +
+            "LIMIT #{currentLimit}"
+    })
+    List<Map<String, Object>> selectEachVideoStats(
+             Date startTime,
+            Date endTime,
+            Integer currentLimit
+    );
+
 }
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java b/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java
index 8dcc1f9..74673cb 100644
--- a/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java
+++ b/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java
@@ -8,6 +8,7 @@
 import cn.lili.modules.member.entity.dos.FootPrint;
 import cn.lili.modules.member.entity.dto.FootPrintQueryParams;
 import cn.lili.modules.search.entity.dos.EsGoodsIndex;
+import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -75,4 +76,5 @@
      */
     long getFootprintNum();
 
+    Result getViewAndCompletionRateCount(StatisticsQueryParam queryParam);
 }
diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java
index b786b99..384a3ce 100644
--- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java
@@ -2,19 +2,18 @@
 
 import cn.lili.base.Result;
 import cn.lili.common.security.context.UserContext;
+import cn.lili.common.utils.StringUtils;
 import cn.lili.modules.goods.entity.dos.GoodsSku;
 import cn.lili.modules.goods.service.GoodsSkuService;
 import cn.lili.modules.lmk.domain.query.FootPrintQuery;
-import cn.lili.modules.lmk.domain.vo.SimpleVideoTagVO;
-import cn.lili.modules.lmk.domain.vo.VideoFootInfoVo;
-import cn.lili.modules.lmk.domain.vo.VideoFootVO;
-import cn.lili.modules.lmk.domain.vo.VideoVO;
+import cn.lili.modules.lmk.domain.vo.*;
 import cn.lili.modules.lmk.mapper.VideoMapper;
 import cn.lili.modules.member.entity.dos.FootPrint;
 import cn.lili.modules.member.entity.dto.FootPrintQueryParams;
 import cn.lili.modules.member.mapper.FootprintMapper;
 import cn.lili.modules.member.service.FootprintService;
 import cn.lili.modules.search.entity.dos.EsGoodsIndex;
+import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam;
 import cn.lili.mybatis.util.PageUtil;
 import cn.lili.utils.COSUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -28,6 +27,7 @@
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
@@ -168,7 +168,151 @@
         return this.count(lambdaQueryWrapper);
     }
 
+    @Override
+    public Result getViewAndCompletionRateCount(StatisticsQueryParam queryParam) {
+        Date startTime = null;
+        Date endTime = new Date(); // 缁撴潫鏃堕棿榛樿鏄綋鍓嶆椂闂�
+        List<String> dateList = new ArrayList<>();
 
+        Calendar calendar = Calendar.getInstance(); // 鐢ㄤ簬鏃ユ湡璁$畻鐨勬棩鍘嗗疄渚�
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        int days = 0;
+        switch (queryParam.getSearchType()) {
+            case "TODAY":
+                // 浠婂ぉ锛氫粠浠婂ぉ0鐐瑰埌鐜板湪
+                calendar.setTime(new Date()); // 閲嶇疆涓哄綋鍓嶆椂闂�
+                calendar.set(Calendar.HOUR_OF_DAY, 0); // 灏忔椂璁句负0锛�24灏忔椂鍒讹級
+                calendar.set(Calendar.MINUTE, 0);      // 鍒嗛挓璁句负0
+                calendar.set(Calendar.SECOND, 0);      // 绉掕涓�0
+                calendar.set(Calendar.MILLISECOND, 0); // 姣璁句负0
+                startTime = calendar.getTime();        // 寰楀埌浠婂ぉ0鐐圭殑Date瀵硅薄
+                dateList.add(sdf.format(startTime));
+                break;
+            case "YESTERDAY":
+                // 鏄ㄥぉ锛氫粠鏄ㄥぉ0鐐瑰埌鏄ㄥぉ23:59:59.999
+                calendar.setTime(new Date());
+                calendar.add(Calendar.DATE, -1); // 鏃ユ湡鍑�1澶╋紙鍙樹负鏄ㄥぉ锛�
+
+                // 璁剧疆鏄ㄥぉ0鐐�
+                calendar.set(Calendar.HOUR_OF_DAY, 0);
+                calendar.set(Calendar.MINUTE, 0);
+                calendar.set(Calendar.SECOND, 0);
+                calendar.set(Calendar.MILLISECOND, 0);
+                startTime = calendar.getTime();
+
+                // 璁剧疆鏄ㄥぉ23:59:59.999
+                calendar.set(Calendar.HOUR_OF_DAY, 23);
+                calendar.set(Calendar.MINUTE, 59);
+                calendar.set(Calendar.SECOND, 59);
+                calendar.set(Calendar.MILLISECOND, 999);
+                endTime = calendar.getTime();
+
+                dateList.add(sdf.format(startTime));
+                break;
+            case "LAST_SEVEN":
+                // 杩囧幓涓冨ぉ锛氫粠7澶╁墠0鐐瑰埌鐜板湪锛堝惈浠婂ぉ鍏�7澶╋級
+                calendar.setTime(new Date());
+                calendar.add(Calendar.DATE, -6); // 鏃ユ湡鍑�6澶╋紙7澶╁墠鐨勪粖澶╋級
+
+                // 璁剧疆7澶╁墠0鐐�
+                calendar.set(Calendar.HOUR_OF_DAY, 0);
+                calendar.set(Calendar.MINUTE, 0);
+                calendar.set(Calendar.SECOND, 0);
+                calendar.set(Calendar.MILLISECOND, 0);
+                startTime = calendar.getTime();
+
+                days = 7;
+                // 寰幆鐢熸垚7澶╃殑鏃ユ湡瀛楃涓�
+                Calendar tempCalendar = Calendar.getInstance();
+                tempCalendar.setTime(startTime);
+                for (int i = 0; i < days; i++) {
+                    dateList.add(sdf.format(tempCalendar.getTime()));
+                    tempCalendar.add(Calendar.DATE, 1); // 姣忓ぉ绱姞1澶�
+                }
+                break;
+            case "LAST_THIRTY":
+                // 杩囧幓30澶╋細浠�30澶╁墠0鐐瑰埌鐜板湪锛堝惈浠婂ぉ鍏�30澶╋級
+                calendar.setTime(new Date());
+                calendar.add(Calendar.DATE, -29); // 鏃ユ湡鍑�29澶╋紙30澶╁墠鐨勪粖澶╋級
+
+                // 璁剧疆30澶╁墠0鐐�
+                calendar.set(Calendar.HOUR_OF_DAY, 0);
+                calendar.set(Calendar.MINUTE, 0);
+                calendar.set(Calendar.SECOND, 0);
+                calendar.set(Calendar.MILLISECOND, 0);
+                startTime = calendar.getTime();
+
+                days = 30;
+                // 寰幆鐢熸垚30澶╃殑鏃ユ湡瀛楃涓�
+                Calendar tempCalendar30 = Calendar.getInstance();
+                tempCalendar30.setTime(startTime);
+                for (int i = 0; i < days; i++) {
+                    dateList.add(sdf.format(tempCalendar30.getTime()));
+                    tempCalendar30.add(Calendar.DATE, 1); // 姣忓ぉ绱姞1澶�
+                }
+                break;
+            default:
+                return Result.error("涓嶆敮鎸佺殑鏃堕棿鑼冨洿绫诲瀷");
+        }
+        if ("goods".equals(queryParam.getCurrentType())){
+            List<Map<String, Object>> maps = baseMapper.selectViewAndCompletionRateCountByDay(startTime, endTime,queryParam.getCurrentLimit());
+            Map<String,Long> viewPrintMap = maps.stream()
+                    .collect(Collectors.toMap(
+                            map -> {
+                                String goodsId = Objects.toString(map.get("GoodsId"), ""); // 绌哄�煎鐞�
+                                String goodsName = Objects.toString(map.get("GoodsName"), ""); // 绌哄�煎鐞�
+                                return goodsName + " | " + goodsId; // 鐢▅鍒嗛殧锛屾柟渚垮悗缁媶鍒�
+                            },
+                            map-> Long.valueOf(map.get("view_count").toString()),
+                            (existing, replacement) -> existing,
+                            LinkedHashMap::new  // 鎸囧畾浣跨敤 LinkedHashMap锛屼繚鐣欐彃鍏ラ『搴�
+                    ));
+            List<String> yData = new ArrayList<>();
+            List<Long> xData = new ArrayList<>();
+
+            for (Map.Entry<String, Long> entry : viewPrintMap.entrySet()){
+                yData.add(entry.getKey());
+                xData.add(entry.getValue());
+            }
+            Map<String,Object> data = new HashMap<>();
+            data.put("yData", yData);
+            data.put("xData", xData);
+            return Result.ok().data(data);
+        }else{
+            List<Map<String, Object>> maps = baseMapper.selectEachVideoStats(startTime, endTime,queryParam.getCurrentLimit());
+            Map<String, VideoViewCompletionRateVO> viewPrintMap = maps.stream()
+                    .collect(Collectors.toMap(
+                            map -> {
+                                String videoId = Objects.toString(map.get("video_id"), ""); // 绌哄�煎鐞�
+                                String videoName = Objects.toString(map.get("title"), ""); // 绌哄�煎鐞�
+                                return videoName + " | " + videoId; // 鐢▅鍒嗛殧锛屾柟渚垮悗缁媶鍒�
+                            },
+                            map-> {
+                                VideoViewCompletionRateVO vo = new VideoViewCompletionRateVO();
+                                vo.setTotal_views(Long.valueOf(map.get("total_views").toString()));
+                                vo.setComplete_rate(map.get("complete_rate").toString());
+                                return vo;
+                            },
+                            (existing, replacement) -> existing,
+                            LinkedHashMap::new  // 鎸囧畾浣跨敤 LinkedHashMap锛屼繚鐣欐彃鍏ラ『搴�
+                    ));
+            List<String> yData = new ArrayList<>();
+            List<Long> xData = new ArrayList<>();
+            List<String> rateData = new ArrayList<>();
+
+            for (Map.Entry<String, VideoViewCompletionRateVO> entry : viewPrintMap.entrySet()){
+                yData.add(entry.getKey());
+                xData.add(entry.getValue().getTotal_views());
+                rateData.add(entry.getValue().getComplete_rate());
+            }
+            Map<String,Object> data = new HashMap<>();
+            data.put("yData", yData);
+            data.put("xData", xData);
+            data.put("rateData", rateData);
+            return Result.ok().data(data);
+        }
+
+    }
 
 
 }
diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java
index 6b414ef..185947a 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java
@@ -206,4 +206,18 @@
             "  ORDER BY " +
             "  day ASC")
     List<Map<String, Object>>  selectOrderCountByDay(Date startTime, Date endTime);
+
+    @Select("SELECT " +
+            "  DATE(create_time) AS day, " +
+            "  HOUR(create_time) AS hour," +
+            "  COUNT(*) AS count " +
+            "  FROM" +
+            "  li_order o" +
+            "  WHERE " +
+            "  o.create_time BETWEEN #{startTime} AND #{endTime} " +
+            "  GROUP BY" +
+            "  day " +
+            "  ORDER BY " +
+            "  day , hour ASC")
+    List<Map<String, Object>>  selectOrderTimePeriod(Date startTime, Date endTime);
 }
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
index 5755e82..7b9fb68 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
@@ -360,4 +360,6 @@
      * @return
      */
     Result getOrderCount(StatisticsQueryParam queryParam);
+
+    Result getOrderTimePeriod(StatisticsQueryParam queryParam);
 }
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
index 76fcfeb..62358bd 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
@@ -1368,13 +1368,100 @@
                         map -> map.get("day").toString(),  // 鏃ユ湡瀛楃涓诧紙濡�2023-09-19锛�
                         map -> Long.valueOf(map.get("count").toString())  // 璁㈠崟鏁伴噺
                 ));
-        System.out.println(dayCountMap);
+
         List<Long> orderCounts = new ArrayList<>();
         for (String date : dateList) {
             // 鏍稿績锛氬瓨鍦ㄥ垯鍙栨煡璇㈢粨鏋滐紝涓嶅瓨鍦ㄥ垯琛�0
             orderCounts.add(dayCountMap.getOrDefault(date, 0L));
         }
-        System.out.println(orderCounts);
+
+
+        return Result.ok().data(orderCounts);
+    }
+
+    @Override
+    public Result getOrderTimePeriod(StatisticsQueryParam queryParam) {
+        Date startTime = null;
+        Date endTime = new Date(); // 缁撴潫鏃堕棿榛樿鏄綋鍓嶆椂闂�
+        List<String> dateList = new ArrayList<>();
+
+        Calendar calendar = Calendar.getInstance(); // 鐢ㄤ簬鏃ユ湡璁$畻鐨勬棩鍘嗗疄渚�
+        for (int i =0;i<=24;i++){
+            dateList.add(i + "鐐�");
+        }
+        switch (queryParam.getSearchType()) {
+            case "TODAY":
+                // 浠婂ぉ锛氫粠浠婂ぉ0鐐瑰埌鐜板湪
+                calendar.setTime(new Date()); // 閲嶇疆涓哄綋鍓嶆椂闂�
+                calendar.set(Calendar.HOUR_OF_DAY, 0); // 灏忔椂璁句负0锛�24灏忔椂鍒讹級
+                calendar.set(Calendar.MINUTE, 0);      // 鍒嗛挓璁句负0
+                calendar.set(Calendar.SECOND, 0);      // 绉掕涓�0
+                calendar.set(Calendar.MILLISECOND, 0); // 姣璁句负0
+                startTime = calendar.getTime();        // 寰楀埌浠婂ぉ0鐐圭殑Date瀵硅薄
+                break;
+            case "YESTERDAY":
+                // 鏄ㄥぉ锛氫粠鏄ㄥぉ0鐐瑰埌鏄ㄥぉ23:59:59.999
+                calendar.setTime(new Date());
+                calendar.add(Calendar.DATE, -1); // 鏃ユ湡鍑�1澶╋紙鍙樹负鏄ㄥぉ锛�
+
+                // 璁剧疆鏄ㄥぉ0鐐�
+                calendar.set(Calendar.HOUR_OF_DAY, 0);
+                calendar.set(Calendar.MINUTE, 0);
+                calendar.set(Calendar.SECOND, 0);
+                calendar.set(Calendar.MILLISECOND, 0);
+                startTime = calendar.getTime();
+
+                // 璁剧疆鏄ㄥぉ23:59:59.999
+                calendar.set(Calendar.HOUR_OF_DAY, 23);
+                calendar.set(Calendar.MINUTE, 59);
+                calendar.set(Calendar.SECOND, 59);
+                calendar.set(Calendar.MILLISECOND, 999);
+                endTime = calendar.getTime();
+
+                break;
+            case "LAST_SEVEN":
+                // 杩囧幓涓冨ぉ锛氫粠7澶╁墠0鐐瑰埌鐜板湪锛堝惈浠婂ぉ鍏�7澶╋級
+                calendar.setTime(new Date());
+                calendar.add(Calendar.DATE, -6); // 鏃ユ湡鍑�6澶╋紙7澶╁墠鐨勪粖澶╋級
+
+                // 璁剧疆7澶╁墠0鐐�
+                calendar.set(Calendar.HOUR_OF_DAY, 0);
+                calendar.set(Calendar.MINUTE, 0);
+                calendar.set(Calendar.SECOND, 0);
+                calendar.set(Calendar.MILLISECOND, 0);
+                startTime = calendar.getTime();
+
+                break;
+            case "LAST_THIRTY":
+                // 杩囧幓30澶╋細浠�30澶╁墠0鐐瑰埌鐜板湪锛堝惈浠婂ぉ鍏�30澶╋級
+                calendar.setTime(new Date());
+                calendar.add(Calendar.DATE, -29); // 鏃ユ湡鍑�29澶╋紙30澶╁墠鐨勪粖澶╋級
+
+                // 璁剧疆30澶╁墠0鐐�
+                calendar.set(Calendar.HOUR_OF_DAY, 0);
+                calendar.set(Calendar.MINUTE, 0);
+                calendar.set(Calendar.SECOND, 0);
+                calendar.set(Calendar.MILLISECOND, 0);
+                startTime = calendar.getTime();
+
+                break;
+            default:
+                return Result.error("涓嶆敮鎸佺殑鏃堕棿鑼冨洿绫诲瀷");
+        }
+        List<Map<String, Object>> maps = baseMapper.selectOrderTimePeriod(startTime,endTime);
+
+        Map<String, Long> dayCountMap = maps.stream()
+                .collect(Collectors.toMap(
+                        map -> map.get("day").toString(),  // 鏃ユ湡瀛楃涓诧紙濡�2023-09-19锛�
+                        map -> Long.valueOf(map.get("count").toString())  // 璁㈠崟鏁伴噺
+                ));
+
+        List<Long> orderCounts = new ArrayList<>();
+        for (String date : dateList) {
+            // 鏍稿績锛氬瓨鍦ㄥ垯鍙栨煡璇㈢粨鏋滐紝涓嶅瓨鍦ㄥ垯琛�0
+            orderCounts.add(dayCountMap.getOrDefault(date, 0L));
+        }
+
 
         return Result.ok().data(orderCounts);
     }
diff --git a/framework/src/main/java/cn/lili/modules/statistics/entity/dto/StatisticsQueryParam.java b/framework/src/main/java/cn/lili/modules/statistics/entity/dto/StatisticsQueryParam.java
index 1afef2c..b29c4c3 100644
--- a/framework/src/main/java/cn/lili/modules/statistics/entity/dto/StatisticsQueryParam.java
+++ b/framework/src/main/java/cn/lili/modules/statistics/entity/dto/StatisticsQueryParam.java
@@ -31,4 +31,10 @@
     @ApiModelProperty(value = "搴楅摵ID")
     private String storeId;
 
+    @ApiModelProperty(value = "绫诲瀷锛氬晢鍝乬oods 銆佽棰憊ideo")
+    private String currentType;
+
+    @ApiModelProperty(value = "鏄剧ず鎺掑悕锛�10,20,30")
+    private Integer currentLimit;
+
 }
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/StatisticsController.java b/manager-api/src/main/java/cn/lili/controller/lmk/StatisticsController.java
index 54337e4..e2984b3 100644
--- a/manager-api/src/main/java/cn/lili/controller/lmk/StatisticsController.java
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/StatisticsController.java
@@ -6,6 +6,7 @@
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.lmk.domain.vo.PvUvVO;
 import cn.lili.modules.lmk.enums.general.StatisticsSearchTypeEnum;
+import cn.lili.modules.member.service.FootprintService;
 import cn.lili.modules.order.order.service.OrderService;
 import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam;
 import cn.lili.modules.statistics.entity.vo.PlatformViewVO;
@@ -31,6 +32,8 @@
 @RequestMapping("/manager/lmk/statistics")
 public class StatisticsController {
     private final OrderService orderService;
+
+    private final FootprintService footprintService;
 
     @ApiOperation(value = "鑾峰彇pv銆乽v娴侀噺鏁版嵁 琛ㄥ崟鑾峰彇")
     @GetMapping("/pvUv")
@@ -81,4 +84,20 @@
     }
 
 
+    /**
+     * 瑙嗛/鍟嗗搧 瀹屾挱鐜囧拰娴忚閲忕粺璁�
+     * @param queryParam
+     * @return
+     */
+    @GetMapping("/viewAndCompletionRateCount")
+    public Result getViewAndCompletionRateCount(StatisticsQueryParam queryParam) {
+        return footprintService.getViewAndCompletionRateCount(queryParam);
+    }
+
+
+    @GetMapping("/orderTimePeriod")
+    public Result getOrderTimePeriod(StatisticsQueryParam queryParam) {
+        return orderService.getOrderTimePeriod(queryParam);
+
+    }
 }

--
Gitblit v1.8.0