online_facade.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /**
  2. * Created by zhang on 2019/4/16.
  3. */
  4. module.exports = {
  5. setOnlineTimes:setOnlineTimes,
  6. getOnlineInfo:getOnlineInfo,
  7. getTimeString:getTimeString,
  8. };
  9. let mongoose = require("mongoose");
  10. let logs_model = mongoose.model("online_logs");
  11. async function getOnlineInfo(filter) {
  12. let datas = [];
  13. let logs = await logs_model.find(filter, null, { sort: {_id: -1}});
  14. let less = 0;
  15. for(let l of logs){
  16. let d = getTimeString(l.online_times);
  17. let online_times = d.s;
  18. less += d.less;
  19. if(online_times!=""){
  20. datas.push({dateString:l.dateString,dateTime:l.online_times,online_times:online_times})
  21. }
  22. }
  23. if(datas.length>1){//大于2个才把不够1分钟的累积到最后一条记录
  24. let last = datas[datas.length - 1];
  25. last.online_times = getTimeString(last.dateTime + less).s;
  26. }
  27. return datas;
  28. }
  29. async function setOnlineTimes(userList,condition){
  30. for(let u of userList){
  31. let filter = {'userID':u._id.toString()};
  32. if(u.latest_used) filter["compilationID"] = u.latest_used;
  33. if(condition.latest_login && condition.latest_login == ""){
  34. let startTime = condition.latest_login['$gte']; //- 24*60*60*1000 //往前推一天 {'$gte': startTime, '$lt': endTime}latest_login
  35. filter['dateTime'] = {'$gte': startTime, '$lt': condition.latest_login['$lt']}
  36. }
  37. let result = await logs_model.aggregate([
  38. {$match: filter},
  39. {$group: {_id: "$userID", total: {$sum: "$online_times"}}}
  40. ]);
  41. u._doc.filter = JSON.stringify(filter);
  42. if(result.length > 0) u._doc.online_times = getTimeString(result[0].total).s;
  43. u._doc.online_list = await this.getOnlineInfo(filter);
  44. u._doc.all_online_times = getTimeString(u.all_online_times).s;
  45. }
  46. }
  47. function getTimeString(times) {
  48. let s = "",perHour = 1000 * 60 * 60,perMin = 1000 * 60,perDay = 24*perHour;
  49. let day = parseInt(times/perDay);
  50. let hour = parseInt(parseInt(times % perDay) / perHour);
  51. let min = parseInt((times % perHour)/perMin);
  52. let less = (times % perHour)%perMin;//不够一分钟的时间
  53. if(day > 0) s = s+`${day}天`;
  54. if(hour > 0) s = s+`${hour}小时`;
  55. if(min > 0) s= s+`${min}分钟`;
  56. return {s:s,less:less}
  57. }