| 
					
				 | 
			
			
				@@ -343,12 +343,12 @@ let executeObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for (let glj of me.treeNode.data.gljList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (glj.type == gljType.GENERAL_MACHINE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 获取机械组成物 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        let mds = projectObj.project.composition.getCompositionByCode(glj.code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        let mds = projectObj.project.composition.getCompositionByGLJ(glj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if (!mds) mds = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         for (let md of mds){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             if (base.gljTypes.indexOf(md.glj_type) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 let q = md["consumption"] ? md["consumption"] : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                let p = md["base_price"] ? md["base_price"] : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                let p = md["basePrice"] ? md["basePrice"] : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 mdSum = mdSum + (q * p).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 mdSum = (mdSum).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -979,7 +979,7 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 计算本节点、所有父节点(默认,可选)、公式引用节点。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    calculate(treeNode, calcParents = true){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    calculate(treeNode, calcParents = true, calcFormulas = true){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let changedNodes = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -996,7 +996,9 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 父结点算完,再计算所有的公式结点(必须先算完父结点,再算公式结点) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            me.calcFormulaNodes(changedNodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (calcFormulas) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.calcFormulaNodes(changedNodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return changedNodes; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1017,15 +1019,15 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     calcNodes(node.children); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if ((calcType == calcAllType.catAll) || (calcType == node.sourceType)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    me.calculate(node, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (node.changed) changedNodes.push(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if ((calcType == calcAllType.catAll || calcType == node.sourceType) && node.calcType != treeNodeCalcType.ctCalcBaseValue) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    me.innerCalc(node, changedNodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         calcNodes(me.project.mainTree.roots); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // me.saveNodes(changedNodes);   保存要与计算分离,否则实际应用场景中,会产生多次通讯。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.calcFormulaNodes(changedNodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return changedNodes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1053,43 +1055,38 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 计算叶子清单下的所有子结点(如定额、量价、工料机定额等), 并计算自身和所有父结点。最后打包存储。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 计算叶子清单下的所有子结点、自身、所有父结点、公式引用结点(即跟该叶子清单相关的所有结点)。最后打包存储。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     calcLeafAndSave(treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(!treeNodeTools.isLeafBill(treeNode)) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (treeNode.children && treeNode.children.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let changedNodes = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (let child of treeNode.children){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                me.calculate(child, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (child.changed) changedNodes.push(child); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            me.calculate(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let cur = treeNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            while (cur) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (cur.changed) changedNodes.push(cur); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                cur = cur.parent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.innerCalc(child, changedNodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let curChangeds = me.calculate(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mergeArr(changedNodes, curChangeds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             me.saveNodes(changedNodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 计算多条零散的定额,并计算他们所属的清单、父级清单,然后打包存储。如:批量替换工料机后受影响的定额。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     calcRationsAndSave(rationNodes){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = this, leafBills = [], changedNodes = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this, leafBills = [], allChangedNodes = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (let node of rationNodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            me.innerCalc(node, changedNodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.innerCalc(node, allChangedNodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let leafBill = node.parent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 多条定额同属一条叶子清单时,避免叶子清单重复计算 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (leafBill && leafBills.indexOf(leafBill) < 0) leafBills.push(leafBill); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (let node of leafBills){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            me.calculate(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let curChangeds = me.calculate(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mergeArr(allChangedNodes, curChangeds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        me.saveNodes(changedNodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.saveNodes(allChangedNodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 计算并保存指定的一个树节点。修改一个树节点,实际上要计算和保存的是一批树结点:层层父结点、被其它结点(的公式)引用的公式结点。 
			 |