| 
					
				 | 
			
			
				@@ -12,6 +12,13 @@ let Request = require("request"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class UserModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 表名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @var {string} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    collectionName = 'user'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 模型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @var {object} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -19,36 +26,109 @@ class UserModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     model = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * db句柄 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @var {object} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    db = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 最后选定的数据结构 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @var {object} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    schema = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 企业所在地区 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @var {object} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    province = ['广东省', '北京市']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 企业类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @var 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    companyType = ['设计', '施工']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 企业类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @var 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    companyScale = ['1-20', '20-50', '50-100', '100+']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 默认结构 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @var {object} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     defaultSchema = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        username: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        email: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mobile: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        real_name: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        company: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        province: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        area: Number, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        company_type: Number, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        company_scale: Number, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        last_login: Number, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        create_time: Number 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 登录验证结构 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @var {object} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    loginSchema = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         username: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             type: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            required: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         email: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             type: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            required: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         mobile: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             type: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            required: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            validate: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                validator: function(v) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return /^1([34578]\d)\d{8}$/.test(v); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                message: '{VALUE} is not a valid phone number!' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 保存用户详情结构 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @var {object} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    saveInfoSchema = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         real_name: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             type: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            required: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         company: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             type: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            required: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         province: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             type: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            required: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         area: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             type: Number, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            required: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         company_type: Number, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         company_scale: Number, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        last_login: Number, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        create_time: Number 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -57,33 +137,11 @@ class UserModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return {void} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     constructor() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let umDB = dbm.getCfgConnection('scConstruct'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let usersSchema = new mongoose.Schema(this.defaultSchema); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.model = umDB.model('users', usersSchema); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.db = dbm.getCfgConnection('scConstruct'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.schema = new mongoose.Schema(this.defaultSchema); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 企业所在地区 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @var {object} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    province = ['广东省', '北京市']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 企业类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @var 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    companyType = ['设计', '施工']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 企业类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @var 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    companyScale = ['1-20', '20-50', '50-100', '100+']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 根据用户名密码调用SSO接口获取信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param {string} username 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -127,11 +185,13 @@ class UserModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let info = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (userDataFromDb.length <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 不存在用户则入库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.setScene('login'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             result = await this.addUser(userData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 存在则更新用户信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let updateData = {last_login: new Date().getTime()}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let condition = {email: userData.email}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.setScene('updateTime'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             result = await this.updateUser(condition, updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             userDataFromDb = userDataFromDb[0]; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -143,18 +203,41 @@ class UserModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 选择场景 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param {string} scene 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    setScene(scene = '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let schema = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        switch (scene) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case 'saveInfo': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                schema = this.saveInfoSchema; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case 'updateTime': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                schema = {last_login: Number, real_name: String}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case 'login': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                schema = this.loginSchema; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                schema = this.defaultSchema; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.schema = new mongoose.Schema(schema); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 根据用户名查找数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param {string} username 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return {object} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     findDataByName(username) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let userModel = this.db.model(this.collectionName, this.schema); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return new Promise(function (resolve, reject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            self.model.find({username: username}, function (error, data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userModel.find({username: username}, function (error, data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    reject([]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    reject(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     resolve(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -181,7 +264,7 @@ class UserModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             last_login: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             create_time: new Date().getTime() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let userModel = new this.model(insertData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let userModel = this.db.model(insertData, this.schema); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return new Promise(function (resolve, reject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             userModel.save(function (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (error) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -204,12 +287,15 @@ class UserModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (Object.keys(condition).length <= 0 || Object.keys(updateData).length <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let userModel = new this.model(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let userModel = this.db.model('users', this.schema); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return new Promise(function(resolve, reject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // let validationError = userModel.validateSync(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // if (validationError) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //     reject(validationError); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 验证数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let model = new userModel(updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let validationError = model.validateSync(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (validationError) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                reject(validationError); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             userModel.update(condition, {$set: updateData}, function(error, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     reject(error); 
			 |