dobe_comic8/main/java/shkd/repc/recon/formplugin/ContractMaterialTemplatePlu...

189 lines
8.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package shkd.repc.recon.formplugin;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.fileservice.FileItem;
import kd.bos.fileservice.FileService;
import kd.bos.fileservice.FileServiceFactory;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.form.events.AfterDoOperationEventArgs;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
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.xssf.usermodel.*;
import java.awt.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.EventObject;
import java.util.List;
/**
* 二开导入模板
*/
public class ContractMaterialTemplatePlugin extends AbstractFormPlugin implements Plugin {
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
//工具栏控件
this.addItemClickListeners("qeug_advcontoolbarap21");
}
@Override
public void afterDoOperation(AfterDoOperationEventArgs evt) {
String operateKey = evt.getOperateKey();
if (StringUtils.equals("exporttemplate",operateKey)){
//根据导入模板配置导出数据
QFilter number = new QFilter("number", QCP.equals, "recon_contractbill_IMPT_ENTRY");
DynamicObject template = BusinessDataServiceHelper.loadSingle("bos_importentry_template", number.toArray());
if (null == template) {
this.getView().showMessage("请先维护引入模板");
return;
}
//表头字段
List<DynamicObject> 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文件并返回路径
*/
private String uploadExcel(XSSFWorkbook workbook) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
String fileName = "导入模板_" + sdf.format(new Date()) + ".xlsx";
String pathName = "/offices/" + fileName;
try {
OutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
InputStream inputStream = parse(outputStream);
FileService fs = FileServiceFactory.getAttachmentFileService();
return fs.upload(new FileItem(fileName, pathName, inputStream));
} catch (Exception e) {
//logger.error("上传Excel失败", e);
throw new RuntimeException("上传Excel失败", e);
}
}
/**
* 解析输出流为输入流
*/
public ByteArrayInputStream parse(final OutputStream out) throws Exception {
ByteArrayOutputStream outputStream = (ByteArrayOutputStream) out;
return new ByteArrayInputStream(outputStream.toByteArray());
}
}