standard_lib.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. 'use strict';
  2. /**
  3. * 标准库基类(请勿使用该类创造示例)
  4. *
  5. * @author Mai
  6. * @date 2018/3/13
  7. * @version
  8. */
  9. const BaseTreeService = require('../base/base_tree_service');
  10. class StandardLib extends BaseTreeService {
  11. /**
  12. * 构造函数
  13. *
  14. * @param {Object} ctx - egg全局变量
  15. * @param {String} tableName - 表名
  16. * @return {void}
  17. */
  18. constructor(ctx, setting, tableName) {
  19. super(ctx, setting);
  20. this.tableName = tableName;
  21. this.stdType = '';
  22. }
  23. // 供子类继承(不同的标准库可能需要转换一下数据)
  24. convertData (data) {
  25. }
  26. /**
  27. * 实例中具体的dataId使用字段不相同,统一赋值到source下
  28. * @param {Object|Array} data
  29. */
  30. setSourceData(data) {
  31. if (!data) { return; }
  32. const datas = data instanceof Array ? data : [data];
  33. for (const d of datas) {
  34. if (d) {
  35. d.source = this.stdType + '-' + d[this.setting.mid] + '-' + d[this.setting.kid];
  36. }
  37. }
  38. }
  39. /**
  40. * 根据dataId和listId获取指定标准节点
  41. * @param {Number} listId - 标准库id
  42. * @param {Number} dataId - dataId(chapter_id|bill_id)
  43. * @returns {Promise<*>}
  44. */
  45. async getDataByDataId(listId, dataId) {
  46. this.initSqlBuilder();
  47. this.sqlBuilder.setAndWhere(this.setting.mid, {
  48. value: listId,
  49. operate: '='
  50. });
  51. this.sqlBuilder.setAndWhere(this.setting.kid, {
  52. value: dataId,
  53. operate: '='
  54. });
  55. const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
  56. const node = await this.db.queryOne(sql, sqlParam);
  57. this.setSourceData(node);
  58. this.convertData(node);
  59. return node;
  60. }
  61. /**
  62. * 根据full_path获取数据 full_path Like ‘1.2.3%’(传参full_path = '1.2.3%')
  63. * @param {Number} listId - 标准库id
  64. * @param {String} full_path - 路径
  65. * @return {Promise<void>}
  66. */
  67. async getDataByFullPath(listId, full_path) {
  68. this.initSqlBuilder();
  69. this.sqlBuilder.setAndWhere(this.setting.mid, {
  70. value: listId,
  71. operate: '=',
  72. });
  73. this.sqlBuilder.setAndWhere(this.setting.fullPath, {
  74. value: this.db.escape(full_path),
  75. operate: 'Like',
  76. });
  77. const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
  78. const resultData = await this.db.query(sql, sqlParam);
  79. this.setSourceData(resultData);
  80. this.convertData(resultData);
  81. return resultData;
  82. }
  83. /**
  84. * 根据full_path检索自己及所有父项
  85. * @param {Number} listId - 标准库id
  86. * @param {Array|String} fullPath - 节点完整路径
  87. * @returns {Promise<*>}
  88. * @private
  89. */
  90. async getFullLevelDataByFullPath(listId, fullPath) {
  91. const explodePath = this.ctx.helper.explodePath(fullPath);
  92. this.initSqlBuilder();
  93. this.sqlBuilder.setAndWhere(this.setting.mid, {
  94. value: listId,
  95. operate: '=',
  96. });
  97. this.sqlBuilder.setAndWhere(this.setting.fullPath, {
  98. value: explodePath,
  99. operate: 'in'
  100. });
  101. const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
  102. const data = await this.db.query(sql, sqlParam);
  103. this.setSourceData(data);
  104. this.convertData(data);
  105. return data;
  106. };
  107. }
  108. module.exports = StandardLib;