|
@@ -33,12 +33,14 @@ module.exports = app => {
|
|
|
* @param {Array} params - 参数数组
|
|
|
* @param {Array} defaultParams - 默认参数数组
|
|
|
* @param {Number} nodeId - 指标节点Id
|
|
|
+ * @param {Number} tempalteId - 指标模板Id
|
|
|
* @private
|
|
|
*/
|
|
|
- _loadDefaultParam(params, defaultParams, nodeId) {
|
|
|
+ _loadDefaultParam(params, defaultParams, nodeId, templateId = 1) {
|
|
|
const newParams = JSON.parse(JSON.stringify(defaultParams));
|
|
|
for (const p of newParams) {
|
|
|
p.node_id = nodeId;
|
|
|
+ p.template_id = templateId;
|
|
|
params.push(p);
|
|
|
}
|
|
|
}
|
|
@@ -66,13 +68,16 @@ module.exports = app => {
|
|
|
* @param {String} rule - 指标规则
|
|
|
* @param {Number} nodeId - 指标节点id
|
|
|
* @param {Array} params - 参数列表
|
|
|
+ * @param {Number} templateId - 解析至的模板Id
|
|
|
* @returns {*[]}
|
|
|
* @private
|
|
|
*/
|
|
|
- _parseParam(rule, nodeId, params) {
|
|
|
+ _parseParam(rule, nodeId, params, templateId = 1) {
|
|
|
if (rule === '') { return ['', '']; }
|
|
|
const self = this;
|
|
|
- const ruleParams = rule.split('/');
|
|
|
+ const ruleParams = this.ctx.helper.splitByOperator(rule);
|
|
|
+ const codeParams = [];
|
|
|
+ const parseParams = [];
|
|
|
const nodeParams = this._filterNodeParams(params, nodeId);
|
|
|
const addParam = function (paramName) {
|
|
|
if (paramName === '') { return ''; }
|
|
@@ -82,7 +87,7 @@ module.exports = app => {
|
|
|
}
|
|
|
if (!param) {
|
|
|
const newParam = {
|
|
|
- template_id: 1,
|
|
|
+ template_id: templateId,
|
|
|
node_id: nodeId,
|
|
|
param_id: nodeParams.length + 1,
|
|
|
code: paramCode[nodeParams.length],
|
|
@@ -97,12 +102,17 @@ module.exports = app => {
|
|
|
}
|
|
|
};
|
|
|
if (ruleParams.length > 1) {
|
|
|
- const paramName1 = ruleParams[0];
|
|
|
- const paramCode1 = addParam(paramName1);
|
|
|
- const paramName2 = ruleParams.slice(1, ruleParams.length).join('/');
|
|
|
- const paramCode2 = addParam(paramName2);
|
|
|
- return [paramCode1 + '/' + paramCode2,
|
|
|
- paramCode1 + '(' + paramName1 + ')' + '/' + paramCode2 + '(' + paramName2 + ')'];
|
|
|
+ for (const i in ruleParams) {
|
|
|
+ if (!this.ctx.helper.isOperator(ruleParams[i])) {
|
|
|
+ const paramCode = addParam(ruleParams[i]);
|
|
|
+ codeParams.push(paramCode);
|
|
|
+ parseParams.push(paramCode + '(' + ruleParams[i] + ')');
|
|
|
+ } else {
|
|
|
+ codeParams.push(ruleParams[i]);
|
|
|
+ parseParams.push(ruleParams[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return [codeParams.join(''), parseParams.join('')];
|
|
|
} else {
|
|
|
const paramCode = addParam(rule);
|
|
|
return [paramCode, paramCode + '(' + rule + ')'];
|
|
@@ -140,15 +150,16 @@ module.exports = app => {
|
|
|
* @param {Object} excelSheet
|
|
|
* @param {Array} nodes - 解析后的指标节点
|
|
|
* @param {Array} indexes - 解析后的指标
|
|
|
+ * @param {Number} templateId - 解析至的模板Id
|
|
|
* @private
|
|
|
*/
|
|
|
- _parseSheetData(excelSheet, nodes, indexes, params) {
|
|
|
+ _parseSheetData(excelSheet, nodes, indexes, params, templateId = 1) {
|
|
|
for (const row of excelSheet.data) {
|
|
|
if (!row[0]) { continue; }
|
|
|
if (this.ctx.helper.ValidTemplateNodeCode(row[0])) {
|
|
|
if (!this.ctx.helper.findObj(nodes, 'code', row[0])) {
|
|
|
const node = {
|
|
|
- template_id: 1,
|
|
|
+ template_id: templateId,
|
|
|
node_id: nodes.length + 1,
|
|
|
node_pid: this._findParentId(row[0], nodes) || -1,
|
|
|
code: row[0],
|
|
@@ -165,6 +176,7 @@ module.exports = app => {
|
|
|
node_id: nodes.length,
|
|
|
index_id: indexes.length + 1,
|
|
|
rule: row[9] ? row[9] : '',
|
|
|
+ template_id: templateId,
|
|
|
};
|
|
|
if (row[4] === '√') {
|
|
|
index.index_type = 1;
|
|
@@ -175,7 +187,7 @@ module.exports = app => {
|
|
|
} else if (row[7] === '√') {
|
|
|
index.index_type = 4;
|
|
|
}
|
|
|
- [index.calc_rule, index.parse_rule] = this._parseParam(index.rule, index.node_id, params);
|
|
|
+ [index.calc_rule, index.parse_rule] = this._parseParam(index.rule, index.node_id, params, templateId);
|
|
|
indexes.push(index);
|
|
|
}
|
|
|
}
|
|
@@ -187,25 +199,29 @@ module.exports = app => {
|
|
|
* @param {Array} excelSheets - Excel文件中的全部工作表
|
|
|
* @returns {Promise<boolean>}
|
|
|
*/
|
|
|
- async importData(excelSheets) {
|
|
|
+ async importData(excelSheets, templateId = 1) {
|
|
|
let result = false;
|
|
|
const limit = 30000;
|
|
|
const transaction = await this.db.beginTransaction();
|
|
|
try {
|
|
|
const nodes = [], indexes = [], params = [];
|
|
|
- this._loadDefaultParam(params, paramConst.defaultGlobalParams, 0);
|
|
|
+ this._loadDefaultParam(params, paramConst.defaultGlobalParams, 0, templateId);
|
|
|
for (const sheet of excelSheets) {
|
|
|
- this._parseSheetData(sheet, nodes, indexes, params);
|
|
|
+ this._parseSheetData(sheet, nodes, indexes, params, templateId);
|
|
|
}
|
|
|
|
|
|
if (nodes.length > 0) {
|
|
|
- await transaction.delete(this.tableName, {template_id: 1});
|
|
|
- const insertResult = await transaction.insert(this.tableName, nodes);
|
|
|
- if (insertResult.affectedRows !== nodes.length) {
|
|
|
+ // 删除旧数据
|
|
|
+ await transaction.delete(this.tableName, {template_id: templateId});
|
|
|
+ // 插入指标节点数据
|
|
|
+ const nodeResult = await transaction.insert(this.tableName, nodes);
|
|
|
+ if (nodeResult.affectedRows !== nodes.length) {
|
|
|
throw '导入指标节点错误';
|
|
|
}
|
|
|
- await this.ctx.service.templateIndex.importData(indexes, transaction);
|
|
|
- await this.ctx.service.templateParam.importData(params, transaction);
|
|
|
+ // 插入指标数据
|
|
|
+ await this.ctx.service.templateIndex.importData(indexes, transaction, templateId);
|
|
|
+ // 插入指标参数
|
|
|
+ await this.ctx.service.templateParam.importData(params, transaction, templateId);
|
|
|
} else {
|
|
|
throw 'Excel文件中无标准的指标数据';
|
|
|
}
|