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

springboot+mybatis3.5.2动态查询某一字段在某一段时间内的统计信息(折线图)

需求:
动态查询某一统计字段在一段时间内的统计折线图信息

  1. controller层
    @ApiOperation(value = "getStatisticDetail", notes = "统计折线图")@GetMapping("/detail")@ResponseStatus(HttpStatus.OK)@AccessLogAnnotation(ignoreRequestArgs = "loginUser")@ApiImplicitParams({@ApiImplicitParam(name = "startTime", value = "开始时间", dataTypeClass = String.class),@ApiImplicitParam(name = "endTime", value = "结束时间", dataTypeClass = String.class),@ApiImplicitParam(name = "taskType", value = "查询类型", required = true, dataTypeClass = Enum.class)})public Result getStatisticDetail(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,@RequestParam(value = "taskType", required = true) String taskType,@RequestParam(value = "startTime", required = true) String startTime,@RequestParam(value = "endTime", required = true) String endTime) {return statisticAnalysisService.getStatisticDetail(startTime, endTime, Long.valueOf(projectCode), taskType);}  
  1. service层biz
    public Result<StatisticDetailResponse> getStatisticDetail( String startTime, String endTime String taskType) {Result<StatisticDetailResponse> result = new Result<>();StatisticDetailResponse statisticDetailResponse = new StatisticDetailResponse();//计算时间天数跨度String[] days = new String[getDayDiffer(startTime, endTime)];startTime = "'" + startTime + "'";endTime = "'" + endTime + "'";     StatisticDetailResponse responseList = getStatisticTasks(statisticDetailResponse, startTime, endTime,Objects.requireNonNull(StatisticDetailType.getStatisticDetailByType(taskType)), days);result.setData(responseList);putMsg(result, Status.SUCCESS);return result;}private StatisticDetailResponse getStatisticTasks(StatisticDetailResponse statisticDetailResponse, String startTime, String endTime, StatisticDetailType statisticDetailType, String[] days) {String filed = statisticDetailType.getFeildName();List<StatisticAnalysis> details = statisticAnalysisMapper.getStatisticDetail(startTime, endTime, filed, days);List<String> xAxisData = new ArrayList<>(12);List<StatisticTask> statisticTaskList = new ArrayList<>(12);if (ObjectUtils.isNotEmpty(statisticDetailResponse.getList())) {statisticTaskList = statisticDetailResponse.getList();}List data = new ArrayList<>(12);for (StatisticAnalysis detail : details) {String key = detail.getName();Object value = detail.getNameValue();xAxisData.add(key.replaceAll(String.valueOf(Constants.SUBTRACT_CHAR), ""));data.add(value);}StatisticTask statisticTask = new StatisticTask();statisticTask.setData(data);statisticTask.setName(statisticDetailType.getType());statisticTaskList.add(statisticTask);statisticDetailResponse.setXAxisData(xAxisData);statisticDetailResponse.setList(statisticTaskList);return statisticDetailResponse;}

2.1. 查询开始时间——结束时间的间隔天数

    /*** 计算开始时间,结束时间,间隔天数** @param startTime 开始时间* @param endTime   结束时间* @return 间隔天数*/public static int getDayDiffer(String startTime, String endTime) {SimpleDateFormat formatter = new SimpleDateFormat(Constants.DATE_PATTERN1);long ts2 = 0;try {Date date1 = null;Date date = formatter.parse(startTime);long ts = date.getTime();date1 = formatter.parse(endTime);long ts1 = date1.getTime();ts2 = ts1 - ts;} catch (ParseException e) {e.printStackTrace();}int totalTime = 0;totalTime = (int) (ts2 / (24 * 3600 * 1000) + 1);return totalTime;}

2.2. taskType枚举类型

public enum StatisticDetailType {/*** 当日存储剩余空间(单位P)*/freeSpace("freeSpace", "free_space"),/*** 当日空间使用比例(单位%)*/useRatio("useRatio", "use_ratio");private String type;private String feildName;StatisticDetailType() {}StatisticDetailType(String type, String feildName) {this.type = type;this.feildName = feildName;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getFeildName() {return feildName;}public void setFeildName(String feildName) {this.feildName = feildName;}/*** 根据枚举值返回枚举对象** @param key* @return*/public static StatisticDetailType getStatisticDetailByType(String key) {for (StatisticDetailType statisticDetailType : values()) {if (Objects.equals(statisticDetailType.type, key)) {return statisticDetailType;}}return null;}
}
  1. Mapper
    /*** @param startTime   结束时间* @param endTime     开始时间* @param filed       查询字段* @param days        查询天数* @return 查询结果*/List<StatisticAnalysis> getStatisticDetail(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("filed") String filed, @Param("days") String[] days);
  1. Mapper.xml
    <select id="getStatisticDetail" resultType="entity.StatisticAnalysis">select d.name, IFNULL(T.${filed},0) nameValuefrom (select date_add(${startTime},interval @i:=@i+1 day) as namefrom (select 1<foreach item="index" collection="days">union all select 1</foreach>) as tmp,(select @i:= -1) t) dleft join (select ${filed},DATE_FORMAT(statistic_date,'%Y-%m-%d') statistic_datefrom s_statistic_analysiswhere  statistic_date &gt;= ${startTime} and statistic_date &lt;=${endTime})T on T.statistic_date = d.name</select>
  1. entity
public class StatisticDetailResponse {private List<String> xAxisData;private List<StatisticTask> list;}public class StatisticTask {private String name;private List data;}
  1. 结果
{"code": 0,"msg": "success","data": {"list": [{"name": "freeSpace","data": ["0.00","0.00","0.00","0.00","0.00"]}],"xaxisData": ["20231023","20231024","20231025","20231026","20231027"]},"success": true,"failed": false
}

相关文章:

springboot+mybatis3.5.2动态查询某一字段在某一段时间内的统计信息(折线图)

需求&#xff1a; 动态查询某一统计字段在一段时间内的统计折线图信息 controller层 ApiOperation(value "getStatisticDetail", notes "统计折线图")GetMapping("/detail")ResponseStatus(HttpStatus.OK)AccessLogAnnotation(ignoreRequestA…...

关于本地项目上传到gitee的详细流程

如何上传本地项目到Gitee的流程&#xff1a; 1.Gitee创建项目 2. 进入所在文件夹&#xff0c;右键点击Git Bash Here 3.配置用户名和邮箱 在gitee的官网找到命令&#xff0c;注意这里的用户名和邮箱一定要和你本地的Git相匹配&#xff0c;否则会出现问题。 解决方法如下&…...

MarkDown详细入门笔记

本帖整理了MarkDown的入门学习笔记~ 一.介绍 Markdown 是一种轻量级的「标记语言」&#xff0c;它的优点很多&#xff0c;目前也被越来越多的写作爱好者&#xff0c;撰稿者广泛使用。 诸如微信公众平台、CSDN博客、还有Typora中写文档的部分&#xff0c;均涉及到MD的功能~ 它…...

算法——贪心算法

贪心算法&#xff08;Greedy Algorithm&#xff09;是一种算法设计策略&#xff0c;通常用于解决组合优化问题&#xff0c;其核心思想是在每一步都选择当前状态下最优的解&#xff0c;而不考虑之后的步骤。贪心算法在每一步都做出局部最优选择&#xff0c;期望通过一系列局部最…...

102.linux5.15.198 编译 firefly-rk3399(1)

1. 平台&#xff1a; rk3399 firefly 2g16g 2. 内核&#xff1a;linux5.15.136 &#xff08;从内核镜像网站下载&#xff09; 3. 交叉编译工具 gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 4. 宿主机&#xff1a;ubuntu18.04 5. 需要的素材和资料&#xff…...

易点易动固定资产管理系统:多种盘点方式助力年终固定资产盘点

年末固定资产盘点是企业管理中一项重要而繁琐的任务。为了帮助企业高效完成年终固定资产盘点工作&#xff0c;易点易动固定资产管理系统提供了多种盘点方式。本文将详细介绍易点易动固定资产管理系统的多种盘点方式&#xff0c;展示如何借助该系统轻松完成年终固定资产盘点&…...

C# Winform编程(10)Chart图表控件

Chart控件 Chart控件Chart属性详述Chart属性设置图表样式属性数据样式属性图例样式图标区样式SeriesChartType类型 Chart控件鼠标滚轮事件特殊处理Series绑定数据演示代码鼠标滚轮缩放图表示例参考引用 Chart控件 Chart控件是微软自带的一种图形可视化组件&#xff0c;使用简单…...

群狼调研(长沙产品概念测试)|如何做新品上市满意度调研

新品上市满意度调研是一种重要的市场研究方法&#xff0c;它通过收集和分析消费者对新产品的态度、购买意愿和满意度等方面的数据&#xff0c;帮助企业了解消费者的需求和期望&#xff0c;发现新产品的问题和不足&#xff0c;从而为产品改进提供有力的数据支持。群狼调研&#…...

Lua与C++交互

文章目录 1、Lua和C交互2、基础练习2.1、加载Lua脚本并传递参数2.2、加载脚本到stable&#xff08;包&#xff09;2.3、Lua调用c语言接口2.4、Lua实现面向对象2.5、向脚本中注册c的类 1、Lua和C交互 1、lua和c交互机制是基于一个虚拟栈&#xff0c;C和lua之间的所有数据交互都通…...

Ubuntu安装pyenv,配置虚拟环境

文章目录 安装pyenvpyenv创建虚拟环境一般情况下创建虚拟环境的方法 安装pyenv 摘自&#xff1a;文章 pyenv可以管理不同的python版本 1、安装pyenv的依赖库 # 执行以下命令安装依赖库 # 更新源 sudo apt-get update # 更新软件 sudo apt-get upgradesudo apt-get install ma…...

【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步

MySQL数据同步到Elasticsearch之N种方案解析&#xff0c;实现高效数据同步 前提介绍MySQL和ElasticSearch的同步双写优点缺点针对于缺点补充优化方案 MySQL和ElasticSearch的异步双写优点缺点 定时延时写入ElasticSearch数据库机制优点缺点 开源和成熟的数据迁移工具选型Logsta…...

什么是React中的高阶组件(Higher Order Component,HOC)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

NEFU离散数学实验3-递推方程

相关概念 递推方程是指一种递归定义&#xff0c;它将问题拆分成更小的子问题&#xff0c;并使用这些子问题的解来计算原问题的解。离散数学中&#xff0c;递推方程通常用于描述数列、组合问题等。 以下是一些递推方程相关的概念和公式&#xff1a; 1. 递推公式&#xff1a;递推…...

如何为你的地图数据设置地图样式?

地图样式设置是GIS系统中非常重要的功能模块&#xff0c;水经微图Web版本最近对符号样式功能模块进行了升级。 你可以通过以下网址直接打开访问&#xff1a; https://map.wemapgis.com 现在我们为大家分享一下水经微图Web版中&#xff0c;如何为你标注的地图数据设置地图样式…...

解决visual studio Just-In-Time Debugger调试

解决visual studio Just-In-Time Debugger调试 网上流行很多方法&#xff0c;最后一直不行&#xff0c;其实有最简单的方法比较实用 方法一&#xff1a;把 C:\WINDOWS\system32\vsjitdebugger.exe,删除了&#xff0c;若怕出问题&#xff0c;可以把它改名或者做个rar文件暂时保留…...

Uservue 中 keep-alive 组件的作用

目录 前言 用法 代码 理解 keep-alive 是 Vue.js 中一个内置的组件&#xff0c;它能够将不活动的组件实例保存在内存中&#xff0c;防止其被销毁&#xff0c;以便在后续需要时能够快速重新渲染。这个功能在一些需要频繁切换但不希望每次都重新渲染的场景中非常有用&#xf…...

gitlab查看、修改用户和邮箱,gitlab生成密钥

查看用户、邮箱 git config user.name git config user.email 修改用户、邮箱 git config --global user.name “xxx” git config --global user.email “xxxxxx.com” 生成ssh密钥 ssh-keygen -t rsa -C “xxxxxx.com” 查看SSH秘钥 cat ~/.ssh/id_rsa.pub 将秘钥复制&…...

python操作MySQL、SQL注入问题、视图、触发器、事务、存储过程、函数、流程控制、索引(重点)

python操作MySQL(重要) SQL的由来&#xff1a; MySQL本身就是一款C/S架构&#xff0c;有服务端、有客户端&#xff0c;自身带了有客户端&#xff1a;mysql.exe python这门语言成为了MySQL的客户端(对于一个服务端来说&#xff0c;客户端可以有很多) 操作步骤&#xff1a; …...

这一年的资源

#线性代数 https://textbooks.math.gatech.edu/ila/one-to-one-onto.html行业规范https://xlinux.nist.gov/dads/https://www.dhs.gov/publications产业群链基金会 https://www.cncf.io/谷歌 https://opensource.google/projects网飞 高德纳 https://www.gartne…...

从【臀部监控】到【电脑监控软件】,企业如何在隐私权与管理权博弈中找到平衡

【臀部监控】 依稀记得在2021年初某个高科技产品的爆火&#xff0c;惹得各大媒体网站争相报道。 起因是一位杭州网友在论坛上发帖&#xff0c;不久前公司给员工发放了一批高科技坐垫。 这个坐垫能自动感应心跳、呼吸在内的诸多人体数据&#xff0c;还能提醒人保持正确坐姿以及…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...