'use strict'; /** * 标准库基类(请勿使用该类创造示例) * * @author Mai * @date 2018/3/13 * @version */ const BaseTreeService = require('../base/base_tree_service'); class StandardLib extends BaseTreeService { /** * 构造函数 * * @param {Object} ctx - egg全局变量 * @param {String} tableName - 表名 * @return {void} */ constructor(ctx, setting, tableName) { super(ctx, setting); this.tableName = tableName; this.stdType = ''; } /** * 实例中具体的dataId使用字段不相同,统一赋值到source下 * @param {Object|Array} data */ setSourceData(data) { if (!data) { return; } const datas = data instanceof Array ? data : [data]; for (const d of datas) { if (d) { d.source = this.stdType + '-' + d[this.setting.mid] + '-' + d[this.setting.kid]; } } } /** * 根据dataId和listId获取指定标准节点 * @param {Number} listId - 标准库id * @param {Number} dataId - dataId(chapter_id|bill_id) * @returns {Promise<*>} */ async getDataByDataId(listId, dataId) { this.initSqlBuilder(); this.sqlBuilder.setAndWhere(this.setting.mid, { value: listId, operate: '=' }); this.sqlBuilder.setAndWhere(this.setting.kid, { value: dataId, operate: '=' }); const [sql, sqlParam] = this.sqlBuilder.build(this.tableName); const node = await this.db.queryOne(sql, sqlParam); this.setSourceData(node); return node; } /** * 根据full_path获取数据 full_path Like ‘1.2.3%’(传参full_path = '1.2.3%') * @param {Number} listId - 标准库id * @param {String} full_path - 路径 * @return {Promise} */ async getDataByFullPath(listId, full_path) { this.initSqlBuilder(); this.sqlBuilder.setAndWhere(this.setting.mid, { value: listId, operate: '=', }); this.sqlBuilder.setAndWhere(this.setting.fullPath, { value: this.db.escape(full_path), operate: 'Like', }); const [sql, sqlParam] = this.sqlBuilder.build(this.tableName); const resultData = await this.db.query(sql, sqlParam); this.setSourceData(resultData); return resultData; } /** * 根据full_path检索自己及所有父项 * @param {Number} listId - 标准库id * @param {Array|String} fullPath - 节点完整路径 * @returns {Promise<*>} * @private */ async getFullLevelDataByFullPath(listId, fullPath) { const explodePath = this.ctx.helper.explodePath(fullPath); this.initSqlBuilder(); this.sqlBuilder.setAndWhere(this.setting.mid, { value: listId, operate: '=', }); this.sqlBuilder.setAndWhere(this.setting.fullPath, { value: explodePath, operate: 'in' }); const [sql, sqlParam] = this.sqlBuilder.build(this.tableName); const data = await this.db.query(sql, sqlParam); this.setSourceData(data); return data; }; } module.exports = StandardLib;