EasyExcel
依赖配置:
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel<artifactId>
    <version>2.2.0-beta2</version>
</dependency>
实体类配置:
@Data public class SubjectEeVo { @ExcelProperty(value = "id" ,index = 0) private Long id; @ExcelProperty(value = "课程分类名称" ,index = 1) private String title; @ExcelProperty(value = "上级id" ,index = 2) private Long parentId; @ExcelProperty(value = "排序" ,index = 3) private Integer sort; }
导入时,需要配置监听器
@Component public class SubjectListener extends AnalysisEventListener<SubjectEeVo> { @Resource private SubjectMapper dictMapper; //一行一行读取 @Override public void invoke(SubjectEeVo subjectEeVo, AnalysisContext analysisContext) { //调用方法添加数据库 Subject subject = new Subject(); BeanUtils.copyProperties(subjectEeVo,subject); dictMapper.insert(subject); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } }
导入业务:
 @PostMapping("importData")
    public Result importData(MultipartFile file) {
        subjectService.importDictData(file);
        return Result.ok();
    }
    /**
           * 导入
    */
    @Override
    public void importDictData(MultipartFile file) {
        try {
            EasyExcel.read(file.getInputStream(),
                    SubjectEeVo.class,subjectListener).sheet().doRead();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
导出业务:
@GetMapping(value = "/exportData") public void exportData(HttpServletResponse response) { subjectService.exportData(response); } /** * 导出课表 * @param response */ @Override public void exportData(HttpServletResponse response) { try { response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 String fileName = URLEncoder.encode("课程分类", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename="+ fileName + ".xlsx"); List<Subject> dictList = baseMapper.selectList(null); List<SubjectEeVo> dictVoList = dictList.stream().map(sub -> { SubjectEeVo subjectEeVo = new SubjectEeVo(); BeanUtils.copyProperties(sub, subjectEeVo); return subjectEeVo; }).collect(Collectors.toList()); EasyExcel.write(response.getOutputStream(), SubjectEeVo.class) .sheet("课程分类").doWrite(dictVoList); } catch (IOException e) { e.printStackTrace(); } }
曲线图:
<template>
    <div class="app-container">
      <!--表单-->
      <el-form :inline="true" class="demo-form-inline">
        <el-form-item>
          <el-date-picker
            v-model="startDate"
            type="date"
            placeholder="选择开始日期"
            value-format="yyyy-MM-dd" />
        </el-form-item>
        <el-form-item>     
          <el-date-picker
            v-model="endDate"
            type="date"
            placeholder="选择截止日期"
            value-format="yyyy-MM-dd" />
        </el-form-item>
        <el-button
          :disabled="btnDisabled"
          type="primary"
          icon="el-icon-search"
          @click="showChart()">查询</el-button>
      </el-form>
      <div id="chart" class="chart" style="height:500px;" />
    </div>
  </template>
  <script>
  import echarts from 'echarts'
  import api from '@/api/vod/videoVisitor'
  
  export default {
    data() {
      return {
        courseId: '',
        startDate: '',
        endDate: '',
        btnDisabled: false
      }
    },
    created() {
      this.courseId = this.$route.params.id
      // 初始化最近十天数据
      let currentDate = new Date();
      this.startDate = this.dateFormat(new Date(currentDate.getTime()-7*24*3600*1000))
      this.endDate = this.dateFormat(currentDate)
      this.showChart()
    },
    methods: {
      showChart() {
        api.findCount(this.courseId, this.startDate, this.endDate).then(response => {
          this.setChartData(response.data)
        })
      },
      setChartData(data) {
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('chart'))
        // 指定图表的配置项和数据
        var option = {
          title: {
            text: '观看课程人数统计'
          },
          xAxis: {
            data: data.xData
          },
          yAxis: {
            minInterval: 1
          },
          series: [{
            type: 'line',
            data: data.yData
          }]
        }
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option)
      },
      dateFormat(date) {
        let fmt = 'YYYY-mm-dd'
        let ret;
        const opt = {
          "Y+": date.getFullYear().toString(),        // 年
          "m+": (date.getMonth() + 1).toString(),     // 月
          "d+": date.getDate().toString(),            // 日
          "H+": date.getHours().toString(),           // 时
          "M+": date.getMinutes().toString(),         // 分
          "S+": date.getSeconds().toString()          // 秒
          // 有其他格式化字符需求可以继续添加,必须转化成字符串
        };
        for (let k in opt) {
          ret = new RegExp("(" + k + ")").exec(fmt);
          if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
          };
        };
        return fmt;
      }
    }
  }
  </script>
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号