| 
					
				 | 
			
			
				@@ -17,6 +17,7 @@ module.exports={ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     getShareInfoMap, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     getRecentShareList, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     moveProject:moveProject, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    accessToCopyProject, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     copyProject:copyProject, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     copyExample: copyExample, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     setupSummaryFields: setupSummaryFields, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -303,6 +304,7 @@ async function copyExample(userID, compilation, projIDs){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //设置新的树结构数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let newDate = new Date(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         parentBulks = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const projectMaps = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for (let data of allProjs) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let orgID = data.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         data.ID = IDMapping[data.ID]; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -326,7 +328,8 @@ async function copyExample(userID, compilation, projIDs){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 compilation: compilation, fileVer: data.fileVer, projType: data.projType, property: {rootProjectID: rootProjectID}} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            await copyProject(userID, compilation, {projectMap}, data.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            await copyProject(userID, compilation, {projectMap}, data.ID, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            projectMaps.push(projectMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //最末顶层项目(兼容测试时已存在有项目,正常用户第一次进费用定额,该费用定额不存在项目) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -334,12 +337,40 @@ async function copyExample(userID, compilation, projIDs){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (lastProj) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         parentBulks.push({updateOne: {filter: {ID: lastProj.ID}, update: {$set: {NextSiblingID: parentExample[0].ID}}}}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //拷贝父级文件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    await projectModel.bulkWrite(parentBulks); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 处理项目数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const projectTasks = [projectModel.bulkWrite(parentBulks), createProject(projectMaps)]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    await Promise.all(projectTasks); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-async function copyProject(userID, compilationID,data,newProjectID = null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function accessToCopyProject(userID, compilationID, data, newProjectID) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const logData = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        key: uuidV1(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        content: '正在拷贝项目,请稍候……', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userID, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        compilationID, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        status: 'start', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        create_time: +new Date() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    await importLogsModel.create(logData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    handleCopyProject(logData.key, userID, compilationID,data,newProjectID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return 'copying project'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function handleCopyProject(key, userID, compilationID, data, newProjectID) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const doc = { status: 'finish' }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const projectMap = await copyProject(userID, compilationID, data, newProjectID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        doc.projectID = projectMap.copy.document.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } catch (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        doc.status = 'error'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        doc.errorMsg = String(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        await importLogsModel.update({ key }, doc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function copyProject(userID, compilationID,data,newProjectID = null, delayProjectTask = false) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let projectMap = data.projectMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let originalID = projectMap['copy'].document.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (!newProjectID) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -400,7 +431,6 @@ async function copyProject(userID, compilationID,data,newProjectID = null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let [billMap,rationMap,projectGLJMap] = await Promise.all(IDtasks); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //所有复制任务异步处理,提升效率  复制清单,定额,4个文件,项目工料机, 定额工料机,人工系数,工程量明细,定额安装增加费,安装增加费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let copyTasks = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        createProject(projectMap), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         copyProjectSetting(originalID,newProjectID), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         copyBills(newProjectID,billMap), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         copyRations(newProjectID,billMap.uuidMaping,rationMap,projectGLJMap.IDMap), 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -427,8 +457,15 @@ async function copyProject(userID, compilationID,data,newProjectID = null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(originalProperty.unitPriceFile){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         copyTasks.push(copyUnitPriceFile(newProjectID,originalProperty.rootProjectID,userID,originalProperty.unitPriceFile.id,unitPriceFileID,newUnitName)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let p = await Promise.all(copyTasks); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return p[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    await Promise.all(copyTasks); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 最后再处理项目数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 可能会有最后再在外层方法插入项目数据的需求,如拷贝例题,暂时先不在这里插入项目数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (delayProjectTask) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return [projectMap]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const projectMaps = await createProject([projectMap]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return projectMaps[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 async function createIDsAndReturn(originalID,model) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -461,14 +498,16 @@ async function getProjectGLJIDAndReturn(originalID,newProjectID) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return{IDMap:IDMap,datas:datas}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-async function createProject(projectMap) {//复制项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function createProject(projectMaps) {//复制项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let tasks = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if(projectMap['update']){//如果复制后存在前一个节点,则更新其NextSiblingID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        tasks.push({updateOne:{filter : projectMap['update'].query, update : {NextSiblingID:projectMap['copy'].document.ID}}}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (const projectMap of projectMaps) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(projectMap['update']){//如果复制后存在前一个节点,则更新其NextSiblingID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tasks.push({updateOne:{filter : projectMap['update'].query, update : {NextSiblingID:projectMap['copy'].document.ID}}}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tasks.push({insertOne: {document: projectMap['copy'].document}});//复制任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    tasks.push({insertOne: {document: projectMap['copy'].document}});//复制任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     await projectModel.bulkWrite(tasks); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return projectMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return projectMaps; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 async function copyProjectSetting(originalID,newProjectID) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1446,7 +1485,9 @@ async function importChongqingProject(data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let log_data = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         key:data.key, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        content: '正在导入例题,请稍候……', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         userID:data.user_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        compilationID: data.session.sessionCompilation._id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         status:"start", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         create_time:+new Date() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1473,21 +1514,44 @@ async function importChongqingProject(data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function testTimeout(time) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return new Promise(resolve => setTimeout(resolve, time)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //用户第一次进入费用定额的数据准备 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 async function prepareInitialData(userId, compilation, example) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let first = await isFirst(userId, compilation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (first) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         await updateUsedList(userId, compilation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let prepareTask = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            copyCompleRationSection(userId, compilation), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            copyCompleGljSection(userId, compilation) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (example && example.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            prepareTask.push(copyExample(userId, compilation, example)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const logData = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            key: uuidV1(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            content: '正在加载例题,请稍候……', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userID: userId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            compilationID: compilation, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            status: 'start', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            create_time: +new Date() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        await importLogsModel.create(logData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        initData(logData.key, userId, compilation, example); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return 'start prepareInitialData'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    async function initData(key, userId, compilation, example) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const doc = { status: 'finish' }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let prepareTask = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                copyCompleRationSection(userId, compilation), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                copyCompleGljSection(userId, compilation) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (example && example.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                prepareTask.push(copyExample(userId, compilation, example)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            await Promise.all(prepareTask); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            doc.errorMsg = '加载例题失败,请检查例题项目是否存在!'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            doc.status = 'error'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            await importLogsModel.update({ key }, doc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        await Promise.all(prepareTask); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1502,6 +1566,11 @@ async function copyCompleRationSection(userId, compilationId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //拷贝补充人材机分类树 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 async function copyCompleGljSection(userId, compilationId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 如果已有数据则不再生成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const count = await compleGljSectionModel.count({userId, compilationId}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (count) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let templateData = await compleGljSectionTModel.find({compilationId: compilationId}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (templateData.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let insertDatas = [], 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1700,6 +1769,8 @@ async function importProject(importObj, userID, compilationID) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (bulks.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         await projectModel.bulkWrite(bulks); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return importObj.ID; // 返回建设项目ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // TODO 删除 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let summaryInfo = await getSummaryInfo([importObj.ID]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //设置汇总字段 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for(let proj of toInsertProjects){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2100,7 +2171,9 @@ async function downLoadProjectFile(info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     console.log(privateDownloadUrl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let data = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         key:info.key, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        content: '正在导入建设项目,请稍候……', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         userID:info.session.sessionUser.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        compilationID: info.session.sessionCompilation._id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         status:"start", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         create_time:+new Date() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2135,28 +2208,31 @@ async function doDownLoadAndImport(privateDownloadUrl,info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 async function importProcessChecking(data){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let result = {error:0}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let log = await importLogsModel.findOne({key:data.key}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const query = data.key ? { key: data.key } : { userID: data.userID, compilationID: data.compilationID }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let log = await importLogsModel.findOne(query); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(log){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(log.status == "finish"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             result.status = "complete"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            await importLogsModel.remove({key:data.key}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            await importLogsModel.remove(query); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 获取导入的项目数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (log.projectID) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 const projects = await getPosterityProjects([log.projectID], true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const summaryInfo = await getSummaryInfo([log.projectID]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                setupSummaryFields(summaryInfo, projects); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!(projects.length === 1 && projects[0].projType === projectType.tender)) { // 处理的是建设项目数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    const summaryInfo = await getSummaryInfo([log.projectID]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    setupSummaryFields(summaryInfo, projects); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 result.data = projects; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }else if(log.status == "start"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             result.status = "processing"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            result.content = log.content; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }else if(log.status == "error"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             result.error = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             result.msg = log.errorMsg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            await importLogsModel.remove({key:data.key}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            await importLogsModel.remove(query); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        result.error = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        result.msg = `导入过程中发生错误!`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        result.status = "complete"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2187,6 +2263,53 @@ async function downloadFileSync(key) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 导入接口 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 async function importInterface(key, session) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const logData = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        key: key, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        content: '正在导入接口文件,请稍候……', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userID: session.sessionUser.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        compilationID: session.sessionCompilation._id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        status: 'start', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        create_time: +new Date() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    await importLogsModel.create(logData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    handleImportInterface(key, session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return 'importing interface'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function handleImportInterface(key, session) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const doc = { status: 'finish' }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 源文件内容文本 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let downloadFilePath = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const { path, srcData } = await downloadFileSync(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        downloadFilePath = path; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!srcData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw '无有效数据'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const userID = session.sessionUser.id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const compilationID = session.sessionCompilation._id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const importData = JSON.parse(srcData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let tenderCount = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        importData.engs.forEach(eng => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            eng.tenders.forEach(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                tenderCount += 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (await isTenderOverrun(tenderCount, session)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw '您创建的项目个数超限,请联系我们的客服人员,或者导出建设项目保存到本地备份,删除云上数据。'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const projectID = await importProject(importData, userID, compilationID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        doc.projectID = projectID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } catch (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        doc.errorMsg = typeof err === 'string' ? err : '导入接口失败,请检查接口文件!'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        doc.status = 'error'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        await importLogsModel.update({ key }, doc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        fs.unlinkSync(downloadFilePath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* async function importInterface(key, session) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 源文件内容文本 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let downloadFilePath = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     try { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2214,7 +2337,7 @@ async function importInterface(key, session) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         fs.unlinkSync(downloadFilePath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 async function importProjects(data,req,updateData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let result = {error:0}; 
			 |