123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- 'use strict';
- /**
- * 标段项目节数据模型
- *
- * @author CaiAoLin
- * @date 2017/12/1
- * @version
- */
- module.exports = app => {
- class TenderNode extends app.BaseService {
- /**
- * 构造函数
- *
- * @param {Object} ctx - egg全局变量
- * @return {void}
- */
- constructor(ctx) {
- super(ctx);
- this.tableName = 'tender_node';
- }
- /**
- * 新增数据
- *
- * @param {Object} data - 新增的数据(可批量)
- * @param {Number} tenderId - 标段id
- * @return {Boolean} - 返回新增的结果
- */
- async add(data, tenderId) {
- this.transaction = await this.db.beginTransaction();
- let result = false;
- try {
- if (tenderId <= 0) {
- throw '标段id错误';
- }
- if (data instanceof Array) {
- // 数组则为批量插入
- if (data.length <= 0) {
- throw '插入数据为空';
- }
- // 整理数据
- const insertData = [];
- for (const tmp of data) {
- tmp.template_id = tmp.id;
- tmp.template_pid = tmp.pid;
- tmp.tender_id = tenderId;
- delete tmp.id;
- delete tmp.pid;
- insertData.push(tmp);
- }
- const operate = await this.transaction.insert(this.tableName, insertData);
- result = operate.affectedRows > 0;
- } else {
- // 对象则单个插入
- }
- } catch (error) {
- result = false;
- }
- return result;
- }
- /**
- * 根据层级获取数据
- *
- * @param {Number} tenderId - 标段id
- * @param {Boolean} showAll - 是否显示全部
- * @return {Array} - 返回数据
- */
- async getDataByTenderId(tenderId, showAll = false) {
- if (tenderId <= 0) {
- return [];
- }
- const showLevel = !showAll ? 2 : -1;
- this.initSqlBuilder();
- this.sqlBuilder.setAndWhere('tender_id', {
- value: tenderId,
- operate: '=',
- });
- if (showLevel > 0) {
- this.sqlBuilder.setAndWhere('level', {
- value: showLevel,
- operate: '<=',
- });
- }
- const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
- const data = await this.db.query(sql, sqlParam);
- return data;
- }
- /**
- * 根据节点Id获取数据
- *
- * @param {Number} tenderId - 标段id
- * @param {Number} nodeId - 项目节/工程量清单节点id
- * @return {Object} - 返回查询到的节点数据
- */
- async getDataByNodeId(tenderId, nodeId) {
- if ((nodeId <= 0) || (tenderId <= 0)) {
- return undefined;
- }
- this.initSqlBuilder();
- this.sqlBuilder.setAndWhere('tender_id', {
- value: tenderId,
- operate: '=',
- });
- this.sqlBuilder.setAndWhere('template_id', {
- value: nodeId,
- operate: '=',
- });
- const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
- const data = await this.db.queryOne(sql, sqlParam);
- return data;
- }
- /**
- * select的全部后兄弟节点,Order自增
- *
- * @param {Object} select - 选中的节点
- * @return {Array} - 自增后的数据
- * @private
- */
- async _updateSelectNextsOrder(select) {
- this.initSqlBuilder();
- this.sqlBuilder.setAndWhere('tender_id', {
- value: select.tender_id,
- operate: '=',
- });
- this.sqlBuilder.setAndWhere('order', {
- value: select.order + 1,
- operate: '>=',
- });
- this.sqlBuilder.setAndWhere('template_pid', {
- value: select.template_pid,
- operate: '=',
- });
- this.sqlBuilder.setUpdateData('order', {
- value: 1,
- selfOperate: '+',
- });
- // sql = update this.tableName set order = order + 1 where (tender_id = select.tender_id) && (pid = select.pid) && (order >= select.order+1)
- const [sql, sqlParam] = this.sqlBuilder.build(this.tableName, 'update');
- const data = await this.transaction.query(sql, sqlParam);
- return data;
- }
- /**
- * 根据selectData, data 新增数据
- * @param {Number} tenderId - 标段id
- * @param {Object} selectData - 选中节点的数据
- * @param {Object} data - 新增节点的初始数据
- * @return {Object} - 新增结果
- * @private
- */
- async _addNodeData(tenderId, selectData, data) {
- if (tenderId <= 0) {
- return undefined;
- }
- if (!data) {
- data = {};
- }
- data.tender_id = tenderId;
- data.template_id = 15;
- data.template_pid = selectData.template_pid;
- data.level = selectData.level;
- data.order = selectData.order + 1;
- data.full_path = selectData.full_path.replace(selectData.template_id, data.template_id);
- const result = await this.transaction.insert(this.tableName, data);
- return result;
- }
- /**
- * tenderId标段中, 在selectId后新增一个节点
- * @param {Number} tenderId - 标段id
- * @param {Number} selectId - 选中节点id
- * @param {Object} data - 新增节点初始化数据
- * @return {Array} 新增后的数据,其他被修改的数据
- */
- async addNode(tenderId, selectId, data) {
- if ((tenderId <= 0) || (selectId <= 0)) {
- return undefined;
- }
- const selectData = await this.getDataByNodeId(tenderId, selectId);
- this.transaction = await this.db.beginTransaction();
- let resultData = [];
- if (selectData) {
- try {
- // 选中节点的所有后兄弟节点,order+1
- const updateData = await this._updateSelectNextsOrder(selectData);
- console.log(updateData);
- // 数据库创建新增节点数据
- const addData = await this._addNodeData(tenderId, selectData, data);
- console.log(addData);
- resultData = await this.transaction.commit();
- console.log(resultData);
- resultData.concat(updateData, addData);
- } catch (err) {
- await this.transaction.rollback();
- throw err;
- }
- } else {
- throw '新增节点数据错误';
- }
- return resultData;
- }
- }
- return TenderNode;
- };
|