user_model.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. /**
  2. * 用户数据模型
  3. *
  4. * @author CaiAoLin
  5. * @date 2017/6/9
  6. * @version
  7. */
  8. let mongoose = require("mongoose");
  9. let dbm = require("../../../config/db/db_manager");
  10. let Request = require("request");
  11. class UserModel {
  12. /**
  13. * 模型
  14. *
  15. * @var {object}
  16. */
  17. model = null;
  18. /**
  19. * 构造函数
  20. *
  21. * @return {void}
  22. */
  23. constructor() {
  24. let umDB = dbm.getCfgConnection("usersManages");
  25. let usersSchema = new mongoose.Schema({
  26. username: String,
  27. email: String,
  28. mobile: String,
  29. real_name: String,
  30. company: String,
  31. province: Number,
  32. company_type: Number,
  33. company_scale: Number,
  34. last_login: Number,
  35. create_time: Number
  36. });
  37. this.model = umDB.model('users', usersSchema);
  38. }
  39. /**
  40. * 企业所在地区
  41. *
  42. * @var {object}
  43. */
  44. province = ['广东省', '北京市'];
  45. /**
  46. * 企业类型
  47. *
  48. * @var
  49. */
  50. companyType = ['设计', '施工'];
  51. /**
  52. * 企业类型
  53. *
  54. * @var
  55. */
  56. companyScale = ['1-20', '20-50', '50-100', '100+'];
  57. /**
  58. * 根据用户名密码调用SSO接口获取信息
  59. *
  60. * @param {string} username
  61. * @param {string} password
  62. * @return {object}
  63. */
  64. async getInfoFromSSO(username, password) {
  65. let postData = {
  66. url: 'http://sso.smartcost.com.cn/api/jzlogin',
  67. form: {username: username, userpasswd: password},
  68. encoding: 'utf8'
  69. };
  70. return new Promise(function (resolve, reject) {
  71. try {
  72. // 请求接口
  73. Request.post(postData, function (err, postResponse, body) {
  74. if (err) {
  75. throw '请求错误';
  76. }
  77. if (postResponse.statusCode !== 200) {
  78. throw '通行证验证失败!';
  79. }
  80. resolve(body);
  81. });
  82. } catch (error) {
  83. reject([]);
  84. }
  85. });
  86. }
  87. /**
  88. * 标记用户
  89. *
  90. * @param {object} userData
  91. * @return {Promise}
  92. */
  93. async markUser(userData) {
  94. let userDataFromDb = await this.findDataByName(userData.username);
  95. let result = false;
  96. // 信息是否补全
  97. let info = false;
  98. if (userDataFromDb.length <= 0) {
  99. // 不存在用户则入库
  100. result = await this.addUser(userData);
  101. } else {
  102. // 存在则更新用户信息
  103. let updateData = {last_login: new Date().getTime()};
  104. let condition = {email: userData.email};
  105. result = await this.updateUser(condition, updateData);
  106. userDataFromDb = userDataFromDb[0];
  107. info = userDataFromDb.real_name !== undefined && userDataFromDb.real_name !== '';
  108. result = result.ok === 1;
  109. }
  110. return [result, info];
  111. }
  112. /**
  113. * 根据用户名查找数据
  114. *
  115. * @param {string} username
  116. * @return {object}
  117. */
  118. findDataByName(username) {
  119. let self = this;
  120. return new Promise(function (resolve, reject) {
  121. self.model.find({username: username}, function (error, data) {
  122. if (error) {
  123. console.log(error);
  124. reject([]);
  125. } else {
  126. resolve(data);
  127. }
  128. });
  129. });
  130. }
  131. /**
  132. * 新增用户
  133. *
  134. * @param {object} userData
  135. * @return {Promise}
  136. */
  137. addUser(userData) {
  138. let insertData = {
  139. username: userData.username,
  140. email: userData.email,
  141. mobile: userData.mobile,
  142. real_name: '',
  143. company: '',
  144. province: -1,
  145. company_type: -1,
  146. company_scale: -1,
  147. last_login: 0,
  148. create_time: new Date().getTime()
  149. };
  150. let userModel = new this.model(insertData);
  151. return new Promise(function (resolve, reject) {
  152. userModel.save(function (error) {
  153. if (error) {
  154. console.log(error);
  155. reject(false);
  156. } else {
  157. resolve(true);
  158. }
  159. });
  160. });
  161. }
  162. /**
  163. * 更新用户数据
  164. *
  165. * @param {object} updateData
  166. * @return {Promise}
  167. */
  168. updateUser(condition, updateData) {
  169. if (Object.keys(condition).length <= 0 || Object.keys(updateData).length <= 0) {
  170. return null;
  171. }
  172. let self = this;
  173. return new Promise(function(resolve, reject) {
  174. self.model.update(condition, {$set: updateData}, function(error, result) {
  175. if (error) {
  176. reject(false);
  177. } else {
  178. resolve(result);
  179. }
  180. });
  181. });
  182. }
  183. }
  184. module.exports = UserModel;