| 
					
				 | 
			
			
				@@ -0,0 +1,89 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Created by CSL on 2017-10-22. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const uuidV1 = require('uuid/v1'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let logger = require("../../../logs/log_helper").logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let mongoose = require('mongoose'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let stdCalcProgramsModel = mongoose.model('std_calc_programs'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let projectCalcProgramsModel = mongoose.model('calc_programs'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let EngineeringLibModel = require("../../users/models/engineering_lib_model"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let _=require("lodash"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let consts = require('../models/project_consts'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let projectConsts = consts.projectConst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+module.exports = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    newProjectCalcProgramFile: newProjectCalcProgramFile, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getProjectCalcProgramFile: getProjectCalcProgramFile, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getStdCalcProgramFile: getStdCalcProgramFile, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getData: getData, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    save: save 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function newProjectCalcProgramFile(data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    logger.info(`Create new CalcProgram file for project : ${data.ID}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let rst = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let egnrID = data.property.engineering_id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let egnrModel = new EngineeringLibModel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let egnr = await egnrModel.getEngineering(egnrID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(!egnr) return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let valid_CP_libs = egnr._doc.calcProgram_lib; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (valid_CP_libs == undefined  || valid_CP_libs.length == 0) return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 绑定多个计算程序标准文件时,默认取第一个作为标准模板。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let stdCP = await getStdCalcProgramFile(valid_CP_libs[0].id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let doc={ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ID: uuidV1(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        projectID: data.ID, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        name: data.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        libID: stdCP.ID, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        libName: stdCP.libName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        templates: stdCP.templates 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    await projectCalcProgramsModel.create(doc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    rst = {ID: doc.ID, name: doc.name}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function getProjectCalcProgramFile(ID) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let projLC = await projectCalcProgramsModel.findOne({ID:ID}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return projLC; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function getStdCalcProgramFile(libID) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let stdLC = await stdCalcProgramsModel.findOne({ID:libID}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return stdLC; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 统一的 getData() 方法供project调用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function getData(projectID, callback) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    projectCalcProgramsModel.findOne({projectID: projectID}, '-_id', function (err, datas) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 旧项目没有计算程序文件,默认给它生成一个。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!datas) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                logger.info(`Create a calcProgram file for old project : ${projectID}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                getStdCalcProgramFile(1).then(function (stdCP) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let doc = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ID: uuidV1(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        projectID: projectID, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        name: '[旧项目补计算程序文件]', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        libID: stdCP.ID, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        libName: stdCP.libName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        templates: stdCP.templates 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    projectCalcProgramsModel.create(doc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    callback(0, projectConsts.CALC_PROGRAM, stdCP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                callback(0, projectConsts.CALC_PROGRAM, datas); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            callback(1, projectConsts.CALC_PROGRAM, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 统一的 save() 方法供project调用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function save (user_id, datas, callback) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    projectCalcProgramsModel.update({"projectID": 553}, {"libName":"goo—test"}, callback(null, {data: 'test'})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |