ZBLOG

public List listOrderSummary(User user, ReportParams params, OrderParam orderParam, int pageNo, int pageSize) { //订单明细状态汇总数量 List orderSummaryVOs = reportRepository.findOrderDetailSummaryBySku(user...

以下是对代码进行优化的示例:

public List<OrderSummaryVO> listOrderSummary(User user, ReportParams params, OrderParam orderParam, int pageNo, int pageSize) {

    // 订单明细状态汇总数量
    List<OrderSummaryVO> orderSummaryVOs = reportRepository.findOrderDetailSummaryBySku(user.getTenantId(), params, pageNo - 1, pageSize);

    if (CollectionUtils.isEmpty(orderSummaryVOs)) {
        return null;
    }

    List<String> skuCodeSet = orderSummaryVOs.stream().map(OrderSummaryVO::getSku).collect(Collectors.toList());
    Skus skus = skuRepository.findSummaryBySku(user.getTenantId(), skuCodeSet);
    Map<String, Sku> skuMap = skus.stream().collect(Collectors.toMap(Sku::getSku, Function.identity(), (a, b) -> b));

    DateRangeParam monthRange = params.getMonthRange();
    if (monthRange == null) {
        Date start = DateUtils.getStartTimeOfCurrentYear(new Date());
        Date end = DateUtils.getEndTimeOfCurrentYear(new Date());
        monthRange = new DateRangeParam(new DateRange(start, end));
        params.setMonthRange(monthRange);
    }

    for (OrderSummaryVO summaryVO : orderSummaryVOs) {
        summaryVO.setSkuEntity(skuMap.get(summaryVO.getSku()));
        List<StockMonthly> stockOpByMonthList = reportRepository.findSummaryStockOpByMonthAndSku(user.getTenantId(), params,
                summaryVO.getSku());

        Set<Date> stockOpByMonthDates = stockOpByMonthList.stream()
                .map(StockMonthly::getMonth)
                .collect(Collectors.toSet());

        Calendar currentDate = Calendar.getInstance();
        currentDate.setTime(monthRange.getValue().getStart());

        List<StockMonthly> stockMonthlyList = new ArrayList<>();
        while (currentDate.getTime().compareTo(monthRange.getValue().getEnd()) <= 0) {
            if (!stockOpByMonthDates.contains(currentDate.getTime())) {
                StockMonthly stockMonth = new StockMonthly();
                stockMonth.setMonth(currentDate.getTime());
                stockMonth.setQtyWorkSheet(ZERO);
                stockMonth.setQtyOutSourcingIn(ZERO);
                stockMonth.setQtyShippedOut(ZERO);
                stockOpByMonthList.add(stockMonth);
            }
            currentDate.add(Calendar.MONTH, 1);
        }

        this.fillOrdersSku(user, stockOpByMonthList, summaryVO.getSku());

        List<StockMonthly> sortedList = stockOpByMonthList.stream()
                .sorted(Comparator.comparing(StockMonthly::getMonth).reversed())
                .collect(Collectors.toList());
        
        summaryVO.setStockMonthlies(sortedList);
    }

    return orderSummaryVOs;
}

这个优化主要包括以下几点:

  1. 将月份范围的获取逻辑提取出来,避免多次重复计算。
  2. 使用Set存储已有的月份,用于判断是否存在相同年月的数据。
  3. 简化日期遍历部分的逻辑,直接比较日期大小,并按需补充缺失的数据。
  4. stockOpByMonthList进行排序后再赋值给summaryVO,避免每次循环都进行排序操作。

请注意,这只是一个示例优化,并不一定完全符合实际需求。根据具体情况和代码要求,您可能需要进行适当的调整。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=2133

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?