|
@@ -160,8 +160,7 @@ class BaseBillsSerivce extends TreeService {
|
|
|
* @return {Promise<*>}
|
|
|
*/
|
|
|
async addStdNode(tenderId, selectId, stdData, reviseId) {
|
|
|
- const newData = this._filterStdData(stdData);
|
|
|
- const result = await this.addBillsNode(tenderId, selectId, newData, reviseId);
|
|
|
+ const result = await this.addBillsNode(tenderId, selectId, stdData, reviseId);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
@@ -173,8 +172,7 @@ class BaseBillsSerivce extends TreeService {
|
|
|
* @returns {Promise<*>}
|
|
|
*/
|
|
|
async addStdNodeAsChild(tenderId, selectId, stdData, reviseId) {
|
|
|
- const newData = this._filterStdData(stdData);
|
|
|
- const result = await this.addChild(tenderId, selectId, newData, reviseId);
|
|
|
+ const result = await this.addChild(tenderId, selectId, stdData, reviseId);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
@@ -226,12 +224,12 @@ class BaseBillsSerivce extends TreeService {
|
|
|
* @return {Promise<void>}
|
|
|
* @private
|
|
|
*/
|
|
|
- async _addChildAutoOrder(tenderId, parentData, data, reviseId) {
|
|
|
+ async _addChildAutoOrder(tenderId, parentData, data, orderField, reviseId) {
|
|
|
const self = this;
|
|
|
const findPreData = function(list, a) {
|
|
|
if (!list || list.length === 0) { return null; }
|
|
|
for (let i = 0, iLen = list.length; i < iLen; i++) {
|
|
|
- if (billsUtils.compareCode(list[i].code, a.code) > 0) {
|
|
|
+ if (billsUtils.compareCode(list[i][orderField], a[orderField]) > 0) {
|
|
|
return i > 0 ? list[i - 1] : null;
|
|
|
}
|
|
|
}
|
|
@@ -258,51 +256,36 @@ class BaseBillsSerivce extends TreeService {
|
|
|
* @param {StandardLib} stdLib - 标准库
|
|
|
* @return {Promise<void>}
|
|
|
*/
|
|
|
- async addStdNodeWithParent(tenderId, stdData, stdLib, reviseId) {
|
|
|
- // 查询完整标准清单,并按层次排序
|
|
|
- const fullLevel = await stdLib.getFullLevelDataByFullPath(stdData.list_id, stdData.full_path);
|
|
|
- fullLevel.sort(function(x, y) {
|
|
|
- return x.level - y.level;
|
|
|
- });
|
|
|
-
|
|
|
- let isNew = false,
|
|
|
- node,
|
|
|
- firstNew,
|
|
|
- updateParent,
|
|
|
- addResult;
|
|
|
+ async addStdNodeWithParent(tenderId, stdData, reviseId) {
|
|
|
+ let node, firstNew, updateParent, addResult;
|
|
|
const expandIds = [];
|
|
|
this.transaction = await this.db.beginTransaction();
|
|
|
try {
|
|
|
// 从最顶层节点依次查询是否存在,否则添加
|
|
|
- for (let i = 0, len = fullLevel.length; i < len; i++) {
|
|
|
- const stdNode = fullLevel[i];
|
|
|
+ for (let i = 0, len = stdData.length; i < len; i++) {
|
|
|
+ const stdNode = stdData[i];
|
|
|
+ const parent = node;
|
|
|
+ node = await this.getDataByCondition({
|
|
|
+ tender_id: tenderId, ledger_pid: parent ? parent.ledger_id : rootId,
|
|
|
+ code: stdNode.code, name: stdNode.name,
|
|
|
+ });
|
|
|
+ if (node) {
|
|
|
+ expandIds.push(node.ledger_id);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- if (isNew) {
|
|
|
- const newData = this._filterStdData(stdNode);
|
|
|
- newData.is_leaf = (i === len - 1);
|
|
|
- [addResult, node] = await this._addChildNodeData(tenderId, node, newData, reviseId);
|
|
|
+ if (firstNew) {
|
|
|
+ stdNode.is_leaf = (i === len - 1);
|
|
|
+ [addResult, node] = await this._addChildNodeData(tenderId, parent, stdNode, reviseId);
|
|
|
} else {
|
|
|
- const parent = node;
|
|
|
- node = await this.getDataByCondition({
|
|
|
- tender_id: tenderId,
|
|
|
- ledger_pid: parent ? parent.ledger_id : rootId,
|
|
|
- code: stdNode.code,
|
|
|
- name: stdNode.name,
|
|
|
- });
|
|
|
- if (!node) {
|
|
|
- isNew = true;
|
|
|
- const newData = this._filterStdData(stdNode);
|
|
|
- newData.is_leaf = (i === len - 1);
|
|
|
- [addResult, node] = await this._addChildAutoOrder(tenderId, parent, newData, reviseId);
|
|
|
- if (parent && parent.is_leaf) {
|
|
|
- await this.transaction.update(this.tableName, { id: parent.id, is_leaf: false,
|
|
|
- unit_price: null, quantity: null, total_price: null, deal_qty: null, deal_tp: null});
|
|
|
- updateParent = parent;
|
|
|
- }
|
|
|
- firstNew = node;
|
|
|
- } else {
|
|
|
- expandIds.push(node.ledger_id);
|
|
|
+ stdNode.is_leaf = (i === len - 1);
|
|
|
+ [addResult, node] = await this._addChildAutoOrder(tenderId, parent, stdNode, 'code', reviseId);
|
|
|
+ if (parent && parent.is_leaf) {
|
|
|
+ await this.transaction.update(this.tableName, { id: parent.id, is_leaf: false,
|
|
|
+ unit_price: null, quantity: null, total_price: null, deal_qty: null, deal_tp: null});
|
|
|
+ updateParent = parent;
|
|
|
}
|
|
|
+ firstNew = node;
|
|
|
}
|
|
|
}
|
|
|
await this.transaction.commit();
|
|
@@ -312,8 +295,75 @@ class BaseBillsSerivce extends TreeService {
|
|
|
}
|
|
|
|
|
|
// 查询应返回的结果
|
|
|
- let createData = [],
|
|
|
- updateData = [];
|
|
|
+ let createData = [], updateData = [];
|
|
|
+ if (firstNew) {
|
|
|
+ createData = await this.getDataByFullPath(tenderId, firstNew.full_path + '%');
|
|
|
+ updateData = await this.getNextsData(tenderId, firstNew.ledger_pid, firstNew.order);
|
|
|
+ if (updateParent) {
|
|
|
+ updateData.push(await this.getDataByCondition({ id: updateParent.id }));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return { create: createData, update: updateData };
|
|
|
+ }
|
|
|
+
|
|
|
+ async getLeafXmj(select) {
|
|
|
+ const relaId = select.full_path.split('-');
|
|
|
+ const parents = await this.getAllDataByCondition({ where: { tender_id: select.tender_id, ledger_id: relaId }, orders: [['level', 'asc']]});
|
|
|
+ const xmjs = parents.filter(x => { return !!x.code; });
|
|
|
+ return xmjs[xmjs.length - 1];
|
|
|
+ }
|
|
|
+
|
|
|
+ async addGclStdNode(tenderId, selectId, stdData, reviseId) {
|
|
|
+ const selectNode = await this.ctx.service.ledger.getDataByNodeId(tenderId, selectId);
|
|
|
+ if (selectNode.b_code) {
|
|
|
+ return await this.ctx.service.ledger.addStdNode(tenderId, selectId, stdData, reviseId);
|
|
|
+ } else {
|
|
|
+ return await this.ctx.service.ledger.addStdNodeAsChild(tenderId, selectId, stdData, reviseId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async addGclStdNodeWithParent(tenderId, selectId, stdData, reviseId) {
|
|
|
+ const selectData = await this.getDataByKid(tenderId, selectId);
|
|
|
+ if (!selectData) throw '新增节点数据错误,请刷新后重试';
|
|
|
+
|
|
|
+ let leafXmj = selectData.b_code ? await this.getLeafXmj(selectData) : selectData;
|
|
|
+ if (!leafXmj) throw '找不到可插入清单的项目节,请刷新后重试';
|
|
|
+
|
|
|
+ let node = leafXmj, firstNew, updateParent, addResult;
|
|
|
+ this.transaction = await this.db.beginTransaction();
|
|
|
+ try {
|
|
|
+ // 从最顶层节点依次查询是否存在,否则添加
|
|
|
+ for (let i = 0, len = stdData.length; i < len; i++) {
|
|
|
+ const stdNode = stdData[i];
|
|
|
+ if (!stdNode.b_code) continue;
|
|
|
+
|
|
|
+ const parent = node;
|
|
|
+ node = await this.getDataByCondition({
|
|
|
+ tender_id: tenderId, ledger_pid: parent.ledger_id,
|
|
|
+ code: stdNode.code, name: stdNode.name,
|
|
|
+ });
|
|
|
+ if (node) continue;
|
|
|
+
|
|
|
+ stdNode.is_leaf = (i === len - 1);
|
|
|
+ if (firstNew) {
|
|
|
+ [addResult, node] = await this._addChildNodeData(selectData.tender_id, parent, stdNode, reviseId);
|
|
|
+ } else {
|
|
|
+ [addResult, node] = await this._addChildAutoOrder(selectData.tender_id, parent, stdNode, 'b_code', reviseId);
|
|
|
+ if (parent && parent.is_leaf) {
|
|
|
+ await this.transaction.update(this.tableName, { id: parent.id, is_leaf: false,
|
|
|
+ unit_price: null, quantity: null, total_price: null, deal_qty: null, deal_tp: null});
|
|
|
+ updateParent = parent;
|
|
|
+ }
|
|
|
+ firstNew = node;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ await this.transaction.commit();
|
|
|
+ } catch (err) {
|
|
|
+ await this.transaction.rollback();
|
|
|
+ throw err;
|
|
|
+ }
|
|
|
+
|
|
|
+ let createData = [], updateData = [];
|
|
|
if (firstNew) {
|
|
|
createData = await this.getDataByFullPath(tenderId, firstNew.full_path + '%');
|
|
|
updateData = await this.getNextsData(tenderId, firstNew.ledger_pid, firstNew.order);
|