user_model.js 6.2 KB

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