From c0dc470d70f71fc53a06b2840ce8fd8b24516371 Mon Sep 17 00:00:00 2001 From: xuxin <840198532@qq.com> Date: Mon, 1 Dec 2025 16:55:05 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8B=8D=E7=A9=B9=E5=A4=96=E5=8D=96--=E8=90=A5?= =?UTF-8?q?=E4=B8=9A=E9=A2=9D=E7=BB=9F=E8=AE=A1=E5=8A=9F=E8=83=BD=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/ReportController.java | 40 +++++++++++ .../main/java/com/sky/mapper/OrderMapper.java | 3 + .../java/com/sky/service/ReportService.java | 15 ++++ .../sky/service/impl/ReportServiceImpl.java | 72 +++++++++++++++++++ .../src/main/resources/mapper/OrderMapper.xml | 16 +++++ 5 files changed, 146 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/service/ReportService.java create mode 100644 sky-server/src/main/java/com/sky/service/impl/ReportServiceImpl.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..85f8562 --- /dev/null +++ b/sky-server/src/main/java/com/sky/controller/admin/ReportController.java @@ -0,0 +1,40 @@ +package com.sky.controller.admin; + + +import com.sky.result.Result; +import com.sky.service.ReportService; +import com.sky.vo.TurnoverReportVO; +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 java.time.LocalDate; + +@RestController +@RequestMapping("/admin/report") +@Slf4j +@Api(tags = "数据统计相关接口") +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 vo = reportService.getTurnoverStatistics(begin,end); + + return Result.success(vo); + } +} diff --git a/sky-server/src/main/java/com/sky/mapper/OrderMapper.java b/sky-server/src/main/java/com/sky/mapper/OrderMapper.java index fdc9a41..14779c5 100644 --- a/sky-server/src/main/java/com/sky/mapper/OrderMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/OrderMapper.java @@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.*; import java.time.LocalDateTime; import java.util.List; +import java.util.Map; @Mapper public interface OrderMapper { @@ -57,4 +58,6 @@ public interface OrderMapper { */ @Select("select * from orders where status = #{status} and order_time < #{time}") List getByStatusAndOrderTime(Integer status, LocalDateTime time); + + Double sumByMap(Map map); } diff --git a/sky-server/src/main/java/com/sky/service/ReportService.java b/sky-server/src/main/java/com/sky/service/ReportService.java new file mode 100644 index 0000000..2ce86aa --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/ReportService.java @@ -0,0 +1,15 @@ +package com.sky.service; + +import com.sky.vo.TurnoverReportVO; + +import java.time.LocalDate; + +public interface ReportService { + /** + * 统计指定时间内每天的营业额数据 + * @param begin + * @param end + * @return + */ + TurnoverReportVO getTurnoverStatistics(LocalDate begin, LocalDate end); +} 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 new file mode 100644 index 0000000..19665ce --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/impl/ReportServiceImpl.java @@ -0,0 +1,72 @@ +package com.sky.service.impl; + +import com.sky.entity.Orders; +import com.sky.mapper.OrderMapper; +import com.sky.service.ReportService; +import com.sky.vo.TurnoverReportVO; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class ReportServiceImpl implements ReportService { + + @Autowired + private OrderMapper orderMapper; + + + /** + * 统计指定时间内每天的营业额数据 + * @param begin + * @param end + * @return + */ + @Override + public TurnoverReportVO getTurnoverStatistics(LocalDate begin, LocalDate end) {//1.1 1.2 1.3----- 1.7 + //根据对应的日期,将当天的所有已完成的订单查询出来,并统计总金额(sum) + List dateList = new ArrayList<>(); + dateList.add(begin); + //不停地创建日期对象,直到end + while (!begin.equals(end)){ + begin = begin.plusDays(1); + dateList.add(begin); + } + + //创建一个集合用来保存对应日期的当天的营业金额 + List turnoverList = new ArrayList<>(); + + //遍历日期,将每天的营业额查询并添加到集合中 + for (LocalDate localDate : dateList) { + //查询localDate日期对应的营业额,营业额指的是,已完成状态的订单的总和 + //一天的订单如何获取???通过localDate对象,获取一天的最小时间和最大时间,订单的下单时间在此期间那就就是当天的 订单!!! + LocalDateTime beginTime = LocalDateTime.of(localDate, LocalTime.MIN); + LocalDateTime endTime = LocalDateTime.of(localDate, LocalTime.MAX); + + //sql:select sum(amount) from orders where order_time > beginTime and order_time < endTime and status = 5; + //准备下查询条件数据 + + Map map = new HashMap(); + map.put("begin", beginTime); + map.put("end", endTime); + map.put("status", Orders.COMPLETED); + Double turnover = orderMapper.sumByMap(map); + //注意,如果当日没有订单,那么金额为0 + turnoverList.add(turnover == null?0.0:turnover); + } + TurnoverReportVO turnoverReportVO = TurnoverReportVO.builder() + .dateList(StringUtils.join(dateList, ",")) + .turnoverList(StringUtils.join(turnoverList, ",")) + .build(); + + + return turnoverReportVO; + } +} diff --git a/sky-server/src/main/resources/mapper/OrderMapper.xml b/sky-server/src/main/resources/mapper/OrderMapper.xml index 4312a80..6938f30 100644 --- a/sky-server/src/main/resources/mapper/OrderMapper.xml +++ b/sky-server/src/main/resources/mapper/OrderMapper.xml @@ -56,4 +56,20 @@ order by order_time desc + + + \ No newline at end of file