From b3cef9d27013afee054bdd467defd0b6be218526 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 13 九月 2024 18:28:02 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MgtBusinessDataService.java |  196 ++++++++++++++++++++++++++++--------------------
 1 files changed, 115 insertions(+), 81 deletions(-)

diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MgtBusinessDataService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MgtBusinessDataService.java
index e30efd2..1b9284e 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MgtBusinessDataService.java
+++ b/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,94 +61,99 @@
         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();
-        /* ***************************************商城订单统计*************************************** */
-        // 商城订单统计-订单总数
-        long mallOrderTotalCount = orderList.stream()
-                .filter(order -> !order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS))
-                .count();
-        // 商城订单统计-商城订单
-        long mallOrderCount = orderList.stream()
-                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.COMMODITY_ORDER))
-                .count();
-        // 商城订单统计-秒杀订单
-        long seckillOrderCount = orderList.stream()
-                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.SNAP_ORDERS))
-                .count();
-        // 商城订单统计-团购订单
-        long groupPurchaseOrderCount = orderList.stream()
-                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.GROUP_PURCHASE_ORDERS))
-                .count();
-        // 商城订单统计-订单总金额
-        BigDecimal mallOrderTotalAmount = orderList.stream()
-                .filter(order -> !order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS))
-                .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-        // 商城订单统计 - 商城总金额
-        BigDecimal mallTotalAmount = orderList.stream()
-                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.COMMODITY_ORDER))
-                .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-        // 商城订单统计-秒杀总金额
-        BigDecimal seckillTotalAmount = orderList.stream()
-                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.SNAP_ORDERS))
-                .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+        if (CollUtils.isNotEmpty(orderList)) {
+            /* ***************************************商城订单统计*************************************** */
+            // 商城订单统计-订单总数
+            long mallOrderTotalCount = orderList.stream()
+                    .filter(order -> !order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS))
+                    .count();
+            // 商城订单统计-商城订单
+            long mallOrderCount = orderList.stream()
+                    .filter(order -> order.getOrderFrom().equals(OrderFromEnum.COMMODITY_ORDER))
+                    .count();
+            // 商城订单统计-秒杀订单
+            long seckillOrderCount = orderList.stream()
+                    .filter(order -> order.getOrderFrom().equals(OrderFromEnum.SNAP_ORDERS))
+                    .count();
+            // 商城订单统计-团购订单
+            long groupPurchaseOrderCount = orderList.stream()
+                    .filter(order -> order.getOrderFrom()
+                            .equals(OrderFromEnum.GROUP_PURCHASE_ORDERS))
+                    .count();
+            // 商城订单统计-订单总金额
+            BigDecimal mallOrderTotalAmount = orderList.stream()
+                    .filter(order -> !order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS))
+                    .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+            // 商城订单统计 - 商城总金额
+            BigDecimal mallTotalAmount = orderList.stream()
+                    .filter(order -> order.getOrderFrom().equals(OrderFromEnum.COMMODITY_ORDER))
+                    .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+            // 商城订单统计-秒杀总金额
+            BigDecimal seckillTotalAmount = orderList.stream()
+                    .filter(order -> order.getOrderFrom().equals(OrderFromEnum.SNAP_ORDERS))
+                    .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
 
-        // 商城订单统计-团购总金额
-        BigDecimal groupPurchaseTotalAmount = orderList.stream()
-                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.GROUP_PURCHASE_ORDERS))
-                .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+            // 商城订单统计-团购总金额
+            BigDecimal groupPurchaseTotalAmount = orderList.stream()
+                    .filter(order -> order.getOrderFrom()
+                            .equals(OrderFromEnum.GROUP_PURCHASE_ORDERS))
+                    .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
 
