当前位置: 首页 > article >正文

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

请求方式为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。

 /**
     * 统计指定时间区间内的营业额数据
     * @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.kler.cn/a/530306.html

相关文章:

  • 使用Avalonia UI实现DataGrid
  • 【Android】布局文件layout.xml文件使用控件属性android:layout_weight使布局较为美观,以RadioButton为例
  • AI协助探索AI新构型的自动化创新概念
  • C#,入门教程(10)——常量、变量与命名规则的基础知识
  • 反向代理模块jmh
  • JVM的GC详解
  • CV报错与模型推理注意
  • [SAP ABAP] 静态断点的使用
  • 14 2D矩形模块( rect.rs)
  • 蓝桥杯之c++入门(三)【条件判断】
  • for fn in *.html ;do fns=“${fns} ${fn} “ ;done; firefox ${fns}
  • DeepSeek本地部署+可视化WebUI
  • Autosar-以太网是怎么运行的?(Davinci配置部分)
  • LeetCode:198.打家劫舍
  • Compose笔记(二)--LaunchedEffect
  • AMD简单读书笔记2
  • 【人工智能】深入探索Python中的自注意力机制:实现Transformer的核心组件
  • 035 搜索之DFS基础
  • 鬼泣目录.
  • 【博弈论】Chapter2 重复严格优势/可理性化和相关均衡
  • JVM篇:对象的深度剖析
  • 一种非接触式智能垃圾桶设计(论文+源码+实物)
  • 【仿12306项目】通过加“锁”,解决高并发抢票的超卖问题
  • BUUCTF_[网鼎杯 2020 朱雀组]phpweb(反序列化绕过命令)
  • 11 3D变换模块(transform3d.rs)
  • DeepSeek算是真正意义上的大模型开源吗?