报表csv导出2
This commit is contained in:
wenlukang1 2025-07-29 10:33:46 +08:00
parent fe5c64a665
commit bbb8917039
1 changed files with 35 additions and 12 deletions

View File

@ -3,6 +3,8 @@ package shkd.sys.sys.plugin.report.util;
import dm.jdbc.util.StringUtil; import dm.jdbc.util.StringUtil;
import kd.bos.cache.CacheFactory; import kd.bos.cache.CacheFactory;
import kd.bos.cache.TempFileCache; import kd.bos.cache.TempFileCache;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.metadata.IMetadata;
import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection; import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection;
import kd.bos.entity.MainEntityType; import kd.bos.entity.MainEntityType;
import kd.bos.entity.report.IReportListModel; import kd.bos.entity.report.IReportListModel;
@ -17,10 +19,7 @@ import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.Collections; import java.util.*;
import java.util.Date;
import java.util.EventObject;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
@ -46,9 +45,15 @@ public class ExportCSV extends AbstractReportFormPlugin {
DataEntityPropertyCollection properties = dataEntityType.getProperties(); DataEntityPropertyCollection properties = dataEntityType.getProperties();
String reportName = dataEntityType.getDisplayName().getLocaleValue(); String reportName = dataEntityType.getDisplayName().getLocaleValue();
// List<String> header = properties.stream() List<String> keyHeaders = properties.stream()
// .map(o -> o.getDisplayName().getLocaleValue()) .filter(Objects::nonNull)
// .collect(Collectors.toList()); .map(IMetadata::getName)
.collect(Collectors.toList());
List<String> headers = properties.stream()
.filter(Objects::nonNull)
.filter(o -> Objects.nonNull(o.getDisplayName()))
.map(o -> o.getDisplayName().getLocaleValue())
.collect(Collectors.toList());
String timestamp = LocalDateTime.now() String timestamp = LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyyMMddHHmm")); .format(DateTimeFormatter.ofPattern("yyyyMMddHHmm"));
@ -59,14 +64,32 @@ public class ExportCSV extends AbstractReportFormPlugin {
IReportListModel reportList = ((ReportList) this.getControl("reportlistap")).getReportModel(); IReportListModel reportList = ((ReportList) this.getControl("reportlistap")).getReportModel();
int rowCount = reportList.getRowCount(); int rowCount = reportList.getRowCount();
List<Object> rows = IntStream.range(1, rowCount)
.mapToObj(reportList::getRowData) DynamicObjectCollection rowData = reportList.getRowData(0, rowCount, false);
List<List<?>> rows2 = rowData.stream()
.map(obj -> keyHeaders.stream()
.map(obj::get) // 使用 DynamicObject get 方法获取属性值
.collect(Collectors.toList()))
.collect(Collectors.toList()); .collect(Collectors.toList());
try { try {
// DateUtils.get // 定义本地测试目录和完整文件路径
// String localDir = "D:\\test";
// Path dirPath = java.nio.file.Paths.get(localDir);
// if (!Files.exists(dirPath)) {
// Files.createDirectories(dirPath); // 确保目录存在
// }
//
// Path tempFile = dirPath.resolve(reportName + reportNameExt + ".csv");
// CsvExportUtil.writeCsvToFile(tempFile, headers, rows2);
//
// // 打印文件路径用于本地验证
// System.out.println("CSV 文件已保存至: " + tempFile.toAbsolutePath());
Path tempFile = Files.createTempFile(reportName + reportNameExt, ".csv"); Path tempFile = Files.createTempFile(reportName + reportNameExt, ".csv");
CsvExportUtil.writeCsvToFile(tempFile,null, Collections.singleton(rows)); CsvExportUtil.writeCsvToFile(tempFile, headers, rows2);
// 上传到临时文件服务器 获取压缩包下载地址 // 上传到临时文件服务器 获取压缩包下载地址
TempFileCache tempFileCache = CacheFactory.getCommonCacheFactory().getTempFileCache(); TempFileCache tempFileCache = CacheFactory.getCommonCacheFactory().getTempFileCache();
String url = tempFileCache.saveAsUrl(tempFile.getFileName().toString(), Files.newInputStream(tempFile), 3 * 60); String url = tempFileCache.saveAsUrl(tempFile.getFileName().toString(), Files.newInputStream(tempFile), 3 * 60);