standard_lib.js 3.8 KB

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