|
@@ -0,0 +1,100 @@
|
|
|
+/**
|
|
|
+ * Created by zhang on 2020/1/8.
|
|
|
+ */
|
|
|
+
|
|
|
+module.exports={
|
|
|
+ rationNumberChecking,
|
|
|
+ tenderNumberChecking,
|
|
|
+ stateChecking,
|
|
|
+};
|
|
|
+
|
|
|
+const mongoose = require("mongoose");
|
|
|
+const rationModel = mongoose.model("ration");
|
|
|
+const pmFacade = require('../../pm/facade/pm_facade');
|
|
|
+const online_logs = require('../../../logs/online_logs');
|
|
|
+import UserModel from '../../../modules/users/models/user_model';
|
|
|
+
|
|
|
+async function rationNumberChecking(req, res, next) {
|
|
|
+ if(req.session.systemSetting){
|
|
|
+ let type = req.session.compilationVersion.indexOf("免费") == -1?"professional":"normal";
|
|
|
+ let data = req.body.data;
|
|
|
+ if(typeof data === 'object'){
|
|
|
+ data = JSON.stringify(data);
|
|
|
+ }
|
|
|
+ data = JSON.parse(data);
|
|
|
+ let projectID = data.projectID;
|
|
|
+ let no = await rationModel.find({projectID:projectID}).count();
|
|
|
+ if(no >= req.session.systemSetting[type].ration){
|
|
|
+ let result = {error:1,message:"您套用定额个数超限,请联系我们的客服人员。"};
|
|
|
+ return res.json(result);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ next();
|
|
|
+}
|
|
|
+
|
|
|
+async function tenderNumberChecking(req, res, next) {
|
|
|
+ const data = JSON.parse(req.body.data);
|
|
|
+ const tenderCount = data.tenderCount;
|
|
|
+ if (tenderCount) {
|
|
|
+ const tenderOverrun = await pmFacade.isTenderOverrun(tenderCount, req.session);
|
|
|
+ if (tenderOverrun) {
|
|
|
+ return res.json({
|
|
|
+ error: 1,
|
|
|
+ message: '您创建的项目个数超限,请联系我们的客服人员,或者导出建设项目保存到本地备份,删除云上数据。'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ next();
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+function isAjax(req) {
|
|
|
+ return req.headers['x-requested-with'] === 'XMLHttpRequest';
|
|
|
+}
|
|
|
+
|
|
|
+// 登录状态全局判断
|
|
|
+async function stateChecking(req, res, next) {
|
|
|
+ const url = req.originalUrl;
|
|
|
+ if (url=="\/"|| /^\/login/.test(url) || /\.map|\.ico$/.test(url) || /^\/sms/.test(url) || /^\/cld/.test(url) || /^\/captcha/.test(url)) {
|
|
|
+ // 如果是登录页面或短信接口或cld接口则忽略判断数据
|
|
|
+ next();
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ if (req.query.ssoID !== undefined && req.query.ssoID !== null && req.query.token !== undefined && req.query.token !== null) {
|
|
|
+ delete req.session.sessionUser;
|
|
|
+ delete req.session.sessionCompilation;
|
|
|
+ return res.redirect('/login' + url);
|
|
|
+ } else {
|
|
|
+ // 判断session
|
|
|
+ const sessionUser = req.session.sessionUser;
|
|
|
+ if (!sessionUser) {
|
|
|
+ //处理 ajax 请求 session 过期问题
|
|
|
+ if (isAjax(req)) {
|
|
|
+ return res.json({ret_code: 99, ret_msg: '登录信息失效,请您重新登录'});
|
|
|
+ } else {
|
|
|
+ throw 'session error';
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ const userModel = new UserModel();
|
|
|
+ const isValidToken = await userModel.checkToken(sessionUser.id, sessionUser.token);
|
|
|
+ if (!isValidToken) {
|
|
|
+ delete req.session.sessionUser;
|
|
|
+ delete req.session.sessionCompilation;
|
|
|
+ if (isAjax(req)) {
|
|
|
+ return res.json({ ret_code: 99, ret_msg: '' });
|
|
|
+ } else {
|
|
|
+ throw 'session token invalid';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ res.locals.sessionUser = sessionUser;
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ // 最后一个页面存入session
|
|
|
+ req.session.lastPage = url;
|
|
|
+ return res.redirect('/login');
|
|
|
+ }
|
|
|
+ next();
|
|
|
+ await online_logs.saveOnlineTime(req);//记录登录时长
|
|
|
+ }
|
|
|
+}
|