From 6c3c5f3fb28cc65684e065b60a09768cf8a77429 Mon Sep 17 00:00:00 2001 From: peng <peng.com> Date: 星期一, 29 九月 2025 23:45:13 +0800 Subject: [PATCH] 添加抽奖次数加锁 --- framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java | 271 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 220 insertions(+), 51 deletions(-) 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 7e4e98d..c3003e8 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; @@ -90,6 +91,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 +114,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; @@ -1294,61 +1297,227 @@ @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<>(); - switch (queryParam.getSearchType()) { - case "TODAY": - // 浠婂ぉ锛氫粠浠婂ぉ0鐐瑰埌鐜板湪 - startTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); - days = 1; - 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; - break; - case "LAST_SEVEN": - // 杩囧幓涓冨ぉ锛氫粠7澶╁墠0鐐瑰埌鐜板湪 - startTime = LocalDateTime.of(LocalDate.now().minusDays(6), LocalTime.MIN); - days = 7; - break; - case "LAST_THIRTY": - // 杩囧幓30澶╋細浠�30澶╁墠0鐐瑰埌鐜板湪 - startTime = LocalDateTime.of(LocalDate.now().minusDays(29), LocalTime.MIN); - days = 30; - break; - default: - return Result.error("涓嶆敮鎸佺殑鏃堕棿鑼冨洿绫诲瀷"); + 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]; + 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(); + + // 璁剧疆鏄ㄥぉ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("涓嶆敮鎸佺殑鏃堕棿鑼冨洿绫诲瀷"); + } } -// 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)); -// } + List<Map<String, Object>> maps = baseMapper.selectOrderCountByDay(startTime,endTime); - return null; + Map<String, Long> dayCountMap = maps.stream() + .collect(Collectors.toMap( + map -> map.get("day").toString(), // 鏃ユ湡瀛楃涓诧紙濡�2023-09-19锛� + map -> Long.valueOf(map.get("count").toString()) // 璁㈠崟鏁伴噺 + )); + + List<Long> orderCounts = new ArrayList<>(); + for (String date : dateList) { + // 鏍稿績锛氬瓨鍦ㄥ垯鍙栨煡璇㈢粨鏋滐紝涓嶅瓨鍦ㄥ垯琛�0 + orderCounts.add(dayCountMap.getOrDefault(date, 0L)); + } + + + return Result.ok().data(orderCounts); + } + + @Override + public Result getOrderTimePeriod(StatisticsQueryParam queryParam) { + Date startTime = null; + Date endTime = new Date(); // 缁撴潫鏃堕棿榛樿鏄綋鍓嶆椂闂� + List<String> dateList = new ArrayList<>(); + + Calendar calendar = Calendar.getInstance(); // 鐢ㄤ簬鏃ユ湡璁$畻鐨勬棩鍘嗗疄渚� + for (int i =0;i<24;i++){ + dateList.add(i + "鐐�"); + } + 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(); + + // 璁剧疆鏄ㄥぉ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澶╁墠鐨勪粖澶╋級 + + // 璁剧疆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澶╁墠鐨勪粖澶╋級 + + // 璁剧疆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("涓嶆敮鎸佺殑鏃堕棿鑼冨洿绫诲瀷"); + } + } + + + + List<Map<String, Object>> maps = baseMapper.selectOrderTimePeriod(startTime,endTime); + + Map<String, Long> countByDayHour = maps.stream() + .collect(Collectors.toMap( + map -> map.get("hour").toString(), + map -> Long.valueOf(map.get("count").toString()), + Long::sum // 濡傛灉鏈夐噸澶嶏紝绱姞count + )); + + // 閬嶅巻鏌ョ湅缁撴灉 + 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(map); } /** -- Gitblit v1.8.0