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

news/2025/2/3 17:24:44 标签: 学习, java

请求方式为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 = 5
            Map 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.niftyadmin.cn/n/5840953.html

相关文章

深入理解 `box-sizing: border-box;`:CSS 布局的利器

深入理解 box-sizing: border-box;&#xff1a;CSS 布局的利器 默认行为示例代码 使用 box-sizing: border-box;示例代码 全局应用 box-sizing: border-box;示例代码 实际应用场景1. 表单布局2. 网格布局 总结 在 CSS 中&#xff0c;box-sizing 属性决定了元素的总宽度和高度是…

蓝桥杯单片机第七届省赛

前言 这套题不难&#xff0c;相对于第六套题这一套比较简单了&#xff0c;但是还是有些小细节要抓 题目 OK&#xff0c;以上就是全部的题目了&#xff0c;这套题目相对来说逻辑比较简单&#xff0c;四个按键&#xff0c;S4控制pwm占空比&#xff0c;S5控制计时时间&#xff0…

机器学习7-全连接神经网络3-过拟合与超参数

机器学习6-全连接神经网络3-过拟合欠拟合 过拟合应对过拟合-最优方案&#xff1a;获取更多的训练数据应对过拟合-次优方案&#xff1a;正则化应对过拟合-次优方案2&#xff1a;随机失活综合考量 超参数超参数优化方法 过拟合 机器学习的根本问题是优化和泛化的问题。优化——是…

Vue.js组件开发-实现图片浮动效果

使用Vue实现图片浮动效果 实现思路 将使用Vue的单文件组件&#xff08;.vue&#xff09;来实现图片浮动效果。主要思路是通过CSS的transform属性结合JavaScript的定时器来改变图片的位置&#xff0c;从而实现浮动效果。 代码实现 <template><!-- 定义一个包含图片…

java练习(4)

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 public class Solution {public String longestCommonPrefix(String[] strs) {// 如果数组为空&#xff0c;直接返回空字符串if (strs null || strs.length 0)…

PVE 中 Debian 虚拟机崩溃后,硬盘数据怎么恢复

问题 在 PVE 中给 Debian 虚拟机新分配硬盘后&#xff0c;通过 Debian 虚拟机开启 Samba 共享该硬盘。如果这个 Debian 虚拟机崩溃后&#xff0c;怎么恢复 Samba 共享硬盘数据。 方法 开启 Samba 共享相关知识&#xff1a;挂载硬盘和开启Samba共享。 新建一个虚拟机&#xf…

深入解析 CSS 中不常用属性及其相互作用

深入解析 CSS 中不常用属性及其相互作用 **1. CSS 自定义属性&#xff08;CSS Variables&#xff09;****属性示例****作用****布局相关的作用** **2. box-sizing: border-box;****属性示例****作用****布局相关的作用** **3. Flexbox 布局****属性示例****作用****布局相关的作…

剑指offer 链表 持续更新中...

文章目录 1. 实现单链表的插入和删除2. 从尾到头打印链表2.1 题目描述2.2 方法1&#xff0c;直接逆转2.3 方法2&#xff0c;使用栈方法3&#xff0c;递归 1. 实现单链表的插入和删除 #include <iostream>struct ListNode {explicit ListNode(int val_p 0, ListNode *ne…