Przeglądaj źródła

合并多次通讯带来的异步问题、引入三方async异步机制。

chenshilong 7 lat temu
rodzic
commit
99c259edd1

+ 5 - 2
modules/main/facade/labour_coe_facade.js

@@ -112,9 +112,12 @@ function save (data, callback) {
     projectLabourCoesModel.bulkWrite(updateArr)
         .then(function(){
             logger.info(`Project LabourCoe saved successful : ${data.projectID}`);
-            callback(0, '', null);
+            // callback(0, '', null);
+            callback('', null);
         })
         .catch(function (err) {
             logger.err(err);
-            callback(1, err, null)});
+            // callback(1, err, null)
+            callback(err, null)
+        });
 }

+ 32 - 11
modules/pm/controllers/pm_controller.js

@@ -12,6 +12,7 @@ let fee_rate_facade = require("../../fee_rates/facade/fee_rates_facade");
 let billsModel = require('../../main/models/bills').model;
 let rationsModel = require('../../main/models/ration').model;
 let projectModel = require("../models/project_schema");
+let asyncTool = require('async');
 
 //统一回调函数
 let callback = function(req, res, err, message, data){
@@ -64,40 +65,60 @@ module.exports = {
     },
     // CSL, 2017-12-14 该方法用于项目属性:提交保存混合型数据,这些数据来自不同的表,包括projects.property、ration、bills、labour_coes.
     updateMixDatas: function(req, res){
-        let callBackInner = function (err, message, data) {
-            if (err === 0) {
-                res.json({error: err, message: message, data: data});
-            } else {
-                res.json({error: err, message: message, data: null});
+        let datas = JSON.parse(req.body.data).mixDataArr;
+        let functions = [];
+
+        function updateFunc(model, cod, doc) {
+            return function (cb) {
+                model.update(cod, doc, cb);
             }
         };
 
-        let datas = JSON.parse(req.body.data).mixDataArr;
+        function updateLC(){
+            return function (cb) {
+                datas.labourCoes.updateData.projectID = datas.projectID;
+                labourCoe.save(datas.labourCoes.updateData, cb);
+            }
+        };
 
         // 项目属性
         if (Object.keys(datas.properties).length > 0){
-            projectModel.update({ID: datas.projectID}, datas.properties, callBackInner);
+            // projectModel.update({ID: datas.projectID}, datas.properties, callBackInner);
+            functions.push(updateFunc(projectModel, {ID: datas.projectID}, datas.properties));
         };
 
         // 人工系数
         if (datas.labourCoes.updateData){
-            datas.labourCoes.updateData.projectID = datas.projectID;
-            labourCoe.save(datas.labourCoes.updateData, callBackInner);
+            // datas.labourCoes.updateData.projectID = datas.projectID;
+            // labourCoe.save(datas.labourCoes.updateData, callBackInner);
+            functions.push(updateLC());
         };
 
         // 清单:每文档doc只存储一条清单,每条清单都必须定位一次文档,无法合并处理
         if (datas.bills.length > 0){
             for (let bill of datas.bills){
-                billsModel.update({projectID: datas.projectID, ID: bill.ID, deleteInfo: null}, bill, callBackInner);
+                // billsModel.update({projectID: datas.projectID, ID: bill.ID, deleteInfo: null}, bill, callBackInner);
+                functions.push(updateFunc(billsModel, {projectID: datas.projectID, ID: bill.ID, deleteInfo: null}, bill));
             };
         };
 
         // 定额:每文档doc只存储一条定额,每条定额都必须定位一次文档,无法合并处理
         if (datas.rations.length > 0){
             for (let ration of datas.rations){
-                rationsModel.update({projectID: datas.projectID, ID: ration.ID, deleteInfo: null}, ration, callBackInner);
+                // rationsModel.update({projectID: datas.projectID, ID: ration.ID, deleteInfo: null}, ration, callBackInner);
+                functions.push(updateFunc(rationsModel, {projectID: datas.projectID, ID: ration.ID, deleteInfo: null}, ration));
             };
         };
+
+        asyncTool.parallel(functions, function(err, result){
+            {
+                if (!err) {
+                    res.json({error: 0, message: err, data: result});
+                } else {
+                    res.json({error: 1, message: err, data: null});
+                }
+            }
+        });
     },
     updateFiles: async function(req, res){
         let data = JSON.parse(req.body.data);

+ 1 - 1
web/building_saas/main/js/views/project_view.js

@@ -816,7 +816,7 @@ $('#property_ok').click(function () {
                 for (let node of changedNodes){delete node.changed};
             };
             if (mixDatas.labourCoes.updateData) labourCoeView.refresh(mixDatas.labourCoes.updateData);*/
-            // window.location.href = '/main?project=' + projectID;
+            window.location.href = '/main?project=' + projectID;
         });
     }
 });