前15天查询次数曲线

public int getAuditCount() {
int num = 0;
try {
Example example = new Example(AuditInfo.class);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date today = df.parse(df.format(new Date()));
Date yesterday = df.parse(df.format(new Date().getTime() - 1000 * 60 * 60 * 24));
example.createCriteria().andBetween("queryTime", yesterday, today);
num = auditInfoMapper.selectCountByExample(example);
} catch (Exception e) {
log.error("查询异常", e);
return num;
}
return num;
}这是我的代码,相关的东西我全有了。现在我想获得自今天起前15天每天的查询数据,并返回前端,以便让前端绘制折线图。我怎么修改代码

要获取自今天起前15天每天的查询数据,并返回给前端以绘制折线图,你需要进行以下步骤:

  1. 计算日期范围:从今天开始,向前计算15天的日期。
  2. 构造查询条件:为每一天构造查询条件,并获取当天的记录数。
  3. 存储结果:将每天的查询结果存储在一个列表中,以便返回给前端。

以下是修改后的代码示例:

修改后的代码

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class AuditService {

    private static final Logger log = LoggerFactory.getLogger(AuditService.class);
    private AuditInfoMapper auditInfoMapper;

    public AuditService(AuditInfoMapper auditInfoMapper) {
        this.auditInfoMapper = auditInfoMapper;
    }

    public List<Integer> getAuditCountsForLast15Days() {
        List<Integer> counts = new ArrayList<>();
        try {
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            Calendar calendar = Calendar.getInstance();

            for (int i = 0; i < 15; i++) {
                // 计算当天的日期
                Date today = calendar.getTime();
                Date yesterday = (Date) today.clone();
                calendar.add(Calendar.DAY_OF_YEAR, -1);

                // 格式化日期
                String todayStr = df.format(today);
                String yesterdayStr = df.format(yesterday);

                // 解析日期
                Date parsedToday = df.parse(todayStr);
                Date parsedYesterday = df.parse(yesterdayStr);

                // 构造查询条件
                Example example = new Example(AuditInfo.class);
                example.createCriteria().andBetween("queryTime", parsedYesterday, parsedToday);

                // 查询记录数
                int count = auditInfoMapper.selectCountByExample(example);
                counts.add(count);
            }
        } catch (ParseException e) {
            log.error("日期解析异常", e);
        } catch (Exception e) {
            log.error("查询异常", e);
        }
        return counts;
    }
}

详细说明

  1. 计算日期范围

    • 使用 Calendar 类来计算从今天开始前15天的日期。
    • 每次循环中,计算当天的日期和前一天的日期。
  2. 构造查询条件

    • 使用 SimpleDateFormat 格式化日期。
    • 解析格式化后的日期字符串。
    • 构造 Example 对象,并设置查询条件为 queryTime 在前一天和当天之间。
  3. 存储结果

    • 将每天的查询结果(记录数)存储在 counts 列表中。
  4. 返回结果

    • 最终返回 counts 列表,包含过去15天每天的记录数。

前端处理

前端可以接收这个列表,并将其用于绘制折线图。假设你使用的是 Vue.js 和 ECharts,以下是一个简单的示例:

前端代码示例

<template>
  <div>
    <div id="chart" style="width: 600px; height: 400px;"></div>
  </div>
</template>

<script>
import * as echarts from 'echarts';
import axios from 'axios';

export default {
  data() {
    return {
      auditCounts: []
    };
  },
  mounted() {
    this.fetchAuditCounts();
  },
  methods: {
    async fetchAuditCounts() {
      try {
        const response = await axios.get('/api/getAuditCountsForLast15Days');
        this.auditCounts = response.data;
        this.initChart();
      } catch (error) {
        console.error('Error fetching audit counts:', error);
      }
    },
    initChart() {
      const chartDom = document.getElementById('chart');
      const myChart = echarts.init(chartDom);
      const option = {
        title: {
          text: '过去15天的审核记录数'
        },
        tooltip: {
          trigger: 'axis'
        },
        xAxis: {
          type: 'category',
          data: this.getPast15Days()
        },
        yAxis: {
          type: 'value'
        },
        series: [
          {
            data: this.auditCounts,
            type: 'line'
          }
        ]
      };
      myChart.setOption(option);
    },
    getPast15Days() {
      const dates = [];
      const today = new Date();
      for (let i = 0; i < 15; i++) {
        const date = new Date(today);
        date.setDate(today.getDate() - i);
        dates.push(date.toLocaleDateString());
      }
      return dates.reverse();
    }
  }
};
</script>