-        mgtOrderStaticsVO.setMallOrderTotalCount(mallOrderTotalCount);
-        mgtOrderStaticsVO.setMallOrderCount(mallOrderCount);
-        mgtOrderStaticsVO.setSeckillOrderCount(seckillOrderCount);
-        mgtOrderStaticsVO.setGroupPurchaseOrderCount(groupPurchaseOrderCount);
+            mgtOrderStaticsVO.setMallOrderTotalCount(mallOrderTotalCount);
+            mgtOrderStaticsVO.setMallOrderCount(mallOrderCount);
+            mgtOrderStaticsVO.setSeckillOrderCount(seckillOrderCount);
+            mgtOrderStaticsVO.setGroupPurchaseOrderCount(groupPurchaseOrderCount);
 
-        mgtOrderStaticsVO.setMallOrderTotalAmount(mallOrderTotalAmount);
-        mgtOrderStaticsVO.setMallTotalAmount(mallTotalAmount);
-        mgtOrderStaticsVO.setSeckillTotalAmount(seckillTotalAmount);
-        mgtOrderStaticsVO.setGroupPurchaseTotalAmount(groupPurchaseTotalAmount);
+            mgtOrderStaticsVO.setMallOrderTotalAmount(mallOrderTotalAmount);
+            mgtOrderStaticsVO.setMallTotalAmount(mallTotalAmount);
+            mgtOrderStaticsVO.setSeckillTotalAmount(seckillTotalAmount);
+            mgtOrderStaticsVO.setGroupPurchaseTotalAmount(groupPurchaseTotalAmount);
 
-        /* ***************************************拍卖订单统计*************************************** */
-        // 拍卖订单统计-订单总数
-        long auctionOrderTotalCount = orderList.stream()
-                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS))
-                .count();
-        // 拍卖订单统计-拍卖商品订单
-        long auctionGoodsOrderCount = orderList.stream()
-                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
-                        && 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))
-                .count();
-        // 拍卖订单统计-订单总金额
-        BigDecimal auctionOrderTotalAmount = orderList.stream()
-                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS))
-                .map(Order::getTotalAmount)
-                .reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-        // 拍卖订单统计-拍卖商品总金额
-        BigDecimal auctionGoodsTotalAmount = orderList.stream()
-                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
-                        && 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))
-                .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+            /* ***************************************拍卖订单统计*************************************** */
+            // 拍卖订单统计-订单总数
+            long auctionOrderTotalCount = orderList.stream()
+                    .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS))
+                    .count();
+            // 拍卖订单统计-拍卖商品订单
+            long auctionGoodsOrderCount = orderList.stream()
+                    .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
+                            && 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))
+                    .count();
+            // 拍卖订单统计-订单总金额
+            BigDecimal auctionOrderTotalAmount = orderList.stream()
+                    .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS))
+                    .map(Order::getTotalAmount)
+                    .reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+            // 拍卖订单统计-拍卖商品总金额
+            BigDecimal auctionGoodsTotalAmount = orderList.stream()
+                    .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
+                            && 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))
+                    .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
 
-        mgtOrderStaticsVO.setAuctionOrderTotalCount(auctionOrderTotalCount);
-        mgtOrderStaticsVO.setAuctionGoodsOrderCount(auctionGoodsOrderCount);
-        mgtOrderStaticsVO.setAuctionSalesroomOrderCount(auctionSalesroomOrderCount);
+            mgtOrderStaticsVO.setAuctionOrderTotalCount(auctionOrderTotalCount);
+            mgtOrderStaticsVO.setAuctionGoodsOrderCount(auctionGoodsOrderCount);
+            mgtOrderStaticsVO.setAuctionSalesroomOrderCount(auctionSalesroomOrderCount);
 
-        mgtOrderStaticsVO.setAuctionOrderTotalAmount(auctionOrderTotalAmount);
-        mgtOrderStaticsVO.setAuctionGoodsTotalAmount(auctionGoodsTotalAmount);
-        mgtOrderStaticsVO.setAuctionSalesroomTotalAmount(auctionSalesroomTotalAmount);
+            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);
+        }
+    }
 }

--
Gitblit v1.7.1