glj_facade.js 4.2 KB

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