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 <= #{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