block_lib_facade.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /**
  2. * Created by CSL on 2018-12-17.
  3. */
  4. let mongoose = require('mongoose');
  5. let blModel = mongoose.model('blockLibsModel');
  6. let uuid = require('../../../public/web/uuid');
  7. module.exports = {
  8. getLibNames: getLibNames,
  9. getLib: getLib,
  10. getLibNamesAndFirstLib: getLibNamesAndFirstLib,
  11. copyTemplateLib: copyTemplateLib,
  12. saveBlock: saveBlock
  13. };
  14. // userID、compilationID
  15. async function getLibNames(data) {
  16. let libNames = await blModel.find({userID: data.userID, compilationID: data.compilationID}, ["libID","libName","-_id"]);
  17. // 块模板库改成组价模板,兼容旧数据
  18. const bulks = [];
  19. const reg = /块模板库/;
  20. libNames.forEach(lib => {
  21. if (reg.test(lib.libName)) {
  22. const newLibName = lib.libName.replace('块模板库', '组价模板');
  23. lib.libName = newLibName;
  24. bulks.push({
  25. updateOne: {
  26. filter: { libID: lib.libID },
  27. update: { libName: newLibName }
  28. }
  29. });
  30. }
  31. });
  32. if (bulks.length) {
  33. await blModel.bulkWrite(bulks);
  34. }
  35. return libNames;
  36. };
  37. // libID
  38. async function getLib(data) {
  39. let lib = await blModel.findOne({libID: data.libID});
  40. return lib;
  41. };
  42. // userID、compilationID
  43. async function getLibNamesAndFirstLib(data) {
  44. let libNames = await getLibNames(data);
  45. let lib = null;
  46. if (libNames.length == 0){
  47. lib = await copyTemplateLib(data.userID, data.userName, data.compilationID);
  48. libNames.push({libID: lib.libID, libName: lib.libName});
  49. }
  50. else{
  51. lib = await getLib(libNames[0]);
  52. }
  53. return {libNames: libNames, firstLib: lib};
  54. };
  55. async function copyTemplateLib(userID, userName, compilationID) {
  56. // let template = await getLib({libID: '00000000'});
  57. let template = {
  58. libID: "00000000",
  59. libName: "模板",
  60. datas: [
  61. {
  62. "ID": "00000001",
  63. "ParentID": "-1",
  64. "NextSiblingID": "00000002",
  65. "type": 1,
  66. "nodeName": "分类1"
  67. },
  68. {
  69. "ID": "00000002",
  70. "ParentID": "-1",
  71. "NextSiblingID": "00000003",
  72. "type": 1,
  73. "nodeName": "分类2"
  74. },
  75. {
  76. "ID": "00000003",
  77. "ParentID": "-1",
  78. "NextSiblingID": "-1",
  79. "type": 1,
  80. "nodeName": "分类3"
  81. }
  82. ],
  83. share: {
  84. "shareName": "共享",
  85. "shareTo": []
  86. }
  87. };
  88. let newLib = {
  89. userID: userID,
  90. compilationID: compilationID,
  91. libID: uuid.v1(),
  92. libName: `${userName}的组价模板`,
  93. datas: template.datas,
  94. share: template.share
  95. };
  96. newLib.share.shareName = `共享-${newLib.libName}`;
  97. await blModel.create(newLib);
  98. // console.log(JSON.stringify(newLib));
  99. return newLib;
  100. };
  101. /*------------------------------------------------------------------------------
  102. 参数: {libID: n, nodeID: m, create: {node} | delete: true | update: {A:'xxx', B:'xxx'} }
  103. 说明: libID、nodeID 必须。 create|update|delete三选一。
  104. create属性值:完整的node节点数据。
  105. delete属性值:固定为true(false没有实际意义)。
  106. update属性值:列出多个要修改的结点属性(键值对组成的对象)。
  107. 示例: {libID: 3, nodeID: 5, create: {....}}
  108. {libID: 3, nodeID: 5, delete: true}
  109. {libID: 3, nodeID: 5, update: {nodeName: 'xxx', children: [...]} }
  110. ------------------------------------------------------------------------------*/
  111. async function saveBlock(data) {
  112. if (data.create) {
  113. await blModel.update({libID: data.libID}, {$addToSet: {datas: data.create}});
  114. }
  115. if (data.delete) {
  116. console.log(JSON.stringify(data));
  117. console.log(data.nodeID);
  118. await blModel.update({libID: data.libID}, {$pull: {datas: {ID: data.nodeID}}});
  119. if (data.delete.nodeType == 1){ // 同步删除所有子结点
  120. await blModel.update({libID: data.libID}, {$pull: {datas: {ParentID: data.nodeID}}});
  121. }
  122. }
  123. else if (data.update){
  124. let doc = await blModel.findOne({libID: data.libID});
  125. let datas = doc._doc.datas;
  126. for (let i = 0; i < datas.length; i++) {
  127. if (datas[i].ID == data.nodeID) {
  128. for (let pn in data.update){
  129. datas[i][pn] = data.update[pn];
  130. };
  131. await doc.save();
  132. break;
  133. }
  134. };
  135. };
  136. return 'saveBlock.OK';
  137. };