瀏覽代碼

fix(report): 报表数据导出

lishihao 5 月之前
父節點
當前提交
4320cb3e71

+ 51 - 0
modules/reports/controllers/rpt_tpl_controller.js

@@ -13,10 +13,15 @@ let rptExtCodeModel = mongoose.model("rpt_ext_code_tpl");
 
 let rptCustCfgFacade = require("../facade/rpt_cust_cfg_facade");
 let costIndexModel = mongoose.model("costIndexReport");
+let Rpt_Map_Fld_Mdl = mongoose.model("rpt_mapping_field");
+let rpt_cfg_mdl = mongoose.model("rpt_cfg");
 
 import JV from "../rpt_component/jpc_value_define";
 import rttFacade from "../facade/rpt_tpl_tree_node_facade";
 import CompilationModel from "../../users/models/compilation_model";
+import fs from "fs";
+
+let JSZip = require("jszip");
 
 //统一回调函数
 let callback = function (req, res, err, message, data) {
@@ -410,6 +415,7 @@ let mExport = {
         }
       });
   },
+
   updateRptTpl: function (req, res) {
     let params = JSON.parse(req.body.params),
       rptTpl = JSON.parse(params.rptTpl);
@@ -478,6 +484,51 @@ let mExport = {
         }
       });
   },
+  // 导出所有的报表数据
+  getAllBackupData: async function (req, res) {
+    try {
+      const filePath = "./public/highWay_reportBackup.zip";
+      let rptTemplate = [];
+      let rptTplTree = [];
+      let rptConfig = [];
+      let rptField = [];
+      await new Promise(async function (resolve) {
+        rptTemplate = await RptTplModel.find({}, "-_id");
+        resolve();
+      });
+
+      await new Promise(async function (resolve) {
+        rptTplTree = await TreeNodeModel.find({}, "-_id");
+        resolve();
+      });
+      await new Promise(async function (resolve) {
+        rptConfig = await rpt_cfg_mdl.find({}, "-_id");
+        resolve();
+      });
+      await new Promise(async function (resolve) {
+        rptField = await Rpt_Map_Fld_Mdl.find({}, "-_id");
+        resolve();
+      });
+
+      var zip = new JSZip();
+      zip.file("报表模板备份.txt", JSON.stringify(rptTemplate));
+      zip.file("报表树备份.txt", JSON.stringify(rptTplTree));
+      zip.file("报表配置备份.txt", JSON.stringify(rptConfig));
+      zip.file("报表指标备份.txt", JSON.stringify(rptField));
+      // 将Zip打包成Blob对象
+      zip
+        .generateNodeStream({ type: "nodebuffer", streamFiles: true })
+        .pipe(fs.createWriteStream(filePath))
+        .on("finish", function () {
+          // JSZip generates a readable stream with a "end" event,
+          // but is piped here in a writable stream which emits a "finish" event.
+          console.log("报表模板备份已导出");
+          callback(req, res, false, "", filePath);
+        });
+    } catch (e) {
+      callback(req, res, true, "no result", null);
+    }
+  },
 };
 
 function copyRptCfg(src, dest) {

+ 1 - 0
modules/reports/routes/rpt_tpl_router.js

@@ -50,6 +50,7 @@ module.exports = function (app) {
   );
   rptTplRouter.post("/createDftRptTpl", reportTplController.createDftRptTpl);
   rptTplRouter.post("/getRefRptTpl", reportTplController.getRefRptTpl);
+  rptTplRouter.post("/getAllBackupData", reportTplController.getAllBackupData);
   rptTplRouter.post("/updateRptTpl", reportTplController.updateRptTpl);
   rptTplRouter.post("/copyRptTpl", reportTplController.copyRptTpl);
   rptTplRouter.post(

+ 6 - 1
web/maintain/report/html/rpt_tpl_main.html

@@ -67,9 +67,13 @@
                     <a class="nav-link px-3" ><select class="form-control form-control-sm" id="engineerIds"></select></a>
                 </li>
             </ul>
+        
             </div>
             <!--
             -->
+            <!--  导出数据(包括配置、指标、报表树、模板) -->
+            <div class="p-2" style="position: absolute;top: -40px;right: 0;"><button class="btn btn-success btn-sm" onclick="reportDataOutputHelper.outPutFile()">导出数据</button></div>
+
             <div class="p-2">
                 <label id="id_after_saved_lbl" style="color:yellowgreen;font-weight:bold">...</label>
                 <button class="btn btn-primary btn-sm" onclick="tplHelper.saveRptTpl(false)">保存</button>
@@ -120,6 +124,7 @@
     <script src="/web/maintain/report/js/cfg_const.js"></script>
     <script src="/web/maintain/report/js/rpt_tpl_preview_util.js"></script>
     <script src="/web/maintain/report/js/jpc_output.js"></script>
+    <script src="/web/maintain/report/js/rpt_output_to file.js"></script>
     <!-- zTree -->
     <script type="text/javascript" src="/public/web/date_util.js"></script>
     <script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
@@ -138,4 +143,4 @@
     rptTplObj.iniPage();
 </script>
 
-</html>
+</html>

+ 21 - 0
web/maintain/report/js/rpt_output_to file.js

@@ -0,0 +1,21 @@
+/**
+ * Created by lishihao on 2025/1/23.
+ * 报表数据导出为文件
+ * 包括配置、报表树、报表模板、指标
+ */
+
+let reportDataOutputHelper = {
+  outPutFile: async function () {
+    CommonAjax.postEx(
+      "report_tpl_api/getAllBackupData",
+      {},
+      200000,
+      true,
+      function (result) {
+        // 下载文件
+        window.open(result);
+      }
+    );
+    return [];
+  },
+};