rpt_tpl_data_facade.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /**
  2. * Created by Tony on 2017/8/9.
  3. */
  4. // let consts = require('../../../modules/main/models/project_consts');
  5. // let projectConst = consts.projectConst;
  6. let prjMdl = require('../../../modules/pm/models/project_model');
  7. let projectDataMdl = require('../../../modules/main/models/project');
  8. let projectFacade = require('../../../modules/main/facade/project_facade');
  9. let billsUnitPriceFeatureModel = mongoose.model('std_bills_unitprice_feature_lib');
  10. module.exports = {
  11. prepareProjectData: prepareProjectData,
  12. getBudgetSummayDatas: getBudgetSummayDatas,
  13. getGLJSummayDatas: getGLJSummayDatas,
  14. prepareMultiProjectData: prepareMultiProjectData,
  15. prepareMultiProjectDataEx: prepareMultiProjectDataEx,
  16. };
  17. function prepareProjectData(userId, prjId, filter, callback) {
  18. let rawDataObj = null;
  19. let basicInformation = prjMdl.project.getBasicInfo(prjId);
  20. let estUnitPriceFeature = null;
  21. prjMdl.project.getUserProject(userId, prjId, function(err, msg, rst){
  22. if (!err) {
  23. rawDataObj = {};
  24. rawDataObj.prj = rst;
  25. let doc = rst._doc? rst._doc : rst;
  26. if (doc.property.engineeringName === '指标估算') {
  27. //要加料
  28. let conditions = {compilationId: doc.compilation};
  29. estUnitPriceFeature = billsUnitPriceFeatureModel.findOne(conditions,{_id: 0}).lean();
  30. // billsUnitPriceFeatureModel
  31. }
  32. projectDataMdl.getFilterData(prjId, filter, function (results) {
  33. if (results) {
  34. rawDataObj.prjData = results;
  35. basicInformation.then(function(basicRst) {
  36. if (basicRst !== null && basicRst !== undefined) {
  37. let doc = (rawDataObj.prj._doc)?rawDataObj.prj._doc:rawDataObj.prj;
  38. doc.property.basicInformation = basicRst;
  39. }
  40. if (estUnitPriceFeature) {
  41. estUnitPriceFeature.then( (features) => {
  42. let doc = (rawDataObj.prj._doc)?rawDataObj.prj._doc:rawDataObj.prj;
  43. doc.property.estUnitPriceFeature = features.feature;
  44. // console.log(features);
  45. callback(false, 'Succeeded!', rawDataObj);
  46. });
  47. } else {
  48. callback(false, 'Succeeded!', rawDataObj);
  49. }
  50. });
  51. // callback(false, 'Succeeded!', rawDataObj);
  52. } else {
  53. callback(true, 'No data were found!', null);
  54. }
  55. });
  56. } else {
  57. callback(err, msg, null);
  58. }
  59. });
  60. }
  61. async function getBudgetSummayDatas(prjIds, userId, CompilationId, overWriteUrl) {
  62. return await projectFacade.getBudgetSummayDatas(prjIds, userId, CompilationId, overWriteUrl);
  63. }
  64. async function getGLJSummayDatas(prjIds, compilationName = '') {
  65. return await projectFacade.getGLJSummayDatas(prjIds, compilationName);
  66. }
  67. // prepareMultiProjectData 方法实际测试有并行问题,并行的结果有时候会乱来,弃用。以prepareMultiProjectDataEx代替
  68. async function prepareMultiProjectData(userId, prjIds, filter) {
  69. function getProjectPageData(prjId, basicRst) {
  70. return new Promise(function(resolve, reject) {
  71. let estUnitPriceFeature = null;
  72. prjMdl.project.getUserProject(userId, prjId, function(err, msg, rst){
  73. if (!err) {
  74. projectDataMdl.getFilterData(prjId, filter, function(results) {
  75. let doc = rst._doc? rst._doc : rst;
  76. if (doc.property.engineeringName === '指标估算') {
  77. //要加料
  78. let conditions = {compilationId: doc.compilation};
  79. estUnitPriceFeature = billsUnitPriceFeatureModel.findOne(conditions,{_id: 0}).lean();
  80. }
  81. if (results) {
  82. rawDataObj = {};
  83. rawDataObj.prj = rst;
  84. rawDataObj.prjData = results;
  85. // let doc = (rawDataObj.prj._doc)?rawDataObj.prj._doc:rawDataObj.prj;
  86. if (basicRst !== null) {
  87. doc.property.basicInformation = basicRst;
  88. }
  89. if (estUnitPriceFeature) {
  90. estUnitPriceFeature.then( (features) => {
  91. // let doc = (rawDataObj.prj._doc)?rawDataObj.prj._doc:rawDataObj.prj;
  92. doc.property.estUnitPriceFeature = features.feature;
  93. console.log(`prjId: ${prjId}`);
  94. console.log(rawDataObj);
  95. resolve(rawDataObj);
  96. });
  97. } else {
  98. resolve(rawDataObj);
  99. }
  100. } else {
  101. return reject('No data were found!');
  102. }
  103. });
  104. } else {
  105. return reject(err);
  106. }
  107. });
  108. });
  109. }
  110. let parallelFunctions = [];
  111. for (let pidx = 0; pidx < prjIds.length; pidx++) {
  112. let firstBasicRst = await prjMdl.project.getBasicInfo(prjIds[pidx]);
  113. parallelFunctions.push(getProjectPageData(prjIds[pidx], firstBasicRst));
  114. }
  115. let rst = await Promise.all(parallelFunctions);
  116. return rst;
  117. }
  118. async function prepareMultiProjectDataEx(userId, prjIds, filter) {
  119. let rstData = [];
  120. for (let pidx = 0; pidx < prjIds.length; pidx++) {
  121. let basicRst = await prjMdl.project.getBasicInfo(prjIds[pidx]);
  122. let prj = await prjMdl.project.getUserProjectAsync(userId, prjIds[pidx]);
  123. let prjData = await projectDataMdl.getFilterDataSync(prjIds[pidx], filter);
  124. let prjDoc = prj._doc ? prj._doc : prj;
  125. if (prjDoc.property.engineeringName === '指标估算') {
  126. //要加料
  127. let conditions = {compilationId: prjDoc.compilation};
  128. let estUnitPriceFeature = await billsUnitPriceFeatureModel.findOne(conditions,{_id: 0}).lean();
  129. prjDoc.property.estUnitPriceFeature = estUnitPriceFeature.feature;
  130. }
  131. let rawDataObj = {};
  132. rawDataObj.prj = prj;
  133. rawDataObj.prjData = prjData;
  134. prjDoc.property.basicInformation = basicRst;
  135. rstData.push(rawDataObj);
  136. }
  137. return rstData;
  138. }