xuhy
2024-12-20 cf7740957f2b859e541116f2f4603beff8a0c832
修改
5个文件已修改
3个文件已添加
207 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataStatisticsController.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/export/SumGeneratorClient.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/export/SumGeneratorDetailClient.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderSaleService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderSaleServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/template/营业统计报表.xls 补丁 | 查看 | 原始文档 | blame | 历史
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();
            }
        }
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/export/SumGeneratorClient.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/export/SumGeneratorDetailClient.java
New file
@@ -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;
}
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);
}
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);
}
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;
    }
}
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>
ruoyi-system/src/main/resources/template/营业统计报表.xls
Binary files differ