From 3d1a30405eb6b31dcf294179b1459c320808bfd6 Mon Sep 17 00:00:00 2001 From: "LAPTOP-SB56SG4Q\\86185" Date: Tue, 28 Dec 2021 10:52:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=BC=80=E6=BA=90=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=9D=90=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JSD-8914需求确认书.docx | Bin 0 -> 59668 bytes README.md | 5 +- plugin.xml | 22 ++++ .../fr/plugin/xxxx/yyjm/fold/Constants.java | 10 ++ .../plugin/xxxx/yyjm/fold/ExportHandler.java | 79 ++++++++++++ .../yyjm/fold/FoldRequestHandlerBridge.java | 32 +++++ .../yyjm/fold/FoldRequestURLAliasBridge.java | 19 +++ .../yyjm/fold/MyPageToSheetExcelExporter.java | 42 +++++++ .../yyjm/fold/MyStreamExcel2007Exporter.java | 36 ++++++ .../fr/plugin/xxxx/yyjm/fold/NameUtil.java | 42 +++++++ .../fold/RenameSheetExcelExportProvider.java | 52 ++++++++ .../xxxx/yyjm/fold/utils/PrintUtils.java | 113 ++++++++++++++++++ 12 files changed, 451 insertions(+), 1 deletion(-) create mode 100644 JSD-8914需求确认书.docx create mode 100644 plugin.xml create mode 100644 src/main/java/com/fr/plugin/xxxx/yyjm/fold/Constants.java create mode 100644 src/main/java/com/fr/plugin/xxxx/yyjm/fold/ExportHandler.java create mode 100644 src/main/java/com/fr/plugin/xxxx/yyjm/fold/FoldRequestHandlerBridge.java create mode 100644 src/main/java/com/fr/plugin/xxxx/yyjm/fold/FoldRequestURLAliasBridge.java create mode 100644 src/main/java/com/fr/plugin/xxxx/yyjm/fold/MyPageToSheetExcelExporter.java create mode 100644 src/main/java/com/fr/plugin/xxxx/yyjm/fold/MyStreamExcel2007Exporter.java create mode 100644 src/main/java/com/fr/plugin/xxxx/yyjm/fold/NameUtil.java create mode 100644 src/main/java/com/fr/plugin/xxxx/yyjm/fold/RenameSheetExcelExportProvider.java create mode 100644 src/main/java/com/fr/plugin/xxxx/yyjm/fold/utils/PrintUtils.java diff --git a/JSD-8914需求确认书.docx b/JSD-8914需求确认书.docx new file mode 100644 index 0000000000000000000000000000000000000000..0f4cdb55024faecdde3b65a40bd0f37675680224 GIT binary patch literal 59668 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 + com.fr.plugin.xxxx.yyjm.fold + com.fr.plugin.xxxx.yyjm.fold + + yes + 1.0 + 10.0 + 2018-07-31 + fr.open + + + ]]> + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/fr/plugin/xxxx/yyjm/fold/Constants.java b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/Constants.java new file mode 100644 index 0000000..dde71d3 --- /dev/null +++ b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/Constants.java @@ -0,0 +1,10 @@ +package com.fr.plugin.xxxx.yyjm.fold; + +/** + * @Author fr.open + * @Date 2021/11/16 + * @Description + **/ +public class Constants { + public static final String PLUGIN_ID = "com.fr.plugin.xxxx.yyjm.fold"; +} diff --git a/src/main/java/com/fr/plugin/xxxx/yyjm/fold/ExportHandler.java b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/ExportHandler.java new file mode 100644 index 0000000..40bfed3 --- /dev/null +++ b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/ExportHandler.java @@ -0,0 +1,79 @@ +package com.fr.plugin.xxxx.yyjm.fold; + +import com.fr.decision.fun.impl.BaseHttpHandler; +import com.fr.decision.webservice.Response; +import com.fr.io.TemplateWorkBookIO; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.main.TemplateWorkBook; +import com.fr.plugin.xxxx.yyjm.fold.utils.PrintUtils; +import com.fr.report.core.ReportUtils; +import com.fr.stable.PageActor; +import com.fr.stable.StringUtils; +import com.fr.third.org.apache.commons.io.FilenameUtils; +import com.fr.third.springframework.web.bind.annotation.RequestMethod; +import com.fr.web.utils.WebUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author f.open + * @Date 2021/11/16 + * @Description + **/ +public class ExportHandler extends BaseHttpHandler { + @Override + public RequestMethod getMethod() { + return RequestMethod.GET; + } + + @Override + public String getPath() { + return "/export"; + } + + @Override + public boolean isPublic() { + return true; + } + + @Override + public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { + String cptName = req.getParameter("cptName"); + String sheetName = req.getParameter("sheet_name"); + String nameFormat = req.getParameter("name_format"); + FineLoggerFactory.getLogger().info("cptName is {}", cptName); + FineLoggerFactory.getLogger().info("sheetName is {}", sheetName); + FineLoggerFactory.getLogger().info("nameFormat is {}", nameFormat); + if(StringUtils.isBlank(cptName)){ + setError(res,"cptName is not null"); + } + //ByteArrayOutputStream os = new ByteArrayOutputStream(); + PrintUtils.setExcel2007Content(res, FilenameUtils.getBaseName(cptName)); + Map params = getParams(req); + TemplateWorkBook wb = TemplateWorkBookIO.readTemplateWorkBook(cptName); + MyPageToSheetExcelExporter exporter = new MyPageToSheetExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(wb),params); + exporter.export(res.getOutputStream(), wb.execute(params, new PageActor())); + } + + private Map getParams(HttpServletRequest request) { + Map params = new HashMap<>(); + Enumeration names = request.getParameterNames(); + while (names.hasMoreElements()) { + String name = names.nextElement(); + if ("cptName".equals(name) || "sheet_name".equals(name) || "name_format".equals(name)) { + continue; + } + params.put(name, request.getParameter(name)); + } + return params; + } + + private void setError(HttpServletResponse res, String mess) throws Exception { + WebUtils.printAsJSON(res, JSONObject.mapFrom(Response.error(mess,mess))); + } +} diff --git a/src/main/java/com/fr/plugin/xxxx/yyjm/fold/FoldRequestHandlerBridge.java b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/FoldRequestHandlerBridge.java new file mode 100644 index 0000000..8665e1e --- /dev/null +++ b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/FoldRequestHandlerBridge.java @@ -0,0 +1,32 @@ +package com.fr.plugin.xxxx.yyjm.fold; + +import com.fr.decision.fun.HttpHandler; +import com.fr.decision.fun.impl.AbstractHttpHandlerProvider; +import com.fr.intelli.record.Focus; +import com.fr.intelli.record.Original; +import com.fr.plugin.context.PluginContexts; +import com.fr.record.analyzer.EnableMetrics; +import com.fr.stable.fun.Authorize; + +/** + * @Author fr.open + * @Date 2021/11/16 + * @Description + **/ +@Authorize(callSignKey = Constants.PLUGIN_ID) +@EnableMetrics +public class FoldRequestHandlerBridge extends AbstractHttpHandlerProvider { + + @Override + @Focus(id = Constants.PLUGIN_ID, text = "sheet重命名", source = Original.PLUGIN) + public HttpHandler[] registerHandlers() { + if (PluginContexts.currentContext().isAvailable()) { + return new HttpHandler[]{ + new ExportHandler(), + }; + } + return new HttpHandler[]{ + + }; + } +} diff --git a/src/main/java/com/fr/plugin/xxxx/yyjm/fold/FoldRequestURLAliasBridge.java b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/FoldRequestURLAliasBridge.java new file mode 100644 index 0000000..9db0700 --- /dev/null +++ b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/FoldRequestURLAliasBridge.java @@ -0,0 +1,19 @@ +package com.fr.plugin.xxxx.yyjm.fold; + +import com.fr.decision.fun.impl.AbstractURLAliasProvider; +import com.fr.decision.webservice.url.alias.URLAlias; +import com.fr.decision.webservice.url.alias.URLAliasFactory; + +/** + * @Author fr.open + * @Date 2021/11/16 + * @Description + **/ +public class FoldRequestURLAliasBridge extends AbstractURLAliasProvider { + @Override + public URLAlias[] registerAlias() { + return new URLAlias[]{ + URLAliasFactory.createPluginAlias("/export", "/export", true), + }; + } +} diff --git a/src/main/java/com/fr/plugin/xxxx/yyjm/fold/MyPageToSheetExcelExporter.java b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/MyPageToSheetExcelExporter.java new file mode 100644 index 0000000..332663f --- /dev/null +++ b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/MyPageToSheetExcelExporter.java @@ -0,0 +1,42 @@ +package com.fr.plugin.xxxx.yyjm.fold; + +import com.fr.io.attr.ReportExportAttr; +import com.fr.io.exporter.PageToSheetExcelExporter; +import com.fr.io.exporter.poi.wrapper.POIWorkbookAction; +import com.fr.main.workbook.ResultWorkBook; +import com.fr.page.PaperSettingProvider; +import com.fr.report.report.Report; +import com.fr.report.report.ResultECReport; +import com.fr.third.org.apache.poi.hssf.usermodel.HSSFWorkbook; + +import java.util.List; +import java.util.Map; + +/** + * @Author fr.open + * @Date 2021/11/16 + * @Description + **/ +public class MyPageToSheetExcelExporter extends PageToSheetExcelExporter { + private Map parm; + public MyPageToSheetExcelExporter(List list, Map parm) { + super(list); + this.parm = parm; + } + + @Override + protected MyStreamExcel2007Exporter getExporterFor2007(List list) throws ClassNotFoundException { + return new MyStreamExcel2007Exporter(list,this.parm); + } + + + @Override + protected void innerExportReports(ResultECReport resultECReport, ResultWorkBook resultWorkBook, POIWorkbookAction poiWorkbookAction, List list, List list1, List list2, int i) { + super.innerExportReports(resultECReport, resultWorkBook, poiWorkbookAction, list, list1, list2, i); + } + + @Override + protected void innerExportReport(Report report, ReportExportAttr reportExportAttr, String s, HSSFWorkbook hssfWorkbook, List list, List list1, int i) throws Exception { + super.innerExportReport(report, reportExportAttr, NameUtil.getName(s,report,i, parm), hssfWorkbook, list, list1, i); + } +} diff --git a/src/main/java/com/fr/plugin/xxxx/yyjm/fold/MyStreamExcel2007Exporter.java b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/MyStreamExcel2007Exporter.java new file mode 100644 index 0000000..4509dd8 --- /dev/null +++ b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/MyStreamExcel2007Exporter.java @@ -0,0 +1,36 @@ +package com.fr.plugin.holger.yyjm.fold; + +import com.fr.io.attr.ReportExportAttr; +import com.fr.io.exporter.PageToSheetExcel2007Exporter; +import com.fr.io.exporter.poi.wrapper.POIWorkbookAction; +import com.fr.main.workbook.ResultWorkBook; +import com.fr.report.report.Report; +import com.fr.report.report.ResultECReport; +import com.fr.third.v2.org.apache.poi.xssf.streaming.SXSSFWorkbook; + +import java.util.List; +import java.util.Map; + +/** + * @Author hujian + * @Date 2021/11/16 + * @Description + **/ +public class MyStreamExcel2007Exporter extends PageToSheetExcel2007Exporter { + private Map parm; + public MyStreamExcel2007Exporter(List list, Map parm) { + super(list); + this.parm = parm; + } + + @Override + protected void innerExportReports(ResultECReport resultECReport, ResultWorkBook resultWorkBook, POIWorkbookAction poiWorkbookAction, List list, List list1, List list2, int i) { + super.innerExportReports(resultECReport, resultWorkBook, poiWorkbookAction, list, list1, list2, i); + } + + @Override + protected void innerExportReport(Report report, ReportExportAttr reportExportAttr, String s, SXSSFWorkbook sxssfWorkbook, List list, List list1, int i) throws Exception { + super.innerExportReport(report, reportExportAttr, NameUtil.getName(s,report,i,parm), sxssfWorkbook, list, list1, i); + } + +} diff --git a/src/main/java/com/fr/plugin/xxxx/yyjm/fold/NameUtil.java b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/NameUtil.java new file mode 100644 index 0000000..a7fc82c --- /dev/null +++ b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/NameUtil.java @@ -0,0 +1,42 @@ +package com.fr.plugin.xxxx.yyjm.fold; + +import com.fr.general.FArray; +import com.fr.io.core.PageToSheetExcelExporterReport; +import com.fr.report.report.Report; +import com.fr.stable.StringUtils; + +import java.util.Map; + +/** + * @Author fr.open + * @Date 2021/11/16 + * @Description + **/ +public class NameUtil { + public static String getName(FArray names , String format, int currentPage){ + String res = "Page"+currentPage; + if(names == null || names.length() == 0){ + return res; + } + if(StringUtils.isBlank(format)){ + return names.elementAt(currentPage - 1).toString(); + } + res = format; + res = res.replaceAll("TotalPageNumber",String.valueOf(names.length())); + res = res.replaceAll("PageIndex",String.valueOf(currentPage - 1)); + res = res.replaceAll("SheetName",names.elementAt(currentPage - 1).toString()); + return res; + } + public static String getName(String defaultName, Report report, int i, Map map) { + if(report instanceof PageToSheetExcelExporterReport){ + }else{ + return defaultName; + } + String sheetNames = (String) map.get("SHEET_NAME".toUpperCase()); + String nameFormat = (String) map.get("NAME_FORMAT".toUpperCase()); + if(StringUtils.isBlank(sheetNames) || StringUtils.isBlank(nameFormat)){ + return defaultName; + } + return getName(new FArray(sheetNames.split(",")),nameFormat,Integer.valueOf(defaultName.replace("Page",""))); + } +} diff --git a/src/main/java/com/fr/plugin/xxxx/yyjm/fold/RenameSheetExcelExportProvider.java b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/RenameSheetExcelExportProvider.java new file mode 100644 index 0000000..32949dc --- /dev/null +++ b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/RenameSheetExcelExportProvider.java @@ -0,0 +1,52 @@ +package com.fr.plugin.xxxx.yyjm.fold; + +import com.fr.general.DeclareRecordType; +import com.fr.intelli.record.Focus; +import com.fr.intelli.record.Original; +import com.fr.io.collection.ExportCollection; +import com.fr.io.exporter.AppExporter; +import com.fr.io.exporter.ExcelExportType; +import com.fr.io.exporter.PageToSheetExcelExporter; +import com.fr.plugin.context.PluginContexts; +import com.fr.plugin.transform.FunctionRecorder; +import com.fr.record.analyzer.EnableMetrics; +import com.fr.report.core.ReportUtils; +import com.fr.report.fun.impl.AbstractExcelExportAppProvider; +import com.fr.stable.fun.Authorize; +import com.fr.web.core.ReportSessionIDInfor; + +import java.util.Map; + +/** + * @Author fr.open + * @Date 2021/11/16 + * @Description + **/ +@FunctionRecorder +@Authorize(callSignKey = Constants.PLUGIN_ID) +@EnableMetrics +public class RenameSheetExcelExportProvider extends AbstractExcelExportAppProvider { + + @Override + public String exportType() { + return "sheet"; + } + + @Override + @Focus(id = Constants.PLUGIN_ID, text = "sheet重命名", source = Original.PLUGIN) + public AppExporter createAppExporter(ExportCollection exportCollection, ExcelExportType excelExportType, ReportSessionIDInfor reportSessionIDInfor) { + Map param = reportSessionIDInfor.getParameterMap(); + AppExporter exporter; + if (PluginContexts.currentContext().isAvailable()) { + exporter = new MyPageToSheetExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(reportSessionIDInfor.getContextBook()), param); + } else { + exporter = new PageToSheetExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(reportSessionIDInfor.getContextBook())); + } + exportCollection.setExporter(exporter); + exportCollection.setRecordType(DeclareRecordType.EXPORT_TYPE_EXCEL_PAGESHEET); + return exporter; + } + + + +} diff --git a/src/main/java/com/fr/plugin/xxxx/yyjm/fold/utils/PrintUtils.java b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/utils/PrintUtils.java new file mode 100644 index 0000000..ab0ffe2 --- /dev/null +++ b/src/main/java/com/fr/plugin/xxxx/yyjm/fold/utils/PrintUtils.java @@ -0,0 +1,113 @@ +package com.fr.plugin.xxxx.yyjm.fold.utils; + +import com.fr.decision.webservice.bean.user.UserBean; +import com.fr.decision.webservice.v10.login.LoginService; +import com.fr.decision.webservice.v10.login.TokenResource; +import com.fr.decision.webservice.v10.user.UserService; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; +import com.fr.web.core.SessionPoolManager; +import com.fr.web.core.WidgetSessionIDInfor; +import com.fr.web.utils.WebUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @Author fr.open + * @Date 2021/11/16 + * @Description + **/ +public class PrintUtils { + private static final String DSM = ""; + + public static void setPDFContent(HttpServletResponse var0, String var1, boolean var2) { + var0.setContentType("application/pdf"); + var0.setHeader("extension", "pdf"); + if (var2) { + var0.setHeader("Content-disposition", "anyword; filename=" + var1 + ".pdf"+DSM); + } else { + var0.setHeader("Content-disposition", "attachment; filename=" + var1 + ".pdf"+DSM); + } + + } + public static void setImageContext(HttpServletResponse var0, String var1, String var2) { + var0.setContentType("image/" + var2); + var0.setHeader("extension", var2); + var0.setHeader("Content-disposition", "attachment; filename=" + var1 + "." + var2+DSM); + } + + public static void setExcelContent(HttpServletResponse var0, String var1) { + var0.setContentType("application/x-excel"); + var0.setHeader("extension", "xls"); + var0.setHeader("Content-disposition", "attachment; filename=" + var1 + ".xls"+DSM); + } + + public static void setExcel2007Content(HttpServletResponse var0, String var1) { + var0.setContentType("application/x-excel"); + var0.setHeader("extension", "xlsx"); + var0.setHeader("Content-disposition", "attachment; filename=" + var1 + ".xlsx"+DSM); + } + + public static void setWordConetent(HttpServletResponse var0, String var1) { + var0.setContentType("application/msword"); + var0.setHeader("extension", "doc"); + var0.setHeader("Content-disposition", "attachment; filename=" + var1 + ".doc"+DSM); + } + + public static UserBean getUserById(HttpServletRequest req){ + String id = getCurrentUserFromRequest(req); + try { + if(StringUtils.isBlank(id)){ + return null; + } + return UserService.getInstance().getUser(id); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(),e); + } + return null; + } + + /** + * 判断FR是否登录了 + * + * @param req + * @return + */ + private static Boolean isLoginedFR(HttpServletRequest req) { + try { + String token = TokenResource.COOKIE.getToken(req); + LoginService.getInstance().loginStatusValid(token, null); + return true; + } catch (Exception e) { + } + return false; + } + + /** + * 获取当前用户名 + * + * @param req + * @return + */ + private static String getCurrentUserFromRequest(HttpServletRequest req) { + if (!isLoginedFR(req)) { + return StringUtils.EMPTY; + } + try { + return UserService.getInstance().getCurrentUserIdFromCookie(req); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(),e); + } + return StringUtils.EMPTY; + } + + public static String getReportId(HttpServletRequest req) { + String sessionID = WebUtils.getHTTPRequestParameter(req, "sessionID"); + WidgetSessionIDInfor sinfo = SessionPoolManager.getSessionIDInfor(sessionID, WidgetSessionIDInfor.class); + if(StringUtils.isNotBlank(sessionID)){ + return (String) sinfo.getParameterMap4Execute().get("reportId".toUpperCase()); + } + return StringUtils.EMPTY; + } +}