glj_facade.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. import UnitPriceFileModel from "../models/unit_price_file_model";
  11. import UnitPriceModel from "../models/unit_price_model";
  12. let evaluateListModel = mongoose.model("evaluate_list");
  13. let bidEvaluationMode = mongoose.model("bid_evaluation_list");
  14. let contractorListModel = mongoose.model("contractor_list");
  15. let projectGLJModel = mongoose.model("glj_list");
  16. let unitFileMode = mongoose.model("unit_price");
  17. async function changeUnitFile(projectData,unitFile,type,userID) {
  18. let projectId = projectData.projectID;
  19. let changeUnitPriceId = unitFile.id;
  20. let newName = unitFile.name;
  21. type = parseInt(type);
  22. let currentUnitPriceId = await ProjectModel.getUnitPriceFileId(projectId);
  23. let unitPriceFileModel = new UnitPriceFileModel();
  24. let insertData = null;
  25. if (type > 0) {
  26. let currentUnitPrice = await unitPriceFileModel.findDataByCondition({id: changeUnitPriceId});
  27. if (currentUnitPrice === null) {
  28. throw '不存在对应单价文件';
  29. }
  30. // 获取当前项目的rootProjectId
  31. let projectData = await ProjectModel.getProject(projectId);
  32. let rootProjectId = projectData.property.rootProjectID !== undefined ? projectData.property.rootProjectID : 0;
  33. insertData = JSON.parse(JSON.stringify(currentUnitPrice));
  34. insertData.root_project_id = rootProjectId;
  35. newName?insertData.name = newName:'';
  36. insertData.user_id = userID;
  37. delete insertData._id;
  38. delete insertData.ID;
  39. currentUnitPriceId = changeUnitPriceId;//从其它建设项目复制时,这个ID要变成被选中的来源的单价文件ID
  40. }
  41. // 获取即将更改的单价文件信息
  42. let targetUnitPriceFile = type === 0 ? await unitPriceFileModel.findDataByCondition({id: changeUnitPriceId}) :
  43. await unitPriceFileModel.add(insertData);
  44. if (targetUnitPriceFile === null) {
  45. throw '没有找到对应的单价文件';
  46. }
  47. // 查找对应单价文件的项目工料机数据
  48. let unitPriceModel = new UnitPriceModel();
  49. if(type ===1){//从其它项目复制,则先复制一份数据。
  50. let needCopyList = await unitPriceModel.findDataByCondition({unit_price_file_id: changeUnitPriceId}, null, false);
  51. if(needCopyList){
  52. // 过滤mongoose格式
  53. needCopyList = JSON.stringify(needCopyList);
  54. needCopyList = JSON.parse(needCopyList);
  55. let copyList = [];
  56. for(let n of needCopyList){
  57. delete n._id; // 删除原有id信息
  58. delete n.id;
  59. n.unit_price_file_id = targetUnitPriceFile.id;
  60. copyList.push(n);
  61. }
  62. copyList.length>0 ? await unitPriceModel.add(copyList):'';
  63. }
  64. }
  65. let copyResult = await unitPriceModel.copyNotExist(currentUnitPriceId, targetUnitPriceFile.id,projectId);
  66. // 复制成功后更改project数据
  67. if (!copyResult) {
  68. throw '复制数据失败';
  69. }
  70. let changeUnitPriceFileInfo = {
  71. id: targetUnitPriceFile.id,
  72. name: targetUnitPriceFile.name
  73. };
  74. let result = ProjectModel.changeUnitPriceFileInfo(projectId, changeUnitPriceFileInfo);
  75. if (!result) {
  76. throw '切换单价文件失败!';
  77. }
  78. return changeUnitPriceFileInfo;
  79. }
  80. async function updateEvaluateMaterial(data) {
  81. let modelMap = {
  82. "glj_list":projectGLJModel,
  83. "evaluate_list":evaluateListModel,
  84. "unit_price":unitFileMode,
  85. "bid_evaluation_list":bidEvaluationMode,
  86. "contractor_list":contractorListModel
  87. };
  88. for(let t of data.tasks){
  89. let model = modelMap[t.type];
  90. switch (t.action) {
  91. case "update":
  92. let query = {};
  93. if(t.hasOwnProperty('ID')) query['ID'] = t.ID;
  94. if(t.hasOwnProperty('id')) query['id'] = t.id;
  95. await model.update(query,t.doc);
  96. break;
  97. case "add":
  98. await model.create(t.doc);
  99. break;
  100. case "delete":
  101. await model.deleteOne({ID:t.ID});
  102. break;
  103. }
  104. }
  105. }