From 0af4429cca70d12e8e84cb2773b76ed1a72128c4 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 10 二月 2025 14:53:59 +0800
Subject: [PATCH] 管理后台:会员管理-增加会员分类
---
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MgtBusinessDataService.java | 212 +++++++++++++++++++++++++++++++---------------------
1 files changed, 126 insertions(+), 86 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 d728c8d..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,10 +17,12 @@
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;
import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -28,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;
@@ -52,103 +57,110 @@
*/
public MgtOrderStaticsVO getOverview(MgtOrderStaticsQuery query) {
- LocalDateTime startTime = null;
- LocalDateTime endTime = null;
- getTimeByTimeType(query, startTime, endTime);
+ List<LocalDateTime> timeByTimeType = getTimeByTimeType(query);
+ 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;
}
- private void getTimeByTimeType(MgtOrderStaticsQuery query, LocalDateTime startTime,
- LocalDateTime endTime) {
+ private List<LocalDateTime> getTimeByTimeType(MgtOrderStaticsQuery query) {
+ LocalDateTime startTime;
+ LocalDateTime endTime;
+ List<LocalDateTime> range = new ArrayList<>();
LocalDateTime now = LocalDateTime.now();
if (Objects.equals(TimeTypeEnum.TODAY.getCode(), query.getTimeType())) {
startTime = DateUtils.getDayStart(now);
@@ -169,6 +181,9 @@
startTime = DateUtils.getDayStart(now);
endTime = DateUtils.getDayEnd(now);
}
+ range.add(startTime);
+ range.add(endTime);
+ return range;
}
/**
@@ -304,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