Parcourir la source

导入导出业务分离

zhangweicheng il y a 6 ans
Parent
commit
8d881bd7d1

+ 1 - 3
Dockerfile

@@ -8,10 +8,8 @@ RUN cnpm install
 
 RUN gulp build
 
-EXPOSE 6060
-
 ENV NODE_ENV=prod
 
-ENTRYPOINT ["babel-node"]
+ENTRYPOINT ["babel-node", "--max-old-space-size=2048"]
 
 CMD ["server.js"]

Fichier diff supprimé car celui-ci est trop grand
+ 16 - 4
config/config.js


+ 70 - 0
importserver.js

@@ -0,0 +1,70 @@
+/**
+ * Created by zhang on 2019/12/5.
+ */
+let express = require('express');
+
+let config = require("./config/config.js");
+let fileUtils = require("./modules/common/fileUtils");
+let dbm = require("./config/db/db_manager");
+let log = require("./logs/log_helper");
+
+config.setupDb(process.env.NODE_ENV);
+
+let path = require('path');
+let fs = require('fs');
+
+
+dbm.connect(process.env.NODE_ENV);
+//这里现在只引入了定额工料机里的models,当其它模块的models修改后使用:./modules/**/models/*.js引入所有的模块
+fileUtils.getGlobbedFiles('./modules/all_models/*.js').forEach(function(modelPath) {
+    require(path.resolve(modelPath));
+})
+
+
+
+
+let app = express();
+let _rootDir = __dirname;
+app.locals.rootDir = _rootDir;
+log.use(app);
+app.use(express.static(_rootDir));
+
+app.set('views', path.join(__dirname, 'web'));
+app.engine('.html', require('ejs').__express);
+app.set('view engine', 'html');
+
+let bodyParser = require('body-parser');
+app.use(bodyParser.urlencoded({limit: '100mb', extended: false}));
+app.use(bodyParser.json({limit: '100mb'}));
+
+
+
+//加载路由文件
+fileUtils.getGlobbedFiles('./modules/import/routes/*.js').forEach(function(modelPath) {
+    require(path.resolve(modelPath))(app);
+});
+
+//app.use(express.static(_rootDir+"/web"));
+//app.use(express.static(_rootDir+"/lib"));
+//let rations_Router = require("./modules/rationLibEditor/routes/rationLibEditor_route");
+//app.use("/rationLibEditor",rations_Router);
+
+//-----------------
+
+app.use(function(req, res, next) {
+    res.status(404).send('404 Error');
+});
+app.use(function(err, req, res, next) {
+    console.error(err.stack);
+    res.status(500).send('500 Error');
+});
+
+//设置外增的Date对象Format函数
+//备注: 经过测试nodejs 8.9.3版本不支持eval的方式修改prototype,为兼容考虑,把方法调整到stringUtil文件里
+require('./public/stringUtil').setupDateFormat();
+
+app.listen(6050, function(){
+    console.log('import server started!');
+});
+
+

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

@@ -0,0 +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.importProjects(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);
+    }
+};
+
+
+
+

+ 16 - 0
modules/import/routes/import_route.js

@@ -0,0 +1,16 @@
+/**
+ * Created by zhang on 2019/12/3.
+ */
+let express = require('express');
+
+module.exports = function (app) {
+    let importRouter = express.Router();
+    let importController = require('../controllers/import_controller');
+    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");
+    })
+    app.use('/import', importRouter);
+};

+ 25 - 8
modules/pm/controllers/pm_controller.js

@@ -31,6 +31,7 @@ let consts = require('../../main/models/project_consts');
 const rationLibModel = mongoose.model('std_ration_lib_map');
 const multiparty = require("multiparty");
 let logger = require("../../../logs/log_helper").logger;
+let rp = require('request-promise');
 //统一回调函数
 let callback = function(req, res, err, message, data){
     res.json({error: err, message: message, data: data});
@@ -553,8 +554,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;
@@ -720,8 +721,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;
@@ -732,7 +733,7 @@ module.exports = {
     },
     importProject:async function(req,res){
         let form = new multiparty.Form({uploadDir: './tmp'});
-        let uploadFullName;
+        let path = "";
         form.parse(req, async function (err, fields, files) {
             try {
                 console.log(fields);
@@ -740,13 +741,16 @@ module.exports = {
                 if (err || !file) {
                     throw '上传失败。';
                 };
+                path = file.path;
                 let data = fs.readFileSync(file.path,'utf-8');
-                let result = await pm_facade.importProjects(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);
             }
 
         })
@@ -831,4 +835,17 @@ module.exports = {
             }
         });
     }
-};
+};
+
+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);
+}

+ 5 - 1
modules/pm/facade/pm_facade.js

@@ -1665,6 +1665,7 @@ async function exportMainData(userID,projectID) {
     let project = await projectModel.findOne({ID:projectID});
     if(!project) throw  new Error("没有找到该建设项目:"+projectID);
     result['compilationID'] = project.compilation;
+    result['from'] = "construction";
     result.projects.push(project);
     let subProjects = await  projectModel.find({"$or": [{'ParentID':projectID}, {"property.rootProjectID": projectID}]});
     for(let s of subProjects){
@@ -1738,7 +1739,10 @@ async function importProjects(data,req,fields) {
     }
     let mainData = datas.length > 0 ?datas[0]:null;
     if(mainData){
-        if(mainData.compilationID != req.session.sessionCompilation._id){
+        if(mainData.from && mainData.from != "construction"){
+            result.error = 1;
+            result.msg = "导入失败:您要导入的文件是由“纵横公路养护云版”导出,当前软件是“大司空云计价”,请选择正确的软件再进行操作!";
+        }else if(mainData.compilationID != req.session.sessionCompilation._id){
             result.error = 1;
             result.msg = "编办不同,无法导入,请重新选择!";
         }else {

+ 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",

+ 1 - 1
server.js

@@ -95,7 +95,7 @@ app.use(async function (req, res, next) {
 
 //加载路由文件
 fileUtils.getGlobbedFiles('./modules/**/routes/*.js').forEach(function(modelPath) {
-    require(path.resolve(modelPath))(app);
+    if(modelPath.indexOf("import/routes")==-1) require(path.resolve(modelPath))(app);//排除掉导出导入服务
 });
 
 //app.use(express.static(_rootDir+"/web"));

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

@@ -1579,7 +1579,6 @@ const projTreeObj = {
                 }
 
             }
-            $.bootstrapLoading.progressEnd();
             //  console.log(JSON.parse(sumString));
 
             saveProjectFile(sumString);
@@ -1587,6 +1586,9 @@ const projTreeObj = {
         }catch (e){
             alert("导出失败!请查看log.");
             console.log(e)
+        }finally {
+            await  setTimeoutSync(null,500);//设置间隔
+            $.bootstrapLoading.progressEnd();
         }
 
 
@@ -4603,6 +4605,9 @@ $("#confirm-import").click(function() {
                 $.bootstrapLoading.progressEnd();
                 if(response.error == 1){
                     alert(response.msg);
+                    setTimeout(function () {
+                        $.bootstrapLoading.progressEnd();//不做这个的话太快,页面不会自动关闭
+                    },500)
                 }else {
                     refreshAllPage();
                 }