《苍穹外卖》项目学习记录-Day11用户统计

server/2025/2/6 2:58:15/

返回的数据由前端这个折线图来约定的,也就是说折线图对这个数据有这样的要求,我们去适应前端的这个数据格式,也就是前端需要什么样的数据,我们后端给它什么样的数据。

统计指定时间区间之内的每一天的用户数量,每一天的用户数量包含两部分,一个是用户的总量,一个是新增用户数量。

//存放每天的新增用户数量 select count(id) from user where create_time < ? and create_time > ?

//存放每天的总用户数量 select count(id) from user where create_time < ?

我们写一个动态SQL来兼容这两条SQL,也就是说动态的去拼这个where条件。

 /*** 统计指定时间区间的用户数据* @param begin* @param end* @return*/public UserReportVO getUserStatistics(LocalDate begin, LocalDate end) {//存放从begin到end之间的每天对应的日期List<LocalDate> dateList = new ArrayList<>();dateList.add(begin);while (!begin.equals(end)){begin = begin.plusDays(1);dateList.add(begin);}//存放每天的新增用户数量 select count(id) from user where create_time < ? and create_time > ?List<Integer> newUserList = new ArrayList<>();//存放每天的总用户数量 select count(id) from user where create_time < ?List<Integer> totalUserList = new ArrayList<>();for (LocalDate date : dateList) {LocalDateTime beginTime = LocalDateTime.of(date, LocalTime.MIN);LocalDateTime endTime = LocalDateTime.of(date, LocalTime.MAX);Map map = new HashMap();map.put("end",endTime);//总用户数量Integer totalUser = userMapper.countByMap(map);map.put("begin",beginTime);//新增用户数量Integer newUser = userMapper.countByMap(map);totalUserList.add(totalUser);newUserList.add(newUser);}//封装结果数据return UserReportVO.builder().dateList(StringUtils.join(dateList,",")).totalUserList(StringUtils.join(totalUserList,",")).newUserList(StringUtils.join(newUserList,",")).build();}

 ·功能测试

转义字符

>   &gt;

<   &lt;

StringUtils.join()是Apache Commons Lang库中的一个方法,用于将数组、集合或迭代器中的元素连接成一个字符串,并通过指定的分隔符分隔这些元素。

StringUtils.join(Object[] array,String separator);

StringUtils.join(Iterable<?> iterable,String separator);

StringUtils.join(Iterator<?> iterator,String separator);

·array:要连接的数组或集合

·separator:连接元素时使用的分隔符

参数类型

StringUtils.join()方法可以接受不同类型的参数:

·数组:可以是任何类型的数组。

·集合:实现了Iterable接口的集合类型。

·迭代器:实现了Iterator接口的迭代器。

返回值

该方法返回一个字符串,其中包含所有元素按指定分隔符连接的结果。如果输入的集合或数组为null,则返回null。


http://www.ppmy.cn/server/165308.html

相关文章

QMK启用摇杆和鼠标按键功能

虽然选择了触摸屏&#xff0c;我仍选择为机械键盘嵌入摇杆模块&#xff0c;这本质上是对"操作连续性"的执着。   值得深思的是&#xff0c;本次开发过程中借助DeepSeek的代码生成与逻辑推理&#xff0c;其展现的能力已然颠覆传统编程范式&#xff0c;需求描述可自动…

Hive:窗口函数[ntile, first_value,row_number() ,rank(),dens_rank()]和自定义函数

ntile 分组 它把有序的数据集合 平均分配 到 指定的数量&#xff08;num &#xff09;个桶中 , 将桶号分配给每一行。如果不能平均分配&#xff0c;则优先分配较小编号的桶&#xff0c;并且各个桶中能放的行数最多相差1。 被称作窗口函数、序列函数或分析函数, 本质上是一种…

Vue06

目录 一、声明式导航-导航链接 1.需求 2.解决方案 3.通过router-link自带的两个样式进行高亮 二、声明式导航的两个类名 1.router-link-active 2.router-link-exact-active 三、声明式导航-自定义类名&#xff08;了解&#xff09; 1.问题 2.解决方案 3.代码演示 四…

物联网智能项目之——智能家居项目的实现!

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网智能项目之——智能家居项目…

【4】阿里面试题整理

[1]. 介绍一下数据库死锁 数据库死锁是指两个或多个事务&#xff0c;由于互相请求对方持有的资源而造成的互相等待的状态&#xff0c;导致它们都无法继续执行。 死锁会导致事务阻塞&#xff0c;系统性能下降甚至应用崩溃。 比如&#xff1a;事务T1持有资源R1并等待R2&#x…

工业相机如何获得更好的图像色彩

如何获得更好的图像色彩 大部分的工业自动化检测中对物体的色彩信息并不敏感&#xff0c;因此会使用黑白的相机&#xff0c;但是在显微镜成像、颜色分类识别等领域&#xff0c;相机的色彩还原就显得格外重要&#xff0c;在调节相机色彩方面的参数时&#xff0c;有以下几个方面需…

Java Stream实战_函数式编程的新方式

1. 引言 1.1 Java Stream简介 Stream是什么:Stream是Java 8引入的一个接口,用于处理集合数据。与传统集合的区别:Stream不存储数据,而是通过管道操作(如过滤、映射)来处理数据。主要特点:惰性求值、链式调用、函数式编程风格。1.2 函数式编程基础 什么是函数式编程:一…

从零开始实现一个双向循环链表:C语言实战

文章目录 1链表的再次介绍2为什么选择双向循环链表&#xff1f;3代码实现&#xff1a;从初始化到销毁1. 定义链表节点2. 初始化链表3. 插入和删除节点4. 链表的其他操作5. 打印链表和判断链表是否为空6. 销毁链表 4测试代码5链表种类介绍6链表与顺序表的区别7存储金字塔L0: 寄存…