From 79b026c753c25f998776d8a6210fc6afab97e647 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 16 十月 2025 09:14:35 +0800
Subject: [PATCH] 统计

---
 framework/src/main/resources/mapper/lmk/orderMapper.xml                               |   51 ++++++++
 framework/src/main/java/cn/lili/modules/lmk/mapper/LmkOrderSelectMapper.java          |   10 
 framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java  |    4 
 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 |  182 +++++++++++++++++++++++++++---
 framework/src/main/java/cn/lili/modules/member/mapper/FootprintMapper.java            |   37 ++++--
 manager-api/src/main/java/cn/lili/controller/lmk/StatisticsController.java            |   38 ------
 7 files changed, 244 insertions(+), 80 deletions(-)

diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/LmkOrderSelectMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/LmkOrderSelectMapper.java
index 4ea2434..0cde631 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/mapper/LmkOrderSelectMapper.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/LmkOrderSelectMapper.java
@@ -12,13 +12,13 @@
 @Mapper
 public interface LmkOrderSelectMapper extends BaseMapper<Order> {
 
-    List<Map<String, Object>> selectOrderCountByDay(Date startTime, Date endTime);
+    List<Map<String, Object>> selectOrderCountByDay(Date startTime, Date endTime,String storeId);
 
-    List<Map<String, Object>>  selectOrderTimePeriod(Date startTime, Date endTime);
+    List<Map<String, Object>>  selectOrderTimePeriod(Date startTime, Date endTime,String storeId);
 
-    List<Map<String,Object>> selectViewDataCount(Date startTime, Date endTime);
+    List<Map<String,Object>> selectViewDataCount(Date startTime, Date endTime,String storeId, List<String> goodsIds);
 
-    List<Map<String,Object>> selectProductRepurchase(Date startTime, Date endTime,Integer currentLimit);
+    List<Map<String,Object>> selectProductRepurchase(Date startTime, Date endTime,Integer currentLimit,String storeId);
 
-
+    List<Map<String,Object>> selectPvUv(Date startTime, Date endTime,String storeId,List<String> goodsIds);
 }
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 d8af27e..06d97b4 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
@@ -39,23 +39,29 @@
     void deleteLastFootPrint(String memberId);
 
 
-    @Select("SELECT " +
+    @Select("<script>" +
+            "SELECT " +
             "lfp.ref_id AS GoodsId, " +
-            "lg.goods_name AS GoodsName, "+
+            "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鍒嗙粍
+            "AND lg.goods_name IS NOT NULL " +
+            "<if test='storeId != null and storeId != \"\"'>" +
+            "AND lfp.store_id = #{storeId} " +
+            "</if>" +
+            "GROUP BY lfp.ref_id " +
             "ORDER BY view_count DESC " +
-            "LIMIT #{currentLimit}"
+            "LIMIT #{currentLimit}" +
+            "</script>"
             )
     List<Map<String,Object>> selectViewAndCompletionRateCountByDay(Date startTime,
                                                                    Date endTime,
-                                                                   Integer currentLimit);
+                                                                   Integer currentLimit,
+    String storeId);
 
     /**
      * 鎸夎棰戠淮搴︾粺璁★細姣忎釜瑙嗛鐨勬�绘祻瑙堟暟鍜屽畬鎾巼
@@ -63,8 +69,8 @@
      * @param endTime 缁撴潫鏃堕棿
      * @return 鍖呭惈瑙嗛ID銆佸悕绉般�佹�绘祻瑙堟暟銆佸畬鎾巼鐨勫垪琛�
      */
-    @Select({
-            "SELECT",
+    @Select("<script>" +
+            "SELECT" +
             "  lfp.ref_id AS video_id, " +
             "  lmk.title, " +
             "  COUNT(*) AS total_views, " +
@@ -84,19 +90,24 @@
             "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' " +// 鍙粺璁¤棰戠被鍨�
+            "  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 "+
+            "<if test='storeId != null and storeId != \"\"'>" +
+            " AND lfp.store_id = #{storeId} " +
+            "</if>" +
             "GROUP BY lfp.ref_id "+
             "ORDER BY total_views DESC " +
-            "LIMIT #{currentLimit}"
-    })
+            "LIMIT #{currentLimit}"+
+            "</script>"
+    )
     List<Map<String, Object>> selectEachVideoStats(
              Date startTime,
             Date endTime,
-            Integer currentLimit
+            Integer currentLimit,
+             String storeId
     );
 
 }
