diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/util/ExportCSV.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/util/ExportCSV.java index a7cfa50..3b38e6d 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/util/ExportCSV.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/util/ExportCSV.java @@ -3,6 +3,8 @@ package shkd.sys.sys.plugin.report.util; import dm.jdbc.util.StringUtil; import kd.bos.cache.CacheFactory; 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.entity.MainEntityType; import kd.bos.entity.report.IReportListModel; @@ -17,10 +19,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.Collections; -import java.util.Date; -import java.util.EventObject; -import java.util.List; +import java.util.*; import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -41,14 +40,20 @@ public class ExportCSV extends AbstractReportFormPlugin { public void itemClick(ItemClickEvent evt) { super.itemClick(evt); String itemKey = evt.getItemKey(); - if (StringUtil.equals("shkd_exportcsv",itemKey)){ + if (StringUtil.equals("shkd_exportcsv", itemKey)) { MainEntityType dataEntityType = this.getModel().getDataEntityType(); DataEntityPropertyCollection properties = dataEntityType.getProperties(); String reportName = dataEntityType.getDisplayName().getLocaleValue(); -// List header = properties.stream() -// .map(o -> o.getDisplayName().getLocaleValue()) -// .collect(Collectors.toList()); + List keyHeaders = properties.stream() + .filter(Objects::nonNull) + .map(IMetadata::getName) + .collect(Collectors.toList()); + List headers = properties.stream() + .filter(Objects::nonNull) + .filter(o -> Objects.nonNull(o.getDisplayName())) + .map(o -> o.getDisplayName().getLocaleValue()) + .collect(Collectors.toList()); String timestamp = LocalDateTime.now() .format(DateTimeFormatter.ofPattern("yyyyMMddHHmm")); @@ -59,14 +64,32 @@ public class ExportCSV extends AbstractReportFormPlugin { IReportListModel reportList = ((ReportList) this.getControl("reportlistap")).getReportModel(); int rowCount = reportList.getRowCount(); - List rows = IntStream.range(1, rowCount) - .mapToObj(reportList::getRowData) + + DynamicObjectCollection rowData = reportList.getRowData(0, rowCount, false); + + List> rows2 = rowData.stream() + .map(obj -> keyHeaders.stream() + .map(obj::get) // 使用 DynamicObject 的 get 方法获取属性值 + .collect(Collectors.toList())) .collect(Collectors.toList()); + 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"); - CsvExportUtil.writeCsvToFile(tempFile,null, Collections.singleton(rows)); + CsvExportUtil.writeCsvToFile(tempFile, headers, rows2); // 上传到临时文件服务器 获取压缩包下载地址 TempFileCache tempFileCache = CacheFactory.getCommonCacheFactory().getTempFileCache(); String url = tempFileCache.saveAsUrl(tempFile.getFileName().toString(), Files.newInputStream(tempFile), 3 * 60);