project_facade.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /**
  2. * Created by zhang on 2018/1/26.
  3. */
  4. let projectsModel = require("../../pm/models/project_schema");
  5. let async_n = require("async");
  6. let ration_model = require('../models/ration');
  7. let bill_model = require('../models/bills');
  8. let consts = require('../models/project_consts');
  9. let projectConsts = consts.projectConst;
  10. module.exports = {
  11. markUpdateProject:markUpdateProject,
  12. removeProjectMark:removeProjectMark,
  13. updateNodes:updateNodes
  14. };
  15. function updateNodes(datas,callback) {
  16. let tasks = [];
  17. for(let node of datas){
  18. tasks.push(updateOne(node))
  19. }
  20. async_n.parallel(tasks, function(err, results) {
  21. if (!err){
  22. callback(0, '', results);
  23. }
  24. else{
  25. console.log(err);
  26. callback(1, 'save project failed'+err.message, null);
  27. }
  28. });
  29. function updateOne(node) {
  30. if(node.type == projectConsts.BILLS){
  31. return function (asCallback) {
  32. bill_model.model.findOneAndUpdate({projectID: node.data.projectID, ID: node.data.ID,deleteInfo: null}, node.data,{new: true}, asCallback);
  33. }
  34. }else if(node.type ==projectConsts.RATION){
  35. return function (asCallback) {
  36. ration_model.model.findOneAndUpdate({projectID: node.data.projectID, ID: node.data.ID,deleteInfo: null}, node.data,{new: true}, asCallback);
  37. }
  38. }
  39. }
  40. }
  41. //data = {feeRateID:111111,projectID:1245}; type = feeRate
  42. async function markUpdateProject(data,type) {
  43. let tasks=[];
  44. let query = {deleteInfo:null};
  45. let result = null;
  46. if(type=="feeRate"){//更改了费率
  47. query['property.feeFile.id'] = data.feeRateID;
  48. }
  49. if(type=="unitFile"){//更改了单价文件
  50. query['property.unitPriceFile.id'] = data.unitFileID;//unitPriceFile
  51. }
  52. let projects =await projectsModel.find(query);
  53. for(let p of projects){
  54. if(p.ID!=data.projectID){//当前项目不用更新
  55. tasks.push(generateMarkTask(type,p.ID));
  56. }
  57. }
  58. if(tasks.length>0){
  59. result = await projectsModel.bulkWrite(tasks);
  60. }
  61. return result;
  62. }
  63. async function removeProjectMark(projectID) {
  64. return await projectsModel.findOneAndUpdate({ID:projectID},{"$unset":{"changeMark":1}});
  65. }
  66. function generateMarkTask(value,projectID) {
  67. let task = {
  68. updateOne:{
  69. filter:{
  70. ID:projectID
  71. },
  72. update:{
  73. changeMark:value
  74. }
  75. }
  76. };
  77. return task
  78. }