diff --git a/sky-server/src/main/java/com/sky/controller/admin/ReportController.java b/sky-server/src/main/java/com/sky/controller/admin/ReportController.java index f5a79e1..9a45460 100644 --- a/sky-server/src/main/java/com/sky/controller/admin/ReportController.java +++ b/sky-server/src/main/java/com/sky/controller/admin/ReportController.java @@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletResponse; import java.time.LocalDate; @RestController @@ -87,4 +88,15 @@ public class ReportController { log.info("销量排名数据统计:{}-{}", begin, end); return Result.success(reportService.getSalesTop10(begin,end)); } + + /** + * 数据导出 + * @param response + */ + @GetMapping("/export") + @ApiOperation("运营数据导出") + public void export(HttpServletResponse response) { + log.info("数据导出"); + reportService.exportBusinessData(response); + } } diff --git a/sky-server/src/main/java/com/sky/service/ReportService.java b/sky-server/src/main/java/com/sky/service/ReportService.java index 44152b7..66c801b 100644 --- a/sky-server/src/main/java/com/sky/service/ReportService.java +++ b/sky-server/src/main/java/com/sky/service/ReportService.java @@ -5,6 +5,7 @@ import com.sky.vo.SalesTop10ReportVO; import com.sky.vo.TurnoverReportVO; import com.sky.vo.UserReportVO; +import javax.servlet.http.HttpServletResponse; import java.time.LocalDate; public interface ReportService { @@ -40,4 +41,10 @@ public interface ReportService { * @return */ SalesTop10ReportVO getSalesTop10(LocalDate begin, LocalDate end); + + /** + * 导出营业额数据 + * @param response + */ + void exportBusinessData(HttpServletResponse response); } diff --git a/sky-server/src/main/java/com/sky/service/impl/ReportServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/ReportServiceImpl.java index 65e94f1..3eeec6b 100644 --- a/sky-server/src/main/java/com/sky/service/impl/ReportServiceImpl.java +++ b/sky-server/src/main/java/com/sky/service/impl/ReportServiceImpl.java @@ -6,15 +6,20 @@ import com.sky.mapper.OrderMapper; import com.sky.mapper.UserMapper; import com.sky.service.ReportService; import com.sky.service.UserService; -import com.sky.vo.OrderReportVO; -import com.sky.vo.SalesTop10ReportVO; -import com.sky.vo.TurnoverReportVO; -import com.sky.vo.UserReportVO; +import com.sky.service.WorkspaceService; +import com.sky.vo.*; import lombok.extern.slf4j.Slf4j; 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.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.LocalDateTime; import java.time.LocalTime; @@ -31,9 +36,9 @@ public class ReportServiceImpl implements ReportService { @Autowired private OrderMapper orderMapper; @Autowired - private UserService userService; - @Autowired private UserMapper userMapper; + @Autowired + private WorkspaceService workspaceService; /** * 获取营业额统计数据 @@ -201,6 +206,60 @@ public class ReportServiceImpl implements ReportService { .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(); + } + } + /** * 根据时间区间统计指定状态的订单数量 * diff --git a/sky-server/src/main/java/com/sky/service/impl/WorkspaceServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/WorkspaceServiceImpl.java index 8ea0475..90e444d 100644 --- a/sky-server/src/main/java/com/sky/service/impl/WorkspaceServiceImpl.java +++ b/sky-server/src/main/java/com/sky/service/impl/WorkspaceServiceImpl.java @@ -14,6 +14,7 @@ import com.sky.vo.SetmealOverViewVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + import java.time.LocalDateTime; import java.time.LocalTime; import java.util.HashMap; @@ -34,6 +35,7 @@ public class WorkspaceServiceImpl implements WorkspaceService { /** * 根据时间段统计营业数据 + * * @param begin * @param end * @return @@ -48,8 +50,8 @@ public class WorkspaceServiceImpl implements WorkspaceService { */ Map map = new HashMap(); - map.put("begin",begin); - map.put("end",end); + map.put("begin", begin); + map.put("end", end); //查询总订单数 Integer totalOrderCount = orderMapper.countByMap(map); @@ -57,7 +59,7 @@ public class WorkspaceServiceImpl implements WorkspaceService { map.put("status", Orders.COMPLETED); //营业额 Double turnover = orderMapper.sumByMap(map); - turnover = turnover == null? 0.0 : turnover; + turnover = turnover == null ? 0.0 : turnover; //有效订单数 Integer validOrderCount = orderMapper.countByMap(map); @@ -65,7 +67,7 @@ public class WorkspaceServiceImpl implements WorkspaceService { Double unitPrice = 0.0; Double orderCompletionRate = 0.0; - if(totalOrderCount != 0 && validOrderCount != 0){ + if (totalOrderCount != 0 && validOrderCount != 0) { //订单完成率 orderCompletionRate = validOrderCount.doubleValue() / totalOrderCount; //平均客单价 diff --git a/sky-server/src/main/resources/template/运营数据报表模板.xlsx b/sky-server/src/main/resources/template/运营数据报表模板.xlsx new file mode 100644 index 0000000..76806c5 Binary files /dev/null and b/sky-server/src/main/resources/template/运营数据报表模板.xlsx differ