折线图时间统计

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;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/49793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端面试宝典【Javascript篇】【2】

欢迎来到《前端面试宝典》&#xff0c;这里是你通往互联网大厂的专属通道&#xff0c;专为渴望在前端领域大放异彩的你量身定制。通过本专栏的学习&#xff0c;无论是一线大厂还是初创企业的面试&#xff0c;都能自信满满地展现你的实力。 核心特色&#xff1a; 独家实战案例…

人工智能与机器学习原理精解【8】

文章目录 马尔科夫过程论基础理论函数系的定义、例子和分类一、函数系的定义二、函数系的例子三、函数系的分类 勒贝格积分一、定义二、计算三、例子 参考文献 马尔科夫过程论 基础 如果 α 是 ( G 1 , A 1 ) 到 ( G 2 , A 2 ) 的可测映象&#xff0c; β 是 ( G 2 , A 2 ) 到…

jackson序列化(jackson codec)

Jackson 是一个用于 Java 平台的开源 JSON 库&#xff0c;它提供了灵活且高效的方式来处理 JSON 数据的序列化(Java对象 → JSON字符串)和反序列化(JSON 字符串→ Java对象)。 以下是 Jackson 的一些主要特点和功能&#xff1a; 高性能&#xff1a;Jackson 通过使用基于流的处理…

国内环境,怎么做开源才能兼顾生存和情怀?

回答一个朋友提的问题—— 在国内&#xff0c;开源怎么做呢&#xff1f;老夫结合自己多年在开源和商业领域的经历与见闻聊聊。 首先来说&#xff0c;毋庸置疑&#xff0c;开源是对传统的商业模式的一种颠覆&#xff0c;它以一种免费开放的姿态赢得了Hacker群体的心&#xff0c…

mac OS matplotlib missing from font(s) DejaVu Sans

如果能搜索到这篇文章&#xff0c;我猜你遇到了和我一样的问题&#xff1a;matplotlib绘图中文乱码。如下&#xff1a; 出现这个问题的原因是&#xff1a;matplotlib使用的字体列表中默认没有中文字体。 这里说一种解决方案&#xff1a;我们可以在文件中手动指定matplotlib使用…

微信小程序-使用Component方法代替Page方法构造页面

