Ver código fonte

分离导入导出业务

zhangweicheng 6 anos atrás
pai
commit
db847e6f78

+ 16 - 4
config/config.js

@@ -13,7 +13,8 @@ module.exports = {
               },
             connectTimeoutMS: 50000,
             useMongoClient: true
-        }
+        },
+        importURL:"192.168.1.184:2050"
     },
     test_auth: {
             server: "120.78.150.216",
@@ -36,9 +37,11 @@ module.exports = {
             auth: {
                 "authdb": "admin"
             },
-            connectTimeoutMS: 50000,
-            useMongoClient: true
-        }},
+                connectTimeoutMS: 50000,
+                useMongoClient: true
+            },
+        importURL:"112.74.42.187:2050"
+        },
     prod_s:{  server: "112.74.42.187",
         port: "28066",
         options:{
@@ -56,6 +59,7 @@ module.exports = {
     },
     redis_local:{server:'127.0.0.1',port:'6379',pwd:'smartCost'},
     redis_qa:{server:'192.168.1.184',port:'6379',pwd:'smartCost'},
+
     setupDb:function (env="local") {
         let me = this;
         me.current.server = me[env].server;
@@ -80,5 +84,13 @@ module.exports = {
         }else {
             return me.defaultLicenseKey;
         }
+    },
+    getImportURL:function (env="local",origin) {
+        let me = this;
+        let importURL = me[env].importURL;
+        if(origin.indexOf("localhost")!=-1 || origin.indexOf("127.0.0.1")!=-1){
+            importURL = "127.0.0.1:2050";
+        }
+        return importURL
     }
 }

+ 2 - 2
importserver.js

@@ -34,8 +34,8 @@ app.engine('.html', require('ejs').__express);
 app.set('view engine', 'html');
 
 let bodyParser = require('body-parser');
-app.use(bodyParser.urlencoded({limit: '10mb', extended: false}));
-app.use(bodyParser.json({limit: '10mb'}));
+app.use(bodyParser.urlencoded({limit: '100mb', extended: false}));
+app.use(bodyParser.json({limit: '100mb'}));
 
 
 

+ 56 - 0
modules/import/controllers/import_controller.js

@@ -1,3 +1,59 @@
 /**
  * Created by zhang on 2019/12/3.
  */
+/**
+ * Created by jimiz on 2017/4/9.
+ */
+let logger = require("../../../logs/log_helper").logger;
+let pm_facade = require('../../pm/facade/pm_facade');
+let controller = {
+    importProject:async function (req){
+        let data = req.body.data;
+        let sessionInfo = {session:req.body.session};
+        let fields = req.body.fields;
+        return await pm_facade.importProject(data,sessionInfo,fields);
+    },
+    exportProject:async function(req){
+        let result={
+            error:0
+        };
+        let data = JSON.parse(req.body.dataString);
+        result.data = await pm_facade.exportProject(req.body.userID, data);
+        return result
+    },
+    copyProject:async function(req){
+        let result={
+            error:0
+        };
+        let data = JSON.parse(req.body.dataString);
+        result.data = await pm_facade.copyProject(req.body.userID,req.body.compilationID,data);
+        return result
+    }
+};
+
+
+module.exports = {
+    action:async function(req,res){//自动跳转到URL对应的controller方法
+        let result={
+            error:0
+        };
+        try {
+            let functionName = req.url.replace(/\//g,"");
+            result = controller[functionName]?await controller[functionName](req):"";
+        }catch (err){
+            logger.err(err);
+            if(typeof err == "string"){
+                result.error=2;
+                result.msg = err;
+            }else {
+                result.error=1;
+                result.msg = "导入失败请检查文件!"
+            }
+        }
+        res.json(result);
+    }
+};
+
+
+
+

+ 3 - 7
modules/import/routes/import_route.js

@@ -6,13 +6,9 @@ let express = require('express');
 module.exports = function (app) {
     let importRouter = express.Router();
     let importController = require('../controllers/import_controller');
-
-/*    importRouter.post('/addMultiRation', importController.action);
-    importRouter.post('/getSameSectionRations', importController.action);
-    importRouter.post('/getDefaultProgramID', importController.action);
-    importRouter.post('/applyTemplate', importController.action);
-    importRouter.post('/updateRationAss', importController.action);
-    importRouter.post('/updateCoeAdjust', importController.action);*/
+    importRouter.post('/importProject',importController.action);
+    importRouter.post('/exportProject',importController.action);
+    importRouter.post('/copyProject',importController.action);
     importRouter.get('/test',function (req,res) {
         res.json("hello word");
     })

+ 27 - 9
modules/pm/controllers/pm_controller.js

@@ -29,6 +29,8 @@ import SectionTreeDao from '../../complementary_ration_lib/models/sectionTreeMod
 let sectionTreeDao = new SectionTreeDao();
 let consts = require('../../main/models/project_consts');
 import multiparty from 'multiparty';
+let rp = require('request-promise');
+
 //统一回调函数
 let callback = function(req, res, err, message, data){
     res.json({error: err, message: message, data: data});
@@ -510,8 +512,8 @@ module.exports = {
             error:0
         };
         try {
-            let data = JSON.parse(req.body.data);
-            result.data = await pm_facade.copyProject(req.session.sessionUser.id, req.session.sessionCompilation._id,data);
+            let data = {dataString:req.body.data,userID:req.session.sessionUser.id,compilationID:req.session.sessionCompilation._id};
+            result = await redirectToImportServer(data,"copyProject",req);
         }catch (err){
             console.log(err);
             result.error=1;
@@ -672,8 +674,8 @@ module.exports = {
             error:0
         };
         try {
-            let data = JSON.parse(req.body.data);
-            result.data = await pm_facade.exportProject(req.session.sessionUser.id, data);
+            let data = {dataString:req.body.data,userID:req.session.sessionUser.id};
+            result = await redirectToImportServer(data,"exportProject",req);
         }catch (err){
             console.log(err);
             result.error=1;
@@ -684,23 +686,39 @@ module.exports = {
     },
     importProject:async function(req,res){
         let form = new multiparty.Form({uploadDir: './tmp'});
-        let uploadFullName;
         form.parse(req, async function (err, fields, files) {
+            let path = "";
             try {
                 console.log(fields);
                 const file = typeof files.file !== 'undefined' ? files.file[0] : null;
                 if (err || !file) {
                     throw '上传失败。';
                 };
+                path = file.path;
                 let data = fs.readFileSync(file.path,'utf-8');
-                let result = await pm_facade.importProject(data,req,fields);
-                fs.unlinkSync(file.path);
+                let body = {data: data, fields:fields, session:req.session};
+                let result = await redirectToImportServer(body,"importProject",req);
                 res.json(result);
             }catch (e){
                 console.log(e);
                 res.json({error:1,msg:"导入失败请检查文件!"})
+            }finally {
+                fs.unlinkSync(path);
             }
-
         })
     }
-};
+};
+
+
+async function redirectToImportServer(data,action,req) {
+    let importURL = config.getImportURL(process.env.NODE_ENV,req.headers.origin);
+    let options = {
+        method: 'POST',
+        uri: `http://${importURL}/import/${action}`,
+        body: data,
+        timeout:220000,
+        json: true
+    };
+    console.log("post import data to:"+options.uri);
+    return await rp.post(options);
+}

+ 1 - 0
package.json

@@ -51,6 +51,7 @@
     "node-schedule": "^1.3.0",
     "node-xlsx": "^0.11.2",
     "pdfkit": "^0.8.2",
+    "request-promise": "^4.2.5",
     "socket.io": "^2.0.3",
     "ua-parser-js": "^0.7.14",
     "uuid": "^3.1.0",

+ 6 - 4
public/web/common_ajax.js

@@ -173,14 +173,16 @@ async function ajaxPost(url, data) {
             cache: false,
             timeout: 50000,
             success: function(result){
+                let message = "";
+                if(result) message = result.message?result.message:result.msg;
                 if (result.error === 0 || result.err ===0) {
                     resolve(result.data);
                 }else if(result.error === 2 ){
-                    alert(result.message);
-                    reject(result.message);
+                    alert(message);
+                    reject(message);
                 }else {
-                    alert('error: ' + result.message);
-                    reject(result.message);
+                    alert('error: ' + message);
+                    reject(message);
                 }
             },
             error: function(jqXHR, textStatus, errorThrown){

+ 2 - 2
server.js

@@ -37,8 +37,8 @@ app.engine('.html', require('ejs').__express);
 app.set('view engine', 'html');
 
 let bodyParser = require('body-parser');
-app.use(bodyParser.urlencoded({limit: '10mb', extended: false}));
-app.use(bodyParser.json({limit: '10mb'}));
+app.use(bodyParser.urlencoded({limit: '100mb', extended: false}));
+app.use(bodyParser.json({limit: '100mb'}));
 
 app.use(session({
     name: 'yanghuSession',

+ 1 - 0
web/building_saas/pm/js/pm_newMain.js

@@ -3671,6 +3671,7 @@ $("#confirm-import").click(function() {
             cache: false,
             contentType: false,
             processData: false,
+            timeout:300000,
             beforeSend: function() {
                 self.attr('disabled', 'disabled');
                 self.text('上传中...');