| 
					
				 | 
			
			
				@@ -10,6 +10,7 @@ const scMathUtil = require('../../../public/scMathUtil').getUtil(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const rationMapModel = mongoose.model('std_ration_lib_map'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const rationModel = mongoose.model('std_ration_lib_ration_items'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const complementaryRationModel = mongoose.model('complementary_ration_items'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const { isDef } = require('../../../public/common_util'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import {OprDao} from  "./gljMapModel"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import moment from "moment"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import counter from "../../../public/counter/counter"; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -697,6 +698,8 @@ class GljDao  extends OprDao{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 导入组成物(替换原本的数据) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // excel第一行应为:人材机、组成物、消耗量(或者:消耗-一般、消耗-简易等) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     async importComponents(gljLibId, sheetData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const gljLib = await gljMapModel.findOne({ID: gljLibId}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!gljLib) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -706,25 +709,40 @@ class GljDao  extends OprDao{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!compilation) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw '不存在此费用定额'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const consumeAmtProperties = compilation.consumeAmtProperties || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 根据第一行数据,获取列号与字段映射 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const colMapping = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const firstRow = sheetData[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const multiConsumeAmt = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        firstRow.forEach((colData, col) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (colData === '人材机') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                colMapping.code = col; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (colData === '组成物') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                colMapping.componentCode = col; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (colData === '消耗量') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                colMapping.consumeAmt = col; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 多消耗量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const consumeAmtItem = consumeAmtProperties.find(item => item.consumeAmt.dataName === colData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (consumeAmtItem) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    colMapping[consumeAmtItem.consumeAmt.dataCode] = col; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    multiConsumeAmt.push(consumeAmtItem.consumeAmt.dataCode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Object.getOwnPropertyNames(colMapping).length < 3) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw 'exel数据错误'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 将所有人材机进行编码映射 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const allGLJs = await gljModel.find({repositoryId: gljLibId}, {ID: true, code: true}).lean(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const codeMapping = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         allGLJs.forEach(glj => codeMapping[glj.code] = glj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // excel表格列号与字段的映射 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const colMapping = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 材料编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            code: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 组成物编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            componentCode: 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 组成物消耗量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            consumeAmt: 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 跳过列头 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (let row = 1; row < sheetData.length; row++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const rowData = sheetData[row]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const code = rowData[colMapping.code]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const componentCode = rowData[colMapping.componentCode]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const consumeAmt = +rowData[colMapping.consumeAmt]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //const consumeAmt = +rowData[colMapping.consumeAmt]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const glj = codeMapping[code]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const component = codeMapping[componentCode]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (!glj || !component) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -733,10 +751,17 @@ class GljDao  extends OprDao{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (!glj.component) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 glj.component = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            glj.component.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ID: component.ID, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                consumeAmt: consumeAmt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const componentGLJ = { ID: component.ID };   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (multiConsumeAmt.length) { // 多消耗量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const consumeAmtProperty = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (const dataCode of multiConsumeAmt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    consumeAmtProperty[dataCode] = +rowData[colMapping[dataCode]] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                componentGLJ.consumeAmtProperty = consumeAmtProperty; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { // 单消耗量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                componentGLJ.consumeAmt = +rowData[colMapping.consumeAmt] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            glj.component.push(componentGLJ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 更新数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const tasks = []; 
			 |