苍穹外卖--POI-导出运营数据Excel报表
This commit is contained in:
@@ -16,6 +16,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
|
||||||
@@ -85,4 +86,14 @@ public class ReportController {
|
|||||||
|
|
||||||
return Result.success(vo);
|
return Result.success(vo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用响应对象,导出报表数据
|
||||||
|
* @param response
|
||||||
|
*/
|
||||||
|
@ApiOperation("导出报表数据")
|
||||||
|
@GetMapping("/export")
|
||||||
|
public void exportExcel(HttpServletResponse response) throws Exception {
|
||||||
|
reportService.exportExcel(response);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
@@ -39,4 +40,6 @@ public interface ReportService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
SalesTop10ReportVO getTop10(LocalDate begin, LocalDate end);
|
SalesTop10ReportVO getTop10(LocalDate begin, LocalDate end);
|
||||||
|
|
||||||
|
void exportExcel(HttpServletResponse response) throws Exception;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,14 +5,19 @@ import com.sky.entity.Orders;
|
|||||||
import com.sky.mapper.OrderMapper;
|
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.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 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,6 +36,9 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private UserMapper userMapper;
|
private UserMapper userMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private WorkspaceService workspaceService;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 统计指定时间内每天的营业额数据
|
* 统计指定时间内每天的营业额数据
|
||||||
@@ -230,4 +238,58 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
|
|
||||||
return salesTop10ReportVO;
|
return salesTop10ReportVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void exportExcel(HttpServletResponse response) throws Exception {
|
||||||
|
//准备30天的今日数据(工作台模块实现完毕!!)
|
||||||
|
LocalDate now = LocalDate.now();//今日日期
|
||||||
|
LocalDate beginDate = now.minusDays(30);//开始日期
|
||||||
|
LocalDate endDate = now.minusDays(1);//结束日期
|
||||||
|
|
||||||
|
LocalDateTime beginTime = LocalDateTime.of(beginDate, LocalTime.MIN);
|
||||||
|
LocalDateTime endTime = LocalDateTime.of(endDate, LocalTime.MAX);
|
||||||
|
|
||||||
|
//查询近30天的每日数据
|
||||||
|
BusinessDataVO businessData = workspaceService.getBusinessData(beginTime, endTime);
|
||||||
|
|
||||||
|
//使用输入流读取服务器的模版,将30天的商业数据,填充到模版中
|
||||||
|
InputStream in = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");
|
||||||
|
XSSFWorkbook excel = new XSSFWorkbook(in);
|
||||||
|
XSSFSheet sheet = excel.getSheetAt(0);
|
||||||
|
//时间范围填充
|
||||||
|
sheet.getRow(1).getCell(1).setCellValue(beginDate.toString()+"至"+endDate.toString());
|
||||||
|
//概览数据填充
|
||||||
|
sheet.getRow(3).getCell(2).setCellValue(businessData.getTurnover());
|
||||||
|
sheet.getRow(3).getCell(4).setCellValue(businessData.getOrderCompletionRate());
|
||||||
|
sheet.getRow(3).getCell(6).setCellValue(businessData.getNewUsers());
|
||||||
|
sheet.getRow(4).getCell(2).setCellValue(businessData.getValidOrderCount());
|
||||||
|
sheet.getRow(4).getCell(4).setCellValue(businessData.getUnitPrice());
|
||||||
|
|
||||||
|
//填充明细数据,一共30行
|
||||||
|
for (int i = 0; i < 30; i++) {
|
||||||
|
//从开始日期,动态获取近30天的每天的日期
|
||||||
|
LocalDate date = beginDate.plusDays(i);//1-1 1-2 1-3 -----1-30
|
||||||
|
|
||||||
|
BusinessDataVO data = workspaceService.getBusinessData(LocalDateTime.of(date,LocalTime.MIN), LocalDateTime.of(date,LocalTime.MAX));
|
||||||
|
//获取动态的row
|
||||||
|
XSSFRow row = sheet.getRow(7 + i);
|
||||||
|
//动态填充一行数据
|
||||||
|
row.getCell(1).setCellValue(date.toString());
|
||||||
|
row.getCell(2).setCellValue(data.getTurnover());
|
||||||
|
row.getCell(3).setCellValue(data.getValidOrderCount());
|
||||||
|
row.getCell(4).setCellValue(data.getOrderCompletionRate());
|
||||||
|
row.getCell(5).setCellValue(data.getUnitPrice());
|
||||||
|
row.getCell(6).setCellValue(data.getNewUsers());
|
||||||
|
|
||||||
|
}
|
||||||
|
//填充完毕excel文件数据之后,通过响应对象的输出流,将excel字节数据输出到对应的客户端浏览器中
|
||||||
|
|
||||||
|
ServletOutputStream out = response.getOutputStream();
|
||||||
|
excel.write(out);
|
||||||
|
|
||||||
|
//资源释放
|
||||||
|
out.close();
|
||||||
|
excel.close();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
sky-server/src/main/resources/template/运营数据报表模板.xlsx
Normal file
BIN
sky-server/src/main/resources/template/运营数据报表模板.xlsx
Normal file
Binary file not shown.
Reference in New Issue
Block a user