index.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /**
  2. * Created by zhang on 2020/1/8.
  3. */
  4. module.exports={
  5. rationNumberChecking,
  6. tenderNumberChecking,
  7. stateChecking,
  8. };
  9. const mongoose = require("mongoose");
  10. const rationModel = mongoose.model("ration");
  11. const pmFacade = require('../../pm/facade/pm_facade');
  12. const online_logs = require('../../../logs/online_logs');
  13. const UserModel = require('../../../modules/users/models/user_model');
  14. async function rationNumberChecking(req, res, next) {
  15. if(req.session.systemSetting){
  16. let type = req.session.compilationVersion.indexOf("免费") == -1?"professional":"normal";
  17. let data = req.body.data;
  18. if(typeof data === 'object'){
  19. data = JSON.stringify(data);
  20. }
  21. data = JSON.parse(data);
  22. let projectID = data.projectID;
  23. let no = await rationModel.find({projectID:projectID}).count();
  24. if(no >= req.session.systemSetting[type].ration){
  25. let result = {error:1,message:"您套用定额个数超限,请联系我们的客服人员。"};
  26. return res.json(result);
  27. }
  28. }
  29. next();
  30. }
  31. async function tenderNumberChecking(req, res, next) {
  32. const data = JSON.parse(req.body.data);
  33. const tenderCount = data.tenderCount;
  34. if (tenderCount) {
  35. const tenderOverrun = await pmFacade.isTenderOverrun(tenderCount, req.session);
  36. if (tenderOverrun) {
  37. return res.json({
  38. error: 1,
  39. message: '您创建的项目个数超限,请联系我们的客服人员,或者导出建设项目保存到本地备份,删除云上数据。'
  40. });
  41. }
  42. }
  43. next();
  44. }
  45. function isAjax(req) {
  46. return req.headers['x-requested-with'] === 'XMLHttpRequest';
  47. }
  48. // 登录状态全局判断
  49. async function stateChecking(req, res, next) {
  50. const url = req.originalUrl;
  51. if (url=="\/"|| /^\/login/.test(url) || /\.map|\.ico$/.test(url) || /^\/sms/.test(url) || /^\/cld\/(?!getCategoryStaff)/.test(url) || /^\/captcha/.test(url) || /^\/wap/.test(url)) {
  52. // 如果是登录页面或短信接口或cld接口则忽略判断数据
  53. next();
  54. } else {
  55. try {
  56. if (req.query.ssoID !== undefined && req.query.ssoID !== null && req.query.token !== undefined && req.query.token !== null) {
  57. delete req.session.sessionUser;
  58. delete req.session.sessionCompilation;
  59. return res.redirect('/login' + url);
  60. } else {
  61. // 判断session
  62. const sessionUser = req.session.sessionUser;
  63. if (!sessionUser) {
  64. //处理 ajax 请求 session 过期问题
  65. if (isAjax(req)) {
  66. return res.json({ret_code: 99, ret_msg: '登录信息失效,请您重新登录'});
  67. } else {
  68. throw 'session error';
  69. }
  70. } else {
  71. const userModel = new UserModel();
  72. const isValidToken = await userModel.checkToken(sessionUser.id, sessionUser.token);
  73. if (!isValidToken) {
  74. delete req.session.sessionUser;
  75. delete req.session.sessionCompilation;
  76. if (isAjax(req)) {
  77. return res.json({ ret_code: 99, ret_msg: '' });
  78. } else {
  79. throw 'session token invalid';
  80. }
  81. }
  82. }
  83. res.locals.sessionUser = sessionUser;
  84. }
  85. } catch (error) {
  86. // 最后一个页面存入session
  87. req.session.lastPage = url;
  88. return res.redirect('/login');
  89. }
  90. next();
  91. await online_logs.saveOnlineTime(req);//记录登录时长
  92. }
  93. }