123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- /**
- * 用户业务模型
- *
- * @author CaiAoLin
- * @date 2017/6/9
- * @version
- */
- let mongoose = require("mongoose");
- let MongooseHelper = require("../libraries/database/mongoose_helper");
- let userSchema = require("./schema/user");
- let Request = require("request");
- class UserModel {
- /**
- * db句柄
- *
- * @var {object}
- */
- db = 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!'
- },
- }
- };
- /**
- * 构造函数
- *
- * @return {void}
- */
- constructor() {
- this.db = new MongooseHelper();
- this.db.model = userSchema;
- }
- /**
- * 根据用户名密码调用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} scene
- */
- setScene(scene = '') {
- switch (scene) {
- case 'saveInfo':
- this.db.model.schema.path('real_name').required(true);
- this.db.model.schema.path('company').required(true);
- this.db.model.schema.path('province').required(true);
- this.db.model.schema.path('area').required(true);
- break;
- }
- }
- /**
- * 根据用户名查找数据
- *
- * @param {string} username
- * @return {object}
- */
- findDataByName(username) {
- return this.db.find({username: username});
- }
- /**
- * 新增用户
- *
- * @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(),
- area: 0
- };
- return this.db.create(insertData);
- }
- /**
- * 更新用户数据
- *
- * @param {object} updateData
- * @return {Promise}
- */
- updateUser(condition, updateData) {
- if (Object.keys(condition).length <= 0 || Object.keys(updateData).length <= 0) {
- return null;
- }
- return this.db.update(condition, updateData);
- }
- }
- module.exports = UserModel;
|