| 
					
				 | 
			
			
				@@ -52,6 +52,7 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     calculate(treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (treeNode.sourceType === this.project.Ration.getSourceType()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             treeNode.data.gljList = this.project.ration_glj.getGljArrByRation(treeNode.data.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -63,10 +64,11 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.calc.calculate(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 存储、刷新本结点、所有父结点 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (this.calc.changed) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (treeNode.changed) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             me.saveAndCalcParents(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            this.calc.changed = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            delete treeNode.changed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     saveAndCalcParents(treeNode) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -82,16 +84,46 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         projectObj.mainController.refreshTreeNode([treeNode]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    initFees(treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!treeNode.data.fees) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            treeNode.data.fees = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            treeNode.data.feesIndex = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            treeNode.changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    checkFee(treeNode, ftObj){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!treeNode.data.feesIndex[ftObj.type]){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let fee = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'fieldName': ftObj.type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'unitFee': ftObj.unitFee, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'totalFee': ftObj.totalFee, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'tenderUnitFee': 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'tenderTotalFee': 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            treeNode.data.fees.push(fee); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            treeNode.data.feesIndex[ftObj.type] = fee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            treeNode.changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (treeNode.data.feesIndex[ftObj.type].unitFee != ftObj.unitFee){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                treeNode.data.feesIndex[ftObj.type].unitFee = ftObj.unitFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                treeNode.changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (treeNode.data.feesIndex[ftObj.type].totalFee != ftObj.totalFee){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                treeNode.data.feesIndex[ftObj.type].totalFee = ftObj.totalFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                treeNode.changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     gatherRationFeeTypes(treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let changed = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let rst = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (treeNode.sourceType === this.project.Bills.getSourceType()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!treeNode.data.fees) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                treeNode.data.fees = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                treeNode.data.feesIndex = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.initFees(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let rations = this.project.Ration.getRationsByNode(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (let ft of feeType) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -112,36 +144,14 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ftObj.tenderUnitFee = tuf.toDecimal(me.digit); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ftObj.tenderTotalFee = ttf.toDecimal(me.digit); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!treeNode.data.feesIndex[ftObj.type]){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    let fee = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        'fieldName': ftObj.type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        'unitFee': ftObj.unitFee, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        'totalFee': ftObj.totalFee, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        'tenderUnitFee': 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        'tenderTotalFee': 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    treeNode.data.fees.push(fee); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    treeNode.data.feesIndex[ftObj.type] = fee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (treeNode.data.feesIndex[ftObj.type].unitFee != ftObj.unitFee){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        treeNode.data.feesIndex[ftObj.type].unitFee = ftObj.unitFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (treeNode.data.feesIndex[ftObj.type].totalFee != ftObj.totalFee){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        treeNode.data.feesIndex[ftObj.type].totalFee = ftObj.totalFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.checkFee(treeNode, ftObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 rst.push(ftObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (changed) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (treeNode.changed) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 me.saveAndCalcParents(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                changed = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                delete treeNode.changed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return rst; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -149,14 +159,9 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     gatherBillFeeTypes(treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let changed = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let rst = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (treeNode.sourceType === this.project.Bills.getSourceType()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!treeNode.data.fees) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                treeNode.data.fees = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                treeNode.data.feesIndex = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.initFees(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (let ft of feeType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 let ftObj = {}; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -176,36 +181,13 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ftObj.tenderUnitFee = tuf.toDecimal(me.digit); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ftObj.tenderTotalFee = ttf.toDecimal(me.digit); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!treeNode.data.feesIndex[ftObj.type]){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    let fee = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        'fieldName': ftObj.type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        'unitFee': ftObj.unitFee, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        'totalFee': ftObj.totalFee, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        'tenderUnitFee': 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        'tenderTotalFee': 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    treeNode.data.fees.push(fee); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    treeNode.data.feesIndex[ftObj.type] = fee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (treeNode.data.feesIndex[ftObj.type].unitFee != ftObj.unitFee){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        treeNode.data.feesIndex[ftObj.type].unitFee = ftObj.unitFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (treeNode.data.feesIndex[ftObj.type].totalFee != ftObj.totalFee){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        treeNode.data.feesIndex[ftObj.type].totalFee = ftObj.totalFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.checkFee(treeNode, ftObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 rst.push(ftObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (changed) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    me.saveAndCalcParents(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    changed = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (treeNode.changed) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.saveAndCalcParents(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                delete treeNode.changed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return rst; 
			 |