/** * 用户数据模型 * * @author CaiAoLin * @date 2017/6/9 * @version */ let mongoose = require("mongoose"); let dbm = require("../../../config/db/db_manager"); let Request = require("request"); class UserModel { /** * 模型 * * @var {object} */ model = null; /** * 构造函数 * * @return {void} */ constructor() { let umDB = dbm.getCfgConnection("usersManages"); let usersSchema = new mongoose.Schema({ username: String, email: String, mobile: String, real_name: String, company: String, province: Number, company_type: Number, company_scale: Number, last_login: Number, create_time: Number }); this.model = umDB.model('users', usersSchema); } /** * 企业所在地区 * * @var {object} */ province = ['广东省', '北京市']; /** * 企业类型 * * @var */ companyType = ['设计', '施工']; /** * 企业类型 * * @var */ companyScale = ['1-20', '20-50', '50-100', '100+']; /** * 根据用户名密码调用SSO接口获取信息 * * @param {string} username * @param {string} password * @return {object} */ async getInfoFromSSO(username, password) { let postData = { url: 'http://sso.smartcost.com.cn/api/jzlogin', form: {username: username, userpasswd: password}, encoding: 'utf8' }; return new Promise(function (resolve, reject) { try { // 请求接口 Request.post(postData, function (err, postResponse, body) { if (err) { throw '请求错误'; } if (postResponse.statusCode !== 200) { throw '通行证验证失败!'; } resolve(body); }); } catch (error) { reject([]); } }); } /** * 标记用户 * * @param {object} userData * @return {Promise} */ async markUser(userData) { let userDataFromDb = await this.findDataByName(userData.username); let result = false; // 信息是否补全 let info = false; if (userDataFromDb.length <= 0) { // 不存在用户则入库 result = await this.addUser(userData); } else { // 存在则更新用户信息 let updateData = {last_login: new Date().getTime()}; let condition = {email: userData.email}; result = await this.updateUser(condition, updateData); userDataFromDb = userDataFromDb[0]; info = userDataFromDb.real_name !== undefined && userDataFromDb.real_name !== ''; result = result.ok === 1; } return [result, info]; } /** * 根据用户名查找数据 * * @param {string} username * @return {object} */ findDataByName(username) { let self = this; return new Promise(function (resolve, reject) { self.model.find({username: username}, function (error, data) { if (error) { console.log(error); reject([]); } else { resolve(data); } }); }); } /** * 新增用户 * * @param {object} userData * @return {Promise} */ addUser(userData) { let insertData = { username: userData.username, email: userData.email, mobile: userData.mobile, real_name: '', company: '', province: -1, company_type: -1, company_scale: -1, last_login: 0, create_time: new Date().getTime() }; let userModel = new this.model(insertData); return new Promise(function (resolve, reject) { userModel.save(function (error) { if (error) { console.log(error); reject(false); } else { resolve(true); } }); }); } /** * 更新用户数据 * * @param {object} updateData * @return {Promise} */ updateUser(condition, updateData) { if (Object.keys(condition).length <= 0 || Object.keys(updateData).length <= 0) { return null; } let self = this; return new Promise(function(resolve, reject) { self.model.update(condition, {$set: updateData}, function(error, result) { if (error) { reject(false); } else { resolve(result); } }); }); } } module.exports = UserModel;