user_controller.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. /**
  2. * 用户相关控制器
  3. *
  4. * @author CaiAoLin
  5. * @date 2017/6/13
  6. * @version
  7. */
  8. const UserModel = require("../models/user_model");
  9. const BaseController = require("../../common/base/base_controller");
  10. const LogType = require("../../common/const/log_type_const");
  11. const LogModel = require("../models/log_model");
  12. const SettingModel = require("../models/setting_model");
  13. const SettingType = require("../../common/const/setting_type_const");
  14. const CompilationModel = require("../models/compilation_model");
  15. const mongoose = require("mongoose");
  16. const moment = require("moment");
  17. const userData = mongoose.model('user');
  18. const config = require("../../../config/config.js");
  19. const { getTitle } = require("../../../public/titleUtil");
  20. class UserController extends BaseController {
  21. /**
  22. * 用户信息页面
  23. *
  24. * @param {object} request
  25. * @param {object} response
  26. * @return {void}
  27. */
  28. async info(request, response) {
  29. // 获取当前用户数据
  30. let sessionUser = request.session.sessionUser;
  31. let userModel = new UserModel();
  32. let userData = await userModel.findDataBySsoId(sessionUser.ssoId);
  33. userData = Object.keys(userData).length <= 0 ? [] : userData;
  34. let renderData = {
  35. userData: userData,
  36. provinceList: userModel.province,
  37. companyTypeList: userModel.companyType,
  38. companyScaleList: userModel.companyScale,
  39. compilationName: request.session.sessionCompilation.name,
  40. versionName: request.session.compilationVersion,
  41. title: getTitle(request.headers.host)
  42. };
  43. response.render('users/html/user-info', renderData);
  44. }
  45. /**
  46. * 保存个人数据
  47. *
  48. * @param {object} request
  49. * @param {object} response
  50. * @return
  51. */
  52. async saveData(request, response) {
  53. try {
  54. let updateData = {
  55. real_name: request.body.real_name,
  56. province: request.body.province,
  57. company: request.body.company,
  58. version: request.body.version ? request.body.version : null,
  59. company_type: request.body.company_type ? request.body.company_type : null,
  60. company_scale: request.body.company_scale ? request.body.company_scale : null,
  61. };
  62. for (const prop in updateData) {
  63. if (updateData[prop] === undefined) {
  64. delete updateData[prop];
  65. }
  66. }
  67. let sessionUser = request.session.sessionUser;
  68. // 切换验证场景
  69. let userModel = new UserModel();
  70. let condition = { ssoId: sessionUser.ssoId };
  71. userModel.setScene('saveInfo');
  72. let result = await userModel.updateUser(condition, updateData);
  73. //更新session
  74. for (let attr in sessionUser) {
  75. sessionUser[attr] = updateData[attr] ? updateData[attr] : sessionUser[attr];
  76. }
  77. if (result.ok !== 1) {
  78. throw '用户数据保存失败';
  79. }
  80. } catch (error) {
  81. return response.redirect(request.headers.referer);
  82. }
  83. response.redirect('/pm');
  84. }
  85. /**
  86. * 账号安全页面
  87. *
  88. * @param {object} request
  89. * @param {object} response
  90. * @return {void}
  91. */
  92. async safe(request, response) {
  93. let userData = [];
  94. let logList = [];
  95. let pageData = {};
  96. try {
  97. // 获取当前用户信息
  98. let sessionUser = request.session.sessionUser;
  99. let userModel = new UserModel();
  100. userData = await userModel.findDataBySsoId(sessionUser.ssoId);
  101. let page = request.query.page === undefined ? 1 : request.query.page;
  102. // 获取登录信息
  103. let logModel = new LogModel();
  104. let logCount = await logModel.count();
  105. logCount = logCount > 30 ? 30 : logCount;
  106. let pageSize = 10;
  107. logList = await logModel.getLog(sessionUser.id, LogType.LOGIN_LOG, page, pageSize);
  108. // 分页数据
  109. pageData = {
  110. current: page,
  111. total: parseInt(logCount / pageSize),
  112. queryData: response.locals.urlQuery
  113. };
  114. } catch (error) {
  115. console.log(error);
  116. }
  117. let renderData = {
  118. userData: userData,
  119. logList: logList,
  120. pages: pageData,
  121. compilationName: request.session.sessionCompilation.name,
  122. versionName: request.session.compilationVersion,
  123. title: getTitle(request.headers.host)
  124. };
  125. response.render('users/html/user-safe', renderData);
  126. }
  127. /**
  128. * 产品激活页面
  129. *
  130. * @param request
  131. * @param response
  132. * @return {void}
  133. */
  134. async buy(request, response) {
  135. let userData = [];
  136. let compilationList = [];
  137. try {
  138. // 获取编办信息
  139. let compilationModel = new CompilationModel();
  140. compilationList = await compilationModel.getList(request.headers.host, false);
  141. // 获取当前用户信息
  142. let sessionUser = request.session.sessionUser;
  143. let userModel = new UserModel();
  144. userData = await userModel.findDataBySsoId(sessionUser.ssoId);
  145. if (userData.upgrade_list !== undefined) {
  146. let userUpgradeList = userData.upgrade_list;
  147. for (let index in userUpgradeList) {
  148. let oneCompilationIndex = compilationList.findIndex(function (item) {
  149. return item.id === userUpgradeList[index].compilationID;
  150. });
  151. if (oneCompilationIndex !== -1) {
  152. compilationList[oneCompilationIndex].isUpgrade = userUpgradeList[index].isUpgrade;
  153. compilationList[oneCompilationIndex].deadline = userUpgradeList[index].deadline;
  154. compilationList[oneCompilationIndex].lock = userUpgradeList[index].lock;
  155. }
  156. }
  157. }
  158. } catch (error) {
  159. console.log(error);
  160. }
  161. let renderData = {
  162. userData: userData,
  163. compilationList: compilationList,
  164. compilationName: request.session.sessionCompilation.name,
  165. versionName: request.session.compilationVersion,
  166. title: getTitle(request.headers.host)
  167. };
  168. response.render('users/html/user-buy', renderData);
  169. }
  170. /**
  171. * 偏好设置页面
  172. *
  173. * @param {object} request
  174. * @param {object} response
  175. * @return {void}
  176. */
  177. async preferences(request, response) {
  178. let sessionUserData = request.session.sessionUser;
  179. let preferenceSetting = {};
  180. let compilationList = [];
  181. try {
  182. // 获取配置信息
  183. let settingModel = new SettingModel();
  184. preferenceSetting = await settingModel.getPreferenceSetting(sessionUserData.id);
  185. // 获取编办信息
  186. let compilationModel = new CompilationModel();
  187. compilationList = await compilationModel.getList(request.headers.host, false);
  188. } catch (error) {
  189. console.log(error);
  190. }
  191. let renderData = {
  192. preferenceSetting: preferenceSetting,
  193. compilationList: compilationList,
  194. compilationName: request.session.sessionCompilation.name,
  195. versionName: request.session.compilationVersion,
  196. title: getTitle(request.headers.host)
  197. };
  198. response.render('users/html/user-set', renderData);
  199. }
  200. /**
  201. * 保存偏好设置
  202. *
  203. * @param {object} request
  204. * @param {object} response
  205. * @return {void}
  206. */
  207. async savePreferences(request, response) {
  208. let loginAsk = request.body.login_ask;
  209. loginAsk = parseInt(loginAsk);
  210. let selectVersion = request.body.select_version;
  211. let sessionUserData = request.session.sessionUser;
  212. try {
  213. let data = {
  214. login_ask: loginAsk,
  215. select_version: loginAsk === 0 ? selectVersion : ''
  216. };
  217. let settingModel = new SettingModel();
  218. let result = await settingModel.save(sessionUserData.id, SettingType.PREFERENCE, data);
  219. if (!result) {
  220. throw '保存失败';
  221. }
  222. // 保存编办信息到session
  223. if (data.login_ask === 1) {
  224. // 查找对应编办
  225. let compilationModel = new CompilationModel();
  226. let compilationData = await compilationModel.getCompilationById(selectVersion);
  227. // 判断当前用户的是使用免费版还是专业版
  228. let userModel = new UserModel();
  229. let compilationVersion = await userModel.getVersionFromUpgrade(sessionUserData.ssoId, compilationData._id, request);
  230. request.session.compilationVersion = compilationVersion.version;
  231. request.session.sessionUser.compilationLock = compilationVersion.lock;
  232. request.session.sessionCompilation = compilationData;
  233. }
  234. } catch (error) {
  235. console.log(error);
  236. }
  237. response.redirect(request.headers.referer);
  238. }
  239. /*
  240. * 版本激活
  241. * */
  242. async activateVersion(request, response) {
  243. try {
  244. let userModel = new UserModel();
  245. let sessionUser = request.session.sessionUser;
  246. let data = JSON.parse(request.body.data);
  247. let activateCode = data.activateCode,
  248. compilationId = data.compilationId;
  249. let isActivated = true;//调激活接口
  250. if (!isActivated) {
  251. throw '激活失败';
  252. }
  253. //激活成功,更新入库
  254. let userObjId = mongoose.Types.ObjectId(sessionUser.id);
  255. let versionInfo = {};
  256. versionInfo.compilationId = compilationId;
  257. versionInfo.activatedDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  258. //失效信息{invalid: boolean, invalidDate: String}
  259. versionInfo.invalidInfo = null;
  260. await userModel.addVersion({ _id: userObjId }, versionInfo);
  261. response.json({ error: 0, msg: 'success' });
  262. }
  263. catch (error) {
  264. response.json({ error: 1, msg: error })
  265. }
  266. }
  267. /*
  268. * 更新版本状态
  269. * */
  270. async updateVersionState(request, response) {
  271. try {
  272. let userModel = new UserModel();
  273. let activated = request.body.activated,
  274. userId = request.body.userId,
  275. compilationId = request.body.compilationId;
  276. if (activated) {
  277. let versionInfo = {};
  278. versionInfo.compilationId = compilationId;
  279. versionInfo.activatedDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  280. versionInfo.invalidInfo = null;
  281. await userModel.addVersion({ _id: mongoose.Types.ObjectId(userId) }, versionInfo);
  282. }
  283. else {
  284. await userModel.removeVersion(userId, compilationId);
  285. }
  286. response.json({ error: 0, msg: 'success' });
  287. }
  288. catch (error) {
  289. response.json({ error: 1, msg: error });
  290. }
  291. }
  292. /*
  293. * 获取用户版本信息
  294. * */
  295. async getVersionInfo(request, response) {
  296. try {
  297. let userModel = new UserModel();
  298. let userId = request.session.sessionUser.id;
  299. let userData = await userModel.findDataById(userId);
  300. let versionInfo = userData ? userData.versionInfo ? userData.versionInfo : [] : [];
  301. response.json({ error: 0, msg: 'success', data: versionInfo });
  302. }
  303. catch (error) {
  304. response.json({ error: 1, msg: error, data: null });
  305. }
  306. }
  307. /*
  308. * 获取用户信息
  309. * */
  310. async getUserByMobile(req, res) {
  311. try {
  312. let userModel = new UserModel();
  313. let data = JSON.parse(req.body.data);
  314. let userData = await userModel.findDataByMobile(data.mobile);
  315. res.json({ error: 0, msg: 'success', data: userData });
  316. }
  317. catch (err) {
  318. res.json({ error: 1, msg: err, data: null });
  319. }
  320. }
  321. async getUsers(req, res) {
  322. try {
  323. let data = JSON.parse(req.body.data);
  324. let userObjIDs = [];
  325. for (let userID of data.userIDs) {
  326. userObjIDs.push(mongoose.Types.ObjectId(userID));
  327. }
  328. let users = await userData.find({ _id: { $in: userObjIDs } });
  329. res.json({ error: 0, msg: 'success', data: users });
  330. }
  331. catch (err) {
  332. res.json({ error: 1, msg: err, data: null });
  333. }
  334. }
  335. /*
  336. * 更改用户账号登录方式
  337. * */
  338. async changeIsSmsLogin(request, response) {
  339. try {
  340. let status = request.body.status;
  341. let userModel = new UserModel();
  342. let userId = request.session.sessionUser.id;
  343. let result = await userModel.updateUser({ _id: userId }, { isSmsLogin: status });
  344. if (result) {
  345. response.json({ error: 0, msg: 'success', data: null });
  346. } else {
  347. throw '更新失败';
  348. }
  349. }
  350. catch (error) {
  351. response.json({ error: 1, msg: error, data: null });
  352. }
  353. }
  354. /*
  355. * 更改异常登录通知
  356. * */
  357. async changeIsLoginValid(request, response) {
  358. try {
  359. let status = request.body.status;
  360. let userModel = new UserModel();
  361. let userId = request.session.sessionUser.id;
  362. let result = await userModel.updateUser({ _id: userId }, { isLoginValid: status });
  363. if (result) {
  364. response.json({ error: 0, msg: 'success', data: null });
  365. } else {
  366. throw '更新失败';
  367. }
  368. }
  369. catch (error) {
  370. response.json({ error: 1, msg: error, data: null });
  371. }
  372. }
  373. async isFree(req, res) {
  374. try {
  375. const sessionVersion = req.session.compilationVersion;
  376. const userModel = new UserModel();
  377. const isFree = userModel.isFreeFromSession(sessionVersion) && !(req.session.sessionUser.mobile === '13823093010');
  378. res.json({ error: 0, msg: 'success', data: { isFree } });
  379. } catch (err) {
  380. res.json({ error: 1, msg: String(err), data: null });
  381. }
  382. }
  383. }
  384. module.exports = UserController;