一.使用Component方法的前提条件 在小程序js文件里使用Component方法代替Page方法需要在json文件里面定义usingComponents属性 {"usingComponents": {} }二.注意事项 1.在page页面里使用的钩子函数和事件监听方法都需要写在methods对象里面 methods:{update(){thi…

WHAT - Web Components 和 Vue、React 的模块化组件

目录 Web Components介绍组件库1. Lit2. Vaadin3. Shoelace4. Stencil5. FAST6. Ionic7. UI5 Web Components8. PatternFly Elements使用和选择指南结论 与 Vue 或 React 组件的区别1. 原生 vs 框架依赖2. 样式和 DOM 隔离3. 使用和学习曲线4. 状态管理和生命周期 专题&#xf…

二叉树详解-第一篇 树以及二叉树的概念

目录 ​编辑 1.树的概念及结构 1.1树的概念 1.2树的特点 1.3树的相关概念 1.4树的表示 2.二叉树的概念及结构 2.1二叉树的概念 2.2特殊二叉树-满二叉树和完全二叉树 1.满二叉树的概念及性质 2.完全二叉树的概念及性质 2.3二叉树的性质(重点) 2.4二叉树的存储 1.顺…

LeetCode - #103 二叉树的锯齿形层序遍历

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅&#xff08;Netflix 增长黑客&#xff0c;《iOS 面试之道》作者&#xff0c;ACE 职业健身教练。&#xff09;的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…

沉淀硬化不锈钢压缩弹簧的主要特性

沉淀硬化不锈钢&#xff0c;作为一种兼具高强度与耐腐蚀性的合金材料&#xff0c;被广泛应用于制造高性能的压缩弹簧&#xff0c;尤其是在苛刻环境下的应用需求。以下是对沉淀硬化不锈钢压缩弹簧主要特性的科普介绍&#xff1a; 良好的耐蚀性 沉淀硬化不锈钢与304不锈钢拥有相似…

做个牛奶配送小程序商城是怎样的

商家线上经营奶品&#xff0c;主要是成品包装品牌奶或散奶周边客源生意模式等&#xff0c;无论哪些模式&#xff0c;本身奶产品的需求度就不低&#xff0c;自然也有着大量客户&#xff0c;农场/品牌厂商/经销商/小摊贩&#xff0c;除了线下实体店发展外&#xff0c;线上要完善本…

SpringCloud断路器的使用与原理解析

Spring Cloud断路器是在分布式系统中实现容错的一种方式。它的原理是通过在调用链路上添加断路器,当某个服务的调用出现故障或超时时,断路器会自动迅速地切换到快速失败模式,防止故障扩散,从而保护整个系统的稳定性。 Spring Cloud断路器的使用与原理解析如下: 一、使用断…

KunDB4.0:安全能力与Oracle兼容性提升,支持跨系统多租户部署

KunDB是星环科技自主研发的分布式交易型数据库&#xff0c;高度兼容Oracle和MySQL&#xff0c;提供数据强一致、高可用、高性能、高扩展、应用透明等能力&#xff0c;可在云上和物理机上容器化部署运行&#xff0c;一站式解决企业数据存储、管理、计算与安全性问题。 过去半年…

数据结构经典测题3

1. 设有定义&#xff1a; char *p; &#xff0c;以下选项中不能正确将字符串赋值给字符型指针 p 的语句是【多选】&#xff08; &#xff09; A: pgetchar(); B: scanf("%s",p); C: char s[]"china"; ps; D: *p"china"; 答案为ABD A选项&…

SQL Server中 LOP_FORMAT_PAGE日志记录解释

在SQL Server中&#xff0c;LOP_FORMAT_PAGE是日志记录的一种类型&#xff0c;用于描述页面的格式化操作。了解LOP_FORMAT_PAGE详细的背景和任务类型有助于深入理解SQL Server的内部机制&#xff0c;尤其是在恢复和日志管理方面。以下是有关LOP_FORMAT_PAGE的详细解释&#xff…

如何优化 Selenium 和 BeautifulSoup 的集成以提高数据抓取的效率?

摘要 在互联网时代&#xff0c;数据的价值日益凸显。对于电商网站如京东&#xff0c;其商品信息、用户评价等数据对于市场分析、产品定位等具有重要意义。然而&#xff0c;由于这些网站通常使用 JavaScript 动态生成内容&#xff0c;传统的爬虫技术难以直接获取到完整数据。本…

pyaudio VAD通过声音音频值分贝大小检测没人说话自动停止录制

效果可能说话声音小可能不被监听到,需要更改QUIET_DB阈值,另外delay_time值是低于阈值多久就可以停止保存当前的语音 import pyaudio import waveimport sys import numpy as npdef record_auto(MIC_INDEX=1):开启麦克风录音,保存至temp/speech_record.wav音频文件音量超过…

洛谷 P1151 子数整数 题解

题目描述 对于一个五位数 a1​a2​a3​a4​a5​​&#xff0c;可将其拆分为三个子数&#xff1a; &#x1d460;&#x1d462;&#x1d44f;1&#x1d44e;1&#x1d44e;2&#x1d44e;3 &#x1d460;&#x1d462;&#x1d44f;2&#x1d44e;2&#x1d44e;3&#x1d44…

vue3 reactive原理(二)-代理Set和Map及ref原理

Set和Map类型的数据也属于异质对象&#xff0c;它们有特定的属性和方法用来操作自身。因此创建代理时&#xff0c;针对特殊的方法需要特殊的对待。 Vue 的ref 是基于reactive函数实现的&#xff0c;它在其基础上&#xff0c;增加了基本类型的响应性、解决reactive在解构时丢失…

目标检测原理分析

目标检测 图像分类&#xff08;一张图像只属于一个类别&#xff09;目标检测&#xff08;一张图像有N个物体&#xff09; 图像分类&#xff08;一张图像只属于一个类别&#xff09; 输入&#xff1a; 一张图像&#xff0c;image 输出&#xff1a; 这张图像属于各个预定义类别的…