Browse Source

stage check code sync + 增加cron-job删除临时文件

TonyKang 5 years ago
parent
commit
2c6b334a90
4 changed files with 97 additions and 29 deletions
  1. 26 8
      app/controller/report_controller.js
  2. 31 21
      app/reports/util/rpt_tmp_file_sweep.js
  3. 39 0
      package-lock.json
  4. 1 0
      package.json

+ 26 - 8
app/controller/report_controller.js

@@ -13,6 +13,7 @@ const rpt_xl_util = require('../reports/util/rpt_excel_util');
 const rptDataExtractor = require('../reports/util/rpt_calculation_data_util');
 const fsUtil = require('../public/js/fsUtil');
 const fs = require('fs');
+const rptCronJob = require('../reports/util/rpt_tmp_file_sweep');
 
 module.exports = app => {
     class ReportController extends app.BaseController {
@@ -40,6 +41,10 @@ module.exports = app => {
                 const roleList = await ctx.service.signatureRole.getSignatureRolesByTenderId(tender.id);
 
                 // console.log(maxStageAmt[0].maxAmt);
+                // if ((stage === null || stage === undefined) && stageList.length > 0) {
+                //     await ctx.service.stage.checkStage(stageList[stageList.length - 1].id);
+                //     stage = ctx.stage;
+                // }
                 if (stage !== null && stage !== undefined) {
                     stage_id = stage.id;
                     stage_order = stage.order;
@@ -73,6 +78,17 @@ module.exports = app => {
                 };
                 await this.layout('report/index.ejs', renderData, 'report/rpt_all_popup.ejs');
                 // await this.layout('report/index.ejs', renderData);
+
+                // 在这里启动一个cron job,删除临时创建的excel文件
+                if (!rptCronJob.started) {
+                    try {
+                        // console.log('rptCronJob.started: ' + rptCronJob.started);
+                        rptCronJob.started = true;
+                        rptCronJob.createJob(null, this.app.baseDir + '/app/public/download');
+                    } catch (ex) {
+                        rptCronJob.started = false;
+                    }
+                }
             } catch (err) {
                 this.log(err);
                 console.log(err);
@@ -288,6 +304,14 @@ module.exports = app => {
     return ReportController;
 };
 
+async function checkStg(ctx, params) {
+    if (ctx.stage === null || ctx.stage === undefined || parseInt(ctx.stage.id) !== parseInt(params.stage_id)) {
+        await ctx.service.stage.checkStage(params.stage_id);
+        if (ctx.stage) {
+            params.stage_order = ctx.stage.curOrder;
+        }
+    }
+}
 async function getReportData(ctx, params, filters) {
     const rst = {};
     const runnableRst = [];
@@ -314,6 +338,7 @@ async function getReportData(ctx, params, filters) {
                     runnableKey.push('stage_bills');
                     break;
                 case 'stage_bills_final':
+                    await checkStg(ctx, params);
                     runnableRst.push(ctx.service.stageBillsFinal.getFinalDataEx(params.tender_id, params.stage_order));
                     runnableKey.push('stage_bills_final');
                     break;
@@ -322,9 +347,8 @@ async function getReportData(ctx, params, filters) {
                     runnableKey.push('stage');
                     break;
                 case 'stage_pay':
+                    await checkStg(ctx, params);
                     runnableRst.push(ctx.service.stagePay.getAuditorStageData(params.stage_id, params.stage_times, params.stage_order));
-                    // console.log('params:');
-                    // console.log(params);
                     runnableKey.push('stage_pay');
                     break;
                 case 'mem_stage_im_zl':
@@ -336,15 +360,9 @@ async function getReportData(ctx, params, filters) {
             }
         }
     }
-    // console.log('before query, runnableKey');
-    // console.log(runnableKey);
     const queryRst = await Promise.all(runnableRst);
-    // console.log('after query');
     for (let idx = 0; idx < runnableKey.length; idx++) {
         rst[runnableKey[idx]] = queryRst[idx];
-        // console.log(runnableKey[idx]);
-        // if (rst[runnableKey[idx]] instanceof Array) console.log('is Array')
-        // else console.log('is not Array');
     }
     for (const filter of filters) {
         switch (filter) {

+ 31 - 21
app/reports/util/rpt_tmp_file_sweep.js

@@ -1,13 +1,16 @@
+'use strict';
+
 /**
  * Created by Tony on 2018/7/27.
  */
 
-let fs = require('fs');
-let cron = require('node-schedule');
-let remove_file_types = [".xlsx", ".pdf", ".jsp"];
+const fs = require('fs');
+const cron = require('node-schedule');
+const remove_file_types = ['.xlsx', '.pdf'];
+
 function chkIsRemoveType(file) {
     let rst = false;
-    for (let fType of remove_file_types) {
+    for (const fType of remove_file_types) {
         if (file.indexOf(fType) === (file.length - fType.length)) {
             rst = true;
             break;
@@ -15,39 +18,46 @@ function chkIsRemoveType(file) {
     }
     return rst;
 }
-let jobObj = {
-    createJob: function (rule, rootPath) {
+
+const jobObj = {
+    started: false,
+    createJob: function(rule, rootPath) {
         let localRule = rule;
         if (!localRule) {
             // setup schedule rule
             localRule = new cron.RecurrenceRule();
             // 3:15AM, everyday
-            localRule.dayOfWeek = [1,2,3,4,5,6,0];
+            localRule.dayOfWeek = [1, 2, 3, 4, 5, 6, 0];
             localRule.hour = 3;
             localRule.minute = 15;
         }
-        cron.scheduleJob(localRule, function(){
-            let path = rootPath;
-            fs.exists(path, function (exists) {
+        cron.scheduleJob(localRule, function() {
+            const path = rootPath;
+            fs.exists(path, function(exists) {
                 if (exists) {
-                    fs.readdir(path, function (err, files) {
-                        let currentTime = (new Date()).valueOf();
-                        let timeGap = currentTime - (1000 * 60 * 60 * 24 * 0.5); //half day before
-                        files.forEach(function(file,index){
+                    fs.readdir(path, function(err, files) {
+                        const currentTime = (new Date()).valueOf();
+                        const timeGap = currentTime - (1000 * 60 * 60 * 24 * 0.5); // half day before
+                        files.forEach(function(file, index) {
                             if (chkIsRemoveType(file)) {
-                                let curPath = path + "/" + file;
-                                fs.stat(curPath,function(err,data){
+                                const curPath = path + '/' + file;
+                                fs.stat(curPath, function(err, data) {
                                     if (timeGap > data.mtime) {
-                                        fs.unlink(curPath);
+                                        // console.log('removing... ' + curPath);
+                                        fs.unlink(curPath, function(err) {
+                                            if (err) {
+                                                console.log(err);
+                                            }
+                                        });
                                     }
                                 });
                             }
                         });
-                    })
+                    });
                 }
-            })
+            });
         });
-    }
+    },
 };
 
-export default jobObj;
+module.exports = jobObj;

+ 39 - 0
package-lock.json

@@ -8862,6 +8862,11 @@
       "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
       "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
     },
+    "long-timeout": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/long-timeout/download/long-timeout-0.1.1.tgz",
+      "integrity": "sha1-lyHXiLR+C8taJMLivuGg2lXatRQ="
+    },
     "loose-envify": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
@@ -9631,6 +9636,35 @@
       "resolved": "https://registry.npmjs.org/node-homedir/-/node-homedir-1.1.0.tgz",
       "integrity": "sha512-jhUpcrKUV+vm4sRnoEgC5k2TcN6B53fIbMltom8BQcKOhSMm3j7W8bhbNwV64Cm139krwDWxep5KxifjnZCeTA=="
     },
+    "node-schedule": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npm.taobao.org/node-schedule/download/node-schedule-1.3.2.tgz",
+      "integrity": "sha1-13Szg+Km9q3lnuzGIlSuoHzXWMs=",
+      "requires": {
+        "cron-parser": "2.13.0",
+        "long-timeout": "0.1.1",
+        "sorted-array-functions": "1.2.0"
+      },
+      "dependencies": {
+        "cron-parser": {
+          "version": "2.13.0",
+          "resolved": "https://registry.npm.taobao.org/cron-parser/download/cron-parser-2.13.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcron-parser%2Fdownload%2Fcron-parser-2.13.0.tgz",
+          "integrity": "sha1-b5MLtvKTF5DSqe7IOz7CduJ6ZyU=",
+          "requires": {
+            "is-nan": "1.2.1",
+            "moment-timezone": "0.5.27"
+          }
+        },
+        "moment-timezone": {
+          "version": "0.5.27",
+          "resolved": "https://registry.npm.taobao.org/moment-timezone/download/moment-timezone-0.5.27.tgz?cache=0&sync_timestamp=1571207560477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment-timezone%2Fdownload%2Fmoment-timezone-0.5.27.tgz",
+          "integrity": "sha1-c63sgTm2/jBFLnjyEPJ7HzRriHc=",
+          "requires": {
+            "moment": "2.20.1"
+          }
+        }
+      }
+    },
     "node-snowflake": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/node-snowflake/-/node-snowflake-0.0.1.tgz",
@@ -12754,6 +12788,11 @@
         "socks": "1.1.10"
       }
     },
+    "sorted-array-functions": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/sorted-array-functions/download/sorted-array-functions-1.2.0.tgz",
+      "integrity": "sha1-QyZbIdbphbffMWIbHBHMaNjvx8M="
+    },
     "source-map": {
       "version": "0.5.7",
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",

+ 1 - 0
package.json

@@ -28,6 +28,7 @@
     "lz-string": "^1.4.4",
     "mathjs": "^5.9.0",
     "moment": "^2.20.1",
+    "node-schedule": "^1.3.2",
     "node-uuid": "^1.4.8",
     "node-xlsx": "^0.12.0",
     "number-precision": "^1.3.1",