当前位置: 首页 > 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
}
http://www.lryc.cn/news/207879.html

相关文章:

  • 关于本地项目上传到gitee的详细流程
  • MarkDown详细入门笔记
  • 算法——贪心算法
  • 102.linux5.15.198 编译 firefly-rk3399(1)
  • 易点易动固定资产管理系统:多种盘点方式助力年终固定资产盘点
  • C# Winform编程(10)Chart图表控件
  • 群狼调研(长沙产品概念测试)|如何做新品上市满意度调研
  • Lua与C++交互
  • Ubuntu安装pyenv,配置虚拟环境
  • 【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
  • 什么是React中的高阶组件(Higher Order Component,HOC)?它的作用是什么?
  • NEFU离散数学实验3-递推方程
  • 如何为你的地图数据设置地图样式?
  • 解决visual studio Just-In-Time Debugger调试
  • Uservue 中 keep-alive 组件的作用
  • gitlab查看、修改用户和邮箱,gitlab生成密钥
  • python操作MySQL、SQL注入问题、视图、触发器、事务、存储过程、函数、流程控制、索引(重点)
  • 这一年的资源
  • 从【臀部监控】到【电脑监控软件】,企业如何在隐私权与管理权博弈中找到平衡
  • 数据库简介和sqlite3安装
  • 颈肩肌筋膜炎做什么检查
  • django建站过程(3)定义模型与管理页
  • node开发微信群聊机器人第⑤章
  • 如何助力企业出海?未来发展趋势是什么?尽在「云通信」Tech专场
  • 安装虚拟机(VMware)保姆级教程及配置虚拟网络编辑器和安装WindowsServer以及本地访问虚拟机和配置服务器环境
  • 使用Typecho搭建个人博客网站,并内网穿透实现公网访问
  • RabbitMQ (4)
  • 导入Embassy库进行爬虫
  • GoLong的学习之路(十三)语法之标准库 log(日志包)的使用
  • 别处拿来的VUE项目 npm run serve报错