mitao
2024-09-13 b3cef9d27013afee054bdd467defd0b6be218526
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MgtBusinessDataService.java
@@ -1,5 +1,7 @@
package com.ruoyi.order.service.impl;
import com.alibaba.excel.EasyExcel;
import com.google.common.collect.Lists;
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.OrderFromEnum;
import com.ruoyi.common.core.enums.OrderTypeEnum;
@@ -15,6 +17,7 @@
import com.ruoyi.order.service.IOrderService;
import com.ruoyi.system.api.domain.Order;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -29,6 +32,7 @@
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
@@ -57,10 +61,8 @@
        LocalDateTime startTime = timeByTimeType.get(0);
        LocalDateTime endTime = timeByTimeType.get(1);
        List<Order> orderList = orderService.getStaticsOrderList(startTime, endTime);
        if (orderList.isEmpty()) {
            throw new ServiceException("暂无数据");
        }
        MgtOrderStaticsVO mgtOrderStaticsVO = new MgtOrderStaticsVO();
        if (CollUtils.isNotEmpty(orderList)) {
        /* ***************************************商城订单统计*************************************** */
        // 商城订单统计-订单总数
        long mallOrderTotalCount = orderList.stream()
@@ -76,7 +78,8 @@
                .count();
        // 商城订单统计-团购订单
        long groupPurchaseOrderCount = orderList.stream()
                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.GROUP_PURCHASE_ORDERS))
                    .filter(order -> order.getOrderFrom()
                            .equals(OrderFromEnum.GROUP_PURCHASE_ORDERS))
                .count();
        // 商城订单统计-订单总金额
        BigDecimal mallOrderTotalAmount = orderList.stream()
@@ -93,7 +96,8 @@
        // 商城订单统计-团购总金额
        BigDecimal groupPurchaseTotalAmount = orderList.stream()
                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.GROUP_PURCHASE_ORDERS))
                    .filter(order -> order.getOrderFrom()
                            .equals(OrderFromEnum.GROUP_PURCHASE_ORDERS))
                .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
        mgtOrderStaticsVO.setMallOrderTotalCount(mallOrderTotalCount);
@@ -114,12 +118,14 @@
        // 拍卖订单统计-拍卖商品订单
        long auctionGoodsOrderCount = orderList.stream()
                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
                        && order.getAuctionOrderType().equals(AuctionOrderTypeEnum.REGULAR_ITEMS))
                            && order.getAuctionOrderType()
                            .equals(AuctionOrderTypeEnum.REGULAR_ITEMS))
                .count();
        // 拍卖订单统计-拍卖场订单
        long auctionSalesroomOrderCount = orderList.stream()
                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
                        && order.getAuctionOrderType().equals(AuctionOrderTypeEnum.AUCTION_ITEMS))
                            && order.getAuctionOrderType()
                            .equals(AuctionOrderTypeEnum.AUCTION_ITEMS))
                .count();
        // 拍卖订单统计-订单总金额
        BigDecimal auctionOrderTotalAmount = orderList.stream()
@@ -129,13 +135,15 @@
        // 拍卖订单统计-拍卖商品总金额
        BigDecimal auctionGoodsTotalAmount = orderList.stream()
                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
                        && order.getAuctionOrderType().equals(AuctionOrderTypeEnum.REGULAR_ITEMS)
                            && order.getAuctionOrderType()
                            .equals(AuctionOrderTypeEnum.REGULAR_ITEMS)
                )
                .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
        // 拍卖订单统计-拍卖场总金额
        BigDecimal auctionSalesroomTotalAmount = orderList.stream()
                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
                        && order.getAuctionOrderType().equals(AuctionOrderTypeEnum.AUCTION_ITEMS))
                            && order.getAuctionOrderType()
                            .equals(AuctionOrderTypeEnum.AUCTION_ITEMS))
                .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
        mgtOrderStaticsVO.setAuctionOrderTotalCount(auctionOrderTotalCount);
@@ -145,6 +153,7 @@
        mgtOrderStaticsVO.setAuctionOrderTotalAmount(auctionOrderTotalAmount);
        mgtOrderStaticsVO.setAuctionGoodsTotalAmount(auctionGoodsTotalAmount);
        mgtOrderStaticsVO.setAuctionSalesroomTotalAmount(auctionSalesroomTotalAmount);
        }
        return mgtOrderStaticsVO;
    }
@@ -310,4 +319,29 @@
                .limit(numOfDaysBetween + 1) // 加1是因为包含结束日期
                .collect(Collectors.toList());
    }
    /**
     * 业务数据导出
     *
     * @param query
     * @param response
     */
    public void exportBusinessData(MgtOrderStaticsQuery query, HttpServletResponse response) {
        MgtOrderStaticsVO overview = getOverview(query);
        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
        response.setContentType(
                "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        try {
            String fileName = URLEncoder.encode("业务数据", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition",
                    "attachment;filename*=utf-8''" + fileName + ".xlsx");
            EasyExcel.write(response.getOutputStream(), MgtOrderStaticsVO.class)
                    .sheet("业务数据")
                    .doWrite(Lists.newArrayList(overview));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}