From f62ad2c519d21ebbf69aeeaf7b7c26739687427c Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期三, 24 九月 2025 18:02:40 +0800
Subject: [PATCH] 订单统计 订单日增长量

---
 framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java |  121 ++++++++++++++++++++++++++++------------
 framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java           |   14 ++++
 2 files changed, 98 insertions(+), 37 deletions(-)

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 b300072..6b414ef 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
@@ -13,7 +13,9 @@
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 璁㈠崟鏁版嵁澶勭悊灞�
@@ -192,4 +194,16 @@
     List<Order> queryListByParams(@Param(Constants.WRAPPER) Wrapper<Order> queryWrapper);
 
 
+    @Select("SELECT " +
+            "  DATE(create_time) AS day, " +
+            "  COUNT(*) AS count " +
+            "  FROM" +
+            "  li_order o" +
+            "  WHERE " +
+            "  o.create_time BETWEEN #{startTime} AND #{endTime} " +
+            "  GROUP BY" +
+            "  day " +
+            "  ORDER BY " +
+            "  day ASC")
+    List<Map<String, Object>>  selectOrderCountByDay(Date startTime, Date endTime);
 }
\ 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 74673e8..76fcfeb 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
@@ -90,6 +90,7 @@
 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;
@@ -112,6 +113,7 @@
 import java.io.InputStream;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -1275,61 +1277,106 @@
 
     @Override
     public Result getOrderCount(StatisticsQueryParam queryParam) {
-        LocalDateTime startTime = null;
-        LocalDateTime endTime = LocalDateTime.now(); // 缁撴潫鏃堕棿榛樿鏄綋鍓嶆椂闂�
-        int days = 0;
+        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鐐瑰埌鐜板湪
-                startTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
-                days = 1;
+                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
-                LocalDate yesterday = LocalDate.now().minusDays(1);
-                startTime = LocalDateTime.of(yesterday, LocalTime.MIN);
-                endTime = LocalDateTime.of(yesterday, LocalTime.MAX);
-                days = 1;
+                // 鏄ㄥぉ锛氫粠鏄ㄥぉ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鐐瑰埌鐜板湪
-                startTime = LocalDateTime.of(LocalDate.now().minusDays(6), LocalTime.MIN);
+                // 杩囧幓涓冨ぉ锛氫粠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鐐瑰埌鐜板湪
-                startTime = LocalDateTime.of(LocalDate.now().minusDays(29), LocalTime.MIN);
+                // 杩囧幓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<Map<String, Object>> maps = baseMapper.selectOrderCountByDay(startTime,endTime);
 
-// 2. 鏌ヨ璇ユ椂闂磋寖鍥村唴鐨勬瘡鏃ヨ鍗曟暟閲忥紙鎸夋棩鏈熷垎缁勶級
-//        LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery();
-//        queryWrapper.between(Order::getCreateTime, startTime, endTime);
-//                // 鎸夋棩鏈熷垎缁勶紙鎻愬彇鏃ユ湡閮ㄥ垎锛�
-//
-//        // 鎵ц鏌ヨ锛岃繑鍥炴棩鏈熷拰鏁伴噺鐨勬槧灏勶紙day -> count锛�
-//        List<Map<String, Object>> maps = baseMapper.selectMaps(queryWrapper);
-//        Map<String, Long> dayCountMap = maps.stream()
-//                .collect(Collectors.toMap(
-//                        map -> map.get("day").toString(),  // 鏃ユ湡瀛楃涓诧紙濡�2023-09-19锛�
-//                        map -> Long.valueOf(map.get("count").toString())  // 璁㈠崟鏁伴噺
-//                ));
-//
-//        // 3. 鐢熸垚瀹屾暣鐨勬棩鏈熷垪琛紙纭繚鍗充娇鏌愬ぉ娌℃湁璁㈠崟涔熶細杩斿洖0锛�
-//        List<Long> orderCounts = new ArrayList<>(days);
-//        for (int i = 0; i < days; i++) {
-//            // 璁$畻褰撳墠寰幆瀵瑰簲鐨勬棩鏈燂紙浠巗tartTime寮�濮嬬殑绗琲澶╋級
-//            LocalDate currentDate = startTime.toLocalDate().plusDays(i);
-//            String dateStr = currentDate.toString(); // 杞负yyyy-MM-dd鏍煎紡
-//            // 浠庢槧灏勪腑鑾峰彇鏁伴噺锛屾病鏈夊垯涓�0
-//            orderCounts.add(dayCountMap.getOrDefault(dateStr, 0L));
-//        }
+        Map<String, Long> dayCountMap = maps.stream()
+                .collect(Collectors.toMap(
+                        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 null;
+        return Result.ok().data(orderCounts);
     }
 
     /**

--
Gitblit v1.8.0