导出csv功能1
This commit is contained in:
parent
7b085cb5ff
commit
fe5c64a665
|
@ -3,21 +3,15 @@ package shkd.sys.sys.plugin.report;
|
|||
import kd.bos.algo.DataSet;
|
||||
import kd.bos.algo.JoinDataSet;
|
||||
import kd.bos.algo.JoinType;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.db.DB;
|
||||
import kd.bos.db.DBRoute;
|
||||
import kd.bos.entity.report.AbstractReportListDataPlugin;
|
||||
import kd.bos.entity.report.FastFilter;
|
||||
import kd.bos.entity.report.FilterItemInfo;
|
||||
import kd.bos.entity.report.ReportQueryParam;
|
||||
import kd.bos.logging.Log;
|
||||
import kd.bos.logging.LogFactory;
|
||||
import kd.bos.orm.ORM;
|
||||
import kd.bos.orm.query.QCP;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.QueryServiceHelper;
|
||||
import kd.bos.util.CollectionUtils;
|
||||
import shkd.sys.sys.plugin.report.util.ReportUtils;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
|
|
|
@ -12,6 +12,7 @@ import kd.bos.orm.query.QFilter;
|
|||
import kd.bos.permission.api.HasPermOrgResult;
|
||||
import kd.bos.servicehelper.QueryServiceHelper;
|
||||
import kd.bos.servicehelper.permission.PermissionServiceHelper;
|
||||
import shkd.sys.sys.plugin.report.util.ReportUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
|
|
@ -5,28 +5,23 @@ import kd.bos.algo.JoinDataSet;
|
|||
import kd.bos.algo.JoinType;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.dataentity.entity.LocaleString;
|
||||
import kd.bos.db.DB;
|
||||
import kd.bos.db.DBRoute;
|
||||
import kd.bos.entity.MainEntityType;
|
||||
import kd.bos.entity.report.*;
|
||||
import kd.bos.entity.tree.TreeNode;
|
||||
import kd.bos.logging.Log;
|
||||
import kd.bos.logging.LogFactory;
|
||||
import kd.bos.org.model.OrgTreeBuildType;
|
||||
import kd.bos.org.model.OrgTreeParam;
|
||||
import kd.bos.orm.ORM;
|
||||
import kd.bos.orm.query.QCP;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.MetadataServiceHelper;
|
||||
import kd.bos.servicehelper.QueryServiceHelper;
|
||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||||
import kd.bos.servicehelper.org.OrgUnitServiceHelper;
|
||||
import kd.bos.servicehelper.org.OrgViewType;
|
||||
import kd.bos.util.CollectionUtils;
|
||||
import shkd.sys.sys.plugin.form.PaymentProcessingBillPlugin;
|
||||
import shkd.sys.sys.plugin.report.domain.FinanceVarietyEnum;
|
||||
import shkd.sys.sys.plugin.report.util.ReportUtils;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
|
|
@ -6,23 +6,20 @@ import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|||
import kd.bos.db.DB;
|
||||
import kd.bos.db.DBRoute;
|
||||
import kd.bos.entity.report.AbstractReportListDataPlugin;
|
||||
import kd.bos.entity.report.FastFilter;
|
||||
import kd.bos.entity.report.FilterItemInfo;
|
||||
import kd.bos.entity.report.ReportQueryParam;
|
||||
import kd.bos.entity.tree.TreeNode;
|
||||
import kd.bos.logging.Log;
|
||||
import kd.bos.logging.LogFactory;
|
||||
import kd.bos.org.model.OrgTreeBuildType;
|
||||
import kd.bos.org.model.OrgTreeParam;
|
||||
import kd.bos.orm.ORM;
|
||||
import kd.bos.orm.query.QCP;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.QueryServiceHelper;
|
||||
import kd.bos.servicehelper.org.OrgUnitServiceHelper;
|
||||
import kd.bos.servicehelper.org.OrgViewType;
|
||||
import kd.bos.util.CollectionUtils;
|
||||
import shkd.sys.sys.plugin.report.domain.FinanceVarietyEnum;
|
||||
import shkd.sys.sys.plugin.report.util.ReportUtils;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
package shkd.sys.sys.plugin.report.util;
|
||||
|
||||
import com.opencsv.CSVWriter;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class CsvExportUtil {
|
||||
|
||||
|
||||
/**
|
||||
* 通用 CSV 导出
|
||||
*
|
||||
* @param os 输出流(可以是 FileOutputStream / response.getOutputStream())
|
||||
* @param headers 表头,可为 null
|
||||
* @param rows 数据,每行是一个 List<Object>,元素自动 toString()
|
||||
* @throws IOException IO 异常
|
||||
*/
|
||||
public static void writeCsv(OutputStream os,
|
||||
List<String> headers,
|
||||
Collection<? extends List<?>> rows) throws IOException {
|
||||
|
||||
try (CSVWriter writer = new CSVWriter(
|
||||
new OutputStreamWriter(os, StandardCharsets.UTF_8))) {
|
||||
|
||||
// 1. 表头
|
||||
if (headers != null && !headers.isEmpty()) {
|
||||
writer.writeNext(headers.toArray(new String[0]));
|
||||
}
|
||||
|
||||
// 2. 内容
|
||||
for (List<?> row : rows) {
|
||||
String[] line = row.stream()
|
||||
.map(e -> e == null ? "" : e.toString())
|
||||
.toArray(String[]::new);
|
||||
writer.writeNext(line);
|
||||
}
|
||||
writer.flush();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 把数据直接写进磁盘文件
|
||||
*
|
||||
* @param targetFile 目标文件路径(如 Paths.get("/tmp/report.csv"))
|
||||
* @param headers 表头(可为 null)
|
||||
* @param rows 数据行
|
||||
*/
|
||||
public static void writeCsvToFile(Path targetFile,
|
||||
List<String> headers,
|
||||
Collection<? extends List<?>> rows) throws IOException {
|
||||
|
||||
// 自动创建父目录
|
||||
Files.createDirectories(targetFile.getParent());
|
||||
|
||||
try (BufferedWriter bw = Files.newBufferedWriter(targetFile,
|
||||
StandardCharsets.UTF_8);
|
||||
CSVWriter writer = new CSVWriter(bw)) {
|
||||
|
||||
// 1. 表头
|
||||
if (headers != null && !headers.isEmpty()) {
|
||||
writer.writeNext(headers.toArray(new String[0]));
|
||||
}
|
||||
|
||||
// 2. 数据
|
||||
for (List<?> row : rows) {
|
||||
String[] line = row.stream()
|
||||
.map(e -> e == null ? "" : e.toString())
|
||||
.toArray(String[]::new);
|
||||
writer.writeNext(line);
|
||||
}
|
||||
writer.flush();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,83 @@
|
|||
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.metadata.clr.DataEntityPropertyCollection;
|
||||
import kd.bos.entity.MainEntityType;
|
||||
import kd.bos.entity.report.IReportListModel;
|
||||
import kd.bos.form.control.Toolbar;
|
||||
import kd.bos.form.control.events.ItemClickEvent;
|
||||
import kd.bos.report.ReportList;
|
||||
import kd.bos.report.plugin.AbstractReportFormPlugin;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
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.concurrent.ThreadLocalRandom;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
public class ExportCSV extends AbstractReportFormPlugin {
|
||||
|
||||
@Override
|
||||
public void registerListener(EventObject e) {
|
||||
super.registerListener(e);
|
||||
// 获取工具栏,监听整个工具栏
|
||||
Toolbar export = this.getView().getControl("toolbarap");
|
||||
// 监听工具栏这个按钮的点击事件
|
||||
export.addItemClickListener(this);
|
||||
export.addClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void itemClick(ItemClickEvent evt) {
|
||||
super.itemClick(evt);
|
||||
String itemKey = evt.getItemKey();
|
||||
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());
|
||||
|
||||
String timestamp = LocalDateTime.now()
|
||||
.format(DateTimeFormatter.ofPattern("yyyyMMddHHmm"));
|
||||
|
||||
int random = ThreadLocalRandom.current().nextInt(100, 1000); // 3 位随机数
|
||||
|
||||
String reportNameExt = timestamp + random;
|
||||
|
||||
IReportListModel reportList = ((ReportList) this.getControl("reportlistap")).getReportModel();
|
||||
int rowCount = reportList.getRowCount();
|
||||
List<Object> rows = IntStream.range(1, rowCount)
|
||||
.mapToObj(reportList::getRowData)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
try {
|
||||
// DateUtils.get
|
||||
Path tempFile = Files.createTempFile(reportName + reportNameExt, ".csv");
|
||||
CsvExportUtil.writeCsvToFile(tempFile,null, Collections.singleton(rows));
|
||||
// 上传到临时文件服务器 获取压缩包下载地址
|
||||
TempFileCache tempFileCache = CacheFactory.getCommonCacheFactory().getTempFileCache();
|
||||
String url = tempFileCache.saveAsUrl(tempFile.getFileName().toString(), Files.newInputStream(tempFile), 3 * 60);
|
||||
// 下载压缩包
|
||||
this.getView().download(url);
|
||||
Files.delete(tempFile);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package shkd.sys.sys.plugin.report;
|
||||
package shkd.sys.sys.plugin.report.util;
|
||||
|
||||
import kd.bos.entity.report.FastFilter;
|
||||
import kd.bos.entity.report.FilterItemInfo;
|
Loading…
Reference in New Issue