折线图时间统计
1、查询本月的数据
2、查询最近一个月数据
1、查询本月数据
Date startTime = DateUtil.getStartDayOfMonth();Date endTime = DateUtil.getEndDayOfMonth();//获取日期//[2024-07-01, 2024-07-02, 2024-07-03, 2024-07-04, 2024-07-05, 2024-07-06, 2024-07-07, 2024-07-08, 2024-07-09, 2024-07-10, 2024-07-11, 2024-07-12, 2024-07-13, 2024-07-14, 2024-07-15, 2024-07-16, 2024-07-17, 2024-07-18, 2024-07-19, 2024-07-20, 2024-07-21, 2024-07-22, 2024-07-23, 2024-07-24, 2024-07-25, 2024-07-26, 2024-07-27, 2024-07-28, 2024-07-29, 2024-07-30]List<String> dateList = dateList(startTime ,endTime );List<Map<String, Object>> maps = getMaps(startTime, endTime);
// 根据时间 将指取出计算每个时间的值,放到对应时间的list中。List<Integer> countList = getCountList(dateList, maps);//求和,得到就是30天的访问总数int logSum = getLogSum(countList);//将 datalist 和 countlist,返回出来就是折线图时间统计
public List<String> dateList(Date start,Date end) {List<String> list = new ArrayList<>();DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");LocalDate startDate = start.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();LocalDate endDate = end.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();long numOfDaysBetween = ChronoUnit.DAYS.between(startDate, endDate);for (int i = 0; i < numOfDaysBetween; i++) {LocalDate currentDate = startDate.plusDays(i);list.add(currentDate.format(formatter));}return list;}
//将今天的也统计进去private List<Map<String, Object>> getMaps(Date startTime, Date endTime) {//获取每天数量QueryWrapper<LossCalculationLog> queryWrapper = new QueryWrapper<>();queryWrapper.select("count(id) as count,date_format(create_time,'%Y-%m-%d') as date").between("create_time", startTime, endTime).groupBy("date");//转成map集合形式maps = lossCalculationLogService.listMaps(queryWrapper);return maps;}
private List<Integer> getCountList(List<String> dateList, List<Map<String, Object>> maps) {//将一个月的日期初始化List<Integer> countList = new ArrayList<>();for (String date : dateList) {countList.add(0);}if (maps.size() > 0) {for (Map<String, Object> map : maps) {//将map集合中的日期和数量进行匹配int index = dateList.indexOf(map.get("date"));Long count =(Long) map.get("count");countList.set(index,count.intValue());}}return countList;}
private int getLogSum(List<Integer> countList) {if (CollectionUtils.isEmpty(countList)){return 0;}return countList.stream().mapToInt(Integer::intValue).sum();}
2、查询最近一个月数据
//获取现在时间 Date newEndTime = Date.from(now.atStartOfDay(ZoneId.systemDefault()).toInstant());LocalDate localDate = now.minusDays(31);//获取一个月之前时间Date newStartTime = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());//获取日期 列表[2024-06-22, 2024-06-23, 2024-06-24, 2024-06-25, 2024-06-26, 2024-06-27, 2024-06-28, 2024-06-29, 2024-06-30, 2024-07-01, 2024-07-02, 2024-07-03, 2024-07-04, 2024-07-05, 2024-07-06, 2024-07-07, 2024-07-08, 2024-07-09, 2024-07-10, 2024-07-11, 2024-07-12, 2024-07-13, 2024-07-14, 2024-07-15, 2024-07-16, 2024-07-17, 2024-07-18, 2024-07-19, 2024-07-20, 2024-07-21, 2024-07-22]List<String> dateList = dateList(newStartTime, newEndTime);List<Map<String, Object>> maps = getMaps(newStartTime, newEndTime);// 根据时间 将指取出,放到list中。List<Integer> countList = getCountList(dateList, maps);//求和int logSum = getLogSum(countList);//将 datalist 和 countlist,返回出来就是折线图时间统计
//调用方法和第一种一样。
//今天不进行统计private List<Map<String, Object>> getMaps(Date startTime, Date endTime) {//获取当前的时间----2024-07-23,将时间格式进行转换 LocalDate localDate = LocalDate.now();DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");String date = localDate.format(formatter);//获取每天数量QueryWrapper<LossCalculationLog> queryWrapper = new QueryWrapper<>();queryWrapper.select("count(id) as count,date_format(create_time,'%Y-%m-%d') as date").between("create_time", startTime, endTime).groupBy("date");//转成map集合形式List<Map<String, Object>> maps = lossCalculationLogService.listMaps(queryWrapper);//今天不进行统计maps.removeIf(map -> map.get("date").equals(date));return maps;}
相关文章:
折线图时间统计
1、查询本月的数据 2、查询最近一个月数据 1、查询本月数据 Date startTime DateUtil.getStartDayOfMonth();Date endTime DateUtil.getEndDayOfMonth();//获取日期//[2024-07-01, 2024-07-02, 2024-07-03, 2024-07-04, 2024-07-05, 2024-07-06, 2024-07-07, 2024-07-08, 20…...
Prompt工程:与AI聊天机器人更好地交流
Prompt工程:与AI聊天机器人更好地交流 1. 清楚地说明你想要什么2. 告诉AI它现在是谁3. 一步一步来4. 给AI一些例子5. 让AI检查自己的回答6. 把AI当作你的小助手7. 让AI帮你想主意8. 让AI告诉你它需要知道什么9. 教AI一步一步思考结语 大家好!今天我们来聊聊如何跟AI聊天机器人更…...
BGP之选路MED
原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由的属性进行比较,以确定去往该目标网络的最优BGP路由。BGP路由属性的比较顺序为Preferred Value属性、Local Preference属性、路由生成方式、AS_Path属性、Origin属…...
KunDB4.0:安全能力与Oracle兼容性提升,支持跨系统多租户部署
KunDB是星环科技自主研发的分布式交易型数据库,高度兼容Oracle和MySQL,提供数据强一致、高可用、高性能、高扩展、应用透明等能力,可在云上和物理机上容器化部署运行,一站式解决企业数据存储、管理、计算与安全性问题。 过去半年…...
JVM的 6 种垃圾回收算法
JVM的垃圾回收(Garbage Collection, GC)算法,在面试八股文时偶尔会被问到,了解一些常见的垃圾回收算法有利于面试时吊打面试官。 以下是JVM常见的几种垃圾回收算法的介绍: 1. 标记-清除算法(Mark-Sweep&a…...
【SOC 芯片设计 DFT 学习专栏 -- DFT OCC 与 ATPG的介绍】
请阅读【嵌入式及芯片开发学必备专栏】 请阅读【芯片设计 DFT 学习系列 】 如有侵权,请联系删除 转自: 简矽芯学堂 简矽芯学堂 2024年01月18日 09:00 陕西 文章目录 OCC 介绍Fast ScanFull chip ATPGPartition ATPGHierarchical ATPG OCC 介绍 OCC&am…...
自动驾驶-机器人-slam-定位面经和面试知识系列03之C++STL面试题(01)
这两天有点忙耽搁了,抱歉!!! 这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新,基本涵盖了自己秋招历程被问过的面试内容(除了实习和学校项目相关的具体细节)。…...
红狮金业解读:分析高价位黄金的后续投资吸引力
在全球经济格局不断变化的背景下,黄金作为传统的避险资产一直备受投资者关注。近期,金价持续走高,引发了市场对黄金是否仍然是优质资产配置的讨论。本文红狮启富将从长期需求、价格驱动因素的变化以及汇率影响三个角度,深入分析黄…...
LDR6020双盲插便携显示器应用
随着USB Type-C接口的普及,越来越多的手机和笔记本电脑都支持通过C接口输出视频。这个小巧而精密的接口,大有把传统的HDMI和DisplayPort接口取而代之的架势。特别是usb4的推出,更是为USB TYPE-C接口一统有线接口形态奠定了基础。 单USB-C接口…...
【HashMap源码学习】
HashMap的底层结构 HashMap是基于分离链表法解决散列冲突的动态散列表。 1、在jdk7中,使用的是“数组 链表”,发生散列冲突的时候键值对会用头插法添加到单链表中; 2、在jdk8中,使用的是“数组 链表 红黑树”,发…...
Git关联本地仓库和远程仓库
Step 1 添加远程仓库: git remote add <远程仓库别名><远程仓库地址> Step 2 git push -u <远程仓库名><分支名> 查看远程仓库: git remote -v 拉取远程仓库内容: 拉取服务器仓库过程中,如果本地和服务器有文件冲突,则会拉取失…...
【Django】在vscode中新建Django应用并新增路由
文章目录 打开一个终端输入新建app命令在app下的views.py内写一个视图app路由引入该视图项目路由引入app路由项目(settings.py)引入app(AntappConfig配置类)运行项目 打开一个终端 输入新建app命令 python manage.py startapp antapp在app下的views.py内…...
DT浏览器首页征集收录海内外网址
DT浏览器首页征集收录海内外网址,要求页面整洁,内容丰富,知识性和可读性强,符合大众价值观,不含恶意代码...
便携解码耳放
想象一下,你正在拥挤的地铁上,耳机里传来的音乐却仿佛带你置身于音乐厅,每一个音符都清晰、动人。这不是科幻小说,而是便携解码耳放(DAC/AMP)带给你的真实体验。无论你是在旅行、通勤还是在咖啡馆里工作&am…...
响应式编程框架Reactor之 Flux 和 Mono 的介绍和区别
Flux和Mono在Reactor框架中都是响应式编程模型的重要概念,它们在处理异步数据流时发挥着重要作用,两者之间也存在一些差异。 Mono的介绍 基本概念: Mono是Reactor中的一个类,它表示一个异步的单个值或零个值的结果。Mono可以看作是一个特殊的Publisher,用于产生数据流,…...
2.3 openCv 对矩阵执行掩码操作
在矩阵上进行掩模操作相当简单。其基本思想是根据一个掩模矩阵(也称为核)来重新计算图像中每个像素的值。这个掩模矩阵包含的值决定了邻近像素(以及当前像素本身)对新的像素值产生多少影响。从数学角度来看,我们使用指定的值来做一个加权平均。 具体而言,掩模操作通常涉…...
贪心算法(三) ---cmp_to_key, 力扣452,力扣179
目录 cmp_to_key 比较函数 键函数 cmp_to_key 的作用 使用 cmp_to_key 代码解释 力扣452 ---射气球 题目 分析 代码 力扣179 ---最大数 题目 分析 代码 cmp_to_key 在Python中,cmp_to_key 是一个函数,它将一个比较函数转换成一个键函数…...
学生信息管理系统详细设计文档
一、设计概述 学生信息管理系统是一个用于管理学生信息的软件系统,旨在提高学校对学生信息的管理效率。本系统主要包括学生信息管理、课程信息管理、成绩信息管理、班级信息管理等功能模块。详细设计阶段的目标是确定各个模块的实现算法,并精确地表达这…...
leetcode10 -- 正则表达式匹配
题目描述: 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 示例 1࿱…...
Binius-based zkVM:为Polygon AggLayer开发、FPGA加速的zkVM
1. 引言 近日,ZK硬件加速巨头Irreducible和Polygon团队宣布联合开发生产级的Binius-based zkVM,用于助力Polygon AggLayer,实现具有低开销、硬件加速的binary proofs。 Irreducible(曾用名为Ulvetanna)团队 Benjamin …...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
