本文共 9617 字,大约阅读时间需要 32 分钟。
工作台是系统运营的数据看板,旨在为商家提供便捷的数据分析工具和操作入口,提升工作效率。
工作台主要展示以下数据类别:
通过原型图分析,确定了以下接口:
WorkSpaceController.java
@RestController@RequestMapping("/admin/workspace")@Slf4j@Api(tags = "工作台相关接口")public class WorkSpaceController { @Autowired private WorkspaceService workspaceService; @GetMapping("/businessData") @ApiOperation("工作台今日数据查询") public ResultbusinessData() { LocalDateTime begin = LocalDateTime.now().with(LocalTime.MIN); LocalDateTime end = LocalDateTime.now().with(LocalTime.MAX); BusinessDataVO businessDataVO = workspaceService.getBusinessData(begin, end); return Result.success(businessDataVO); } @GetMapping("/overviewOrders") @ApiOperation("查询订单管理数据") public Result orderOverView() { return Result.success(workspaceService.getOrderOverView()); } @GetMapping("/overviewDishes") @ApiOperation("查询菜品总览") public Result dishOverView() { return Result.success(workspaceService.getDishOverView()); } @GetMapping("/overviewSetmeals") @ApiOperation("查询套餐总览") public Result setmealOverView() { return Result.success(workspaceService.getSetmealOverView()); }}
WorkspaceService.java
public interface WorkspaceService { BusinessDataVO getBusinessData(LocalDateTime begin, LocalDateTime end); OrderOverViewVO getOrderOverView(); DishOverViewVO getDishOverView(); SetmealOverViewVO getSetmealOverView();}
WorkspaceServiceImpl.java
@Service@Slf4jpublic class WorkspaceServiceImpl implements WorkspaceService { @Autowired private OrderMapper orderMapper; @Autowired private UserMapper userMapper; @Autowired private DishMapper dishMapper; @Autowired private SetmealMapper setmealMapper; public BusinessDataVO getBusinessData(LocalDateTime begin, LocalDateTime end) { Map map = new HashMap<>(); map.put("begin", begin); map.put("end", end); Integer totalOrderCount = orderMapper.countByMap(map); map.put("status", Orders.COMPLETED); Double turnover = orderMapper.sumByMap(map); Integer validOrderCount = orderMapper.countByMap(map); Double unitPrice = 0.0; Double orderCompletionRate = 0.0; if (totalOrderCount != 0 && validOrderCount != 0) { orderCompletionRate = validOrderCount / totalOrderCount; unitPrice = turnover / validOrderCount; } Integer newUsers = userMapper.countByMap(map); return BusinessDataVO.builder() .turnover(turnover) .validOrderCount(validOrderCount) .orderCompletionRate(orderCompletionRate) .unitPrice(unitPrice) .newUsers(newUsers) .build(); } public OrderOverViewVO getOrderOverView() { Map map = new HashMap<>(); map.put("begin", LocalDateTime.now().with(LocalTime.MIN)); map.put("status", Orders.TO_BE_CONFIRMED); Integer waitingOrders = orderMapper.countByMap(map); map.put("status", Orders.CONFIRMED); Integer deliveredOrders = orderMapper.countByMap(map); map.put("status", Orders.COMPLETED); Integer completedOrders = orderMapper.countByMap(map); map.put("status", Orders.CANCELLED); Integer cancelledOrders = orderMapper.countByMap(map); map.put("status", null); Integer allOrders = orderMapper.countByMap(map); return OrderOverViewVO.builder() .waitingOrders(waitingOrders) .deliveredOrders(deliveredOrders) .completedOrders(completedOrders) .cancelledOrders(cancelledOrders) .allOrders(allOrders) .build(); } public DishOverViewVO getDishOverView() { Map map = new HashMap<>(); map.put("status", StatusConstant.ENABLE); Integer sold = dishMapper.countByMap(map); map.put("status", StatusConstant.DISABLE); Integer discontinued = dishMapper.countByMap(map); return DishOverViewVO.builder() .sold(sold) .discontinued(discontinued) .build(); } public SetmealOverViewVO getSetmealOverView() { Map map = new HashMap<>(); map.put("status", StatusConstant.ENABLE); Integer sold = setmealMapper.countByMap(map); map.put("status", StatusConstant.DISABLE); Integer discontinued = setmealMapper.countByMap(map); return SetmealOverViewVO.builder() .sold(sold) .discontinued(discontinued) .build(); }}
Apache POI 是一个开源项目,专注于处理 Microsoft Office 文件格式。主要用于通过 Java 程序读写 Excel 文件。
public class POITest { public static void write() throws Exception { XSSFWorkbook excel = new XSSFWorkbook(); XSSFSheet sheet = excel.createSheet("itcast"); XSSFRow row1 = sheet.createRow(0); row1.createCell(1).setCellValue("姓名"); row1.createCell(2).setCellValue("城市"); XSSFRow row2 = sheet.createRow(1); row2.createCell(1).setCellValue("张三"); row2.createCell(2).setCellValue("北京"); XSSFRow row3 = sheet.createRow(2); row3.createCell(1).setCellValue("李四"); row3.createCell(2).setCellValue("上海"); FileOutputStream out = new FileOutputStream(new File("D:\\itcast.xlsx")); excel.write(out); out.flush(); out.close(); excel.close(); } public static void main(String[] args) throws Exception { write(); }}
public class POITest { public static void read() throws Exception { FileInputStream in = new FileInputStream(new File("D:\\itcast.xlsx")); XSSFWorkbook excel = new XSSFWorkbook(in); XSSFSheet sheet = excel.getSheetAt(0); int lastRowNum = sheet.getLastRowNum(); for (int i = 0; i <= lastRowNum; i++) { XSSFRow titleRow = sheet.getRow(i); XSSFCell cell1 = titleRow.getCell(1); String cellValue1 = cell1.getStringCellValue(); XSSFCell cell2 = titleRow.getCell(2); String cellValue2 = cell2.getStringCellValue(); System.out.println(cellValue1 + " " + cellValue2); } in.close(); excel.close(); } public static void main(String[] args) throws Exception { read(); }}
在数据统计页面,点击数据导出按钮后,下载包含最近30天运营数据的Excel报表。
ReportController.java
@RestController@RequestMapping("/report")@Api(tags = "报表导出相关接口")public class ReportController { @Autowired private ReportService reportService; @GetMapping("/export") @ApiOperation("导出运营数据报表") public void export(HttpServletResponse response) { reportService.exportBusinessData(response); }}
ReportService.java
public interface ReportService { void exportBusinessData(HttpServletResponse response);}
ReportServiceImpl.java
public class ReportServiceImpl implements ReportService { public void exportBusinessData(HttpServletResponse response) { LocalDate begin = LocalDate.now().minusDays(30); LocalDate end = LocalDate.now().minusDays(1); BusinessDataVO businessData = workspaceService.getBusinessData(LocalDateTime.of(begin, LocalTime.MIN), LocalDateTime.of(end, LocalTime.MAX)); InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx"); try { XSSFWorkbook excel = new XSSFWorkbook(inputStream); XSSFSheet sheet = excel.getSheet("Sheet1"); sheet.getRow(1).getCell(1).setCellValue(begin + "至" + end); 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(); } }}
将上述代码提交至项目源码仓库,完成后可通过以下步骤进行测试和部署。
转载地址:http://mtqbz.baihongyu.com/