导入模板下载修复文本格式
This commit is contained in:
parent
3863e66e11
commit
a14577ebd4
|
@ -1,34 +1,43 @@
|
||||||
package shkd.repc.recon.formplugin;
|
package shkd.repc.recon.formplugin;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import kd.bos.context.RequestContext;
|
import kd.bos.context.RequestContext;
|
||||||
import kd.bos.dataentity.entity.DynamicObject;
|
import kd.bos.dataentity.entity.DynamicObject;
|
||||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||||
|
import kd.bos.dataentity.resource.ResManager;
|
||||||
import kd.bos.dataentity.utils.StringUtils;
|
import kd.bos.dataentity.utils.StringUtils;
|
||||||
|
import kd.bos.entity.EntityMetadataCache;
|
||||||
|
import kd.bos.entity.MainEntityType;
|
||||||
|
import kd.bos.entity.operate.result.OperationResult;
|
||||||
|
import kd.bos.exception.KDBizException;
|
||||||
import kd.bos.fileservice.FileItem;
|
import kd.bos.fileservice.FileItem;
|
||||||
import kd.bos.fileservice.FileService;
|
import kd.bos.fileservice.FileService;
|
||||||
import kd.bos.fileservice.FileServiceFactory;
|
import kd.bos.fileservice.FileServiceFactory;
|
||||||
|
import kd.bos.form.FormShowParameter;
|
||||||
|
import kd.bos.form.ShowType;
|
||||||
|
import kd.bos.form.control.Control;
|
||||||
import kd.bos.form.control.events.ItemClickEvent;
|
import kd.bos.form.control.events.ItemClickEvent;
|
||||||
|
import kd.bos.form.dto.ImportPermissionParam;
|
||||||
import kd.bos.form.events.AfterDoOperationEventArgs;
|
import kd.bos.form.events.AfterDoOperationEventArgs;
|
||||||
import kd.bos.form.plugin.AbstractFormPlugin;
|
import kd.bos.form.plugin.AbstractFormPlugin;
|
||||||
|
import kd.bos.form.plugin.importentry.ImportEntryModelExporter;
|
||||||
|
import kd.bos.form.plugin.importentry.ImportEntryWriterBuilder;
|
||||||
|
import kd.bos.form.util.ImportOperationLog;
|
||||||
|
import kd.bos.list.BillList;
|
||||||
import kd.bos.orm.query.QCP;
|
import kd.bos.orm.query.QCP;
|
||||||
import kd.bos.orm.query.QFilter;
|
import kd.bos.orm.query.QFilter;
|
||||||
|
import kd.bos.service.metadata.export.ExportWriterFormat;
|
||||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||||
|
import kd.bos.url.UrlService;
|
||||||
import kd.sdk.plugin.Plugin;
|
import kd.sdk.plugin.Plugin;
|
||||||
import org.apache.poi.ss.usermodel.FillPatternType;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
|
||||||
import org.apache.poi.ss.usermodel.IndexedColors;
|
|
||||||
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
|
||||||
import org.apache.poi.xssf.usermodel.*;
|
import org.apache.poi.xssf.usermodel.*;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.awt.Color;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.*;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.EventObject;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -55,109 +64,175 @@ public class ContractMaterialTemplatePlugin extends AbstractFormPlugin implement
|
||||||
this.getView().showMessage("请先维护引入模板");
|
this.getView().showMessage("请先维护引入模板");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//表头字段
|
// //表头字段
|
||||||
List<DynamicObject> list = new ArrayList<>();
|
// List<DynamicObject> list = new ArrayList<>();
|
||||||
DynamicObjectCollection entry = template.getDynamicObjectCollection("treeentryentity");
|
// DynamicObjectCollection entry = template.getDynamicObjectCollection("treeentryentity");
|
||||||
if (null != entry && entry.size() != 0) {
|
// if (null != entry && entry.size() != 0) {
|
||||||
for (int i = 0; i < entry.size(); i++) {
|
// for (int i = 0; i < entry.size(); i++) {
|
||||||
DynamicObject dynamicObject = entry.get(i);
|
// DynamicObject dynamicObject = entry.get(i);
|
||||||
if (dynamicObject.getBoolean("isimport")) {
|
// if (dynamicObject.getBoolean("isimport")) {
|
||||||
list.add(dynamicObject);
|
// list.add(dynamicObject);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if (list.size() == 0) return;
|
// if (list.size() == 0) return;
|
||||||
//构建导出前四行数据
|
// //构建导出前四行数据
|
||||||
|
//
|
||||||
|
// // 创建Excel工作簿
|
||||||
|
// XSSFWorkbook workbook = new XSSFWorkbook();
|
||||||
|
// XSSFSheet sheet = workbook.createSheet("明细 # qeug_orderformentry");
|
||||||
|
//
|
||||||
|
// // 第一行:明细标题
|
||||||
|
// XSSFRow row1 = sheet.createRow(0);
|
||||||
|
// XSSFCell cell1 = row1.createCell(0);
|
||||||
|
// cell1.setCellValue("明细 # qeug_orderformentry");
|
||||||
|
// XSSFCellStyle style1 = workbook.createCellStyle();
|
||||||
|
// XSSFFont font1 = workbook.createFont();
|
||||||
|
// font1.setFontName("宋体");
|
||||||
|
// font1.setFontHeightInPoints((short) 11);
|
||||||
|
// style1.setFont(font1);
|
||||||
|
// style1.setAlignment(HorizontalAlignment.CENTER);
|
||||||
|
// style1.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||||
|
// sheet.setColumnWidth(0, 31 * 256); // 设置列宽
|
||||||
|
// row1.setHeightInPoints(14.4f);
|
||||||
|
// cell1.setCellStyle(style1);
|
||||||
|
//
|
||||||
|
// // 第二行:说明文本
|
||||||
|
// XSSFRow row2 = sheet.createRow(1);
|
||||||
|
// XSSFCell cell2 = row2.createCell(0);
|
||||||
|
// cell2.setCellValue("1、请将鼠标移到灰色标题行查看字段录入要求。2、红色带星号(*)的字段为必录字段。");
|
||||||
|
// XSSFCellStyle style2 = workbook.createCellStyle();
|
||||||
|
// XSSFFont font2 = workbook.createFont();
|
||||||
|
// font2.setFontName("Calibri");
|
||||||
|
// font2.setFontHeightInPoints((short) 11);
|
||||||
|
// style2.setFont(font2);
|
||||||
|
// style2.setAlignment(HorizontalAlignment.LEFT);
|
||||||
|
// style2.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||||
|
// style2.setWrapText(true); // 自动换行
|
||||||
|
// row2.setHeightInPoints(60);
|
||||||
|
// sheet.setColumnWidth(0, 31 * 256); // 设置列宽
|
||||||
|
// cell2.setCellStyle(style2);
|
||||||
|
//
|
||||||
|
// // 第三行:list中的entitynumber
|
||||||
|
// XSSFRow row3 = sheet.createRow(2);
|
||||||
|
// for (int i = 0; i < list.size(); i++) {
|
||||||
|
// DynamicObject dynamicObject = list.get(i);
|
||||||
|
// String entityNumber = null;
|
||||||
|
// String importProp = dynamicObject.getString("importprop");
|
||||||
|
// if (!("").equals(importProp)) {
|
||||||
|
// entityNumber = dynamicObject.getString("entitynumber") + "." + dynamicObject.getString("importprop");
|
||||||
|
// } else {
|
||||||
|
// entityNumber = dynamicObject.getString("entitynumber");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// XSSFCell cell = row3.createCell(i);
|
||||||
|
// cell.setCellValue(entityNumber);
|
||||||
|
// XSSFCellStyle style3 = workbook.createCellStyle();
|
||||||
|
// XSSFFont font3 = workbook.createFont();
|
||||||
|
// font3.setFontName("宋体");
|
||||||
|
// font3.setFontHeightInPoints((short) 11);
|
||||||
|
// style3.setFont(font3);
|
||||||
|
// style3.setAlignment(HorizontalAlignment.CENTER);
|
||||||
|
// style3.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||||
|
// sheet.setColumnWidth(i, 31 * 256); // 设置列宽
|
||||||
|
// row3.setHeightInPoints(14.4f);
|
||||||
|
// cell.setCellStyle(style3);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 第四行:list中的entityname
|
||||||
|
// XSSFRow row4 = sheet.createRow(3);
|
||||||
|
// for (int i = 0; i < list.size(); i++) {
|
||||||
|
// DynamicObject dynamicObject = list.get(i);
|
||||||
|
// String entityName = dynamicObject.getString("entitydescription");
|
||||||
|
// XSSFCell cell = row4.createCell(i);
|
||||||
|
// cell.setCellValue(entityName);
|
||||||
|
// XSSFCellStyle style4 = workbook.createCellStyle();
|
||||||
|
// XSSFFont font4 = workbook.createFont();
|
||||||
|
// font4.setFontName("Calibri");
|
||||||
|
// font4.setFontHeightInPoints((short) 11);
|
||||||
|
// font4.setColor(IndexedColors.RED.getIndex());
|
||||||
|
// style4.setFont(font4);
|
||||||
|
// style4.setAlignment(HorizontalAlignment.CENTER);
|
||||||
|
// style4.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||||
|
// style4.setFillForegroundColor(new XSSFColor(new Color(192, 192, 192), new DefaultIndexedColorMap())); // 灰色背景
|
||||||
|
// style4.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||||
|
// sheet.setColumnWidth(i, 31 * 256); // 设置列宽
|
||||||
|
// row4.setHeightInPoints(14.4f);
|
||||||
|
// cell.setCellStyle(style4);
|
||||||
|
// }
|
||||||
|
// // 上传Excel文件并获取下载路径
|
||||||
|
// String uploadedFilePath = uploadExcel(workbook);
|
||||||
|
// String downloadUrl = RequestContext.get().getClientFullContextPath() + "/attachment/download.do?path=" + uploadedFilePath;
|
||||||
|
// this.getView().openUrl(downloadUrl);
|
||||||
|
|
||||||
// 创建Excel工作簿
|
try {
|
||||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
this.pushBillTemplate(template);
|
||||||
XSSFSheet sheet = workbook.createSheet("明细 # qeug_orderformentry");
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
// 第一行:明细标题
|
|
||||||
XSSFRow row1 = sheet.createRow(0);
|
|
||||||
XSSFCell cell1 = row1.createCell(0);
|
|
||||||
cell1.setCellValue("明细 # qeug_orderformentry");
|
|
||||||
XSSFCellStyle style1 = workbook.createCellStyle();
|
|
||||||
XSSFFont font1 = workbook.createFont();
|
|
||||||
font1.setFontName("宋体");
|
|
||||||
font1.setFontHeightInPoints((short) 11);
|
|
||||||
style1.setFont(font1);
|
|
||||||
style1.setAlignment(HorizontalAlignment.CENTER);
|
|
||||||
style1.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
||||||
sheet.setColumnWidth(0, 31 * 256); // 设置列宽
|
|
||||||
row1.setHeightInPoints(14.4f);
|
|
||||||
cell1.setCellStyle(style1);
|
|
||||||
|
|
||||||
// 第二行:说明文本
|
|
||||||
XSSFRow row2 = sheet.createRow(1);
|
|
||||||
XSSFCell cell2 = row2.createCell(0);
|
|
||||||
cell2.setCellValue("1、请将鼠标移到灰色标题行查看字段录入要求。2、红色带星号(*)的字段为必录字段。");
|
|
||||||
XSSFCellStyle style2 = workbook.createCellStyle();
|
|
||||||
XSSFFont font2 = workbook.createFont();
|
|
||||||
font2.setFontName("Calibri");
|
|
||||||
font2.setFontHeightInPoints((short) 11);
|
|
||||||
style2.setFont(font2);
|
|
||||||
style2.setAlignment(HorizontalAlignment.LEFT);
|
|
||||||
style2.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
||||||
style2.setWrapText(true); // 自动换行
|
|
||||||
row2.setHeightInPoints(60);
|
|
||||||
sheet.setColumnWidth(0, 31 * 256); // 设置列宽
|
|
||||||
cell2.setCellStyle(style2);
|
|
||||||
|
|
||||||
// 第三行:list中的entitynumber
|
|
||||||
XSSFRow row3 = sheet.createRow(2);
|
|
||||||
for (int i = 0; i < list.size(); i++) {
|
|
||||||
DynamicObject dynamicObject = list.get(i);
|
|
||||||
String entityNumber = null;
|
|
||||||
String importProp = dynamicObject.getString("importprop");
|
|
||||||
if (!("").equals(importProp)) {
|
|
||||||
entityNumber = dynamicObject.getString("entitynumber") + "." + dynamicObject.getString("importprop");
|
|
||||||
} else {
|
|
||||||
entityNumber = dynamicObject.getString("entitynumber");
|
|
||||||
}
|
|
||||||
|
|
||||||
XSSFCell cell = row3.createCell(i);
|
|
||||||
cell.setCellValue(entityNumber);
|
|
||||||
XSSFCellStyle style3 = workbook.createCellStyle();
|
|
||||||
XSSFFont font3 = workbook.createFont();
|
|
||||||
font3.setFontName("宋体");
|
|
||||||
font3.setFontHeightInPoints((short) 11);
|
|
||||||
style3.setFont(font3);
|
|
||||||
style3.setAlignment(HorizontalAlignment.CENTER);
|
|
||||||
style3.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
||||||
sheet.setColumnWidth(i, 31 * 256); // 设置列宽
|
|
||||||
row3.setHeightInPoints(14.4f);
|
|
||||||
cell.setCellStyle(style3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 第四行:list中的entityname
|
|
||||||
XSSFRow row4 = sheet.createRow(3);
|
|
||||||
for (int i = 0; i < list.size(); i++) {
|
|
||||||
DynamicObject dynamicObject = list.get(i);
|
|
||||||
String entityName = dynamicObject.getString("entitydescription");
|
|
||||||
XSSFCell cell = row4.createCell(i);
|
|
||||||
cell.setCellValue(entityName);
|
|
||||||
XSSFCellStyle style4 = workbook.createCellStyle();
|
|
||||||
XSSFFont font4 = workbook.createFont();
|
|
||||||
font4.setFontName("Calibri");
|
|
||||||
font4.setFontHeightInPoints((short) 11);
|
|
||||||
font4.setColor(IndexedColors.RED.getIndex());
|
|
||||||
style4.setFont(font4);
|
|
||||||
style4.setAlignment(HorizontalAlignment.CENTER);
|
|
||||||
style4.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
||||||
style4.setFillForegroundColor(new XSSFColor(new Color(192, 192, 192), new DefaultIndexedColorMap())); // 灰色背景
|
|
||||||
style4.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
|
||||||
sheet.setColumnWidth(i, 31 * 256); // 设置列宽
|
|
||||||
row4.setHeightInPoints(14.4f);
|
|
||||||
cell.setCellStyle(style4);
|
|
||||||
}
|
|
||||||
// 上传Excel文件并获取下载路径
|
|
||||||
String uploadedFilePath = uploadExcel(workbook);
|
|
||||||
String downloadUrl = RequestContext.get().getClientFullContextPath() + "/attachment/download.do?path=" + uploadedFilePath;
|
|
||||||
this.getView().openUrl(downloadUrl);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void pushBillTemplate(DynamicObject templateObj) throws IOException {
|
||||||
|
String billFormId = "recon_contractbill";
|
||||||
|
Object pkValue = templateObj.getPkValue();
|
||||||
|
Object[] templates = new Object[]{pkValue};
|
||||||
|
if (templates != null && templates.length != 0) {
|
||||||
|
int maxTemplate = this.getMaxDownloadTemplateCountProperty();
|
||||||
|
if (templates.length > maxTemplate) {
|
||||||
|
this.getView().showMessage(String.format(ResManager.loadKDString("只允许同时下载%s个模板。", "DownloadTemplatePlugin_5", "bos-import", new Object[0]), maxTemplate));
|
||||||
|
} else {
|
||||||
|
MainEntityType mainEntityType = EntityMetadataCache.getDataEntityType(billFormId);
|
||||||
|
Object[] var6 = templates;
|
||||||
|
int var7 = templates.length;
|
||||||
|
|
||||||
|
for(int var8 = 0; var8 < var7; ++var8) {
|
||||||
|
Object template = var6[var8];
|
||||||
|
String fileName = this.createFileName(mainEntityType, (Long)template);
|
||||||
|
ExportWriterFormat format = (new ImportEntryWriterBuilder()).build(billFormId, (Long)template);
|
||||||
|
ImportEntryModelExporter dataExporter = new ImportEntryModelExporter(format);
|
||||||
|
|
||||||
|
try {
|
||||||
|
dataExporter.init((String)null);
|
||||||
|
dataExporter.write();
|
||||||
|
String url = dataExporter.flush(this.getModel().getDataEntityType(), fileName);
|
||||||
|
url = UrlService.getAttachmentFullUrl(url);
|
||||||
|
this.getView().download(url);
|
||||||
|
this.getView().sendFormAction(this.getView());
|
||||||
|
} finally {
|
||||||
|
dataExporter.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ImportOperationLog.getInstance().createAppLog(billFormId, ResManager.loadKDString("下载", "DownLoadEntryTemplatePlugin_0", "bos-import", new Object[0]), ResManager.loadKDString("单据体引入模板下载成功", "DownLoadEntryTemplatePlugin_1", "bos-import", new Object[0]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String createFileName(MainEntityType mainEntityType, Long templateId) {
|
||||||
|
DynamicObject templateData = BusinessDataServiceHelper.loadSingle(templateId, "bos_importentry_template");
|
||||||
|
String fileName = mainEntityType.getDisplayName().getLocaleValue() + "_";
|
||||||
|
if (templateData != null) {
|
||||||
|
fileName = fileName + templateData.get("name");
|
||||||
|
} else {
|
||||||
|
fileName = fileName + ResManager.loadKDString("无模板名称", "ImportTemplatePlugin_24", "bos-import", new Object[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getMaxDownloadTemplateCountProperty() {
|
||||||
|
try {
|
||||||
|
return Integer.parseInt(System.getProperty("max.download.template.count", "20"));
|
||||||
|
} catch (NumberFormatException var2) {
|
||||||
|
//log.warn(var2);
|
||||||
|
return 20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上传Excel文件并返回路径
|
* 上传Excel文件并返回路径
|
||||||
|
|
Loading…
Reference in New Issue