project.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. /**
  2. * Created by jimiz on 2017/4/16.
  3. */
  4. var billsData = require('./bills');
  5. var rationData = require('./ration');
  6. var ration_glj_data = require('../../ration_glj/facade/ration_glj_facade');
  7. var ration_coe_data = require('../../ration_glj/facade/ration_coe_facade');
  8. var ration_ass_data = require('../../ration_glj/facade/ration_ass_facade');
  9. let ration_installation = require('../facade/ration_installation_facade');
  10. var quantity_detail_data = require('../facade/quantity_detail_facade');
  11. var fee_rate_data = require('../../fee_rates/facade/fee_rates_facade');
  12. let projCounter = require('./proj_counter_model');
  13. let projSetting = require('./proj_setting_model');
  14. // let volumePriceData = require('../../volume_price/models/volume_price_model');
  15. var labour_coe_facade = require('../facade/labour_coe_facade');
  16. var calc_program_facade = require('../facade/calc_program_facade');
  17. import GLJController from "../../glj/controllers/glj_controller";
  18. let installation_facade = require('../facade/installation_facade');
  19. const ProjectModel = require('../../pm/models/project_model').project;
  20. import GLJListModel from "../../glj/models/glj_list_model";
  21. var consts = require('./project_consts');
  22. var projectConsts = consts.projectConst;
  23. var asyncTool = require("async");
  24. var moduleMap = {};
  25. moduleMap[projectConsts.BILLS] = billsData;
  26. moduleMap[projectConsts.RATION] = rationData;
  27. moduleMap[projectConsts.RATION_GLJ] = ration_glj_data;
  28. moduleMap[projectConsts.RATION_COE] = ration_coe_data;
  29. moduleMap[projectConsts.RATION_ASS] = ration_ass_data;
  30. moduleMap[projectConsts.RATION_INSTALLATION] = ration_installation;
  31. moduleMap[projectConsts.QUANTITY_DETAIL] = quantity_detail_data;
  32. moduleMap[projCounter.collectionName] = projCounter;
  33. moduleMap[projSetting.collectionName] = projSetting;
  34. moduleMap[projectConsts.FEERATE] = fee_rate_data;
  35. moduleMap[projectConsts.LABOUR_COE] = labour_coe_facade;
  36. moduleMap[projectConsts.CALC_PROGRAM] = calc_program_facade;
  37. moduleMap[projectConsts.PROJECTGLJ] = new GLJController();
  38. moduleMap[projectConsts.INSTALLATION_FEE] = installation_facade;
  39. var Project = function (){};
  40. Project.prototype.datas = [];
  41. Project.prototype.prepare = function(data, callback){
  42. var me = this;
  43. data.update_data.forEach(function(item){
  44. item.user_id = data.user_id;
  45. me.datas.push(item);
  46. /*
  47. to do
  48. moduleMap[item.moduleName].prepare(item.data, jobCallback);
  49. */
  50. });
  51. };
  52. Project.prototype.save = function(datas, callback){
  53. var job, savePoint;
  54. var functions = [];
  55. var item;
  56. var me = this;
  57. me.prepare(datas, function(job, savePoint){});
  58. function saveModule(data) {
  59. return function (cb) {
  60. if(data.moduleName!=undefined){
  61. moduleMap[data.moduleName].save(data.user_id, data.data, cb);
  62. }
  63. // console.log(moduleMap[data.moduleName])
  64. }
  65. }
  66. for (var i = 0; i < me.datas.length; i++){
  67. item = me.datas[i];
  68. functions.push(saveModule(item));
  69. }
  70. asyncTool.parallel(functions, function(err, results) {
  71. if (!err){
  72. callback(null, '', results)
  73. }
  74. else{
  75. callback(1, 'save project failed', null)
  76. }
  77. });
  78. me.datas = [];
  79. };
  80. Project.prototype.getData = function(projectID, callback){
  81. var functions = [];
  82. var itemName;
  83. let firstTime = +new Date();
  84. for (itemName in moduleMap){
  85. functions.push((function(itemName){
  86. return function (cb) {
  87. let startTime = +new Date();
  88. moduleMap[itemName].getData(projectID, function(err, moduleName, data){
  89. let endTime = +new Date();
  90. console.log(moduleName+'---------------'+(endTime - startTime));
  91. cb(err, {moduleName: moduleName, data: data})
  92. })
  93. }
  94. })(itemName))
  95. }
  96. asyncTool.parallel(functions, function(err, results) {
  97. if (!err){
  98. let lastTime = +new Date();
  99. console.log('最后加载时间---------------'+(lastTime - firstTime));
  100. callback(0, '', results)
  101. }
  102. else{
  103. callback(1, 'load project failed', null)
  104. }
  105. });
  106. };
  107. Project.prototype.getFilterData = function (projectID, filter, callback) {
  108. let functions = [];
  109. let getModuleData = function (moduleName) {
  110. return async function (cb) {
  111. if (moduleMap[moduleName]) {
  112. moduleMap[moduleName].getData(projectID, function (err, name, data) {
  113. cb(err, {'moduleName': name, 'data': data})
  114. });
  115. } else if (moduleName === projectConsts.PROJECTGLJ) {
  116. try {
  117. if (isNaN(projectID) || projectID <= 0) {
  118. throw '标段id有误';
  119. }
  120. // 获取标段对应的单价文件id
  121. let unitPriceFileId = await ProjectModel.getUnitPriceFileId(projectID);
  122. if (unitPriceFileId <= 0) {
  123. throw '没有对应的单价文件';
  124. }
  125. // 先获取对应标段的项目工料机数据
  126. let gljListModel = new GLJListModel();
  127. let [gljList, mixRatioConnectData] = await gljListModel.getListByProjectId(projectID, unitPriceFileId);
  128. cb(null, {'moduleName': moduleName, 'data': gljList});
  129. } catch (error) {
  130. cb(error, null);
  131. }
  132. } else {
  133. throw '要查询的项目模块不存在';
  134. }
  135. }
  136. };
  137. for (let itemName of filter) {
  138. functions.push(getModuleData(itemName));
  139. }
  140. asyncTool.parallel(functions, function (err, results) {
  141. //console.log(results);
  142. if (err) {
  143. throw '获取项目数据出错';
  144. } else {
  145. callback(results);
  146. }
  147. });
  148. };
  149. module.exports = new Project();