From 0f7fe2c9bb6f4ed06dd6f37937a551efa05ed559 Mon Sep 17 00:00:00 2001 From: zxl <763096477@qq.com> Date: 星期五, 26 九月 2025 11:36:24 +0800 Subject: [PATCH] 订单统计 --- framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java | 146 ++++++++------- framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java | 295 ++++++++++++++++++-------------- framework/src/main/java/cn/lili/modules/lmk/domain/vo/OrderCountByDayAndHourVO.java | 24 ++ framework/src/main/java/cn/lili/utils/CommonUtil.java | 30 +++ manager-api/src/main/java/cn/lili/controller/lmk/StatisticsController.java | 5 5 files changed, 301 insertions(+), 199 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/OrderCountByDayAndHourVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/OrderCountByDayAndHourVO.java new file mode 100644 index 0000000..31fe655 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/OrderCountByDayAndHourVO.java @@ -0,0 +1,24 @@ +package cn.lili.modules.lmk.domain.vo; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * lmk-shop-java + * 涓嬭鍗曟椂闂存缁熻瀵硅薄 + * @author : zxl + * @date : 2025-09-26 09:21 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OrderCountByDayAndHourVO { + + private Long orderCount; + + private String day; + + private String hour; +} 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 384a3ce..fabe22c 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 @@ -16,6 +16,7 @@ import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; import cn.lili.mybatis.util.PageUtil; import cn.lili.utils.COSUtil; +import cn.lili.utils.CommonUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -177,83 +178,90 @@ 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澶╋紙鍙樹负鏄ㄥぉ锛� + if (queryParam.getYear() != null && queryParam.getMonth() != null) { + Date[] dates = CommonUtil.getMonthStartAndEnd(queryParam.getYear(),queryParam.getMonth()); + startTime = dates[0]; + endTime = dates[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(); + // 璁剧疆鏄ㄥぉ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(); + // 璁剧疆鏄ㄥぉ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澶╁墠鐨勪粖澶╋級 + 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(); + // 璁剧疆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澶╁墠鐨勪粖澶╋級 + 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(); + // 璁剧疆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("涓嶆敮鎸佺殑鏃堕棿鑼冨洿绫诲瀷"); + 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() 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 62358bd..46ab55d 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 @@ -31,6 +31,7 @@ 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; @@ -1284,83 +1285,101 @@ 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澶╋紙鍙樹负鏄ㄥぉ锛� + //鍒ゆ柇鏄惁鏄寜骞存湀鏌ヨ + if (queryParam.getYear() != null && queryParam.getMonth() != null) { + Date[] dates =CommonUtil.getMonthStartAndEnd(queryParam.getYear(),queryParam.getMonth()); + startTime = dates[0]; + endTime = dates[1]; + System.out.println("寮�濮嬫墦鍗�"); + System.out.println(startTime); + System.out.println(endTime); + 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(); + // 璁剧疆鏄ㄥぉ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(); + // 璁剧疆鏄ㄥぉ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澶╁墠鐨勪粖澶╋級 + 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(); + // 璁剧疆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澶╁墠鐨勪粖澶╋級 + 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(); + // 璁剧疆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("涓嶆敮鎸佺殑鏃堕棿鑼冨洿绫诲瀷"); + 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); Map<String, Long> dayCountMap = maps.stream() @@ -1386,84 +1405,100 @@ List<String> dateList = new ArrayList<>(); Calendar calendar = Calendar.getInstance(); // 鐢ㄤ簬鏃ユ湡璁$畻鐨勬棩鍘嗗疄渚� - for (int i =0;i<=24;i++){ + 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澶╋紙鍙樹负鏄ㄥぉ锛� + if (queryParam.getYear() != null && queryParam.getMonth() != null) { + Date[] dates =CommonUtil.getMonthStartAndEnd(queryParam.getYear(),queryParam.getMonth()); + startTime = dates[0]; + endTime = dates[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瀵硅薄 + 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(); + // 璁剧疆鏄ㄥぉ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(); + // 璁剧疆鏄ㄥぉ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澶╁墠鐨勪粖澶╋級 - 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(); - // 璁剧疆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澶╁墠鐨勪粖澶╋級 - 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(); - // 璁剧疆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("涓嶆敮鎸佺殑鏃堕棿鑼冨洿绫诲瀷"); + break; + default: + return Result.error("涓嶆敮鎸佺殑鏃堕棿鑼冨洿绫诲瀷"); + } } + + + List<Map<String, Object>> maps = baseMapper.selectOrderTimePeriod(startTime,endTime); - Map<String, Long> dayCountMap = maps.stream() + Map<String, Long> countByDayHour = maps.stream() .collect(Collectors.toMap( - map -> map.get("day").toString(), // 鏃ユ湡瀛楃涓诧紙濡�2023-09-19锛� - map -> Long.valueOf(map.get("count").toString()) // 璁㈠崟鏁伴噺 + map -> map.get("hour").toString(), + map -> Long.valueOf(map.get("count").toString()), + Long::sum // 濡傛灉鏈夐噸澶嶏紝绱姞count )); - List<Long> orderCounts = new ArrayList<>(); - for (String date : dateList) { - // 鏍稿績锛氬瓨鍦ㄥ垯鍙栨煡璇㈢粨鏋滐紝涓嶅瓨鍦ㄥ垯琛�0 - orderCounts.add(dayCountMap.getOrDefault(date, 0L)); + // 閬嶅巻鏌ョ湅缁撴灉 + List<Long> countList = new ArrayList<>(); + for (int i = 0; i < 24; i++) { + String hourKey = String.valueOf(i); + Long count = countByDayHour.getOrDefault(hourKey, 0L); + countList.add(count); } + Map<String,Object> map = new HashMap<>(); + map.put("dateData",dateList); + map.put("countData",countList); + //TODO 娴忚鏁版嵁鏈姞鍏� +// map.put(); - return Result.ok().data(orderCounts); + return Result.ok().data(map); } /** diff --git a/framework/src/main/java/cn/lili/utils/CommonUtil.java b/framework/src/main/java/cn/lili/utils/CommonUtil.java index 2750ae2..985cb1d 100644 --- a/framework/src/main/java/cn/lili/utils/CommonUtil.java +++ b/framework/src/main/java/cn/lili/utils/CommonUtil.java @@ -3,6 +3,9 @@ import cn.lili.common.utils.StringUtils; +import java.util.Calendar; +import java.util.Date; + /** * lmk-shop-java * 宸ュ叿 @@ -10,7 +13,34 @@ * @author : zxl * @date : 2025-08-07 14:40 **/ + + public class CommonUtil { + + public static Date[] getMonthStartAndEnd(int year, int month) { + Calendar calendar = Calendar.getInstance(); + Date[] result = new Date[2]; + + // 璁剧疆鏈堜唤璧峰鏃堕棿锛堝綋鏈堢殑绗竴澶� 00:00:00锛� + calendar.set(Calendar.YEAR, year); + calendar.set(Calendar.MONTH, month - 1); // Calendar鏈堜唤浠�0寮�濮嬶紝0=1鏈� + calendar.set(Calendar.DAY_OF_MONTH, 1); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + + result[0] = calendar.getTime(); // 鏈堜唤璧峰鏃堕棿 + + // 璁剧疆鏈堜唤缁撴潫鏃堕棿锛堜笅涓湀鐨勭涓�澶� 00:00:00锛岀劧鍚庡噺1姣锛� + calendar.add(Calendar.MONTH, 1); + calendar.add(Calendar.MILLISECOND, -1); + + result[1] = calendar.getTime(); // 鏈堜唤缁撴潫鏃堕棿 + + return result; + } + public static String maskName(String name) { if (StringUtils.isBlank(name)) { return ""; 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 e2984b3..8edffe8 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 @@ -95,6 +95,11 @@ } + /** + * 娴忚鏁版嵁鍜屼笅璁㈠崟鏃堕棿娈靛垎鏋� + * @param queryParam + * @return + */ @GetMapping("/orderTimePeriod") public Result getOrderTimePeriod(StatisticsQueryParam queryParam) { return orderService.getOrderTimePeriod(queryParam); -- Gitblit v1.8.0