sectionTreeModel.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /**
  2. * Created by Zhong on 2017/12/21.
  3. */
  4. const mongoose = require('mongoose');
  5. const compleRationSectionTreeModel = mongoose.model('complementary_ration_section_tree');
  6. const compleRationModel = mongoose.model('complementary_ration_items');
  7. let counter = require('../../../public/counter/counter');
  8. let stdSectionTreeModel = require ('../../ration_repository/models/ration_section_tree').Model;
  9. class SectionTreeDao {
  10. getNewTreeID(callback){
  11. counter.counterDAO.getIDAfterCount(counter.moduleName.rationTree, 1, function (err, result) {
  12. if(err){
  13. callback(err, null);
  14. }
  15. else {
  16. callback(0, result.sequence_value);
  17. }
  18. });
  19. }
  20. //获取补充定额拼接章节树
  21. async getRationTree(userID, rationRepId, callback){
  22. try{
  23. let stdSectionTree = await stdSectionTreeModel.find({rationRepId: rationRepId, $or: [{isDeleted: null}, {isDeleted: false}]});
  24. let compleSectionTree = await compleRationSectionTreeModel.find({userId: userID, rationRepId: rationRepId, deleteInfo: null});
  25. let dropPids = [], rstCompleSectionTree = [];
  26. //mark std
  27. for(let i = 0, len = stdSectionTree.length; i < len; i++){
  28. stdSectionTree[i]._doc.type = 'std';
  29. }
  30. for(let i = 0, len = compleSectionTree.length; i < len; i++){
  31. //mark complementary
  32. compleSectionTree[i]._doc.type = 'complementary';
  33. if(compleSectionTree[i]['isFirst']){
  34. let updateSection = getUpdateSection(compleSectionTree[i]['ParentID'], stdSectionTree);
  35. if(updateSection) {
  36. updateSection._doc.NextSiblingID = compleSectionTree[i]['ID'];
  37. }
  38. else if(!updateSection && compleSectionTree[i]['ParentID'] !== -1){
  39. dropPids.push(compleSectionTree[i]['ParentID']);
  40. }
  41. }
  42. }
  43. function getUpdateSection(pid, datas){
  44. for(let i = 0, len = datas.length; i < len; i++){
  45. if(datas[i]['ParentID'] === pid && datas[i]['NextSiblingID'] === -1){
  46. return datas[i];
  47. }
  48. }
  49. return null;
  50. }
  51. //返回父节点未被删除的
  52. for(let i = 0, len = compleSectionTree.length; i < len; i++){
  53. if(dropPids.indexOf(compleSectionTree[i]['ParentID']) === -1){
  54. rstCompleSectionTree.push(compleSectionTree[i]);
  55. }
  56. }
  57. callback(0, stdSectionTree.concat(rstCompleSectionTree));
  58. }
  59. catch (err){
  60. callback(err, null);
  61. }
  62. }
  63. async updateSection(userID, compilationId, updateData, callback){
  64. try{
  65. for(let i = 0, len = updateData.length; i < len; i++){
  66. let updateObj = updateData[i];
  67. if(updateObj.updateType === 'new'){
  68. updateObj.updateData.userId = userID;
  69. updateObj.updateData.compilationId = compilationId;
  70. await compleRationSectionTreeModel.create(updateObj.updateData);
  71. }
  72. else if(updateObj.updateType === 'update'){
  73. await compleRationSectionTreeModel.update({userId: userID, rationRepId: updateObj.updateData.rationRepId, ID: updateObj.updateData.ID}, updateObj.updateData);
  74. if(updateObj.updateData.deleteInfo){
  75. await compleRationModel.update({userId: userID, sectionId: updateObj.updateData.ID},
  76. {$set: {deleteInfo: {deleted: true, deleteBy: userID, deleteDateTime: Date.now()}}}, {multi: true});
  77. }
  78. }
  79. }
  80. callback(0, 'success');
  81. }
  82. catch(err){
  83. callback(err, null);
  84. }
  85. }
  86. }
  87. export default SectionTreeDao;