user_model.js 5.1 KB

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