From cf7740957f2b859e541116f2f4603beff8a0c832 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期五, 20 十二月 2024 17:19:38 +0800
Subject: [PATCH] 修改

---
 ruoyi-system/src/main/java/com/ruoyi/system/export/SumGeneratorDetailClient.java      |   25 ++++++
 ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml                    |   15 +++
 ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderSaleService.java            |    7 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataStatisticsController.java |   88 ++++++++++++++++++++--
 ruoyi-system/src/main/java/com/ruoyi/system/export/SumGeneratorClient.java            |   36 +++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleMapper.java              |    8 ++
 ruoyi-system/src/main/resources/template/营业统计报表.xls                                   |    0 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderSaleServiceImpl.java   |   28 +++++++
 8 files changed, 199 insertions(+), 8 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataStatisticsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataStatisticsController.java
index db4c50b..465a773 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataStatisticsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataStatisticsController.java
@@ -3,26 +3,28 @@
 
 import cn.afterturn.easypoi.excel.ExcelExportUtil;
 import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
+import cn.hutool.core.io.resource.ClassPathResource;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.WebUtils;
 import com.ruoyi.framework.web.service.TokenService;
-import com.ruoyi.system.export.SaleGeneratorListExport;
+import com.ruoyi.system.domain.TShop;
+import com.ruoyi.system.export.SumGeneratorClient;
 import com.ruoyi.system.query.ProfitDetailsQuery;
-import com.ruoyi.system.query.TDataGeneratorQuery;
 import com.ruoyi.system.query.TDataStatisticsQuery;
 import com.ruoyi.system.service.TOrderMealService;
 import com.ruoyi.system.service.TOrderSaleService;
+import com.ruoyi.system.service.TShopService;
 import com.ruoyi.system.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.poi.ss.usermodel.Workbook;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.ServletOutputStream;
@@ -31,9 +33,7 @@
 import java.net.URLEncoder;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * <p>
@@ -51,12 +51,14 @@
     private final TOrderMealService orderMealService;
     private final TOrderSaleService orderSaleService;
     private final TokenService tokenService;
+    private final TShopService shopService;
 
     @Autowired
-    public TDataStatisticsController(TOrderMealService orderMealService, TOrderSaleService orderSaleService, TokenService tokenService) {
+    public TDataStatisticsController(TOrderMealService orderMealService, TOrderSaleService orderSaleService, TokenService tokenService, TShopService shopService) {
         this.orderMealService = orderMealService;
         this.orderSaleService = orderSaleService;
         this.tokenService = tokenService;
+        this.shopService = shopService;
     }
 
     @ApiOperation( value = "销售额统计")
@@ -361,5 +363,75 @@
     }
 
 
