完成营业数据导出execl功能

This commit is contained in:
subaixi 2024-10-09 18:57:46 +08:00
parent 613e15c19d
commit 4bd9370f34
5 changed files with 90 additions and 10 deletions

View File

@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate; import java.time.LocalDate;
@RestController @RestController
@ -87,4 +88,15 @@ public class ReportController {
log.info("销量排名数据统计:{}-{}", begin, end); log.info("销量排名数据统计:{}-{}", begin, end);
return Result.success(reportService.getSalesTop10(begin,end)); return Result.success(reportService.getSalesTop10(begin,end));
} }
/**
* 数据导出
* @param response
*/
@GetMapping("/export")
@ApiOperation("运营数据导出")
public void export(HttpServletResponse response) {
log.info("数据导出");
reportService.exportBusinessData(response);
}
} }

View File

@ -5,6 +5,7 @@ import com.sky.vo.SalesTop10ReportVO;
import com.sky.vo.TurnoverReportVO; import com.sky.vo.TurnoverReportVO;
import com.sky.vo.UserReportVO; import com.sky.vo.UserReportVO;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate; import java.time.LocalDate;
public interface ReportService { public interface ReportService {
@ -40,4 +41,10 @@ public interface ReportService {
* @return * @return
*/ */
SalesTop10ReportVO getSalesTop10(LocalDate begin, LocalDate end); SalesTop10ReportVO getSalesTop10(LocalDate begin, LocalDate end);
/**
* 导出营业额数据
* @param response
*/
void exportBusinessData(HttpServletResponse response);
} }

View File

@ -6,15 +6,20 @@ import com.sky.mapper.OrderMapper;
import com.sky.mapper.UserMapper; import com.sky.mapper.UserMapper;
import com.sky.service.ReportService; import com.sky.service.ReportService;
import com.sky.service.UserService; import com.sky.service.UserService;
import com.sky.vo.OrderReportVO; import com.sky.service.WorkspaceService;
import com.sky.vo.SalesTop10ReportVO; import com.sky.vo.*;
import com.sky.vo.TurnoverReportVO;
import com.sky.vo.UserReportVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
@ -31,9 +36,9 @@ public class ReportServiceImpl implements ReportService {
@Autowired @Autowired
private OrderMapper orderMapper; private OrderMapper orderMapper;
@Autowired @Autowired
private UserService userService;
@Autowired
private UserMapper userMapper; private UserMapper userMapper;
@Autowired
private WorkspaceService workspaceService;
/** /**
* 获取营业额统计数据 * 获取营业额统计数据
@ -201,6 +206,60 @@ public class ReportServiceImpl implements ReportService {
.build(); .build();
} }
/**
* 导出30天营业数据
* @param response
*/
public void exportBusinessData(HttpServletResponse response) {
LocalDate begin = LocalDate.now().minusDays(30);
LocalDate end = LocalDate.now().minusDays(1);
//查询概览运营数据提供给Excel模板文件
BusinessDataVO businessData = workspaceService.getBusinessData(
LocalDateTime.of(begin,LocalTime.MIN), LocalDateTime.of(end, LocalTime.MAX));
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");
try {
//基于提供好的模板文件创建一个新的Excel表格对象
XSSFWorkbook excel = new XSSFWorkbook(inputStream);
//获得Excel文件中的一个Sheet页
XSSFSheet sheet = excel.getSheet("Sheet1");
sheet.getRow(1).getCell(1).setCellValue(begin + "" + end);
//获得第4行
XSSFRow row = sheet.getRow(3);
//获取单元格
row.getCell(2).setCellValue(businessData.getTurnover());
row.getCell(4).setCellValue(businessData.getOrderCompletionRate());
row.getCell(6).setCellValue(businessData.getNewUsers());
row = sheet.getRow(4);
row.getCell(2).setCellValue(businessData.getValidOrderCount());
row.getCell(4).setCellValue(businessData.getUnitPrice());
for (int i = 0; i < 30; i++) {
LocalDate date = begin.plusDays(i);
//准备明细数据
businessData = workspaceService.getBusinessData(LocalDateTime.of(date,LocalTime.MIN), LocalDateTime.of(date, LocalTime.MAX));
row = sheet.getRow(7 + i);
row.getCell(1).setCellValue(date.toString());
row.getCell(2).setCellValue(businessData.getTurnover());
row.getCell(3).setCellValue(businessData.getValidOrderCount());
row.getCell(4).setCellValue(businessData.getOrderCompletionRate());
row.getCell(5).setCellValue(businessData.getUnitPrice());
row.getCell(6).setCellValue(businessData.getNewUsers());
}
//通过输出流将文件下载到客户端浏览器中
ServletOutputStream out = response.getOutputStream();
excel.write(out);
//关闭资源
out.flush();
out.close();
excel.close();
}catch (IOException e){
e.printStackTrace();
}
}
/** /**
* 根据时间区间统计指定状态的订单数量 * 根据时间区间统计指定状态的订单数量
* *

View File

@ -14,6 +14,7 @@ import com.sky.vo.SetmealOverViewVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.util.HashMap; import java.util.HashMap;
@ -34,6 +35,7 @@ public class WorkspaceServiceImpl implements WorkspaceService {
/** /**
* 根据时间段统计营业数据 * 根据时间段统计营业数据
*
* @param begin * @param begin
* @param end * @param end
* @return * @return
@ -48,8 +50,8 @@ public class WorkspaceServiceImpl implements WorkspaceService {
*/ */
Map map = new HashMap(); Map map = new HashMap();
map.put("begin",begin); map.put("begin", begin);
map.put("end",end); map.put("end", end);
//查询总订单数 //查询总订单数
Integer totalOrderCount = orderMapper.countByMap(map); Integer totalOrderCount = orderMapper.countByMap(map);
@ -57,7 +59,7 @@ public class WorkspaceServiceImpl implements WorkspaceService {
map.put("status", Orders.COMPLETED); map.put("status", Orders.COMPLETED);
//营业额 //营业额
Double turnover = orderMapper.sumByMap(map); Double turnover = orderMapper.sumByMap(map);
turnover = turnover == null? 0.0 : turnover; turnover = turnover == null ? 0.0 : turnover;
//有效订单数 //有效订单数
Integer validOrderCount = orderMapper.countByMap(map); Integer validOrderCount = orderMapper.countByMap(map);
@ -65,7 +67,7 @@ public class WorkspaceServiceImpl implements WorkspaceService {
Double unitPrice = 0.0; Double unitPrice = 0.0;
Double orderCompletionRate = 0.0; Double orderCompletionRate = 0.0;
if(totalOrderCount != 0 && validOrderCount != 0){ if (totalOrderCount != 0 && validOrderCount != 0) {
//订单完成率 //订单完成率
orderCompletionRate = validOrderCount.doubleValue() / totalOrderCount; orderCompletionRate = validOrderCount.doubleValue() / totalOrderCount;
//平均客单价 //平均客单价