|
@@ -47,7 +47,7 @@ module.exports = app => {
|
|
* @param {Array|Object} data - 新增数据
|
|
* @param {Array|Object} data - 新增数据
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Object} transaction - 新增事务
|
|
* @param {Object} transaction - 新增事务
|
|
- * @returns {Promise<boolean>} - {Promise<是否正确新增成功>}
|
|
|
|
|
|
+ * @return {Promise<boolean>} - {Promise<是否正确新增成功>}
|
|
*/
|
|
*/
|
|
async innerAdd(data, tenderId, transaction) {
|
|
async innerAdd(data, tenderId, transaction) {
|
|
const datas = data instanceof Array ? data : [data];
|
|
const datas = data instanceof Array ? data : [data];
|
|
@@ -183,7 +183,7 @@ module.exports = app => {
|
|
/**
|
|
/**
|
|
* 根据主键id获取数据
|
|
* 根据主键id获取数据
|
|
* @param {Array|Number} id - 主键id
|
|
* @param {Array|Number} id - 主键id
|
|
- * @returns {Promise<*>}
|
|
|
|
|
|
+ * @return {Promise<*>}
|
|
*/
|
|
*/
|
|
async getDataByIds(id) {
|
|
async getDataByIds(id) {
|
|
const ids = id instanceof Array ? id : [id];
|
|
const ids = id instanceof Array ? id : [id];
|
|
@@ -203,7 +203,7 @@ module.exports = app => {
|
|
* 根据标准清单源检索
|
|
* 根据标准清单源检索
|
|
* @param tenderId
|
|
* @param tenderId
|
|
* @param source
|
|
* @param source
|
|
- * @returns {Promise<*>}
|
|
|
|
|
|
+ * @return {Promise<*>}
|
|
*/
|
|
*/
|
|
async getDataBySource(tenderId, source) {
|
|
async getDataBySource(tenderId, source) {
|
|
this.initSqlBuilder();
|
|
this.initSqlBuilder();
|
|
@@ -323,7 +323,7 @@ module.exports = app => {
|
|
* 根据 父节点id 获取孙子节点
|
|
* 根据 父节点id 获取孙子节点
|
|
* @param tenderId
|
|
* @param tenderId
|
|
* @param nodeId
|
|
* @param nodeId
|
|
- * @returns {Promise<void>}
|
|
|
|
|
|
+ * @return {Promise<void>}
|
|
*/
|
|
*/
|
|
async getPosterityByParentId(tenderId, nodeId) {
|
|
async getPosterityByParentId(tenderId, nodeId) {
|
|
if (tenderId <= 0 || !nodeId) {
|
|
if (tenderId <= 0 || !nodeId) {
|
|
@@ -403,7 +403,7 @@ module.exports = app => {
|
|
* 根据full_path检索自己及所有父项
|
|
* 根据full_path检索自己及所有父项
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Array|String} fullPath - 节点完整路径
|
|
* @param {Array|String} fullPath - 节点完整路径
|
|
- * @returns {Promise<*>}
|
|
|
|
|
|
+ * @return {Promise<*>}
|
|
* @private
|
|
* @private
|
|
*/
|
|
*/
|
|
async getFullLevelDataByFullPath(tenderId, fullPath) {
|
|
async getFullLevelDataByFullPath(tenderId, fullPath) {
|
|
@@ -416,26 +416,27 @@ module.exports = app => {
|
|
});
|
|
});
|
|
this.sqlBuilder.setAndWhere('full_path', {
|
|
this.sqlBuilder.setAndWhere('full_path', {
|
|
value: explodePath,
|
|
value: explodePath,
|
|
- operate: 'in'
|
|
|
|
|
|
+ operate: 'in',
|
|
});
|
|
});
|
|
|
|
|
|
const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
|
|
const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
|
|
const data = await this.db.query(sql, sqlParam);
|
|
const data = await this.db.query(sql, sqlParam);
|
|
|
|
|
|
return data;
|
|
return data;
|
|
- };
|
|
|
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
/**
|
|
* 获取sql条件语句片段,仅供search、searchRange方法使用
|
|
* 获取sql条件语句片段,仅供search、searchRange方法使用
|
|
* @param {Object} where - 条件参数
|
|
* @param {Object} where - 条件参数
|
|
- * @returns {*[]}
|
|
|
|
|
|
+ * @return {*[]}
|
|
* e.g.
|
|
* e.g.
|
|
* where = {type: 'And', value: 'A', operate: '=', fields: ['code', 'name']}
|
|
* where = {type: 'And', value: 'A', operate: '=', fields: ['code', 'name']}
|
|
* return [sql: 'And (?? = \'A\' Or ?? = \'A\')', sqlParam: ['code', name]]
|
|
* return [sql: 'And (?? = \'A\' Or ?? = \'A\')', sqlParam: ['code', name]]
|
|
* @private
|
|
* @private
|
|
*/
|
|
*/
|
|
_getWhereString(where) {
|
|
_getWhereString(where) {
|
|
- const sqlParam = [], sqlPart = [];
|
|
|
|
|
|
+ const sqlParam = [],
|
|
|
|
+ sqlPart = [];
|
|
const values = where.value instanceof Array ? where.value : [where.value];
|
|
const values = where.value instanceof Array ? where.value : [where.value];
|
|
const fields = where.fields instanceof Array ? where.fields : [where.fields];
|
|
const fields = where.fields instanceof Array ? where.fields : [where.fields];
|
|
for (const field of fields) {
|
|
for (const field of fields) {
|
|
@@ -452,7 +453,7 @@ module.exports = app => {
|
|
*
|
|
*
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Object} key - 查询信息
|
|
* @param {Object} key - 查询信息
|
|
- * @returns {Promise<void>}
|
|
|
|
|
|
+ * @return {Promise<void>}
|
|
*/
|
|
*/
|
|
async search(tenderId, key) {
|
|
async search(tenderId, key) {
|
|
let sql = 'Select * From ?? Where';
|
|
let sql = 'Select * From ?? Where';
|
|
@@ -473,7 +474,7 @@ module.exports = app => {
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Object} key - 查询信息
|
|
* @param {Object} key - 查询信息
|
|
* @param {Array} range - 查询范围
|
|
* @param {Array} range - 查询范围
|
|
- * @returns {Promise<void>}
|
|
|
|
|
|
+ * @return {Promise<void>}
|
|
*/
|
|
*/
|
|
async searchRange(tenderId, key, range) {
|
|
async searchRange(tenderId, key, range) {
|
|
let sql = 'Select * From ?? Where';
|
|
let sql = 'Select * From ?? Where';
|
|
@@ -501,11 +502,11 @@ module.exports = app => {
|
|
* @param {Number} pid - 父节点id
|
|
* @param {Number} pid - 父节点id
|
|
* @param {Number} order - order取值
|
|
* @param {Number} order - order取值
|
|
* @param {String} orderOperate - order比较操作符
|
|
* @param {String} orderOperate - order比较操作符
|
|
- * @returns {Promise<void>}
|
|
|
|
|
|
+ * @return {Promise<void>}
|
|
*/
|
|
*/
|
|
async addUpChildren(tenderId, pid, order, orderOperate) {
|
|
async addUpChildren(tenderId, pid, order, orderOperate) {
|
|
this.initSqlBuilder();
|
|
this.initSqlBuilder();
|
|
- const sql = ['SELECT SUM(??) As value FROM ?? ', ' WHERE ']
|
|
|
|
|
|
+ const sql = ['SELECT SUM(??) As value FROM ?? ', ' WHERE '];
|
|
const sqlParam = ['total_price', this.tableName];
|
|
const sqlParam = ['total_price', this.tableName];
|
|
sql.push(' ?? = ' + tenderId);
|
|
sql.push(' ?? = ' + tenderId);
|
|
sqlParam.push('tender_id');
|
|
sqlParam.push('tender_id');
|
|
@@ -524,14 +525,14 @@ module.exports = app => {
|
|
* @param {Number} parentId - 父节点id
|
|
* @param {Number} parentId - 父节点id
|
|
* @param {Number} order - 自增起始order(含)
|
|
* @param {Number} order - 自增起始order(含)
|
|
* @param {Number} incre - 自增量
|
|
* @param {Number} incre - 自增量
|
|
- * @returns {Promise<*>}
|
|
|
|
|
|
+ * @return {Promise<*>}
|
|
* @private
|
|
* @private
|
|
*/
|
|
*/
|
|
async _updateChildrenOrderAfter(tenderId, parentId, order, incre = 1) {
|
|
async _updateChildrenOrderAfter(tenderId, parentId, order, incre = 1) {
|
|
this.initSqlBuilder();
|
|
this.initSqlBuilder();
|
|
this.sqlBuilder.setAndWhere('tender_id', {
|
|
this.sqlBuilder.setAndWhere('tender_id', {
|
|
value: tenderId,
|
|
value: tenderId,
|
|
- operate: '='
|
|
|
|
|
|
+ operate: '=',
|
|
});
|
|
});
|
|
this.sqlBuilder.setAndWhere('order', {
|
|
this.sqlBuilder.setAndWhere('order', {
|
|
value: order,
|
|
value: order,
|
|
@@ -617,7 +618,7 @@ module.exports = app => {
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Object} parentData - 父项数据
|
|
* @param {Object} parentData - 父项数据
|
|
* @param {Object} data - 新增节点,初始数据
|
|
* @param {Object} data - 新增节点,初始数据
|
|
- * @returns {Promise<*>} - 新增结果
|
|
|
|
|
|
+ * @return {Promise<*>} - 新增结果
|
|
* @private
|
|
* @private
|
|
*/
|
|
*/
|
|
async _addChildNodeData(tenderId, parentData, data) {
|
|
async _addChildNodeData(tenderId, parentData, data) {
|
|
@@ -657,25 +658,25 @@ module.exports = app => {
|
|
* @param tenderId
|
|
* @param tenderId
|
|
* @param parentData
|
|
* @param parentData
|
|
* @param data
|
|
* @param data
|
|
- * @returns {Promise<void>}
|
|
|
|
|
|
+ * @return {Promise<void>}
|
|
* @private
|
|
* @private
|
|
*/
|
|
*/
|
|
async _addChildAutoOrder(tenderId, parentData, data) {
|
|
async _addChildAutoOrder(tenderId, parentData, data) {
|
|
const self = this;
|
|
const self = this;
|
|
- const findPreData = function (list, a) {
|
|
|
|
|
|
+ const findPreData = function(list, a) {
|
|
if (!list || list.length === 0) { return null; }
|
|
if (!list || list.length === 0) { return null; }
|
|
for (let i = 0, iLen = list.length; i < iLen; i++) {
|
|
for (let i = 0, iLen = list.length; i < iLen; i++) {
|
|
if (self.ctx.helper.compareCode(list[i].code, a.code) > 0) {
|
|
if (self.ctx.helper.compareCode(list[i].code, a.code) > 0) {
|
|
- return i > 0 ? list[i-1] : null;
|
|
|
|
|
|
+ return i > 0 ? list[i - 1] : null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return list[list.length -1];
|
|
|
|
- }
|
|
|
|
|
|
+ return list[list.length - 1];
|
|
|
|
+ };
|
|
|
|
|
|
const pid = parentData ? parentData.ledger_id : rootId;
|
|
const pid = parentData ? parentData.ledger_id : rootId;
|
|
const children = await this.getChildrenByParentId(tenderId, pid);
|
|
const children = await this.getChildrenByParentId(tenderId, pid);
|
|
const preData = findPreData(children, data);
|
|
const preData = findPreData(children, data);
|
|
- let parent = null;
|
|
|
|
|
|
+ const parent = null;
|
|
if (!preData || children.indexOf(preData) < children.length - 1) {
|
|
if (!preData || children.indexOf(preData) < children.length - 1) {
|
|
await this._updateChildrenOrderAfter(tenderId, pid, preData ? preData.order + 1 : 1);
|
|
await this._updateChildrenOrderAfter(tenderId, pid, preData ? preData.order + 1 : 1);
|
|
}
|
|
}
|
|
@@ -735,8 +736,8 @@ module.exports = app => {
|
|
const result = {
|
|
const result = {
|
|
name: stdData.name,
|
|
name: stdData.name,
|
|
unit: stdData.unit,
|
|
unit: stdData.unit,
|
|
- source: stdData.source
|
|
|
|
- }
|
|
|
|
|
|
+ source: stdData.source,
|
|
|
|
+ };
|
|
result.code = stdData.code ? stdData.code : '';
|
|
result.code = stdData.code ? stdData.code : '';
|
|
result.b_code = stdData.b_code ? stdData.b_code : '';
|
|
result.b_code = stdData.b_code ? stdData.b_code : '';
|
|
return result;
|
|
return result;
|
|
@@ -747,7 +748,7 @@ module.exports = app => {
|
|
* @param {Number} tenderId
|
|
* @param {Number} tenderId
|
|
* @param {Number} selectId
|
|
* @param {Number} selectId
|
|
* @param {Object} stdData
|
|
* @param {Object} stdData
|
|
- * @returns {Promise<*>}
|
|
|
|
|
|
+ * @return {Promise<*>}
|
|
*/
|
|
*/
|
|
async addStdNode(tenderId, selectId, stdData) {
|
|
async addStdNode(tenderId, selectId, stdData) {
|
|
const newData = this._filterStdData(stdData);
|
|
const newData = this._filterStdData(stdData);
|
|
@@ -761,14 +762,18 @@ module.exports = app => {
|
|
* @param {Number} selectId - 选中节点id
|
|
* @param {Number} selectId - 选中节点id
|
|
* @param {Object} stdData - 节点数据
|
|
* @param {Object} stdData - 节点数据
|
|
* @param {StandardLib} stdLib - 标准库
|
|
* @param {StandardLib} stdLib - 标准库
|
|
- * @returns {Promise<void>}
|
|
|
|
|
|
+ * @return {Promise<void>}
|
|
*/
|
|
*/
|
|
async addStdNodeWithParent(tenderId, stdData, stdLib) {
|
|
async addStdNodeWithParent(tenderId, stdData, stdLib) {
|
|
const fullLevel = await stdLib.getFullLevelDataByFullPath(stdData.list_id, stdData.full_path);
|
|
const fullLevel = await stdLib.getFullLevelDataByFullPath(stdData.list_id, stdData.full_path);
|
|
- fullLevel.sort(function (x, y) {
|
|
|
|
- return x.level - y.level
|
|
|
|
|
|
+ fullLevel.sort(function(x, y) {
|
|
|
|
+ return x.level - y.level;
|
|
});
|
|
});
|
|
- let isNew = false, node, firstNew, updateParent, addResult;
|
|
|
|
|
|
+ let isNew = false,
|
|
|
|
+ node,
|
|
|
|
+ firstNew,
|
|
|
|
+ updateParent,
|
|
|
|
+ addResult;
|
|
const expandIds = [];
|
|
const expandIds = [];
|
|
this.transaction = await this.db.beginTransaction();
|
|
this.transaction = await this.db.beginTransaction();
|
|
try {
|
|
try {
|
|
@@ -785,7 +790,7 @@ module.exports = app => {
|
|
tender_id: tenderId,
|
|
tender_id: tenderId,
|
|
ledger_pid: parent ? parent.ledger_id : rootId,
|
|
ledger_pid: parent ? parent.ledger_id : rootId,
|
|
code: stdNode.code,
|
|
code: stdNode.code,
|
|
- name: stdNode.name
|
|
|
|
|
|
+ name: stdNode.name,
|
|
});
|
|
});
|
|
if (!node) {
|
|
if (!node) {
|
|
isNew = true;
|
|
isNew = true;
|
|
@@ -793,7 +798,7 @@ module.exports = app => {
|
|
newData.is_leaf = (i === len - 1);
|
|
newData.is_leaf = (i === len - 1);
|
|
[addResult, node] = await this._addChildAutoOrder(tenderId, parent, newData);
|
|
[addResult, node] = await this._addChildAutoOrder(tenderId, parent, newData);
|
|
if (parent && parent.is_leaf) {
|
|
if (parent && parent.is_leaf) {
|
|
- await this.transaction.update(this.tableName, {id: parent.id, is_leaf: false} );
|
|
|
|
|
|
+ await this.transaction.update(this.tableName, { id: parent.id, is_leaf: false });
|
|
updateParent = parent;
|
|
updateParent = parent;
|
|
}
|
|
}
|
|
firstNew = node;
|
|
firstNew = node;
|
|
@@ -809,12 +814,13 @@ module.exports = app => {
|
|
}
|
|
}
|
|
|
|
|
|
// 查询应返回的结果
|
|
// 查询应返回的结果
|
|
- let createData = [], updateData = [];
|
|
|
|
|
|
+ let createData = [],
|
|
|
|
+ updateData = [];
|
|
if (firstNew) {
|
|
if (firstNew) {
|
|
createData = await this.getDataByFullPath(tenderId, firstNew.full_path + '%');
|
|
createData = await this.getDataByFullPath(tenderId, firstNew.full_path + '%');
|
|
updateData = await this.getNextsData(tenderId, firstNew.ledger_pid, firstNew.order);
|
|
updateData = await this.getNextsData(tenderId, firstNew.ledger_pid, firstNew.order);
|
|
if (updateParent) {
|
|
if (updateParent) {
|
|
- updateData.push(await this.getDataByCondition({id: updateParent.id}));
|
|
|
|
|
|
+ updateData.push(await this.getDataByCondition({ id: updateParent.id }));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
const expandData = await this.getChildrenByParentId(tenderId, expandIds);
|
|
const expandData = await this.getChildrenByParentId(tenderId, expandIds);
|
|
@@ -825,7 +831,7 @@ module.exports = app => {
|
|
* 删除节点
|
|
* 删除节点
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Object} deleteData - 删除节点数据
|
|
* @param {Object} deleteData - 删除节点数据
|
|
- * @returns {Promise<*>}
|
|
|
|
|
|
+ * @return {Promise<*>}
|
|
* @private
|
|
* @private
|
|
*/
|
|
*/
|
|
async _deleteNodeData(tenderId, deleteData) {
|
|
async _deleteNodeData(tenderId, deleteData) {
|
|
@@ -878,7 +884,7 @@ module.exports = app => {
|
|
// 选中节点--全部后节点 order--
|
|
// 选中节点--全部后节点 order--
|
|
await this._updateSelectNextsOrder(selectData, -1);
|
|
await this._updateSelectNextsOrder(selectData, -1);
|
|
// 删除部位明细
|
|
// 删除部位明细
|
|
- await this.transaction.delete(this.ctx.service.pos.tableName, {tid: tenderId, lid: this._.map(deleteData, 'id')});
|
|
|
|
|
|
+ await this.transaction.delete(this.ctx.service.pos.tableName, { tid: tenderId, lid: this._.map(deleteData, 'id') });
|
|
await this.ctx.service.pos.deletePosData(this.transaction, tenderId, this._.map(deleteData, 'id'));
|
|
await this.ctx.service.pos.deletePosData(this.transaction, tenderId, this._.map(deleteData, 'id'));
|
|
await this.transaction.commit();
|
|
await this.transaction.commit();
|
|
} catch (err) {
|
|
} catch (err) {
|
|
@@ -1086,7 +1092,7 @@ module.exports = app => {
|
|
if (selectData.order === 1) {
|
|
if (selectData.order === 1) {
|
|
await this.transaction.update(this.tableName, {
|
|
await this.transaction.update(this.tableName, {
|
|
id: parentData.id,
|
|
id: parentData.id,
|
|
- is_leaf: true
|
|
|
|
|
|
+ is_leaf: true,
|
|
});
|
|
});
|
|
}
|
|
}
|
|
// 选中节点--父节点--全部后兄弟节点 order+1
|
|
// 选中节点--父节点--全部后兄弟节点 order+1
|
|
@@ -1096,7 +1102,7 @@ module.exports = app => {
|
|
ledger_pid: parentData.ledger_pid,
|
|
ledger_pid: parentData.ledger_pid,
|
|
order: parentData.order + 1,
|
|
order: parentData.order + 1,
|
|
level: selectData.level - 1,
|
|
level: selectData.level - 1,
|
|
- full_path: newFullPath
|
|
|
|
|
|
+ full_path: newFullPath,
|
|
};
|
|
};
|
|
await this.transaction.update(this.tableName, updateData);
|
|
await this.transaction.update(this.tableName, updateData);
|
|
// 选中节点--全部子节点(含孙) level-1, full_path变更
|
|
// 选中节点--全部子节点(含孙) level-1, full_path变更
|
|
@@ -1192,7 +1198,7 @@ module.exports = app => {
|
|
if (preData.is_leaf) {
|
|
if (preData.is_leaf) {
|
|
const updateData2 = {
|
|
const updateData2 = {
|
|
id: preData.id,
|
|
id: preData.id,
|
|
- is_leaf: false
|
|
|
|
|
|
+ is_leaf: false,
|
|
};
|
|
};
|
|
await this.transaction.update(this.tableName, updateData2);
|
|
await this.transaction.update(this.tableName, updateData2);
|
|
}
|
|
}
|
|
@@ -1230,14 +1236,14 @@ module.exports = app => {
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
|
|
+ /**
|
|
* newData中,以orgData为基准,过滤掉orgData中未定义或值相等的部分
|
|
* newData中,以orgData为基准,过滤掉orgData中未定义或值相等的部分
|
|
* @param {Object} orgData
|
|
* @param {Object} orgData
|
|
* @param {Object} newData
|
|
* @param {Object} newData
|
|
* @private
|
|
* @private
|
|
*/
|
|
*/
|
|
_filterChangedField(orgData, newData) {
|
|
_filterChangedField(orgData, newData) {
|
|
- const result= {};
|
|
|
|
|
|
+ const result = {};
|
|
let bChanged = false;
|
|
let bChanged = false;
|
|
for (const prop in orgData) {
|
|
for (const prop in orgData) {
|
|
if (newData[prop] !== orgData[prop]) {
|
|
if (newData[prop] !== orgData[prop]) {
|
|
@@ -1251,7 +1257,7 @@ module.exports = app => {
|
|
/**
|
|
/**
|
|
* 检查data中是否含有计算字段
|
|
* 检查data中是否含有计算字段
|
|
* @param {Object} data
|
|
* @param {Object} data
|
|
- * @returns {boolean}
|
|
|
|
|
|
+ * @return {boolean}
|
|
* @private
|
|
* @private
|
|
*/
|
|
*/
|
|
_checkCalcField(data) {
|
|
_checkCalcField(data) {
|
|
@@ -1301,7 +1307,6 @@ module.exports = app => {
|
|
* @return {Array} - 提交后的数据
|
|
* @return {Array} - 提交后的数据
|
|
*/
|
|
*/
|
|
async updateInfos(tenderId, datas) {
|
|
async updateInfos(tenderId, datas) {
|
|
- console.log(datas);
|
|
|
|
if (tenderId <= 0) {
|
|
if (tenderId <= 0) {
|
|
throw '标段不存在';
|
|
throw '标段不存在';
|
|
}
|
|
}
|
|
@@ -1397,7 +1402,7 @@ module.exports = app => {
|
|
const newId = maxId + index + 1;
|
|
const newId = maxId + index + 1;
|
|
const idChange = {
|
|
const idChange = {
|
|
org: data.id,
|
|
org: data.id,
|
|
- }
|
|
|
|
|
|
+ };
|
|
delete data.id;
|
|
delete data.id;
|
|
if (!data.is_leaf) {
|
|
if (!data.is_leaf) {
|
|
for (const children of datas) {
|
|
for (const children of datas) {
|
|
@@ -1441,7 +1446,7 @@ module.exports = app => {
|
|
}
|
|
}
|
|
const createData = await this.getDataByIds(newIds);
|
|
const createData = await this.getDataByIds(newIds);
|
|
const updateData = await this.getNextsData(selectData.tender_id, selectData.ledger_pid, selectData.order + copyNodes.length);
|
|
const updateData = await this.getNextsData(selectData.tender_id, selectData.ledger_pid, selectData.order + copyNodes.length);
|
|
- const posData = await this.ctx.service.pos.getPosData({lid: newIds});
|
|
|
|
|
|
+ const posData = await this.ctx.service.pos.getPosData({ lid: newIds });
|
|
return {
|
|
return {
|
|
ledger: { create: createData, update: updateData },
|
|
ledger: { create: createData, update: updateData },
|
|
pos: posData,
|
|
pos: posData,
|
|
@@ -1453,7 +1458,7 @@ module.exports = app => {
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Number} tenderId - 标段id
|
|
* @param {Object} updateMap - 增量更新数,使用更新父项的full_path为索引
|
|
* @param {Object} updateMap - 增量更新数,使用更新父项的full_path为索引
|
|
* e.g: {'1.2.6.8': 30, '1.2.6.10': 40}表示'1.2.6.8'增量30,'1.2.6.10'增量40(此处同步更新'1.2.6', '1.2', '1')
|
|
* e.g: {'1.2.6.8': 30, '1.2.6.10': 40}表示'1.2.6.8'增量30,'1.2.6.10'增量40(此处同步更新'1.2.6', '1.2', '1')
|
|
- * @returns {Promise<void>}
|
|
|
|
|
|
+ * @return {Promise<void>}
|
|
* @private
|
|
* @private
|
|
*/
|
|
*/
|
|
async _increCalcParent(tenderId, updateMap) {
|
|
async _increCalcParent(tenderId, updateMap) {
|
|
@@ -1462,16 +1467,16 @@ module.exports = app => {
|
|
|
|
|
|
this.sqlBuilder.setAndWhere('tender_id', {
|
|
this.sqlBuilder.setAndWhere('tender_id', {
|
|
value: tenderId,
|
|
value: tenderId,
|
|
- operate: '='
|
|
|
|
|
|
+ operate: '=',
|
|
});
|
|
});
|
|
const fullPath = this.ctx.helper.explodePath(prop);
|
|
const fullPath = this.ctx.helper.explodePath(prop);
|
|
this.sqlBuilder.setAndWhere('full_path', {
|
|
this.sqlBuilder.setAndWhere('full_path', {
|
|
value: this.ctx.helper.explodePath(prop),
|
|
value: this.ctx.helper.explodePath(prop),
|
|
- operate: 'in'
|
|
|
|
|
|
+ operate: 'in',
|
|
});
|
|
});
|
|
this.sqlBuilder.setUpdateData('total_price', {
|
|
this.sqlBuilder.setUpdateData('total_price', {
|
|
value: updateMap[prop] > 0 ? updateMap[prop] : -updateMap[prop],
|
|
value: updateMap[prop] > 0 ? updateMap[prop] : -updateMap[prop],
|
|
- selfOperate: updateMap[prop] > 0 ? '+' : '-'
|
|
|
|
|
|
+ selfOperate: updateMap[prop] > 0 ? '+' : '-',
|
|
});
|
|
});
|
|
|
|
|
|
const [sql, sqlParam] = this.sqlBuilder.build(this.tableName, 'update');
|
|
const [sql, sqlParam] = this.sqlBuilder.build(this.tableName, 'update');
|
|
@@ -1483,7 +1488,7 @@ module.exports = app => {
|
|
* 提交数据 - 响应计算(增量方式计算)
|
|
* 提交数据 - 响应计算(增量方式计算)
|
|
* @param {Number} tenderId
|
|
* @param {Number} tenderId
|
|
* @param {Object} data
|
|
* @param {Object} data
|
|
- * @returns {Promise<*>}
|
|
|
|
|
|
+ * @return {Promise<*>}
|
|
*/
|
|
*/
|
|
async updateCalc(tenderId, data) {
|
|
async updateCalc(tenderId, data) {
|
|
// 简单验证数据
|
|
// 简单验证数据
|
|
@@ -1529,7 +1534,7 @@ module.exports = app => {
|
|
throw err;
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
|
|
- return {update: await this.getDataByIds(ids)};
|
|
|
|
|
|
+ return { update: await this.getDataByIds(ids) };
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -1538,11 +1543,12 @@ module.exports = app => {
|
|
* @param xmj
|
|
* @param xmj
|
|
* @param order
|
|
* @param order
|
|
* @param parentData
|
|
* @param parentData
|
|
- * @returns {Promise<*[]>}
|
|
|
|
|
|
+ * @return {Promise<*[]>}
|
|
* @private
|
|
* @private
|
|
*/
|
|
*/
|
|
async _sortBatchInsertData(tenderId, xmj, order, parentData) {
|
|
async _sortBatchInsertData(tenderId, xmj, order, parentData) {
|
|
- const result = [], newIds = [];
|
|
|
|
|
|
+ const result = [],
|
|
|
|
+ newIds = [];
|
|
let tp = 0;
|
|
let tp = 0;
|
|
const cacheKey = keyPre + tenderId;
|
|
const cacheKey = keyPre + tenderId;
|
|
let maxId = parseInt(await this.cache.get(cacheKey));
|
|
let maxId = parseInt(await this.cache.get(cacheKey));
|
|
@@ -1556,7 +1562,7 @@ module.exports = app => {
|
|
ledger_id: maxId + 1,
|
|
ledger_id: maxId + 1,
|
|
ledger_pid: parentData.ledger_id,
|
|
ledger_pid: parentData.ledger_id,
|
|
is_leaf: xmj.children.length === 0,
|
|
is_leaf: xmj.children.length === 0,
|
|
- order: order,
|
|
|
|
|
|
+ order,
|
|
level: parentData.level + 1,
|
|
level: parentData.level + 1,
|
|
name: xmj.name,
|
|
name: xmj.name,
|
|
};
|
|
};
|
|
@@ -1569,7 +1575,7 @@ module.exports = app => {
|
|
ledger_id: maxId + 1 + i + 1,
|
|
ledger_id: maxId + 1 + i + 1,
|
|
ledger_pid: parent.ledger_id,
|
|
ledger_pid: parent.ledger_id,
|
|
is_leaf: true,
|
|
is_leaf: true,
|
|
- order: i+1,
|
|
|
|
|
|
+ order: i + 1,
|
|
level: parent.level + 1,
|
|
level: parent.level + 1,
|
|
b_code: gcl.b_code,
|
|
b_code: gcl.b_code,
|
|
name: gcl.name,
|
|
name: gcl.name,
|
|
@@ -1594,7 +1600,7 @@ module.exports = app => {
|
|
* @param {Number} tenderId - 标段Id
|
|
* @param {Number} tenderId - 标段Id
|
|
* @param {Number} selectId - 选中节点Id
|
|
* @param {Number} selectId - 选中节点Id
|
|
* @param {Object} data - 批量插入数据
|
|
* @param {Object} data - 批量插入数据
|
|
- * @returns {Promise<void>}
|
|
|
|
|
|
+ * @return {Promise<void>}
|
|
*/
|
|
*/
|
|
async batchInsertChild(tenderId, selectId, data) {
|
|
async batchInsertChild(tenderId, selectId, data) {
|
|
const result = { ledger: {}, pos: null };
|
|
const result = { ledger: {}, pos: null };
|
|
@@ -1607,7 +1613,7 @@ module.exports = app => {
|
|
}
|
|
}
|
|
|
|
|
|
this.transaction = await this.db.beginTransaction();
|
|
this.transaction = await this.db.beginTransaction();
|
|
- let newIds = [];
|
|
|
|
|
|
+ const newIds = [];
|
|
try {
|
|
try {
|
|
const lastChild = await this.getLastChildData(tenderId, selectId);
|
|
const lastChild = await this.getLastChildData(tenderId, selectId);
|
|
// 更新父项isLeaf
|
|
// 更新父项isLeaf
|
|
@@ -1647,14 +1653,14 @@ module.exports = app => {
|
|
}
|
|
}
|
|
this.cache.set(cacheKey, maxId + data.length + 1, 'EX', this.ctx.app.config.cacheTime);
|
|
this.cache.set(cacheKey, maxId + data.length + 1, 'EX', this.ctx.app.config.cacheTime);
|
|
await this.transaction.commit();
|
|
await this.transaction.commit();
|
|
- } catch(err) {
|
|
|
|
|
|
+ } catch (err) {
|
|
await this.transaction.rollback();
|
|
await this.transaction.rollback();
|
|
throw err;
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
|
|
// 查询应返回的结果
|
|
// 查询应返回的结果
|
|
result.ledger.create = await this.getDataByIds(newIds);
|
|
result.ledger.create = await this.getDataByIds(newIds);
|
|
- result.pos = await this.ctx.service.pos.getPosData({lid: newIds});
|
|
|
|
|
|
+ result.pos = await this.ctx.service.pos.getPosData({ lid: newIds });
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1663,7 +1669,7 @@ module.exports = app => {
|
|
* @param {Number} tenderId - 标段Id
|
|
* @param {Number} tenderId - 标段Id
|
|
* @param {Number} selectId - 选中节点Id
|
|
* @param {Number} selectId - 选中节点Id
|
|
* @param {Object} data - 批量插入数据
|
|
* @param {Object} data - 批量插入数据
|
|
- * @returns {Promise<void>}
|
|
|
|
|
|
+ * @return {Promise<void>}
|
|
*/
|
|
*/
|
|
async batchInsertNext(tenderId, selectId, data) {
|
|
async batchInsertNext(tenderId, selectId, data) {
|
|
const result = { ledger: {}, pos: null };
|
|
const result = { ledger: {}, pos: null };
|
|
@@ -1714,7 +1720,7 @@ module.exports = app => {
|
|
}
|
|
}
|
|
this.cache.set(cacheKey, maxId + data.length + 1, 'EX', this.ctx.app.config.cacheTime);
|
|
this.cache.set(cacheKey, maxId + data.length + 1, 'EX', this.ctx.app.config.cacheTime);
|
|
await this.transaction.commit();
|
|
await this.transaction.commit();
|
|
- } catch(err) {
|
|
|
|
|
|
+ } catch (err) {
|
|
await this.transaction.rollback();
|
|
await this.transaction.rollback();
|
|
throw err;
|
|
throw err;
|
|
}
|
|
}
|
|
@@ -1722,7 +1728,7 @@ module.exports = app => {
|
|
// 查询应返回的结果
|
|
// 查询应返回的结果
|
|
result.ledger.create = await this.getDataByIds(newIds);
|
|
result.ledger.create = await this.getDataByIds(newIds);
|
|
result.ledger.update = await this.getNextsData(selectData.tender_id, selectData.ledger_pid, selectData.order + data.length);
|
|
result.ledger.update = await this.getNextsData(selectData.tender_id, selectData.ledger_pid, selectData.order + data.length);
|
|
- result.pos = await this.ctx.service.pos.getPosData({lid: newIds});
|
|
|
|
|
|
+ result.pos = await this.ctx.service.pos.getPosData({ lid: newIds });
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1731,10 +1737,10 @@ module.exports = app => {
|
|
* @param {Number} tid - 标段id
|
|
* @param {Number} tid - 标段id
|
|
* @param {Number} id - 需要计算的节点的id
|
|
* @param {Number} id - 需要计算的节点的id
|
|
* @param {Object} transaction - 操作所属事务,没有则创建
|
|
* @param {Object} transaction - 操作所属事务,没有则创建
|
|
- * @returns {Promise<void>}
|
|
|
|
|
|
+ * @return {Promise<void>}
|
|
*/
|
|
*/
|
|
async calc(tid, id, transaction) {
|
|
async calc(tid, id, transaction) {
|
|
- const node = await this.getAllDataByCondition({id: id});
|
|
|
|
|
|
+ const node = await this.getAllDataByCondition({ id });
|
|
if (!node) {
|
|
if (!node) {
|
|
throw '数据错误';
|
|
throw '数据错误';
|
|
}
|
|
}
|
|
@@ -1749,18 +1755,74 @@ module.exports = app => {
|
|
* 查找定位 --> 废弃
|
|
* 查找定位 --> 废弃
|
|
* @param tenderId
|
|
* @param tenderId
|
|
* @param nodeId
|
|
* @param nodeId
|
|
- * @returns {Promise<{expand: *}>}
|
|
|
|
|
|
+ * @return {Promise<{expand: *}>}
|
|
*/
|
|
*/
|
|
async locateNode(tenderId, nodeId) {
|
|
async locateNode(tenderId, nodeId) {
|
|
const node = await this.getDataByNodeId(tenderId, nodeId);
|
|
const node = await this.getDataByNodeId(tenderId, nodeId);
|
|
if (!node) {
|
|
if (!node) {
|
|
- throw '查询数据有误'
|
|
|
|
|
|
+ throw '查询数据有误';
|
|
}
|
|
}
|
|
const expandIds = node.full_path.split('.');
|
|
const expandIds = node.full_path.split('.');
|
|
expandIds.pop();
|
|
expandIds.pop();
|
|
const expandData = await this.getChildrenByParentId(tenderId, expandIds);
|
|
const expandData = await this.getChildrenByParentId(tenderId, expandIds);
|
|
return { expand: expandData };
|
|
return { expand: expandData };
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ async _importCacheTreeNode(transaction, node) {
|
|
|
|
+ const data = {
|
|
|
|
+ tender_id: this.ctx.tender.id,
|
|
|
|
+ ledger_id: node.ledger_id,
|
|
|
|
+ ledger_pid: node.ledger_pid,
|
|
|
|
+ level: node.level,
|
|
|
|
+ order: node.order,
|
|
|
|
+ is_leaf: !node.children || node.children.length === 0,
|
|
|
|
+ full_path: node.full_path,
|
|
|
|
+ code: node.code,
|
|
|
|
+ b_code: node.b_code,
|
|
|
|
+ name: node.name,
|
|
|
|
+ unit: node.unit,
|
|
|
|
+ quantity: node.quantity,
|
|
|
|
+ unit_price: node.unit_price,
|
|
|
|
+ total_price: node.total_price,
|
|
|
|
+ dgn_qty1: node.dgn_qty1,
|
|
|
|
+ dgn_qty2: node.dgn_qty2,
|
|
|
|
+ memo: node.memo,
|
|
|
|
+ drawing_code: node.drawing_code,
|
|
|
|
+ };
|
|
|
|
+ const result = await transaction.insert(this.tableName, data);
|
|
|
|
+ if (node.children && node.children.length > 0) {
|
|
|
|
+ for (const child of node.children) {
|
|
|
|
+ await this._importCacheTreeNode(transaction, child);
|
|
|
|
+ }
|
|
|
|
+ } else if (node.pos && node.pos.length > 0) {
|
|
|
|
+ await this.ctx.service.pos.insertLedgerPosData(transaction, this.ctx.tender.id, result.insertId, node.pos);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ async importExcel(excelData) {
|
|
|
|
+ const AnalysisExcel = require('../lib/analysis_excel');
|
|
|
|
+ const analysisExcel = new AnalysisExcel();
|
|
|
|
+ const tempData = await this.ctx.service.tenderNodeTemplate.getData(true);
|
|
|
|
+ const cacheTree = analysisExcel.analysisData(excelData, tempData);
|
|
|
|
+ const cacheKey = keyPre + this.ctx.tender.id;
|
|
|
|
+ const orgMaxId = parseInt(await this.cache.get(cacheKey));
|
|
|
|
+ const transaction = await this.db.beginTransaction();
|
|
|
|
+ try {
|
|
|
|
+ await transaction.delete(this.tableName, {tender_id: this.ctx.tender.id});
|
|
|
|
+ await transaction.delete(this.ctx.service.pos.tableName, {tid: this.ctx.tender.id});
|
|
|
|
+ for (const node of cacheTree.roots) {
|
|
|
|
+ await this._importCacheTreeNode(transaction, node);
|
|
|
|
+ }
|
|
|
|
+ await transaction.commit();
|
|
|
|
+ this.cache.set(cacheKey, cacheTree.items.length + 1, 'EX', this.ctx.app.config.cacheTime);
|
|
|
|
+ } catch (err) {
|
|
|
|
+ await transaction.rollback();
|
|
|
|
+ if (orgMaxId) {
|
|
|
|
+ this.cache.set(cacheKey, orgMaxId, 'EX', this.ctx.app.config.cacheTime);
|
|
|
|
+ }
|
|
|
|
+ throw err;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
return Ledger;
|
|
return Ledger;
|