diff --git a/main/java/shkd/repc/recon/formplugin/ContractMaterialTemplatePlugin.java b/main/java/shkd/repc/recon/formplugin/ContractMaterialTemplatePlugin.java index 9418050..9944246 100644 --- a/main/java/shkd/repc/recon/formplugin/ContractMaterialTemplatePlugin.java +++ b/main/java/shkd/repc/recon/formplugin/ContractMaterialTemplatePlugin.java @@ -1,34 +1,43 @@ package shkd.repc.recon.formplugin; +import com.alibaba.fastjson.JSON; import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.resource.ResManager; 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.FileService; 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.dto.ImportPermissionParam; import kd.bos.form.events.AfterDoOperationEventArgs; 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.QFilter; +import kd.bos.service.metadata.export.ExportWriterFormat; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.url.UrlService; import kd.sdk.plugin.Plugin; -import org.apache.poi.ss.usermodel.FillPatternType; -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.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import java.awt.*; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.io.OutputStream; +import java.awt.Color; +import java.io.*; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.EventObject; +import java.util.*; import java.util.List; /** @@ -55,109 +64,175 @@ public class ContractMaterialTemplatePlugin extends AbstractFormPlugin implement this.getView().showMessage("请先维护引入模板"); return; } - //表头字段 - List list = new ArrayList<>(); - DynamicObjectCollection entry = template.getDynamicObjectCollection("treeentryentity"); - if (null != entry && entry.size() != 0) { - for (int i = 0; i < entry.size(); i++) { - DynamicObject dynamicObject = entry.get(i); - if (dynamicObject.getBoolean("isimport")) { - list.add(dynamicObject); - } - } - } - if (list.size() == 0) return; - //构建导出前四行数据 +// //表头字段 +// List list = new ArrayList<>(); +// DynamicObjectCollection entry = template.getDynamicObjectCollection("treeentryentity"); +// if (null != entry && entry.size() != 0) { +// for (int i = 0; i < entry.size(); i++) { +// DynamicObject dynamicObject = entry.get(i); +// if (dynamicObject.getBoolean("isimport")) { +// list.add(dynamicObject); +// } +// } +// } +// 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工作簿 - 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); + try { + this.pushBillTemplate(template); + } catch (IOException e) { + throw new RuntimeException(e); } - // 第四行: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文件并返回路径