Преглед на файлове

解决多单位工程请求有数据丢失问题

TonyKang преди 4 години
родител
ревизия
416ca34597
променени са 3 файла, в които са добавени 20 реда и са изтрити 4 реда
  1. 2 0
      modules/main/models/ration.js
  2. 7 0
      modules/reports/controllers/rpt_controller.js
  3. 11 4
      modules/reports/facade/rpt_tpl_data_facade.js

+ 2 - 0
modules/main/models/ration.js

@@ -20,8 +20,10 @@ class rationModel extends baseModel {
         return {'$or': [{projectID: projectID, deleteInfo: null}, {projectID: projectID, 'deleteInfo.deleted': {$in: [null, false]}}]}
     }
     getData (projectID, callback, isReport = false) {
+        // console.log('ration projectID: ' + projectID);
         ration.find(this.getQuery(projectID), '-_id', function(err, datas){
             if (!err) {
+                // console.log('result datas.length: ' + datas.length);
                 if (isReport){  // 调价中间件机制
                     for (let i = 0; i < datas.length; i++) {
                         let coe = datas[i]._doc.rationQuantityCoe;

+ 7 - 0
modules/reports/controllers/rpt_controller.js

@@ -318,17 +318,24 @@ async function getAllPagesCommon(construct_id, user_id, prj_id, prj_ids, rpt_id,
                     //     cb('Have errors while on going...', null);
                     // }
 
+                    // console.log('prj_ids');
+                    // console.log(prj_ids);
                     rptTplDataFacade.prepareMultiProjectData(user_id, prj_ids, filter).then(function(multiRawData) {
                         //终于出来结果了 !_! (multiRawData是多个单位工程的原始数据!)
+                        // fsUtil.writeObjToFile(multiRawData, "D:/GitHome/ConstructionCost/tmp/multiRawData.jsp");
                         if (multiRawData.length > 0) {
                             //要排排序,与prj_ids的原始次序一致
                             multiRawData.sort(function(d1, d2){
                                 return (prj_ids.indexOf(d1.prj.ID) - prj_ids.indexOf(d2.prj.ID));
                             });
                             //考虑到工料机的数据还需要再计算,所以还不能直接用,需要每个工程都处理一遍后,再合并
+                            // console.log('multiRawData[0].prjData[0].data.length: ' + multiRawData[0].prjData[0].data.length);
+                            // console.log('multiRawData[1].prjData[0].data.length: ' + multiRawData[1].prjData[0].data.length);
                             let tplData = rptDataUtil.assembleData(multiRawData[0]);
+                            // console.log('tplData.detail_data[0].length: ' + tplData.detail_data[0].length);
                             for (let idx = 1; idx < multiRawData.length; idx++) {
                                 let tmpData = rptDataUtil.assembleData(multiRawData[idx]);
+                                // console.log('tmpData.detail_data[0].length: ' + tmpData.detail_data[0].length);
                                 _combineData(tplData, tmpData);
                             }
                             _createPntPageData(tplData, rptTpl);

+ 11 - 4
modules/reports/facade/rpt_tpl_data_facade.js

@@ -41,16 +41,18 @@ function prepareProjectData(userId, prjId, filter, callback) {
 }
 
 async function prepareMultiProjectData(userId, prjIds, filter) {
-    function getProjectPageData(prjId) {
+    function getProjectPageData(prjId, basicRst) {
         return new Promise(function(resolve, reject) {
+            // console.log('promise prjId: ' + prjId);
             prjMdl.project.getUserProject(userId, prjId, function(err, msg, rst){
                 if (!err) {
                     projectDataMdl.getFilterData(prjId, filter, function (results) {
                         if (results) {
                             rawDataObj = {};
                             rawDataObj.prj = rst;
+                            // console.log(results);
                             rawDataObj.prjData = results;
-                            //*
+                            /*
                             prjMdl.project.getBasicInfo(prjId).then(function(basicRst) {
                                 if (basicRst !== null && basicRst !== undefined) {
                                     let doc = (rawDataObj.prj._doc)?rawDataObj.prj._doc:rawDataObj.prj;
@@ -59,6 +61,10 @@ async function prepareMultiProjectData(userId, prjIds, filter) {
                                 resolve(rawDataObj);
                             });
                             /*/
+                            if (basicRst !== null && basicRst !== undefined) {
+                                let doc = (rawDataObj.prj._doc)?rawDataObj.prj._doc:rawDataObj.prj;
+                                doc.property.basicInformation = basicRst;
+                            }
                             resolve(rawDataObj);
                             //*/
                         } else {
@@ -89,8 +95,9 @@ async function prepareMultiProjectData(userId, prjIds, filter) {
         });
     }
     let parallelFunctions = [];
-    for (let prjId of prjIds) {
-        parallelFunctions.push(getProjectPageData(prjId));
+    for (let pId of prjIds) {
+        let basicRst = await prjMdl.project.getBasicInfo(pId); // 备注:项目basic info不能用.then的方式处理,否则会出现多个prjId返回相同数据的情况,只能先处理好,作为参数传递进去
+        parallelFunctions.push(getProjectPageData(pId, basicRst));
     }
     let rst = await Promise.all(parallelFunctions);
     return rst;