|
@@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
|
import cn.newfeifan.mall.framework.common.pojo.PageResult;
|
|
|
+import cn.newfeifan.mall.framework.common.pojo.echarts.EChartsResult;
|
|
|
import cn.newfeifan.mall.module.distri.dal.mysql.ordersettlement.OrderSettlementMapper;
|
|
|
import cn.newfeifan.mall.module.distri.mq.message.order.DistriOrderMessage;
|
|
|
import cn.newfeifan.mall.module.distri.mq.message.order.OrderCalcMessage;
|
|
@@ -47,17 +48,22 @@ import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.time.DayOfWeek;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.LocalTime;
|
|
|
+import java.time.temporal.TemporalAdjusters;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
+import static cn.newfeifan.mall.framework.common.enums.SelectTimeEnum.*;
|
|
|
import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
import static cn.newfeifan.mall.framework.common.util.collection.CollectionUtils.convertSet;
|
|
|
import static cn.newfeifan.mall.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
|
|
import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.EXPRESS_NOT_EXISTS;
|
|
|
import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.ORDER_NOT_FOUND;
|
|
|
+import static cn.newfeifan.mall.module.trade.enums.order.TradeOrderStatusEnum.*;
|
|
|
|
|
|
/**
|
|
|
* 交易订单【读】 Service 实现类
|
|
@@ -143,7 +149,7 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService {
|
|
|
}
|
|
|
|
|
|
// 分页查询
|
|
|
- PageResult<TradeOrderDO> tradeOrderDOPageResult = tradeOrderMapper.selectPage(reqVO, userIds,orderIds);
|
|
|
+ PageResult<TradeOrderDO> tradeOrderDOPageResult = tradeOrderMapper.selectPage(reqVO, userIds, orderIds);
|
|
|
if (reqVO.getStatus() != null && reqVO.getStatus().equals(TradeOrderStatusEnum.AFTER_SALE.getStatus())) {
|
|
|
for (TradeOrderDO tradeOrderDO : tradeOrderDOPageResult.getList()) {
|
|
|
tradeOrderDO.setStatus(TradeOrderStatusEnum.AFTER_SALE.getStatus());
|
|
@@ -354,6 +360,102 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService {
|
|
|
return tradeOrderMapper.selectCountByRefundStatus(status, userId);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public EChartsResult getOrderStatusCount(String selectTime) {
|
|
|
+ LocalDate today = LocalDate.now(); // 获取今天的日期
|
|
|
+
|
|
|
+ // 本周
|
|
|
+ if(selectTime.equals(WEEK.getType())){
|
|
|
+ LocalDate weekStart = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); // 获取本周的开始日期
|
|
|
+ LocalDate weekEnd = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); // 获取本周的结束日期
|
|
|
+
|
|
|
+ List<LocalDate> weekDates = generateWeekDates(weekStart, weekEnd); // 生成本周的日期数组
|
|
|
+
|
|
|
+ return EChartsResult.builder()
|
|
|
+ .xaxis(new EChartsResult.Axis()
|
|
|
+ .setData(weekDates))
|
|
|
+ .series(getSeries(weekStart,today))
|
|
|
+ .build()
|
|
|
+ ;
|
|
|
+ } else if(selectTime.equals(LAST_WEEK.getType())){
|
|
|
+ // 上周
|
|
|
+ LocalDate lastWeekStart = today.minusWeeks(1).with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); // 获取上周的开始日期
|
|
|
+ LocalDate lastWeekEnd = today.minusWeeks(1).with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); // 获取上周的结束日期
|
|
|
+
|
|
|
+ List<LocalDate> weekDates = generateWeekDates(lastWeekStart, lastWeekEnd); // 生成上周的日期数组
|
|
|
+
|
|
|
+ return EChartsResult.builder()
|
|
|
+ .xaxis(new EChartsResult.Axis()
|
|
|
+ .setData(weekDates))
|
|
|
+ .series(getSeries(lastWeekStart,lastWeekEnd))
|
|
|
+ .build()
|
|
|
+ ;
|
|
|
+ } else if(selectTime.equals(LAST_MONTH.getType())){
|
|
|
+ // 上月
|
|
|
+ LocalDate lastMonthStart = today.minusMonths(1).with(TemporalAdjusters.firstDayOfMonth()); // 获取上个月的开始日期
|
|
|
+ LocalDate lastMonthEnd = today.minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); // 获取上个月的结束日期
|
|
|
+
|
|
|
+ List<LocalDate> weekDates = generateWeekDates(lastMonthStart, lastMonthEnd); // 生成上周的日期数组
|
|
|
+ return EChartsResult.builder()
|
|
|
+ .xaxis(new EChartsResult.Axis()
|
|
|
+ .setData(weekDates))
|
|
|
+ .series(getSeries(lastMonthStart,lastMonthEnd))
|
|
|
+ .build()
|
|
|
+ ;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成指定日期范围内的日期数组
|
|
|
+ * @param start 开始日期
|
|
|
+ * @param end 结束日期
|
|
|
+ * @return 日期数组
|
|
|
+ */
|
|
|
+ private static List<LocalDate> generateWeekDates(LocalDate start, LocalDate end) {
|
|
|
+ return Stream.iterate(start, date -> date.plusDays(1))
|
|
|
+ .limit(end.toEpochDay() - start.toEpochDay() + 1)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据日期范围获取订单状态数量
|
|
|
+ * @param start 开始日期
|
|
|
+ * @param end 结束日期
|
|
|
+ * @param status 状态
|
|
|
+ * @param series 系列列表
|
|
|
+ */
|
|
|
+ private void selectOrderCountByStatusWithTime(LocalDate start, LocalDate end, Integer status, List<EChartsResult.Series> series) {
|
|
|
+ List<TradeOrderStatusCount> counts = tradeOrderMapper.selectOrderCountByStatusWithTime(start, end, status);
|
|
|
+ series.add(new EChartsResult.Series()
|
|
|
+ .setData(counts.stream().map(TradeOrderStatusCount::getOrderCount).collect(Collectors.toList()))
|
|
|
+ .setType(status));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取系列列表
|
|
|
+ * @param start 开始日期
|
|
|
+ * @param end 结束日期
|
|
|
+ * @return 系列列表
|
|
|
+ */
|
|
|
+ private List<EChartsResult.Series> getSeries(LocalDate start, LocalDate end){
|
|
|
+ List<EChartsResult.Series> series = new ArrayList<>();
|
|
|
+ // 待支付
|
|
|
+ selectOrderCountByStatusWithTime(start,end,UNPAID.getStatus(),series);
|
|
|
+ // 待发货
|
|
|
+ selectOrderCountByStatusWithTime(start,end,UNDELIVERED.getStatus(), series);
|
|
|
+ // 已发货
|
|
|
+ selectOrderCountByStatusWithTime(start,end,DELIVERED.getStatus(), series);
|
|
|
+ // 已完成
|
|
|
+ selectOrderCountByStatusWithTime(start,end,COMPLETED.getStatus(), series);
|
|
|
+ // 已取消
|
|
|
+ selectOrderCountByStatusWithTime(start, end, CANCELED.getStatus(), series);
|
|
|
+
|
|
|
+ return series;
|
|
|
+ }
|
|
|
+
|
|
|
public static ShopBO getShopBO(StringRedisTemplate stringRedisTemplate, AdminUserMapper userMapper, Logger log) {
|
|
|
Long loginUserId = getLoginUserId();
|
|
|
String s = stringRedisTemplate.opsForValue().get("shop:" + loginUserId);
|