From dfed9c07aa8da5791d568736716bc4b44d59ebaf Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Fri, 16 Apr 2021 13:33:53 +0800
Subject: [PATCH] jfreechart+easyExcel 方式导出报表

---
 blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/animalheat/controller/AnimalHeatController.java |  104 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 103 insertions(+), 1 deletions(-)

diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/animalheat/controller/AnimalHeatController.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/animalheat/controller/AnimalHeatController.java
index d096c1f..22b63dc 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/animalheat/controller/AnimalHeatController.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/animalheat/controller/AnimalHeatController.java
@@ -1,8 +1,20 @@
 package org.springblade.jfpt.animalheat.controller;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.EasyExcelFactory;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
+import org.apache.commons.codec.Charsets;
+import org.jfree.chart.ChartFactory;
+import org.jfree.chart.ChartUtilities;
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
+import org.jfree.chart.plot.PiePlot;
+import org.jfree.data.general.DefaultPieDataset;
+import org.springblade.common.entity.ReportReturnData;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
@@ -12,11 +24,19 @@
 import org.springblade.jfpt.animalheat.entity.BladeAnimalHeat;
 import org.springblade.jfpt.animalheat.service.AnimalHeatService;
 import org.springblade.jfpt.animalheat.vo.AnimalHeatVo;
+import org.springblade.jfpt.pie.ImageData;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
+import java.awt.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLEncoder;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -80,7 +100,89 @@
 	@GetMapping("/export-animalHeat")
 	public void exportAnimalHeat(AnimalHeatVo animalHeatVo,HttpServletResponse response){
 		List<AnimalHeatExcel> list = animalHeatService.exportAnimalHeat(animalHeatVo);
-		ExcelUtil.export(response, "体温检测数据" + DateUtil.time(), "体温检测数据表", list, AnimalHeatExcel.class);
+		ExcelUtil.export(response, "体温检测数据" + DateUtil.time(), "体温检测数据表", list,AnimalHeatExcel.class );
+	}
+
+	/**
+	 * 导出体温数据列表
+	 * @param animalHeatVo 条件
+	 * @param response 返回域
+	 */
+	@GetMapping("/getAnimalHeatStatis")
+	public void getAnimalHeatStatis(AnimalHeatVo animalHeatVo,HttpServletResponse response){
+		//获取统计数据
+		List<AnimalHeatExcel> animalHeatExcels = animalHeatService.exportAnimalHeat(animalHeatVo);
+		List<ReportReturnData> reportReturnData = animalHeatService.getAnimalHeatPie(animalHeatVo);
+
+		//创建jfreechart 画图对象
+		DefaultPieDataset pds = new DefaultPieDataset();
+
+		//遍历统计数据,将数据保存到饼图对象中
+		for (ReportReturnData returnData:reportReturnData) {
+			pds.setValue(returnData.getType(),returnData.getCount());
+		}
+
+		//声明excelWriter对象
+		ExcelWriter excelWriter  = null;
+		try {
+			// 分别是:显示图表的标题、需要提供对应图表的DateSet对象、是否显示图例、是否生成贴士以及是否生成URL链接
+			JFreeChart chart = ChartFactory.createPieChart("体温数据统计图", pds, false, false, true);
+			// 如果不使用Font,中文将显示不出来
+			Font font = new Font("宋体", Font.BOLD, 24);
+			// 设置图片标题的字体
+			chart.getTitle().setFont(font);
+			// 得到图块,准备设置标签的字体
+			PiePlot plot = (PiePlot) chart.getPlot();
+			// 设置标签字体
+			plot.setLabelFont(font);
+			plot.setStartAngle(new Float(3.14f / 2f));
+			// 设置plot的前景色透明度
+			plot.setForegroundAlpha(0.7f);
+			// 设置plot的背景色透明度
+			plot.setBackgroundAlpha(0.0f);
+			// 设置标签生成器(默认{0})
+			// {0}:key {1}:value {2}:百分比 {3}:sum
+			plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1}占{2})"));
+			ByteArrayOutputStream bos = new ByteArrayOutputStream();
+
+			//创建图片数据集合,对象
+			ArrayList<ImageData> imageDatas = new ArrayList<>();
+			ImageData imageData = new ImageData();
+			try {
+				// 将图表写入到ByteArrayOutputStream流中
+				ChartUtilities.writeChartAsJPEG(bos, chart, 800, 700);
+				//将字节数组输出流写入到输入流中
+				InputStream inputStream = new ByteArrayInputStream(bos.toByteArray());
+				//excel 文件名称
+				String fileName = "体温统计报表" + System.currentTimeMillis() + ".xlsx";
+				//封装数据到图表
+				imageData.setInputStream(inputStream);
+				imageDatas.add(imageData);
+
+				//设置响应体
+				response.setContentType("application/vnd.ms-excel");
+				response.setCharacterEncoding(Charsets.UTF_8.name());
+				fileName = URLEncoder.encode(fileName, Charsets.UTF_8.name());
+				response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+				//写入
+				excelWriter  = EasyExcel.write(response.getOutputStream()).build();
+
+				//shell0
+				WriteSheet writeSheet = EasyExcel.writerSheet(0, "图表").head(ImageData.class).build();
+				excelWriter.write(imageDatas, writeSheet);
+
+				//shell1
+				WriteSheet writeSheet0 = EasyExcel.writerSheet(1, "数据列表").head(AnimalHeatExcel.class).build();
+				excelWriter.write(animalHeatExcels, writeSheet0);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}finally {
+			//完成后会关闭流
+			excelWriter.finish();
+		}
 	}
 
 }

--
Gitblit v1.9.3