|  | @@ -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);
 |