From c398665a080c89a1c41c4a5ab88c72e89a4f758a Mon Sep 17 00:00:00 2001 From: LiShu <2945621619@qq.com> Date: Mon, 16 Dec 2024 11:04:26 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E3=80=81=E5=B7=A5=E4=BD=9C=E5=8F=B0=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=92=8C=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/ReportController.java | 74 ++++++++++++++++++ .../controller/admin/WorkSpaceController.java | 77 +++++++++++++++++++ 2 files changed, 151 insertions(+) create mode 100644 sky-server/src/main/java/com/sky/controller/admin/ReportController.java create mode 100644 sky-server/src/main/java/com/sky/controller/admin/WorkSpaceController.java 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 new file mode 100644 index 0000000..d8faa50 --- /dev/null +++ b/sky-server/src/main/java/com/sky/controller/admin/ReportController.java @@ -0,0 +1,74 @@ +package com.sky.controller.admin; + +import com.sky.result.Result; +import com.sky.service.ReportService; +import com.sky.vo.OrderReportVO; +import com.sky.vo.SalesTop10ReportVO; +import com.sky.vo.TurnoverReportVO; +import com.sky.vo.UserReportVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +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 +@RequestMapping("/admin/report") +@Api("数据统计相关接口") +@Slf4j +public class ReportController { + + @Autowired + private ReportService reportService; + /* + * 营业额统计 + */ + @GetMapping("/turnoverStatistics") + @ApiOperation("营业额统计") + public Result turnoverStatistics + (@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin, + @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){ + log.info("营业额数据统计:{},{}",begin,end); + TurnoverReportVO turnoverStatistics = reportService.getTurnoverStatistics(begin, end); + return Result.success(turnoverStatistics); + } + + @GetMapping("/userStatistics") + @ApiOperation("用户统计") + public Result userStatistics(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin, + @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){ + log.info("用户统计:{},{}",begin,end); + UserReportVO userReportVO = reportService.getUserStatistics(begin,end); + return Result.success(userReportVO); + } + + @ApiOperation("订单统计") + @GetMapping("/ordersStatistics") + public Result orderStatistics(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin, + @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){ + log.info("订单统计:{},{}",begin,end); + OrderReportVO orderReportVO = reportService.getOrderStatistics(begin,end); + return Result.success(orderReportVO); + } + + @GetMapping("/top10") + @ApiOperation("查询销售排名top10") + public Result top10(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin, + @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){ + log.info("查询销量排名top10:{},{}",begin,end); + SalesTop10ReportVO salesTop10ReportVO = reportService.getTop10(begin,end); + return Result.success(salesTop10ReportVO); + } + + @GetMapping("export") + @ApiOperation("导出运营输出报表") + public void export(HttpServletResponse response){ + reportService.exportBusinessData(response); + } +} diff --git a/sky-server/src/main/java/com/sky/controller/admin/WorkSpaceController.java b/sky-server/src/main/java/com/sky/controller/admin/WorkSpaceController.java new file mode 100644 index 0000000..44610ad --- /dev/null +++ b/sky-server/src/main/java/com/sky/controller/admin/WorkSpaceController.java @@ -0,0 +1,77 @@ +package com.sky.controller.admin; + +import com.sky.result.Result; +import com.sky.service.WorkspaceService; +import com.sky.vo.BusinessDataVO; +import com.sky.vo.DishOverViewVO; +import com.sky.vo.OrderOverViewVO; +import com.sky.vo.SetmealOverViewVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.time.LocalDateTime; +import java.time.LocalTime; + +/** + * 工作台 + */ +@RestController +@RequestMapping("/admin/workspace") +@Slf4j +@Api(tags = "工作台相关接口") +public class WorkSpaceController { + + @Autowired + private WorkspaceService workspaceService; + + /** + * 工作台今日数据查询 + * @return + */ + @GetMapping("/businessData") + @ApiOperation("工作台今日数据查询") + public Result businessData(){ + //获得当天的开始时间 + LocalDateTime begin = LocalDateTime.now().with(LocalTime.MIN); + //获得当天的结束时间 + LocalDateTime end = LocalDateTime.now().with(LocalTime.MAX); + + BusinessDataVO businessDataVO = workspaceService.getBusinessData(begin, end); + return Result.success(businessDataVO); + } + + /** + * 查询订单管理数据 + * @return + */ + @GetMapping("/overviewOrders") + @ApiOperation("查询订单管理数据") + public Result orderOverView(){ + return Result.success(workspaceService.getOrderOverView()); + } + + /** + * 查询菜品总览 + * @return + */ + @GetMapping("/overviewDishes") + @ApiOperation("查询菜品总览") + public Result dishOverView(){ + return Result.success(workspaceService.getDishOverView()); + } + + /** + * 查询套餐总览 + * @return + */ + @GetMapping("/overviewSetmeals") + @ApiOperation("查询套餐总览") + public Result setmealOverView(){ + return Result.success(workspaceService.getSetmealOverView()); + } +} From a760ae27f1ff387788c0f5a1e45666affc2298ee Mon Sep 17 00:00:00 2001 From: LiShu <2945621619@qq.com> Date: Mon, 16 Dec 2024 11:05:15 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=A4=84=E7=90=86=E8=AE=A2=E5=8D=95=E4=BB=BB=E5=8A=A1=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/sky/task/MyTask.java | 23 ++++++++ .../src/main/java/com/sky/task/OrderTask.java | 56 +++++++++++++++++++ .../main/java/com/sky/task/WebSocketTask.java | 19 +++++++ 3 files changed, 98 insertions(+) create mode 100644 sky-server/src/main/java/com/sky/task/MyTask.java create mode 100644 sky-server/src/main/java/com/sky/task/OrderTask.java create mode 100644 sky-server/src/main/java/com/sky/task/WebSocketTask.java diff --git a/sky-server/src/main/java/com/sky/task/MyTask.java b/sky-server/src/main/java/com/sky/task/MyTask.java new file mode 100644 index 0000000..8bc37a6 --- /dev/null +++ b/sky-server/src/main/java/com/sky/task/MyTask.java @@ -0,0 +1,23 @@ +package com.sky.task; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/* +* 自定义定时任务类 +* */ +@Component +@Slf4j +public class MyTask { + + /* + * 定时任务 每隔5秒触发一次 + * */ +// @Scheduled(cron = "0/5 * * * * ?") + public void executeTask(){ + log.info("定时任务开始执行:{}",new Date()); + } + +} diff --git a/sky-server/src/main/java/com/sky/task/OrderTask.java b/sky-server/src/main/java/com/sky/task/OrderTask.java new file mode 100644 index 0000000..8214df2 --- /dev/null +++ b/sky-server/src/main/java/com/sky/task/OrderTask.java @@ -0,0 +1,56 @@ +package com.sky.task; + +import com.sky.entity.Orders; +import com.sky.mapper.OrderMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.List; + +@Component +@Slf4j +public class OrderTask { + + @Autowired + private OrderMapper orderMapper; + /* + * 处理超时订单的方法 + * */ + @Scheduled(cron = "0 * * * * ? ") //每分钟触发一次 +// @Scheduled(cron = "1/5 * * * * ?") + public void processTimeoutOrder(){ + log.info("定时处理超时订单:{}", LocalDateTime.now()); + LocalDateTime time = LocalDateTime.now().plusMinutes(-15); + List orderList = orderMapper.getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT, time); + + if(orderList != null || orderList.size() >0){ + for (Orders orders : orderList) { + orders.setStatus(Orders.CANCELLED); + orders.setCancelReason("订单超时,自动取消"); + orders.setCancelTime(LocalDateTime.now()); + orderMapper.update(orders); + } + } + } + + /* + * 一直处于派送中状态的订单 + * */ + @Scheduled(cron = "0 0 1 * * ? ")//每日凌晨一点触发 +// @Scheduled(cron = "0/5 * * * * ?") + public void processDeliveryOrder(){ + log.info("定时处理处于派送中的订单:{}",LocalDateTime.now()); + LocalDateTime time = LocalDateTime.now().plusMinutes(-60); + List orderList = orderMapper.getByStatusAndOrderTimeLT(Orders.DELIVERY_IN_PROGRESS, time); + if(orderList != null || orderList.size() >0){ + for (Orders orders : orderList) { + orders.setStatus(Orders.COMPLETED); + orderMapper.update(orders); + } + } + + } +} diff --git a/sky-server/src/main/java/com/sky/task/WebSocketTask.java b/sky-server/src/main/java/com/sky/task/WebSocketTask.java new file mode 100644 index 0000000..6d9e92f --- /dev/null +++ b/sky-server/src/main/java/com/sky/task/WebSocketTask.java @@ -0,0 +1,19 @@ +package com.sky.task; + +import com.sky.websocket.WebSocketServer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class WebSocketTask { + @Autowired + private WebSocketServer webSocketServer; + + /** + * 通过WebSocket每隔5秒向客户端发送消息 + */ +// @Scheduled(cron = "0/5 * * * * ?") +// public void sendMessageToClient() { +// webSocketServer.sendToAllClient("这是来自服务端的消息:" + DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now())); +// } +} From 8cb7a001bf0b70eed3fb8f331a6ca6037cda7537 Mon Sep 17 00:00:00 2001 From: LiShu <2945621619@qq.com> Date: Mon, 16 Dec 2024 11:06:32 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=AE=B0=E5=BD=95=E6=8A=A5=E8=A1=A8=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/sky/test/POITest.java | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 sky-server/src/main/java/com/sky/test/POITest.java diff --git a/sky-server/src/main/java/com/sky/test/POITest.java b/sky-server/src/main/java/com/sky/test/POITest.java new file mode 100644 index 0000000..b1540dc --- /dev/null +++ b/sky-server/src/main/java/com/sky/test/POITest.java @@ -0,0 +1,73 @@ +package com.sky.test; + +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +/* +* 使用POI操作excel文件 +* */ +public class POITest { + + /* + * 通过POI创建excel文件并且写入文件内容 + * */ + public static void write() throws IOException { + //在内存中创建一个excel文件 + XSSFWorkbook excel = new XSSFWorkbook(); + //在excel文件中创建一个sheet页 + XSSFSheet sheet = excel.createSheet("info"); + //在sheet页中创建行对象,rownum从0开始 + XSSFRow row = sheet.createRow(1); + //创建单元格,写入文件内容 + row.createCell(1).setCellValue("姓名"); + row.createCell(2).setCellValue("城市"); + + //创建一个新行 + row = sheet.createRow(2); + row.createCell(1).setCellValue("aiming"); + row.createCell(2).setCellValue("北京"); + + //通过输出流将内存中的excel文件写入磁盘中 + FileOutputStream out = new FileOutputStream(new File("D:\\info.xlsx")); + excel.write(out); + + //关闭资源 + out.close(); + excel.close(); + } + + /* + * 通过POI读入excel文件中的内容 + * */ + public static void read() throws Exception{ + FileInputStream in = new FileInputStream(new File("D:\\info.xlsx")); + //读取磁盘上已存在的excel文件 + XSSFWorkbook excel = new XSSFWorkbook(in); + //读取excel文件中第一个sheet页 + XSSFSheet sheet = excel.getSheetAt(0); + + //获取sheet页中最后一行的行号 + int lastRowNum = sheet.getLastRowNum(); + for(int i = 1; i <= lastRowNum; i++){ + //获取某一行 + XSSFRow row = sheet.getRow(i); + //获得单元格对象 + String cellValue1 = row.getCell(1).getStringCellValue(); + String cellValue2 = row.getCell(2).getStringCellValue(); + System.out.println(cellValue1 + " " + cellValue2); + } + //关闭资源 + excel.close(); + in.close(); + } + public static void main(String[] args) throws Exception { +// write(); + read(); + } +}