|  | @@ -0,0 +1,87 @@
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 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 egnrModel = new EngineeringLibModel();
 | 
	
		
			
				|  |  | +    let egnr = await egnrModel.getEngineering(data.property.engineering_id);
 | 
	
		
			
				|  |  | +    if(!egnr) return rst;
 | 
	
		
			
				|  |  | +    let valid_CP_libs = egnr._doc.program_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'}));
 | 
	
		
			
				|  |  | +}
 |