说明

  1. 获取数据

    • 使用 axios 发送请求,获取过去15天的审核记录数。
    • 将获取到的数据存储在 auditCounts 中。
  2. 初始化图表

    • 使用 ECharts 初始化图表,并设置数据和配置项。
    • xAxis 的数据是过去15天的日期,series 的数据是对应的记录数。
  3. 生成日期标签

    • getPast15Days 方法生成过去15天的日期标签,用于图表的 x 轴。

通过这些步骤,你可以获取过去15天每天的查询数据,并在前端绘制折线图。如果有任何具体问题或需要进一步的帮助,请随时提问。

好的,我将在你提供的代码基础上进行修改,以实现获取自今天起前15天每天的查询数据。以下是修改后的后端代码:

public List<Integer> getAuditCountsForLast15Days() {
    List<Integer> counts = new ArrayList<>();
    try {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();

        for (int i = 0; i < 15; i++) {
            // 计算当天的日期
            Date today = calendar.getTime();
            Date yesterday = (Date) today.clone();
            calendar.add(Calendar.DAY_OF_YEAR, -1);

            // 格式化日期
            String todayStr = df.format(today);
            String yesterdayStr = df.format(yesterday);

            // 解析日期
            Date parsedToday = df.parse(todayStr);
            Date parsedYesterday = df.parse(yesterdayStr);

            // 构造查询条件
            Example example = new Example(AuditInfo.class);
            example.createCriteria().andBetween("queryTime", parsedYesterday, parsedToday);

            // 查询记录数
            int count = auditInfoMapper.selectCountByExample(example);
            counts.add(count);
        }
    } catch (ParseException e) {
        log.error("日期解析异常", e);
    } catch (Exception e) {
        log.error("查询异常", e);
    }
    return counts;
}

详细说明

  1. 计算日期范围

    • 使用 Calendar 类来计算从今天开始前15天的日期。
    • 每次循环中,计算当天的日期和前一天的日期。
  2. 构造查询条件

    • 使用 SimpleDateFormat 格式化日期。
    • 解析格式化后的日期字符串。
    • 构造 Example 对象,并设置查询条件为 queryTime 在前一天和当天之间。
  3. 存储结果

    • 将每天的查询结果(记录数)存储在 counts 列表中。
  4. 返回结果

    • 最终返回 counts 列表,包含过去15天每天的记录数。

方法签名

  • 返回类型List<Integer>,包含过去15天每天的记录数。
  • 方法名getAuditCountsForLast15Days,用于获取过去15天每天的记录数。

使用示例

假设你在控制器中调用这个方法并返回给前端:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@RestController
public class AuditController {

    private final AuditService auditService;

    public AuditController(AuditService auditService) {
        this.auditService = auditService;
    }

    @GetMapping("/api/getAuditCountsForLast15Days")
    public List<Integer> getAuditCountsForLast15Days() {
        return auditService.getAuditCountsForLast15Days();
    }
}

前端调用示例

前端可以通过发送 HTTP GET 请求来获取这些数据:

axios.get('/api/getAuditCountsForLast15Days')
  .then(response => {
    const auditCounts = response.data;
    // 处理数据并绘制图表
  })
  .catch(error => {
    console.error('Error fetching audit counts:', error);
  });

希望这些修改能满足你的需求。如果有任何其他问题或需要进一步的帮助,请随时提问。

posted @ 2024-11-07 16:04  一曲微茫  阅读(3)  评论(0编辑  收藏  举报