From d7737090ecc2e56ba0c89ef16b8e06a45b27547a Mon Sep 17 00:00:00 2001
From: "Bruce.Deng" <bruce.deng@fanruan.com>
Date: Fri, 2 Jun 2023 15:34:31 +0800
Subject: [PATCH 1/3] =?UTF-8?q?REPORT-94658=20=E3=80=90=E9=99=8D=E6=9C=AC?=
 =?UTF-8?q?=E5=A2=9E=E6=95=88=E3=80=91=E5=90=8E=E5=8F=B0=E5=AF=BC=E5=87=BA?=
 =?UTF-8?q?demo=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/main/java/com/fr/io/ExportApi.java     | 62 ++++++++++++----------
 src/main/java/com/fr/io/ExportApi_frm.java | 59 +++++++++++---------
 2 files changed, 70 insertions(+), 51 deletions(-)

diff --git a/src/main/java/com/fr/io/ExportApi.java b/src/main/java/com/fr/io/ExportApi.java
index 1d43079..353b9a6 100644
--- a/src/main/java/com/fr/io/ExportApi.java
+++ b/src/main/java/com/fr/io/ExportApi.java
@@ -22,8 +22,6 @@ import com.fr.module.tool.ActivatorToolBox;
 import com.fr.report.ReportActivator;
 import com.fr.report.RestrictionActivator;
 import com.fr.report.module.ReportBaseActivator;
-import com.fr.report.write.WriteActivator;
-import com.fr.scheduler.SchedulerActivator;
 import com.fr.stable.WriteActor;
 import com.fr.store.StateServiceActivator;
 import com.fr.workspace.simple.SimpleWork;
