user_model.js 5.4 KB

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