对于系统用户某段时间的在线时长和登录次数进行统计


placeholder image
admin 发布于:2010-03-25 17:30:00
阅读:loading

如题,下面的内容将围绕题目进行。

业务需求:情况是这样的,我现在需要对某个用户某段时间内访问系统的次数、在线时长等数据进行统计。统计的时间为周,即我以周为单位来统计。

功能描述:

首先要做的事情:我需要知道一个年份,将这一年的52周数据,第一周的周日到最后一周的周六的日期获取到,在java世界中,每周的第一天为周日,每周的最后一天为周六,根据年份的不同,这些数据获取的肯定是不同的。

如:

2010年的日期时间为:

键:1,开始时间为:2009-12-27,结束时间为:2010-01-02
键:2,开始时间为:2010-01-03,结束时间为:2010-01-09
键:3,开始时间为:2010-01-10,结束时间为:2010-01-16
键:4,开始时间为:2010-01-17,结束时间为:2010-01-23
键:5,开始时间为:2010-01-24,结束时间为:2010-01-30
键:6,开始时间为:2010-01-31,结束时间为:2010-02-06
键:7,开始时间为:2010-02-07,结束时间为:2010-02-13
键:8,开始时间为:2010-02-14,结束时间为:2010-02-20
键:9,开始时间为:2010-02-21,结束时间为:2010-02-27
键:10,开始时间为:2010-02-28,结束时间为:2010-03-06
键:11,开始时间为:2010-03-07,结束时间为:2010-03-13
键:12,开始时间为:2010-03-14,结束时间为:2010-03-20
键:13,开始时间为:2010-03-21,结束时间为:2010-03-27
键:14,开始时间为:2010-03-28,结束时间为:2010-04-03
键:15,开始时间为:2010-04-04,结束时间为:2010-04-10
键:16,开始时间为:2010-04-11,结束时间为:2010-04-17
键:17,开始时间为:2010-04-18,结束时间为:2010-04-24
键:18,开始时间为:2010-04-25,结束时间为:2010-05-01
键:19,开始时间为:2010-05-02,结束时间为:2010-05-08
键:20,开始时间为:2010-05-09,结束时间为:2010-05-15
键:21,开始时间为:2010-05-16,结束时间为:2010-05-22
键:22,开始时间为:2010-05-23,结束时间为:2010-05-29
键:23,开始时间为:2010-05-30,结束时间为:2010-06-05
键:24,开始时间为:2010-06-06,结束时间为:2010-06-12
键:25,开始时间为:2010-06-13,结束时间为:2010-06-19
键:26,开始时间为:2010-06-20,结束时间为:2010-06-26
键:27,开始时间为:2010-06-27,结束时间为:2010-07-03
键:28,开始时间为:2010-07-04,结束时间为:2010-07-10
键:29,开始时间为:2010-07-11,结束时间为:2010-07-17
键:30,开始时间为:2010-07-18,结束时间为:2010-07-24
键:31,开始时间为:2010-07-25,结束时间为:2010-07-31
键:32,开始时间为:2010-08-01,结束时间为:2010-08-07
键:33,开始时间为:2010-08-08,结束时间为:2010-08-14
键:34,开始时间为:2010-08-15,结束时间为:2010-08-21
键:35,开始时间为:2010-08-22,结束时间为:2010-08-28
键:36,开始时间为:2010-08-29,结束时间为:2010-09-04
键:37,开始时间为:2010-09-05,结束时间为:2010-09-11
键:38,开始时间为:2010-09-12,结束时间为:2010-09-18
键:39,开始时间为:2010-09-19,结束时间为:2010-09-25
键:40,开始时间为:2010-09-26,结束时间为:2010-10-02
键:41,开始时间为:2010-10-03,结束时间为:2010-10-09
键:42,开始时间为:2010-10-10,结束时间为:2010-10-16
键:43,开始时间为:2010-10-17,结束时间为:2010-10-23
键:44,开始时间为:2010-10-24,结束时间为:2010-10-30
键:45,开始时间为:2010-10-31,结束时间为:2010-11-06
键:46,开始时间为:2010-11-07,结束时间为:2010-11-13
键:47,开始时间为:2010-11-14,结束时间为:2010-11-20
键:48,开始时间为:2010-11-21,结束时间为:2010-11-27
键:49,开始时间为:2010-11-28,结束时间为:2010-12-04
键:50,开始时间为:2010-12-05,结束时间为:2010-12-11
键:51,开始时间为:2010-12-12,结束时间为:2010-12-18
键:52,开始时间为:2010-12-19,结束时间为:2010-12-25

