glj_facade.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /**
  2. * Created by zhang on 2019/1/2.
  3. */
  4. module.exports={ //先导出后require可以解决循环引用问题
  5. changeUnitFile:changeUnitFile,
  6. updateEvaluateMaterial:updateEvaluateMaterial
  7. };
  8. const mongoose = require('mongoose');
  9. const ProjectModel = require('../../pm/models/project_model').project;
  10. const commonFacade = require('../../main/facade/common_facade');
  11. const UnitPriceFileModel = require("../models/unit_price_file_model");
  12. const UnitPriceModel = require("../models/unit_price_model");
  13. const MixRatioModel = require("../models/mix_ratio_model");
  14. let evaluateListModel = mongoose.model("evaluate_list");
  15. let bidEvaluationMode = mongoose.model("bid_evaluation_list");
  16. let contractorListModel = mongoose.model("contractor_list");
  17. let projectGLJModel = mongoose.model("glj_list");
  18. let unitFileMode = mongoose.model("unit_price");
  19. async function changeUnitFile(projectData,unitFile,type,userID) {
  20. let projectId = projectData.projectID;
  21. let changeUnitPriceId = unitFile.id;
  22. let newName = unitFile.name;
  23. type = parseInt(type);
  24. let currentUnitPriceId = await commonFacade.getUnitPriceFileId(projectId);
  25. let unitPriceFileModel = new UnitPriceFileModel();
  26. let insertData = null;
  27. if (type > 0) {
  28. let currentUnitPrice = await unitPriceFileModel.findDataByCondition({id: changeUnitPriceId});
  29. if (currentUnitPrice === null) {
  30. throw '不存在对应单价文件';
  31. }
  32. // 获取当前项目的rootProjectId
  33. let projectData = await ProjectModel.getProject(projectId);
  34. let rootProjectId = projectData.property.rootProjectID !== undefined ? projectData.property.rootProjectID : 0;
  35. insertData = JSON.parse(JSON.stringify(currentUnitPrice));
  36. insertData.root_project_id = rootProjectId;
  37. newName?insertData.name = newName:'';
  38. insertData.user_id = userID;
  39. delete insertData._id;
  40. delete insertData.ID;
  41. }
  42. // 获取即将更改的单价文件信息
  43. let targetUnitPriceFile = type === 0 ? await unitPriceFileModel.findDataByCondition({id: changeUnitPriceId}) :
  44. await unitPriceFileModel.add(insertData);
  45. if (targetUnitPriceFile === null) {
  46. throw '没有找到对应的单价文件';
  47. }
  48. // 查找对应单价文件的项目工料机数据
  49. let unitPriceModel = new UnitPriceModel();
  50. if(type ===1){//从其它项目复制,则先复制一份数据。
  51. let needCopyList = await unitPriceModel.findDataByCondition({unit_price_file_id: changeUnitPriceId}, null, false);
  52. if(needCopyList){
  53. // 过滤mongoose格式
  54. needCopyList = JSON.stringify(needCopyList);
  55. needCopyList = JSON.parse(needCopyList);
  56. let copyList = [];
  57. for(let n of needCopyList){
  58. delete n._id; // 删除原有id信息
  59. delete n.id;
  60. n.unit_price_file_id = targetUnitPriceFile.id;
  61. copyList.push(n);
  62. }
  63. copyList.length>0 ? await unitPriceModel.add(copyList):'';
  64. //也要复制一份组成物信息和材料计算信息
  65. let mixRatioModel = new MixRatioModel();
  66. await mixRatioModel.copyNotExist(changeUnitPriceId, targetUnitPriceFile.id,{},true);//复制组成物
  67. }
  68. }
  69. let copyResult = await unitPriceModel.copyNotExist(currentUnitPriceId, targetUnitPriceFile.id,projectId);
  70. // 复制成功后更改project数据
  71. if (!copyResult) {
  72. throw '复制数据失败';
  73. }
  74. let changeUnitPriceFileInfo = {
  75. id: targetUnitPriceFile.id,
  76. name: targetUnitPriceFile.name
  77. };
  78. let result = ProjectModel.changeUnitPriceFileInfo(projectId, changeUnitPriceFileInfo);
  79. if (!result) {
  80. throw '切换单价文件失败!';
  81. }
  82. return changeUnitPriceFileInfo;
  83. }
  84. async function updateEvaluateMaterial(data) {
  85. let modelMap = {
  86. "glj_list":projectGLJModel,
  87. "evaluate_list":evaluateListModel,
  88. "unit_price":unitFileMode,
  89. "bid_evaluation_list":bidEvaluationMode,
  90. "contractor_list":contractorListModel
  91. };
  92. for(let t of data.tasks){
  93. let model = modelMap[t.type];
  94. switch (t.action) {
  95. case "update":
  96. let query = {};
  97. if(t.hasOwnProperty('ID')) query['ID'] = t.ID;
  98. if(t.hasOwnProperty('id')) query['id'] = t.id;
  99. await model.update(query,t.doc);
  100. break;
  101. case "add":
  102. await model.create(t.doc);
  103. break;
  104. case "delete":
  105. await model.deleteOne({ID:t.ID});
  106. break;
  107. }
  108. }
  109. }