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