将2010年时间分成周来算的话,第一周的时间为:开始时间为:2009-12-27,结束时间为:2010-01-02,最后一周的时间为:开始时间为:2010-12-19,结束时间为:2010-12-25。当然了,这些数据都在windows的日期和时间中验证过的。至于2009年的,2008年的,2007年的,.........小于等于系统时间本年年份的,都是正常显示的,
这里贴出来按周显示的数据的时间算法:

首先这里是个时间的bean:

image.png

接着是按周时间的算法类:

image.png

image.png

调用如下:

image.png

该类简介,

调用的时候

Time time = new Time(2010);

然后map方法里面就会存储2010年所有的日期了,格式为:yyyy-MM-dd,不用说这里的集合长度为52,由于我这里用到的是LinkedHashMap,它会给我保持结合的顺序的。

如果这里2010换成2009,此时该集合的值就会2009年的52个周的周日到周六的时间日期。

 

1、首先创建用户登录退出记录表。

表UserLogDetail:字段如下:

int primary key identity,--主键自增列

int usr_id  --系统用户编号

sessionID varchar(20) --sessionID

loginDate datetime--登录时间

logoutDate datetime --退出时间

2、记录用户登录退出时间:

<1>、当用户登录的时候,插入数据values(用户编号,sessionID,登录时间,退出时间);当然这里的退出时间默认和登录时间都一样为:getdate()

<2>、编写session监听器,用于监听会话bean是否销毁信息,无论是用户正常退出,还是用户非法退出,都有session监听器控制,根据sessionID来更改登录的时候插入的记录退出时间为系统此刻时间。

 

至此,系统用户的登录、退出时间都有了。

 

2、查询数据,生成统计图

<1>、对用户登录次数进行搜索,检索这个信息的SQL如下:
select count(0) from qt_userlogdetail
where uld_usrid = 3 and uld_logintime between '开始时间' and '结束时间'

<2>、查询用户在某段时间内的登录时长,这里以小时为单位来显示,描述如下:

首先我知道时间段,根据 退出时间 -  登录时间 = 本次登录时长,根据SQL语句的 datediff函数获取到这段时间段饿分钟数,然后再根据时间段来检索。然后再加上这个开始时间和结束时间为条件,注意:这里的获取时间段之后需要将这个用户的的所有在线时长给累加起来,所以SQL函数sum来执行。最后需要提示的是:如果当前的这个用户是,刚刚注册完毕或者刚刚激活完毕的时候,没有登录过,当然也没有在线时长的说法,查询的SQL肯定为NULL,当然了,我们在显示图的时候值为NULL肯定是错误的,这里就需要用到SQL的ISNULL函数,将所有为NULL的值转换成0,这样就能正常显示了,sql语句如下:

select isnull(sum(datediff(mi,ULD_LoginTime,ULD_LogOutTime)),0)
from qt_userlogdetail as bb
where bb.uld_usrid = 3 and ULD_LoginTime between '开始时间' and '结束时间'

 

到这一步也没啥好说,看看生成的图吧:

例子:

我这里查看用户为 3 的 2010 年的访问记录吧。

image.png
上面这个图,可以看出来,只有在2010年的第13周的时候有登录次数、在线时长有数据,第13周也就是最近这几天。

image.png

上面的时间为10年的第13周。

上述许多内容已经过时和过期了,留存本篇文章仅为方便个人查看,原始文章的信息参考:

原始链接:hhttps://www.chendd.cn/information/viewInformation/other/48.a

最后更新:2010-03-25 17:30:00

访问次数:465

评论次数:0

点赞个数:0

 点赞


 发表评论

当前回复:作者

 评论列表


留言区