online_logs.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /**
  2. * Created by zhang on 2019/4/12.
  3. */
  4. module.exports = {
  5. saveOnlineTime:saveOnlineTime
  6. };
  7. let mongoose = require("mongoose");
  8. const moment = require('moment');
  9. let logs_model = mongoose.model("online_logs");
  10. let user_model = mongoose.model("user");
  11. async function saveOnlineTime(req) {
  12. let online_times = 0;
  13. let end = + new Date();
  14. try {
  15. let interval_time = 10 * 60 *1000;
  16. let start = req.session.online_start_time;
  17. if(start === undefined) return req.session.online_start_time ==end;
  18. let online_times = end - start;
  19. //0.5秒内只记一次就好
  20. if(online_times < 500) return;//如果间隔太短,则忽略
  21. if(online_times > interval_time ){//如果间隔超过有效时长,则不累加这次时长,从头开始算
  22. req.session.online_start_time = end;
  23. return
  24. }
  25. if(!req.session.sessionUser||!req.session.sessionCompilation) return;
  26. //先设置session再更新,在多个服务器多请求的情况下,update完再设置回session可能会造成多算时间
  27. req.session.online_start_time = end;
  28. let dataString = moment(end).format('YYYY-MM-DD');
  29. let condition = {userID:req.session.sessionUser.id,compilationID:req.session.sessionCompilation._id,dateString:dataString};
  30. let userCondition = {_id: mongoose.Types.ObjectId(req.session.sessionUser.id)};
  31. let record = await logs_model.findOne(condition);
  32. if(record){ //如果找到,则累加
  33. await logs_model.update(condition,{$inc:{'online_times' : online_times }});
  34. await user_model.update(userCondition,{$inc:{'online_times' : online_times, 'all_online_times' : online_times}});
  35. }else {//如果没找到,则新增一条记录
  36. condition["online_times"] = online_times;
  37. let today = moment(dataString).toDate();
  38. condition["dateTime"] = +today;
  39. await logs_model.create(condition);
  40. await user_model.update(userCondition,{'online_times' : online_times,$inc:{'all_online_times' : online_times }});
  41. }
  42. }catch (e){
  43. console.log("统计登录时间错误,online_times值:"+online_times);
  44. console.log(e);
  45. }
  46. }