mirror of
https://gitee.com/anji-plus/report.git
synced 2026-04-01 10:08:36 +08:00
导出
This commit is contained in:
@@ -9,8 +9,12 @@ import com.anjiplus.template.gaea.business.modules.dashboard.controller.dto.Char
|
||||
import com.anjiplus.template.gaea.business.modules.dashboard.controller.dto.ReportDashboardObjectDto;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* @desc 大屏设计 controller
|
||||
* @website https://gitee.com/anji-plus/gaea
|
||||
@@ -62,4 +66,27 @@ public class ReportDashboardController {
|
||||
return ResponseBean.builder().data(reportDashboardService.getChartData(dto)).build();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 导出大屏
|
||||
* @param reportCode
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/export/{reportCode}")
|
||||
@Permission(code = "view", name = "导出大屏")
|
||||
public ResponseEntity<byte[]> exportDashboard(HttpServletRequest request, HttpServletResponse response, @PathVariable("reportCode") String reportCode) {
|
||||
return reportDashboardService.exportDashboard(request, response, reportCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入大屏
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/import")
|
||||
@Permission(code = "design", name = "导入大屏")
|
||||
public ResponseBean importDashboard(@RequestBody ChartDto dto) {
|
||||
return ResponseBean.builder().data(reportDashboardService.getChartData(dto)).build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,6 +6,10 @@ import com.anjiplus.template.gaea.business.modules.dashboard.controller.dto.Char
|
||||
import com.anjiplus.template.gaea.business.modules.dashboard.controller.dto.ReportDashboardObjectDto;
|
||||
import com.anjiplus.template.gaea.business.modules.dashboard.controller.param.ReportDashboardParam;
|
||||
import com.anjiplus.template.gaea.business.modules.dashboard.dao.entity.ReportDashboard;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* @desc ReportDashboard 大屏设计服务接口
|
||||
@@ -35,4 +39,14 @@ public interface ReportDashboardService extends GaeaBaseService<ReportDashboardP
|
||||
* @return
|
||||
*/
|
||||
Object getChartData(ChartDto dto);
|
||||
|
||||
|
||||
/**
|
||||
* 导出大屏,zip文件
|
||||
* @param request
|
||||
* @param response
|
||||
* @param reportCode
|
||||
* @return
|
||||
*/
|
||||
ResponseEntity<byte[]> exportDashboard(HttpServletRequest request, HttpServletResponse response, String reportCode);
|
||||
}
|
||||
|
||||
@@ -13,6 +13,9 @@ import com.anjiplus.template.gaea.business.modules.dashboard.controller.dto.Repo
|
||||
import com.anjiplus.template.gaea.business.modules.dashboard.dao.ReportDashboardMapper;
|
||||
import com.anjiplus.template.gaea.business.modules.dashboard.service.ChartStrategy;
|
||||
import com.anjiplus.template.gaea.business.modules.dashboard.service.ReportDashboardService;
|
||||
import com.anjiplus.template.gaea.business.modules.file.entity.GaeaFile;
|
||||
import com.anjiplus.template.gaea.business.modules.file.service.GaeaFileService;
|
||||
import com.anjiplus.template.gaea.business.modules.file.util.FileUtils;
|
||||
import com.anjiplus.template.gaea.business.util.DateUtil;
|
||||
import com.anjiplus.template.gaea.business.modules.dashboardwidget.controller.dto.ReportDashboardWidgetDto;
|
||||
import com.anjiplus.template.gaea.business.modules.dashboardwidget.controller.dto.ReportDashboardWidgetValueDto;
|
||||
@@ -22,17 +25,29 @@ import com.anjiplus.template.gaea.business.modules.dashboardwidget.service.Repor
|
||||
import com.anjiplus.template.gaea.business.modules.dataset.controller.dto.DataSetDto;
|
||||
import com.anjiplus.template.gaea.business.modules.dataset.controller.dto.OriginalDataDto;
|
||||
import com.anjiplus.template.gaea.business.modules.dataset.service.DataSetService;
|
||||
import com.anjiplus.template.gaea.business.util.FileUtil;
|
||||
import com.anjiplus.template.gaea.business.util.UuidUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.net.URLEncoder;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
@@ -42,6 +57,7 @@ import java.util.*;
|
||||
* @date 2021-04-12 14:52:21.761
|
||||
**/
|
||||
@Service
|
||||
@Slf4j
|
||||
//@RequiredArgsConstructor
|
||||
public class ReportDashboardServiceImpl implements ReportDashboardService, InitializingBean, ApplicationContextAware {
|
||||
|
||||
@@ -54,6 +70,18 @@ public class ReportDashboardServiceImpl implements ReportDashboardService, Initi
|
||||
@Autowired
|
||||
private DataSetService dataSetService;
|
||||
|
||||
@Autowired
|
||||
private GaeaFileService gaeaFileService;
|
||||
|
||||
@Value("${customer.file.downloadPath:''}")
|
||||
private String fileDownloadPath;
|
||||
|
||||
@Value("${customer.file.dist-path:''}")
|
||||
private String dictPath;
|
||||
|
||||
private final static String ZIP_PATH = "/zip/";
|
||||
private final static String JSON_PATH = "dashboard.json";
|
||||
|
||||
private Map<String, ChartStrategy> queryServiceImplMap = new HashMap<>();
|
||||
private ApplicationContext applicationContext;
|
||||
|
||||
@@ -165,6 +193,97 @@ public class ReportDashboardServiceImpl implements ReportDashboardService, Initi
|
||||
// return getTarget(chartType).transform(dto, result.getData());
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出大屏,zip文件
|
||||
*
|
||||
* @param request
|
||||
* @param response
|
||||
* @param reportCode
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ResponseEntity<byte[]> exportDashboard(HttpServletRequest request, HttpServletResponse response, String reportCode) {
|
||||
String userAgent = request.getHeader("User-Agent");
|
||||
boolean isIeBrowser = userAgent.indexOf("MSIE") > 0;
|
||||
|
||||
ReportDashboardObjectDto detail = getDetail(reportCode);
|
||||
List<ReportDashboardWidgetDto> widgets = detail.getDashboard().getWidgets();
|
||||
detail.setWidgets(widgets);
|
||||
detail.getDashboard().setWidgets(null);
|
||||
|
||||
|
||||
//1.组装临时目录,/app/disk/upload/zip/临时文件夹
|
||||
String path = dictPath + ZIP_PATH + UuidUtil.generateShortUuid();
|
||||
|
||||
//将涉及到的图片保存下来(1.背景图,2.组件为图片的)
|
||||
String backgroundImage = detail.getDashboard().getBackgroundImage();
|
||||
zipLoadImage(backgroundImage, path);
|
||||
detail.getWidgets().stream()
|
||||
.filter(reportDashboardWidgetDto -> "widget-image".equals(reportDashboardWidgetDto.getType()))
|
||||
.forEach(reportDashboardWidgetDto -> {
|
||||
String imageAddress = reportDashboardWidgetDto.getValue().getSetup().getString("imageAdress");
|
||||
zipLoadImage(imageAddress, path);
|
||||
});
|
||||
|
||||
|
||||
|
||||
//2.将大屏设计到的json文件保存
|
||||
String jsonPath = path + "/" + JSON_PATH;
|
||||
FileUtil.WriteStringToFile(jsonPath, JSONObject.toJSONString(detail));
|
||||
|
||||
|
||||
//将path文件夹打包zip
|
||||
String zipPath = path + ".zip";
|
||||
FileUtil.compress(path, zipPath);
|
||||
|
||||
|
||||
File file = new File(zipPath);
|
||||
ResponseEntity.BodyBuilder builder = ResponseEntity.ok();
|
||||
builder.contentLength(file.length());
|
||||
//application/octet-stream 二进制数据流(最常见的文件下载)
|
||||
builder.contentType(MediaType.APPLICATION_OCTET_STREAM);
|
||||
if (isIeBrowser) {
|
||||
builder.header("Content-Disposition", "attachment; filename=" + reportCode + ".zip");
|
||||
} else {
|
||||
builder.header("Content-Disposition", "attacher; filename*=UTF-8''" + reportCode + ".zip");
|
||||
}
|
||||
|
||||
//删除zip文件
|
||||
file.delete();
|
||||
//删除path临时文件夹
|
||||
FileUtil.delete(path);
|
||||
log.info("删除临时文件:{},{}", zipPath, path);
|
||||
|
||||
return builder.body(FileUtils.readFileToByteArray(file));
|
||||
}
|
||||
|
||||
/**
|
||||
* 将大屏涉及到的图片存入指定文件夹
|
||||
* @param imageAddress
|
||||
* @param path
|
||||
*/
|
||||
private void zipLoadImage(String imageAddress, String path) {
|
||||
//http://10.108.26.197:9095/file/download/1d9bcd35-82a1-4f08-9465-b66b930b6a8d
|
||||
if (imageAddress.trim().startsWith(fileDownloadPath)) {
|
||||
//以fileDownloadPath为前缀的代表为上传的图片
|
||||
String fileName = imageAddress.substring(fileDownloadPath.length() + 1);
|
||||
//根据fileId,从gaea_file中读出filePath
|
||||
LambdaQueryWrapper<GaeaFile> queryWrapper = Wrappers.lambdaQuery();
|
||||
queryWrapper.eq(GaeaFile::getFileId, fileName);
|
||||
GaeaFile gaeaFile = gaeaFileService.selectOne(queryWrapper);
|
||||
if (null != gaeaFile) {
|
||||
String fileType = gaeaFile.getFileType();
|
||||
path = path + "/image/" + fileName + "." + fileType;
|
||||
//path = /app/disk/upload/zip/UUID/image
|
||||
|
||||
//原始文件的路径
|
||||
String filePath = gaeaFile.getFilePath();
|
||||
FileUtil.copyFileUsingFileChannels(filePath, path);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public ChartStrategy getTarget(String type) {
|
||||
for (String s : queryServiceImplMap.keySet()) {
|
||||
if (s.contains(type)) {
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.anjiplus.template.gaea.business.util;
|
||||
import com.anji.plus.gaea.code.ResponseCode;
|
||||
import com.anji.plus.gaea.exception.BusinessExceptionBuilder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import sun.misc.BASE64Encoder;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.URL;
|
||||
|
||||
@@ -8,3 +8,4 @@ spring:
|
||||
customer:
|
||||
file:
|
||||
dist-path: D:\Workspace\AJ-Report\report-core\upload
|
||||
downloadPath: http://127.0.0.1:9095/file/download
|
||||
|
||||
Reference in New Issue
Block a user