Jelajahi Sumber

记录登录时长

zhangweicheng 6 tahun lalu
induk
melakukan
d0a154a72f

+ 37 - 0
logs/online_logs.js

@@ -0,0 +1,37 @@
+/**
+ * Created by zhang on 2019/4/12.
+ */
+module.exports = {
+    saveOnlineTime:saveOnlineTime
+};
+
+let mongoose = require("mongoose");
+import moment from "moment";
+let logs_model = mongoose.model("online_logs");
+
+async function saveOnlineTime(req) {
+    let interval_time = 10 * 60 *1000;
+    let start = req.session.online_start_time;
+    let end = + new Date();
+    let online_times =  end - start;
+    //1秒内只记一次就好
+    if(online_times < 500) return;//如果间隔太短,则忽略
+    if(online_times > interval_time ){//如果间隔超过有效时长,则不累加这次时长,从头开始算
+        req.session.online_start_time = end;
+        return
+    }
+    if(!req.session.sessionUser&&!req.session.sessionCompilation) return;
+    let dataString = moment(end).format('YYYY-MM-DD');
+    let condition = {userID:req.session.sessionUser.id,compilationID:req.session.sessionCompilation._id,dateString:dataString};
+    let record = await logs_model.findOne(condition);
+    if(record){ //如果找到,则累加
+        await logs_model.update(condition,{$inc:{'online_times' : online_times }});
+    }else {//如果没找到,则新增一条记录
+        condition["online_times"] = online_times;
+        let today = moment(dataString).toDate();
+        condition["dataTime"] = +today;
+        await logs_model.create(condition);
+    }
+    req.session.online_start_time = end;
+    console.log(`登录时长累加-------${online_times}毫秒`);
+}

+ 17 - 0
modules/all_models/online_logs.js

@@ -0,0 +1,17 @@
+/**
+ * Created by zhang on 2019/4/12.
+ */
+//用户在线时长统计
+
+let mongoose = require("mongoose");
+let Schema = mongoose.Schema;
+
+// 表结构
+let schema = {
+    userID: String,
+    compilationID: String,
+    dateString: String,
+    dataTime:Number,//dateString转换回毫秒数对应的数值,方便查询
+    online_times: Number
+};
+mongoose.model("online_logs", new Schema(schema, {versionKey: false}),"online_logs");

+ 1 - 0
modules/users/controllers/login_controller.js

@@ -141,6 +141,7 @@ class LoginController {
             console.log(error);
             return response.json({error: 1, msg: error});
         }
+        request.session.online_start_time = +new Date();
         console.log(`${request.session.sessionUser.real_name}--id:${request.session.sessionUser.id}--登录了系统`);
         response.json({
             error: 0,

+ 4 - 2
server.js

@@ -23,6 +23,8 @@ fileUtils.getGlobbedFiles('./modules/all_models/*.js').forEach(function(modelPat
 //config.setupCache();
 let cfgCacheUtil = require("./config/cacheCfg");
 cfgCacheUtil.setupDftCache();
+let online_logs = require("./logs/online_logs");
+
 
 let app = express();
 let _rootDir = __dirname;
@@ -54,7 +56,7 @@ app.use(session({
 }));
 
 // 登录状态全局判断
-app.use(function (req, res, next) {
+app.use(async function (req, res, next) {
     let url = req.originalUrl;
     // if (/^\/login/.test(url) || /\.map|\.ico$/.test(url) || /^\/sms/.test(url) || /^\/cld/.test(url) || /^\/captcha/.test(url)  || /^\/accountIsPro/.test(url)) {
     if (/^\/login/.test(url) || /\.map|\.ico$/.test(url) || /^\/sms/.test(url) || /^\/cld/.test(url) || /^\/captcha/.test(url)) {
@@ -80,10 +82,10 @@ app.use(function (req, res, next) {
             req.session.lastPage = url;
             return res.redirect('/login');
         }
+        //await online_logs.saveOnlineTime(req);//记录登录时长
         next();
     }
 });
-
 //加载路由文件
 fileUtils.getGlobbedFiles('./modules/**/routes/*.js').forEach(function(modelPath) {
     require(path.resolve(modelPath))(app);