@@ -35,29 +33,42 @@ import java.util.Map;
 
 public class ExportApi {
 
-    public static void main(String[] args) {
-
-        /**定义报表运行环境,用于执行报表*/
-        com.fr.module.Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
-                new ConfigurationActivator(),
-                new ResourceRepositoryActivator(),
-                new StandaloneModeActivator(),
-                new ModuleHealActivator(),
-                //2020.4.26jar包之前的版本,替换成StateServerActivator()
-                new StateServiceActivator(),
-                new SchedulerActivator(),
-                new ReportBaseActivator(),
-                new RestrictionActivator(),
-                new ReportActivator(),
-                new WriteActivator(),
-                new ChartBaseActivator());
-        SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
-        //定义工程路径
-        String envpath = "D:\\javatools\\FineReport_10.0\\webapps\\webroot\\WEB-INF\\";
-        SimpleWork.checkIn(envpath);
-        I18nResource.getInstance();
-        module.start();
+    /**
+     * 这段静态代码块仅在main函数测试时使用,
+     * 实际生产环境中一般使用web容器,集成帆软后帆软服务会自动启动,不再需要下面的静态代码,直接写导出的业务逻辑即可。
+     * web集成注意事项:
+     * 1、集成环境需要依赖【当前使用jdk对应版本的】tools.jar,一般从jdk中直接复制即可;
+     * 2、帆软服务自动启动成功后,使用的工作目录自动识别为web应用下的WEB-INF目录,所以需要把下面代码中envpath指向的工作目录拷贝到集成环境下web应用的WEB-INF目录,
+     *    这样才能沿用原先帆软的配置及模板。如果集群环境,会自动使用文件服务器的模板。
+     * 3、可以访问集成环境的地址: ip:port/应用名/decision 。如果能成功访问且不需要初始化配置则代表帆软服务启动成功
+     */
+    static {
+        Module preModule = ModuleContext.getModule(ReportActivator.class);
+        boolean running = preModule != null && preModule.isRunning();
+        if (!running) {
+            /**定义报表运行环境,用于执行报表*/
+            com.fr.module.Module module = ActivatorToolBox.simpleLink(
+                    new BaseDBActivator(),
+                    new ConfigurationActivator(),
+                    new ResourceRepositoryActivator(),
+                    new StandaloneModeActivator(),
+                    new ModuleHealActivator(),
+                    //2020.4.26jar包之前的版本,替换成StateServerActivator()
+                    new StateServiceActivator(),
+                    new ReportBaseActivator(),
+                    new RestrictionActivator(),
+                    new ReportActivator(),
+                    new ChartBaseActivator());
+            SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
+            //定义工程路径
+            String envpath = "D:\\FineReport_11.0\\webapps\\webroot\\WEB-INF\\";
+            SimpleWork.checkIn(envpath);
+            I18nResource.getInstance();
+            module.start();
+        }
+    }
 
+    public static void main(String[] args) {
         /**输出模板*/
         try {
             // 定义输出的模板路径,以reportlets为根目录
@@ -121,11 +132,8 @@ public class ExportApi {
             ImageExport.export(outputStream, workbook.execute(parameterMap, new WriteActor()));
 
             outputStream.close();
-            module.stop();
         } catch (Exception e) {
             e.printStackTrace();
-        } finally {
-            SimpleWork.checkOut();
         }
     }
 
diff --git a/src/main/java/com/fr/io/ExportApi_frm.java b/src/main/java/com/fr/io/ExportApi_frm.java
index 4a037cf..085d751 100644
--- a/src/main/java/com/fr/io/ExportApi_frm.java
+++ b/src/main/java/com/fr/io/ExportApi_frm.java
@@ -18,34 +18,48 @@ import com.fr.module.tool.ActivatorToolBox;
 import com.fr.report.ReportActivator;
 import com.fr.report.RestrictionActivator;
 import com.fr.report.module.ReportBaseActivator;
-import com.fr.report.write.WriteActivator;
-import com.fr.scheduler.SchedulerActivator;
 import com.fr.store.StateServiceActivator;
 import com.fr.workspace.simple.SimpleWork;
 
 import java.io.File;
 import java.io.FileOutputStream;
 
-public class ExportApi_frm { 
+public class ExportApi_frm {
+
+    /**
+     * 这段静态代码块仅在main函数测试时使用,
+     * 实际生产环境中一般使用web容器,集成帆软后帆软服务会自动启动,不再需要下面的静态代码,直接写导出的业务逻辑即可。
+     * web集成注意事项:
+     * 1、集成环境需要依赖【当前使用jdk对应版本的】tools.jar,一般从jdk中直接复制即可;
+     * 2、帆软服务自动启动成功后,使用的工作目录自动识别为web应用下的WEB-INF目录,所以需要把下面代码中envpath指向的工作目录拷贝到集成环境下web应用的WEB-INF目录,
+     *    这样才能沿用原先帆软的配置及模板。如果集群环境,会自动使用文件服务器的模板。
+     * 3、可以访问集成环境的地址: ip:port/应用名/decision 。如果能成功访问且不需要初始化配置则代表帆软服务启动成功
+     */
+    static {
+        Module preModule = ModuleContext.getModule(ReportActivator.class);
+        boolean running = preModule != null && preModule.isRunning();
+        if (!running) {
+            /**定义报表运行环境,用于执行报表*/
+            Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
+                    new ConfigurationActivator(),
+                    new ResourceRepositoryActivator(),
+                    new StandaloneModeActivator(),
+                    new ModuleHealActivator(),
+                    new StateServiceActivator(),
+                    new ReportBaseActivator(),
+                    new RestrictionActivator(),
+                    new ReportActivator(),
+                    new ChartBaseActivator());
+            SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
+            //定义工程路径
+            String envpath = "D:\\FineReport_11.0\\webapps\\webroot\\WEB-INF\\";
+            SimpleWork.checkIn(envpath);
+            I18nResource.getInstance();
+            module.start();
+        }
+    }
+
     public static void main(String[] args) {
-        // 定义报表运行环境,用于执行报表
-        Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
-                new ConfigurationActivator(),
-                new ResourceRepositoryActivator(),
-                new StandaloneModeActivator(),
-                new ModuleHealActivator(),
-                new StateServiceActivator(),
-                new SchedulerActivator(),
-                new ReportBaseActivator(),
-                new RestrictionActivator(),
-                new ReportActivator(),
-                new WriteActivator(),
-                new ChartBaseActivator());
-        SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
-        String envpath = "C:\\Users\\hipsh\\Desktop\\apache-tomcat-8.5.38-10.0\\webapps\\webroot\\WEB-INF\\";//工程路径
-        SimpleWork.checkIn(envpath);
-        I18nResource.getInstance();
-        module.start();
         try {
   
             java.util.Map parameterMap = new java.util.HashMap();
@@ -66,11 +80,8 @@ public class ExportApi_frm {
             ImageExporter ImageExport = new ImageExporter();
             ImageExport.export(outputStream, re);
             outputStream.close();
-            module.stop();
         } catch (Exception e) {
             e.printStackTrace();
-        } finally {
-            SimpleWork.checkOut();
         }
     }
 }
\ No newline at end of file

From 504fd592171439cdcea44343b79c5d85084e956a Mon Sep 17 00:00:00 2001
From: "Bruce.Deng" <bruce.deng@fanruan.com>
Date: Mon, 5 Jun 2023 10:29:18 +0800
Subject: [PATCH 2/3] =?UTF-8?q?REPORT-94658=20=E3=80=90=E9=99=8D=E6=9C=AC?=
 =?UTF-8?q?=E5=A2=9E=E6=95=88=E3=80=91=E5=90=8E=E5=8F=B0=E5=AF=BC=E5=87=BA?=
 =?UTF-8?q?demo=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/main/java/com/fr/io/ExportApi.java | 29 +++++++++++---------------
 1 file changed, 12 insertions(+), 17 deletions(-)

diff --git a/src/main/java/com/fr/io/ExportApi.java b/src/main/java/com/fr/io/ExportApi.java
index 353b9a6..6b40bd7 100644
--- a/src/main/java/com/fr/io/ExportApi.java
+++ b/src/main/java/com/fr/io/ExportApi.java
@@ -18,6 +18,7 @@ import com.fr.io.exporter.TextExporter;
 import com.fr.io.exporter.WordExporter;
 import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter;
 import com.fr.main.impl.WorkBook;
+import com.fr.module.ModuleRole;
 import com.fr.module.tool.ActivatorToolBox;
 import com.fr.report.ReportActivator;
 import com.fr.report.RestrictionActivator;
@@ -30,22 +31,19 @@ import java.io.FileOutputStream;
 import java.util.HashMap;
 import java.util.Map;
 
-
 public class ExportApi {
 
-    /**
-     * 这段静态代码块仅在main函数测试时使用,
-     * 实际生产环境中一般使用web容器,集成帆软后帆软服务会自动启动,不再需要下面的静态代码,直接写导出的业务逻辑即可。
-     * web集成注意事项:
-     * 1、集成环境需要依赖【当前使用jdk对应版本的】tools.jar,一般从jdk中直接复制即可;
-     * 2、帆软服务自动启动成功后,使用的工作目录自动识别为web应用下的WEB-INF目录,所以需要把下面代码中envpath指向的工作目录拷贝到集成环境下web应用的WEB-INF目录,
-     *    这样才能沿用原先帆软的配置及模板。如果集群环境,会自动使用文件服务器的模板。
-     * 3、可以访问集成环境的地址: ip:port/应用名/decision 。如果能成功访问且不需要初始化配置则代表帆软服务启动成功
-     */
-    static {
-        Module preModule = ModuleContext.getModule(ReportActivator.class);
-        boolean running = preModule != null && preModule.isRunning();
-        if (!running) {
+    public static void main(String[] args) {
+        /**
+         * 以下这段if判断仅在main函数测试时使用,
+         * 实际生产环境中一般使用web容器,集成帆软后帆软服务会自动启动,不再需要下面的if判断,直接写导出的业务逻辑即可。
+         * web集成注意事项:
+         * 1、集成环境需要依赖【当前使用jdk对应版本的】tools.jar,一般从jdk中直接复制即可;
+         * 2、帆软服务自动启动成功后,使用的工作目录自动识别为集成应用下的WEB-INF目录,所以需要把下面代码中envpath指向的工作目录拷贝到集成环境下web应用的WEB-INF目录
+         *   (正式发布时需要拷贝生产环境的帆软WEB-INF,如果有的话),这样才能沿用原先帆软的配置及模板。如果是集群环境,会自动使用文件服务器的模板。本地测试时envpath需要指向【单机非集群】的帆软工程
+         * 3、可以访问集成环境的地址: ip:port/应用名/decision 。如果能成功访问且不需要初始化配置则代表帆软服务启动成功
+         */
+        if (!ModuleRole.Root.isPresent()) {
             /**定义报表运行环境,用于执行报表*/
             com.fr.module.Module module = ActivatorToolBox.simpleLink(
                     new BaseDBActivator(),
@@ -66,9 +64,6 @@ public class ExportApi {
             I18nResource.getInstance();
             module.start();
         }
-    }
-
-    public static void main(String[] args) {
         /**输出模板*/
         try {
             // 定义输出的模板路径,以reportlets为根目录

From 0614d33511c9f9a1b5da43639299defbe171a815 Mon Sep 17 00:00:00 2001
From: "Bruce.Deng" <bruce.deng@fanruan.com>
Date: Mon, 5 Jun 2023 10:32:54 +0800
Subject: [PATCH 3/3] =?UTF-8?q?REPORT-94658=20=E3=80=90=E9=99=8D=E6=9C=AC?=
 =?UTF-8?q?=E5=A2=9E=E6=95=88=E3=80=91=E5=90=8E=E5=8F=B0=E5=AF=BC=E5=87=BA?=
 =?UTF-8?q?demo=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/main/java/com/fr/io/ExportApi_frm.java | 33 ++++++++++------------
 1 file changed, 15 insertions(+), 18 deletions(-)

diff --git a/src/main/java/com/fr/io/ExportApi_frm.java b/src/main/java/com/fr/io/ExportApi_frm.java
index 085d751..2061b60 100644
--- a/src/main/java/com/fr/io/ExportApi_frm.java
+++ b/src/main/java/com/fr/io/ExportApi_frm.java
@@ -13,7 +13,7 @@ import com.fr.io.exporter.ImageExporter;
 import com.fr.io.exporter.PDFExporter;
 import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter;
 import com.fr.main.workbook.ResultWorkBook;
-import com.fr.module.Module;
+import com.fr.module.ModuleRole;
 import com.fr.module.tool.ActivatorToolBox;
 import com.fr.report.ReportActivator;
 import com.fr.report.RestrictionActivator;
@@ -26,25 +26,25 @@ import java.io.FileOutputStream;
 
 public class ExportApi_frm {
 
-    /**
-     * 这段静态代码块仅在main函数测试时使用,
-     * 实际生产环境中一般使用web容器,集成帆软后帆软服务会自动启动,不再需要下面的静态代码,直接写导出的业务逻辑即可。
-     * web集成注意事项:
-     * 1、集成环境需要依赖【当前使用jdk对应版本的】tools.jar,一般从jdk中直接复制即可;
-     * 2、帆软服务自动启动成功后,使用的工作目录自动识别为web应用下的WEB-INF目录,所以需要把下面代码中envpath指向的工作目录拷贝到集成环境下web应用的WEB-INF目录,
-     *    这样才能沿用原先帆软的配置及模板。如果集群环境,会自动使用文件服务器的模板。
-     * 3、可以访问集成环境的地址: ip:port/应用名/decision 。如果能成功访问且不需要初始化配置则代表帆软服务启动成功
-     */
-    static {
-        Module preModule = ModuleContext.getModule(ReportActivator.class);
-        boolean running = preModule != null && preModule.isRunning();
-        if (!running) {
+    public static void main(String[] args) {
+        /**
+         * 以下这段if判断仅在main函数测试时使用,
+         * 实际生产环境中一般使用web容器,集成帆软后帆软服务会自动启动,不再需要下面的if判断,直接写导出的业务逻辑即可。
+         * web集成注意事项:
+         * 1、集成环境需要依赖【当前使用jdk对应版本的】tools.jar,一般从jdk中直接复制即可;
+         * 2、帆软服务自动启动成功后,使用的工作目录自动识别为集成应用下的WEB-INF目录,所以需要把下面代码中envpath指向的工作目录拷贝到集成环境下web应用的WEB-INF目录
+         *   (正式发布时需要拷贝生产环境的帆软WEB-INF,如果有的话),这样才能沿用原先帆软的配置及模板。如果是集群环境,会自动使用文件服务器的模板。本地测试时envpath需要指向【单机非集群】的帆软工程
+         * 3、可以访问集成环境的地址: ip:port/应用名/decision 。如果能成功访问且不需要初始化配置则代表帆软服务启动成功
+         */
+        if (!ModuleRole.Root.isPresent()) {
             /**定义报表运行环境,用于执行报表*/
-            Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
+            com.fr.module.Module module = ActivatorToolBox.simpleLink(
+                    new BaseDBActivator(),
                     new ConfigurationActivator(),
                     new ResourceRepositoryActivator(),
                     new StandaloneModeActivator(),
                     new ModuleHealActivator(),
+                    //2020.4.26jar包之前的版本,替换成StateServerActivator()
                     new StateServiceActivator(),
                     new ReportBaseActivator(),
                     new RestrictionActivator(),
@@ -57,9 +57,6 @@ public class ExportApi_frm {
             I18nResource.getInstance();
             module.start();
         }
-    }
-
-    public static void main(String[] args) {
         try {
   
             java.util.Map parameterMap = new java.util.HashMap();