parent
							
								
									fe5c64a665
								
							
						
					
					
						commit
						bbb8917039
					
				| 
						 | 
				
			
			@ -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<String> header = properties.stream()
 | 
			
		||||
//                    .map(o -> o.getDisplayName().getLocaleValue())
 | 
			
		||||
//                    .collect(Collectors.toList());
 | 
			
		||||
            List<String> keyHeaders = properties.stream()
 | 
			
		||||
                    .filter(Objects::nonNull)
 | 
			
		||||
                    .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()
 | 
			
		||||
                    .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<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());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue