《苍穹外卖》项目学习记录-Day11营业额统计

news/2025/2/4 1:02:23/

请求方式为GET方式,因为营业额统计本质上是一个查询类的操作, 查询相应的数据,最终把数据整合好,然后返回给前端。接口的请求参数有哪些,我们要统计营业额具体是统计哪个时间段之内的呢,应该通过参数传过来比较合理,比如说想统计近七日的,那近七日是几月几号到几月几号呢,这就需要通过参数传过来,然后后端根据它提交过来的这个参数,来查询这个时间段之内的统计数据。所以这个参数我们提交过来两个就可以了,一个是起始日期,一个是结束日期。

日期类型有固定的格式,通过@DateTimeFormat注解来描述这个日期的格式,否则不能正确封装。

1.计算dateList

从begin这一天一直加到end,把这些天数加到dateList集合里面去。把dateList集合里面的元素一个一个取出来,中间用逗号分隔开,拼成一个字符串封装到dateList里面去。

2.计算turnoverList

查询从begin到end每一天的营业额数据,中间以逗号分隔开,拼接成一个字符串封装到turnoverList里面去。

营业额与日期应该是一一对应的,哪一天的日期对应哪一天的营业额。

LocalDate只有年月日没有时分秒,而LocalDateTime既有年月日又体现时分秒。要计算当天的营业额数据就要知道当天的起始时间从什么时刻开始,也就是说除了要体现年月日还要体现时分秒,同时还要计算当天的结束时间。

//查询date日期对应的营业额数据,营业额是指:状态为"已完成"的订单金额合计

//select sum(amount) from orders where order_time > beginTime and order_time < endTime and status = 5

注意:test里面的begin、end、status要与Map中的key一样,前后一致,不然取不出来。

统计这一天的营业额,假设这一天一个订单也没有,这个营业额统计出来是null,所以它如果返回的是null的话我们把它转成0。

java"> /*** 统计指定时间区间内的营业额数据* @param begin* @param end* @return*/public TurnoverReportVO getTurnoverStatistics(LocalDate begin, LocalDate end) {//当前集合用于存放从begin到end范围内的每天的日期List<LocalDate> dateList = new ArrayList<>();dateList.add(begin);while (!end.equals(begin)){//日期计算,计算指定日期的最后一天对应的日期begin = begin.plusDays(1);dateList.add(begin);}//存放每天的营业额List<Double> turnoverList = new ArrayList();for (LocalDate date : dateList){//查询date日期对应的营业额数据,营业额是指:状态为"已完成"的订单金额合计LocalDateTime beginTime = LocalDateTime.of(date, LocalTime.MIN);LocalDateTime endTime = LocalDateTime.of(date, LocalTime.MAX);//select sum(amount) from orders where order_time > beginTime and order_time < endTime and status = 5Map map = new HashMap();map.put("begin",beginTime);map.put("end",endTime);map.put("status", Orders.COMPLETED);Double turnover = orderMapper.sumByMap(map);turnover =turnover == null ? 0.0 : turnover;turnoverList.add(turnover);}//封装返回结果return TurnoverReportVO.builder().dateList(StringUtils.join(dateList,",")).turnoverList(StringUtils.join(turnoverList,",")).build();}

 ·功能测试

增强for

格式 for(元素数据类型 变量名:数组或者Collection集合){

              //在此处使用变量即可,该变量就是元素

        }

条件运算符

条件运算符是Java中唯一的需要3个操作数的运算符,所以又称三目运算符或三元运算符。

条件运算符的语法格式如下。

条件 ? 表达式1 : 表达式2

·首先对条件进行判断,如果结果为true,则返回表达式1的值。

·如果结果为false,返回表达式2的值。

JDK8开始新增日期API

概述

·从Java8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:

LocalDate:不包含具体时间的日期

LocalTime:不包含日期的时间

LocalDateTime:包含了日期及时间

LocalTimeFormatter:用于做时间的格式化和解析的

Duration:用于计算两个"时间"间隔

Period:用于计算两个"日期"间隔

·新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便。

·其次,新的API的类型几乎全部是不可变类型(和String的使用类似),可以放心使用不必担心被修改。

LocalDate、LocalTime、LocalDateTime

·它们分别表示日期,时间,日期时间对象,它们的类的实例是不可变的对象。

