/** * Created by zhang on 2019/4/12. */ module.exports = { saveOnlineTime:saveOnlineTime }; let mongoose = require("mongoose"); const moment = require('moment'); let logs_model = mongoose.model("online_logs"); let user_model = mongoose.model("user"); async function saveOnlineTime(req) { let online_times = 0; let end = + new Date(); try { let interval_time = 10 * 60 *1000; let start = req.session.online_start_time; if(start === undefined) return req.session.online_start_time ==end; let online_times = end - start; //0.5秒内只记一次就好 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; //先设置session再更新,在多个服务器多请求的情况下,update完再设置回session可能会造成多算时间 req.session.online_start_time = end; let dataString = moment(end).format('YYYY-MM-DD'); let condition = {userID:req.session.sessionUser.id,compilationID:req.session.sessionCompilation._id,dateString:dataString}; let userCondition = {_id: mongoose.Types.ObjectId(req.session.sessionUser.id)}; let record = await logs_model.findOne(condition); if(record){ //如果找到,则累加 await logs_model.update(condition,{$inc:{'online_times' : online_times }}); await user_model.update(userCondition,{$inc:{'online_times' : online_times }}); }else {//如果没找到,则新增一条记录 condition["online_times"] = online_times; let today = moment(dataString).toDate(); condition["dateTime"] = +today; await logs_model.create(condition); await user_model.update(userCondition,{'online_times' : online_times}); } }catch (e){ console.log("统计登录时间错误,online_times值:"+online_times); console.log(e); } }