+    @ApiOperation( value = "汇总导出")
+    @PostMapping(value = "/sumExport")
+    public void sumExport(@RequestBody ProfitDetailsQuery query) {
+        Long objectId = tokenService.getLoginUser().getObjectId();
+        Map<String, Object> result = new HashMap<>();
+        SumGeneratorClient sumGeneratorClient = new SumGeneratorClient();
+        query.setShopId(objectId);
+        if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){
+            if(Objects.nonNull(query.getTimeType())){
+                LocalDateTime startTime = null;
+                LocalDateTime endTime = null;
+                switch (query.getTimeType()){
+                    case 1:
+                        // 今日
+                        startTime = DateUtils.getDayStart(LocalDateTime.now());
+                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
+                        break;
+                    case 2:
+                        // 昨日
+                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1));
+                        endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1));
+                        break;
+                    case 3:
+                        // 近7天
+                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7));
+                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
+                        break;
+                    case 4:
+                        // 近30天
+                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30));
+                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
+                        break;
+                }
+                query.setStartTime(DateUtils.localDateTimeToDate(startTime));
+                query.setEndTime(DateUtils.localDateTimeToDate(endTime));
+            }
+        }
+
+        sumGeneratorClient.setGeneratorTime(DateUtils.stringToLocalDate(query.getStartTime()) + " ~ " + DateUtils.stringToLocalDate(query.getEndTime()));
+        TShop shop = shopService.getById(objectId);
+        if(Objects.nonNull(shop)){
+            sumGeneratorClient.setShopName(shop.getShopName());
+        }
+        sumGeneratorClient = orderSaleService.sumExport(query);
+        result.put("sumGeneratorClient",sumGeneratorClient);
+        //1.获取excel模板
+        ClassPathResource classPathResource = new ClassPathResource("template/营业统计报表.xls");
+        TemplateExportParams params = new TemplateExportParams(classPathResource.getPath());
+        Workbook workbook = ExcelExportUtil.exportExcel(params, result);
+        HttpServletResponse response = WebUtils.response();
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("utf-8");
+        ServletOutputStream outputStream = null;
+        try {
+            String fileName = URLEncoder.encode("营业统计报表.xls", "utf-8");
+            response.setHeader("Content-dispodition", "attachment;filename=" + fileName);
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                outputStream.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+
 }
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/export/SumGeneratorClient.java b/ruoyi-system/src/main/java/com/ruoyi/system/export/SumGeneratorClient.java
new file mode 100644
index 0000000..bc605f0
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/export/SumGeneratorClient.java
@@ -0,0 +1,36 @@
+package com.ruoyi.system.export;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class SumGeneratorClient {
+    @Excel(name = "生成时间")
+    private String generatorTime;
+    @Excel(name = "店铺名称")
+    private String shopName;
+    @Excel(name = "实收金额")
+    private BigDecimal allMoney;
+    @Excel(name = "单均消费")
+    private BigDecimal singleAvgAmount;
+    @Excel(name = "人均消费")
+    private BigDecimal perCapitaAmount;
+
+    @Excel(name = "实收金额合计")
+    private BigDecimal actualAmountSum;
+    @Excel(name = "帐单数合计")
+    private Integer orderCountSum;
+    @Excel(name = "单均消费合计")
+    private BigDecimal singleAmountSum;
+    @Excel(name = "消费人数合计")
+    private Integer perCountSum;
+    @Excel(name = "人均消费合计")
+    private BigDecimal perAmountSum;
+    @ExcelCollection(name = "统计详情数据列表")
+    private List<SumGeneratorDetailClient> orderStatistics;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/export/SumGeneratorDetailClient.java b/ruoyi-system/src/main/java/com/ruoyi/system/export/SumGeneratorDetailClient.java
new file mode 100644
index 0000000..8d8de5b
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/export/SumGeneratorDetailClient.java
@@ -0,0 +1,25 @@
+package com.ruoyi.system.export;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class SumGeneratorDetailClient {
+    @Excel(name = "日期")
+    private String dayTime;
+    @Excel(name = "实收金额")
+    private BigDecimal actualAmount;
+    @Excel(name = "帐单数")
+    private Integer orderCount;
+    @Excel(name = "单均消费")
+    private BigDecimal singleAmount;
+    @Excel(name = "消费人数")
+    private Integer perCount;
+    @Excel(name = "人均消费")
+    private BigDecimal perAmount;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleMapper.java
index c16e023..047397c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleMapper.java
@@ -3,6 +3,8 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.system.domain.TOrderSale;
+import com.ruoyi.system.export.SumGeneratorClient;
+import com.ruoyi.system.export.SumGeneratorDetailClient;
 import com.ruoyi.system.query.*;
 import com.ruoyi.system.vo.*;
 import org.apache.ibatis.annotations.Mapper;
@@ -110,4 +112,10 @@
 
     Map<String, Double> getDataGeneratorSaleDetailOrderMoney(@Param("query")TDataGeneratorSaleQuery query);
 
+    /**
+     * 导出汇总
+     * @param query
+     * @return
+     */
+    List<SumGeneratorDetailClient> sumExport(@Param("query") ProfitDetailsQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderSaleService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderSaleService.java
index 92778cf..9a1613d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderSaleService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderSaleService.java
@@ -5,6 +5,7 @@
 import com.ruoyi.system.domain.TOrderSale;
 import com.ruoyi.system.dto.CheckoutDTO;
 import com.ruoyi.system.dto.TOrderSaleDTO;
+import com.ruoyi.system.export.SumGeneratorClient;
 import com.ruoyi.system.query.*;
 import com.ruoyi.system.vo.*;
 
@@ -125,4 +126,10 @@
 
     Map<String, Double> getDataGeneratorSaleDetailOrderMoney(TDataGeneratorSaleQuery query);
 
+    /**
+     * 汇总导出
+     * @param query
+     * @return
+     */
+    SumGeneratorClient sumExport(ProfitDetailsQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderSaleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderSaleServiceImpl.java
index 0a2a83d..fa441c3 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderSaleServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderSaleServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.system.service.impl;
 
+import cn.afterturn.easypoi.excel.annotation.Excel;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.basic.PageInfo;
@@ -10,6 +11,8 @@
 import com.ruoyi.system.domain.*;
 import com.ruoyi.system.dto.CheckoutDTO;
 import com.ruoyi.system.dto.TOrderSaleDTO;
+import com.ruoyi.system.export.SumGeneratorClient;
+import com.ruoyi.system.export.SumGeneratorDetailClient;
 import com.ruoyi.system.mapper.TOrderSaleGoodsMapper;
 import com.ruoyi.system.mapper.TOrderSaleMapper;
 import com.ruoyi.system.query.*;
@@ -487,4 +490,29 @@
         }
         return this.baseMapper.getDataGeneratorSaleDetailOrderMoney(query);
     }
+
+    @Override
+    public SumGeneratorClient sumExport(ProfitDetailsQuery query) {
+        List<SumGeneratorDetailClient> sumGeneratorDetailClient = this.baseMapper.sumExport(query);
+
+        for (SumGeneratorDetailClient generatorDetailClient : sumGeneratorDetailClient) {
+            generatorDetailClient.setSingleAmount(generatorDetailClient.getActualAmount().divide(new BigDecimal(generatorDetailClient.getOrderCount()),2,BigDecimal.ROUND_DOWN));
+            generatorDetailClient.setPerAmount(generatorDetailClient.getActualAmount().divide(new BigDecimal(generatorDetailClient.getPerCount()),2,BigDecimal.ROUND_DOWN));
+        }
+
+        SumGeneratorClient sumGeneratorClient = new SumGeneratorClient();
+        sumGeneratorClient.setActualAmountSum(sumGeneratorDetailClient.stream().map(SumGeneratorDetailClient::getActualAmount).reduce(BigDecimal::add).get());
+        sumGeneratorClient.setOrderCountSum(sumGeneratorDetailClient.stream().map(SumGeneratorDetailClient::getOrderCount).reduce(Integer::sum).get());
+        sumGeneratorClient.setSingleAmountSum(sumGeneratorDetailClient.stream().map(SumGeneratorDetailClient::getSingleAmount).reduce(BigDecimal::add).get());
+        sumGeneratorClient.setPerCountSum(sumGeneratorDetailClient.stream().map(SumGeneratorDetailClient::getPerCount).reduce(Integer::sum).get());
+        sumGeneratorClient.setPerAmountSum(sumGeneratorDetailClient.stream().map(SumGeneratorDetailClient::getPerAmount).reduce(BigDecimal::add).get());
+
+        sumGeneratorClient.setAllMoney(sumGeneratorDetailClient.stream().map(SumGeneratorDetailClient::getActualAmount).reduce(BigDecimal::add).get());
+        sumGeneratorClient.setSingleAvgAmount(sumGeneratorClient.getAllMoney().divide(new BigDecimal(sumGeneratorClient.getPerCountSum())));
+        sumGeneratorClient.setPerCapitaAmount(sumGeneratorClient.getAllMoney().divide(new BigDecimal(sumGeneratorClient.getOrderCountSum())));
+
+        sumGeneratorClient.setOrderStatistics(sumGeneratorDetailClient);
+
+        return sumGeneratorClient;
+    }
 }
diff --git a/ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml
index cd91c05..26a32dc 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml
@@ -339,5 +339,20 @@
             AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
         </where>
     </select>
+    <select id="sumExport" resultType="com.ruoyi.system.export.SumGeneratorDetailClient">
+        select
+            DATE_FORMAT(mealTime, '%Y-%m-%d') AS dayTime,
+            IFNULL(SUM(payMoney),0) AS actualAmount,
+            IFNULL(COUNT(id),0) AS orderCount,
+            IFNULL(SUM(mealPerson),0) AS perCount
+        from t_order_sale
+        <where>
+            <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
+                AND (orderTime BETWEEN #{query.startTime} AND #{query.endTime})
+            </if>
+            AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
+        </where>
+        GROUP BY DATE_FORMAT(mealTime, '%Y-%m-%d')
+    </select>
 
 </mapper>
diff --git "a/ruoyi-system/src/main/resources/template/\350\220\245\344\270\232\347\273\237\350\256\241\346\212\245\350\241\250.xls" "b/ruoyi-system/src/main/resources/template/\350\220\245\344\270\232\347\273\237\350\256\241\346\212\245\350\241\250.xls"
new file mode 100644
index 0000000..ccdbc30
--- /dev/null
+++ "b/ruoyi-system/src/main/resources/template/\350\220\245\344\270\232\347\273\237\350\256\241\346\212\245\350\241\250.xls"
Binary files differ

--
Gitblit v1.7.1