| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 | 'use strict';/** * Created by Tony on 2020/6/6. * 用户自定义显示报表模板组织 * @author TonyKang * @date 2019/05/05 * @version */const BaseService = require('../base/base_service');module.exports = app => {    class RptTreeNodeCust extends BaseService {        /**         * 构造函数         *         * @param {Object} ctx - egg全局变量         * @return {void}         */        constructor(ctx) {            super(ctx);            this.tableName = 'rpt_tree_node_cust';            this.dataId = 'id';        }        async removeCustFolder(id) {            this.transaction = await this.db.beginTransaction();            try {                const rst = await this.transaction.delete(this.tableName, { id });                await this.transaction.commit();                return rst;            } catch (ex) {                console.log(ex);                // 回滚                await this.transaction.rollback();            }        }        async getCustFoldersByUserId(userId) {            this.initSqlBuilder();            this.sqlBuilder.setAndWhere('cust_acc_id', {                value: userId,                operate: '=',            });            this.sqlBuilder.columns = ['id', 'cust_acc_id', 'rpt_tpl_items'];            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);            const list = await this.db.query(sql, sqlParam);            return list;        }        async getCustFolderByTenderId(tenderId) {            this.initSqlBuilder();            this.sqlBuilder.setAndWhere('tender_id', {                value: tenderId,                operate: '=',            });            this.sqlBuilder.columns = ['id', 'cust_acc_id', 'tender_id', 'rpt_tpl_items'];            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);            const list = await this.db.query(sql, sqlParam);            return list;        }        async createCustNode(cust_acc_id, newRptItems) {            let rst = null;            this.transaction = await this.db.beginTransaction();            try {                const data = {                    cust_acc_id,                    tender_id: -1,                    rpt_tpl_items: newRptItems,                };                // console.log('createNode:');                // console.log(data);                rst = await this.transaction.insert(this.tableName, data);                await this.transaction.commit();            } catch (ex) {                console.log(ex);                // 回滚                await this.transaction.rollback();            } finally {                return rst;            }        }        async createCustNodeByTenderId(cust_acc_id, tender_id, newRptItems) {            let rst = null;            this.transaction = await this.db.beginTransaction();            try {                const data = {                    cust_acc_id: -1,                    tender_id,                    rpt_tpl_items: newRptItems,                };                // console.log('createNode:');                // console.log(data);                rst = await this.transaction.insert(this.tableName, data);                await this.transaction.commit();            } catch (ex) {                console.log(ex);                // 回滚                await this.transaction.rollback();            } finally {                return rst;            }        }        async updateCustNodeByTenderId(cust_acc_id, tender_id, newNodeItems) {            let rst = null;            try {                const custNode = await this.getCustFolderByTenderId(tender_id);                // console.log('query Node:');                // console.log(custNode);                if (custNode.length > 0) {                    this.transaction = await this.db.beginTransaction();                    custNode[0].rpt_tpl_items = newNodeItems;                    custNode[0].cust_acc_id = cust_acc_id;                    rst = await this.transaction.update(this.tableName, custNode[0]);                    this.transaction.commit();                } else {                    rst = await this.createCustNodeByTenderId(cust_acc_id, tender_id, newNodeItems);                }            } catch (ex) {                console.log(ex);                this.transaction.rollback();                rst = null;            } finally {                return rst;            }        }        async updateCustNode(cust_acc_id, newNodeItems, custSelectKeys) {            let rst = null;            try {                const custNode = await this.getCustFoldersByUserId(cust_acc_id);                if (custNode.length > 0) {                    this.transaction = await this.db.beginTransaction();                    const orgNodeItems = JSON.parse(custNode[0].rpt_tpl_items);                    orgNodeItems[custSelectKeys[0]] = newNodeItems.common;                    orgNodeItems[custSelectKeys[1]] = newNodeItems.customize;                    // custNode[0].rpt_tpl_items = newNodeItems;                    custNode[0].rpt_tpl_items = JSON.stringify(orgNodeItems);                    rst = await this.transaction.update(this.tableName, custNode[0]);                    this.transaction.commit();                } else {                    const nodeItems = {};                    nodeItems[custSelectKeys[0]] = newNodeItems.common;                    nodeItems[custSelectKeys[1]] = newNodeItems.customize;                    // rst = await this.createCustNode(cust_acc_id, newNodeItems);                    rst = await this.createCustNode(cust_acc_id, JSON.stringify(nodeItems));                }            } catch (ex) {                console.log(ex);                this.transaction.rollback();                rst = null;            } finally {                return rst;            }        }    }    return RptTreeNodeCust;};
 |