\ No newline at end of file
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 fabe22c..187485f 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
@@ -263,7 +263,7 @@
         }
 
         if ("goods".equals(queryParam.getCurrentType())){
-            List<Map<String, Object>> maps = baseMapper.selectViewAndCompletionRateCountByDay(startTime, endTime,queryParam.getCurrentLimit());
+            List<Map<String, Object>> maps = baseMapper.selectViewAndCompletionRateCountByDay(startTime, endTime,queryParam.getCurrentLimit(),queryParam.getStoreId());
             Map<String,Long> viewPrintMap = maps.stream()
                     .collect(Collectors.toMap(
                             map -> {
@@ -287,7 +287,7 @@
             data.put("xData", xData);
             return Result.ok().data(data);
         }else{
-            List<Map<String, Object>> maps = baseMapper.selectEachVideoStats(startTime, endTime,queryParam.getCurrentLimit());
+            List<Map<String, Object>> maps = baseMapper.selectEachVideoStats(startTime, endTime,queryParam.getCurrentLimit(),queryParam.getStoreId());
             Map<String, VideoViewCompletionRateVO> viewPrintMap = maps.stream()
                     .collect(Collectors.toMap(
                             map -> {
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 e6eb89e..81da744 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
@@ -363,5 +363,7 @@
 
     Result getOrderTimePeriod(StatisticsQueryParam queryParam);
 
+    Result getPvUv(StatisticsQueryParam queryParam);
+
     Result gerProductRepurchase(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 966c43c..b6378e5 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
@@ -17,27 +17,23 @@
 import cn.lili.common.event.TransactionCommitSendMQEvent;
 import cn.lili.common.exception.ServiceException;
 import cn.lili.common.properties.RocketmqCustomProperties;
-import cn.lili.common.security.AuthUser;
 import cn.lili.common.security.OperationalJudgment;
 import cn.lili.common.security.context.UserContext;
 import cn.lili.common.security.enums.UserEnums;
 import cn.lili.common.utils.CurrencyUtil;
 import cn.lili.common.utils.SnowFlake;
 import cn.lili.common.utils.StringUtils;
-import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.goods.entity.dos.Goods;
 import cn.lili.modules.goods.entity.dos.GoodsSku;
 import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage;
 import cn.lili.modules.goods.service.GoodsService;
 import cn.lili.modules.goods.service.GoodsSkuService;
 import cn.lili.modules.lmk.domain.entity.CouponVirtual;
-import cn.lili.modules.lmk.domain.vo.OrderCountByDayAndHourVO;
 import cn.lili.modules.lmk.domain.vo.OrderCountVO;
 import cn.lili.modules.lmk.enums.general.AdminRoleEnum;
 import cn.lili.modules.lmk.enums.general.VirtualGoodsTypeEnum;
 import cn.lili.modules.lmk.mapper.LmkOrderSelectMapper;
 import cn.lili.modules.lmk.service.CouponVirtualService;
-import cn.lili.modules.member.entity.dos.Member;
 import cn.lili.modules.member.entity.dto.MemberAddressDTO;
 import cn.lili.modules.member.mapper.MemberMapper;
 import cn.lili.modules.order.cart.entity.dto.TradeDTO;
@@ -52,9 +48,7 @@
 import cn.lili.modules.order.trade.entity.dos.OrderLog;
 import cn.lili.modules.order.trade.service.OrderLogService;
 import cn.lili.modules.payment.entity.enums.PaymentMethodEnum;
-import cn.lili.modules.permission.entity.dos.AdminUser;
 import cn.lili.modules.permission.service.AdminUserService;
-import cn.lili.modules.permission.service.RoleService;
 import cn.lili.modules.promotion.entity.dos.Coupon;
 import cn.lili.modules.promotion.entity.dos.Pintuan;
 import cn.lili.modules.promotion.service.CouponService;
@@ -92,7 +86,6 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import io.reactivex.rxjava3.core.Maybe;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
@@ -117,13 +110,10 @@
 import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
-import cn.lili.modules.permission.entity.dos.Role;
+
 /**
  * 瀛愯鍗曚笟鍔″眰瀹炵幇
  *
@@ -1409,7 +1399,7 @@
             }
         }
 
-        List<Map<String, Object>> maps = lmkOrderSelectMapper.selectOrderCountByDay(startTime,endTime);
+        List<Map<String, Object>> maps = lmkOrderSelectMapper.selectOrderCountByDay(startTime,endTime,queryParam.getStoreId());
 
         Map<String, Long> dayCountMap = maps.stream()
                 .collect(Collectors.toMap(
@@ -1504,32 +1494,184 @@
 
 
 
-        List<Map<String, Object>> maps = lmkOrderSelectMapper.selectOrderTimePeriod(startTime,endTime);
-        List<Map<String,Object>> countMap = lmkOrderSelectMapper.selectViewDataCount(startTime,endTime);
+        List<Map<String, Object>> maps = lmkOrderSelectMapper.selectOrderTimePeriod(startTime,endTime,queryParam.getStoreId());
+        List<String> goodsIds = new ArrayList<>();
+        //濡傛灉鏌ヨ鏉′欢甯︿簡搴楅摵 鏌ヨ搴楅摵鐨勫晢鍝�
+        if (StringUtils.isNotBlank(queryParam.getStoreId())){
+            List<Goods> list = new LambdaQueryChainWrapper<>(goodsService.getBaseMapper())
+                    .eq(Goods::getDeleteFlag, Boolean.FALSE)
+                    .eq(Goods::getStoreId, queryParam.getStoreId())
+                    .list();
+            goodsIds = list.stream().map(Goods::getId).collect(Collectors.toList());
+        }
+
+
+        List<Map<String,Object>> countMap = lmkOrderSelectMapper.selectViewDataCount(startTime,endTime,queryParam.getStoreId(),goodsIds);
+
+
         Map<String, Long> countByDayHour = maps.stream()
                 .collect(Collectors.toMap(
                         map -> map.get("hour").toString(),
                         map -> Long.valueOf(map.get("count").toString()),
                         Long::sum  // 濡傛灉鏈夐噸澶嶏紝绱姞count
                 ));
-        System.out.println("鎵撳嵃璁板綍---------------------------------------");
-        System.out.println(countMap);
-        System.out.println("---------------------------------------");
+        Map<String, Long> viewDataCountByDayHour = countMap.stream()
+                        .collect(Collectors.toMap(
+                                map -> map.get("hour").toString(),
+                                map -> Long.valueOf(map.get("count").toString()),
+                                Long::sum
+                        ));
         // 閬嶅巻鏌ョ湅缁撴灉
         List<Long> countList = new ArrayList<>();
+        List<Long> viewData = new ArrayList<>();
         for (int i = 0; i < 24; i++) {
             String hourKey = String.valueOf(i);
+            Long viewDataCount = viewDataCountByDayHour.getOrDefault(hourKey,0L);
             Long count = countByDayHour.getOrDefault(hourKey, 0L);
             countList.add(count);
+            viewData.add(viewDataCount);
         }
 
         Map<String,Object> map = new HashMap<>();
         map.put("dateData",dateList);
         map.put("countData",countList);
-        //TODO 娴忚鏁版嵁鏈姞鍏�
-//        map.put();
+        map.put("viewData",viewData);
 
         return Result.ok().data(map);
+    }
+    @Override
+    public Result getPvUv(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;
+        if (queryParam.getYear() != null && queryParam.getMonth() != null) {
+            Date[] dates =CommonUtil.getMonthStartAndEnd(queryParam.getYear(),queryParam.getMonth());
+            startTime = dates[0];
+            endTime = dates[1];
+            Calendar tempCalendar = Calendar.getInstance();
+            tempCalendar.setTime(startTime);
+            days = tempCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+            for (int i = 0; i < days; i++) {
+                dateList.add(sdf.format(tempCalendar.getTime()));
+                tempCalendar.add(Calendar.DATE, 1); // 姣忓ぉ绱姞1澶�
+            }
+        }else{
+            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("涓嶆敮鎸佺殑鏃堕棿鑼冨洿绫诲瀷");
+            }
+        }
+        List<String> goodsIds = new ArrayList<>();
+        //濡傛灉鏌ヨ鏉′欢甯︿簡搴楅摵 鏌ヨ搴楅摵鐨勫晢鍝�
+        if (StringUtils.isNotBlank(queryParam.getStoreId())){
+            List<Goods> list = new LambdaQueryChainWrapper<>(goodsService.getBaseMapper())
+                    .eq(Goods::getDeleteFlag, Boolean.FALSE)
+                    .eq(Goods::getStoreId, queryParam.getStoreId())
+                    .list();
+            goodsIds = list.stream().map(Goods::getId).collect(Collectors.toList());
+        }
+        List<Map<String,Object>> maps = lmkOrderSelectMapper.selectPvUv(startTime,endTime,queryParam.getStoreId(),goodsIds);
+        Map<String, Long> pvDataMap = maps.stream()
+                .collect(Collectors.toMap(
+                        map -> map.get("day").toString(),
+                        map -> Long.valueOf(map.get("pvData").toString()),
+                        Long::sum  // 濡傛灉鏈夐噸澶嶏紝绱姞count
+                ));
+        Map<String, Long> uvDataMap = maps.stream()
+                .collect(Collectors.toMap(
+                        map -> map.get("day").toString(),
+                        map -> Long.valueOf(map.get("uvData").toString()),
+                        Long::sum  // 濡傛灉鏈夐噸澶嶏紝绱姞count
+                ));
+        List<Long> pvData = new ArrayList<>();
+        List<Long> uvData = new ArrayList<>();
+        for (String date: dateList){
+            String dayKey = String.valueOf(date);
+            Long pv = pvDataMap.getOrDefault(dayKey,0L);
+            Long uv = uvDataMap.getOrDefault(dayKey, 0L);
+            pvData.add(pv);
+            uvData.add(uv);
+        }
+
+        Map<String,Object> map = new HashMap<>();
+        map.put("dateData",dateList);
+        map.put("pvData",pvData);
+        map.put("uvData",uvData);
+        return Result.ok().data(map);
+
     }
 
     @Override
@@ -1603,7 +1745,7 @@
                     return Result.error("涓嶆敮鎸佺殑鏃堕棿鑼冨洿绫诲瀷");
             }
         }
-        List<Map<String, Object>> maps = lmkOrderSelectMapper.selectProductRepurchase(startTime,endTime,queryParam.getCurrentLimit());
+        List<Map<String, Object>> maps = lmkOrderSelectMapper.selectProductRepurchase(startTime,endTime,queryParam.getCurrentLimit(),queryParam.getStoreId());
         List<String> goodsData = new ArrayList<>();
         List<BigDecimal> rateData = new ArrayList<>();
 
diff --git a/framework/src/main/resources/mapper/lmk/orderMapper.xml b/framework/src/main/resources/mapper/lmk/orderMapper.xml
index 690d8fe..45ecbb7 100644
--- a/framework/src/main/resources/mapper/lmk/orderMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/orderMapper.xml
@@ -9,6 +9,7 @@
     <resultMap id="orderTimePeriod" type="java.util.Map">
         <result column="day" property="day" />
         <result column="hour" property="hour"/>
+        <result column="count" property="count"/>
     </resultMap>
 
     <resultMap id="productRepurchase" type="java.util.Map">
@@ -21,7 +22,11 @@
         <result column="hour" property="hour"/>
         <result column="count" property="count"/>
     </resultMap>
-
+    <resultMap id="pvUvCount" type="java.util.Map">
+        <result column="day" property="day"/>
+        <result column="pvData" property="pvData"/>
+        <result column="uvData" property="uvData"/>
+    </resultMap>
     <select id="selectOrderCountByDay"  resultMap="OrderCountByDayMap">
         SELECT
             DATE(create_time) AS day,
@@ -30,6 +35,9 @@
             li_order o
             WHERE
             o.create_time BETWEEN #{startTime} AND #{endTime}
+            <if test="storeId != null and storeId != ''">
+                AND o.store_id = #{storeId}
+            </if>
             GROUP BY
             day
             ORDER BY
@@ -45,19 +53,30 @@
             li_order o
             WHERE
             o.create_time BETWEEN #{startTime} AND #{endTime}
+            <if test="storeId != null and storeId != ''">
+                AND o.store_id = #{storeId}
+            </if>
             GROUP BY
             day
             ORDER BY
             day , hour ASC
     </select>
-    <select id="selectViewDataCount" resultMap="">
+    <select id="selectViewDataCount" resultMap="viewDataCount">
         SELECT
             DATE(LAR.create_time) AS day,
             HOUR(LAR.create_time) AS hour,
             COUNT(LAR.id) AS count
         FROM lmk_action_record LAR
         where LAR.delete_flag = 0
-          AND LAR.page_status = 'JOIN'
+            AND LAR.page_status = 'JOIN'
+            AND LAR.create_time BETWEEN #{startTime} AND #{endTime}
+            <if test="storeId != null and storeId !=''">
+                AND page_code = 'GOODS_DETAILS'
+                AND JSON_EXTRACT(LAR.page_params, '$.goodsId') IN
+                <foreach collection="goodsIds" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
         GROUP BY day, hour
         ORDER BY day, hour;
     </select>
@@ -94,6 +113,9 @@
                             AND o.member_id IS NOT NULL
                             AND o.create_time >= #{startTime}
                             AND o.create_time &lt;= #{endTime}
+                            <if test="storeId != null and storeId != ''">
+                                AND o.store_id = #{storeId}
+                            </if>
                           GROUP BY i.goods_id, i.goods_name, o.member_id
                       ) AS user_buy_counts
                  GROUP BY goods_id, goods_name
@@ -102,4 +124,27 @@
         LIMIT #{currentLimit};
     </select>
 
+    <select id="selectPvUv" resultMap="pvUvCount">
+        SELECT
+            DATE(LAR.create_time) AS day,
+            COUNT(*) AS pvData,
+            COUNT(DISTINCT LAR.user_id) AS uvData
+        FROM
+            lmk_action_record LAR
+        WHERE
+            LAR.delete_flag = 0
+            AND LAR.page_status = 'JOIN'
+            AND LAR.create_time BETWEEN #{startTime} AND #{endTime}
+        <if test="storeId != null and storeId !=''">
+            AND page_code = 'GOODS_DETAILS'
+            AND JSON_EXTRACT(LAR.page_params, '$.goodsId') IN
+            <foreach collection="goodsIds" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+        GROUP BY
+            DATE(LAR.create_time);
+    </select>
+
+
 </mapper>
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 60e84be..27d9557 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
@@ -39,44 +39,8 @@
     @ApiOperation(value = "鑾峰彇pv銆乽v娴侀噺鏁版嵁 琛ㄥ崟鑾峰彇")
     @GetMapping("/pvUv")
     public Result getPVUVData(StatisticsQueryParam queryParam) {
-        //TODO 鑾峰緱 pv/uv鏁版嵁
-        PvUvVO pvUvVO = new PvUvVO();
-        List<Long> pvData = new ArrayList<>();
-        List<Long> uvData = new ArrayList<>();
-        switch (queryParam.getSearchType()) {
-            case "TODAY":
-                // 浠婂ぉ鐨勬暟鎹細娣诲姞1
-                pvData.add(1L);
-                uvData.add(9L);
-                break;
 
-            case "YESTERDAY":
-                // 鏄庡ぉ鐨勬暟鎹細娣诲姞1
-                pvData.add(1L);
-                uvData.add(10L);
-                break;
-
-            case "LAST_SEVEN":
-                // 杩囧幓涓冨ぉ鐨勬暟鎹細娣诲姞1, 2, 3
-                for(int i =1;i<=7;i++){
-                    pvData.add((long) i);
-                    uvData.add((long) i+7);
-                }
-
-                break;
-
-            case "LAST_THIRTY":
-                // 杩囧幓涓�涓湀鐨勬暟鎹細鍙互鏍规嵁闇�瑕佽嚜瀹氫箟锛岃繖閲岀ず渚嬫坊鍔�1鍒�5
-                for(int i =1;i<=30;i++){
-                    pvData.add((long) i);
-                    uvData.add((long) i+7);
-                }
-                break;
-
-        }
-        pvUvVO.setPvData(pvData);
-        pvUvVO.setUvData(uvData);
-        return Result.ok().data(pvUvVO);
+        return orderService.getPvUv(queryParam);
     }
 
     @GetMapping("/orderCount")

--
Gitblit v1.8.0