·它们三者构建对象和API都是通用的。

构建对象的方式如下:

方法名                                     说明

public static Xxxx now();          静态方法,根据当前时间创建对象

                                                 LocalDate localDate = LocalDate.now();

                                                 LocalTime localTime = LocalTime.now();

                                      LocalDateTime localDateTime = LocalDateTime.now();

public static Xxxx of(...);          LocalDate localDate 1= LocalDate.of(2099,11,11);

                                                 LocalTime localTime1 = LocalTime.of(11,11,11);

                              LocalDateTime localDateTime1 = LocalDateTime.0f(2020,10,6,13,23,43);

LocalDateTime综合了LocalDate和LocalTime里面的方法,所以下面只用LocalDate和LocalTime来举例。

·这些方法返回的是一个新的实例引用,因为LocalDateTime、LocalDate、LocalTime都是不可变的。

方法名                                                                                说明

plusDays,plusWeeks,plusMonths,plusYears              向当前LocalDate对象添加几天、几周、几个月、几年

minusDay,minusWeeks,minusMonths,minusYears   从LocalDate对象减去几天、几周、几个月、几年

withDayOfMonth,withDayOfYear,withMonth,withYear   将月份天数、年份天数、月份、年份修改为指定的值并返回新的LocalDate对象

isBefore,isAfter        比较两个LocalDate

 

 


http://www.ppmy.cn/news/1569100.html

相关文章

MySQL复制扩展功能

一、mysql的并行复制 1.默认情况下slave中使用的是sql单线程回放&#xff0c;在master时多用户读写&#xff0c;如果使用单线程回放会造成主从复制延迟&#xff0c;针对这个问题一般采用mysql多线程回放来解决。 在slave中设定&#xff1a; vim /etc/my.cnf [mysqld] datadir/d…

基于SpringBoot的美食烹饪互动平台的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

DeepSeek-R1 论文解读 —— 强化学习大语言模型新时代来临?

近年来&#xff0c;人工智能&#xff08;AI&#xff09;领域发展迅猛&#xff0c;大语言模型&#xff08;LLMs&#xff09;为通用人工智能&#xff08;AGI&#xff09;的发展开辟了道路。OpenAI 的 o1 模型表现非凡&#xff0c;它引入的创新性推理时缩放技术显著提升了推理能力…

解锁计算机视觉算法:从理论到代码实战

目录 计算机视觉&#xff1a;开启智能视觉新时代 核心算法大揭秘 传统计算机视觉算法 深度学习驱动的计算机视觉算法 基于深度学习框架的算法实现 应用领域大放送 自动驾驶 医疗影像分析 安防与监控 其他领域 挑战与应对策略 数据质量问题 计算资源需求 模型鲁棒…

lstm代码解析1.2

在使用 LSTM&#xff08;长短期记忆网络&#xff09;进行训练时&#xff0c;model.fit 方法的输入数据 X 和目标数据 y 的形状要求是不同的。具体来说&#xff1a; 1. 输入数据 X 的形状 LSTM 层期望输入数据 X 是三维张量&#xff0c;形状为 (samples, timesteps, features)…

MVANet——小范围内捕捉高分辨率细节而在大范围内不损失精度的强大的背景消除模型

一、概述 前景提取&#xff08;背景去除&#xff09;是现代计算机视觉的关键挑战之一&#xff0c;在各种应用中的重要性与日俱增。在图像编辑和视频制作中有效地去除背景不仅能提高美学价值&#xff0c;还能提高工作流程的效率。在要求精确度的领域&#xff0c;如医学图像分析…

力扣第149场双周赛

文章目录 题目总览题目详解找到字符串中合法的相邻数字重新安排会议得到最多空余时间I3440.重新安排会议得到最多空余时间II 第149场双周赛 题目总览 找到字符串中合法的相邻数字 重新安排会议得到最多空余时间I 重新安排会议得到最多空余时间II 变成好标题的最少代价 题目…

使用TensorFlow实现逻辑回归:从训练到模型保存与加载

1. 引入必要的库 首先&#xff0c;需要引入必要的库。TensorFlow用于构建和训练模型&#xff0c;pandas和numpy用于数据处理&#xff0c;matplotlib用于结果的可视化。 import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layer…