Index: forgon-core/src/main/java/com/forgon/oa/onlineusers/service/OnlineUserManager.java =================================================================== diff -u -r35079 -r41214 --- forgon-core/src/main/java/com/forgon/oa/onlineusers/service/OnlineUserManager.java (.../OnlineUserManager.java) (revision 35079) +++ forgon-core/src/main/java/com/forgon/oa/onlineusers/service/OnlineUserManager.java (.../OnlineUserManager.java) (revision 41214) @@ -1,12 +1,18 @@ package com.forgon.oa.onlineusers.service; import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import net.sf.json.JSONObject; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.security.core.session.SessionRegistry; import com.forgon.directory.acegi.tools.AcegiHelper; @@ -16,6 +22,7 @@ import com.forgon.directory.vo.LoginUserData; import com.forgon.security.model.User; import com.forgon.security.userdetails.UserContainsSessionUser; +import com.forgon.tools.MathTools; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.treenode.service.THTreeNodeManager; @@ -192,4 +199,41 @@ resultObj.put("onlineUserAmount", onlineUserNames.size()); return resultObj; } + + /** + * 计算所有在线用户的在线时长 + */ + public Map getOnlineUserHours(){ + Map onlineUserHours = new HashMap(); + List principals = sessionRegistry.getAllPrincipals(); + if(CollectionUtils.isEmpty(principals)){ + return onlineUserHours; + } + + Map userNameLoginDateMap = new HashMap(); + for (Object obj : principals) { + UserContainsSessionUser user = (UserContainsSessionUser)obj; + LoginUserData loginUserData = user.getSessionUser(); + Date loginDate = loginUserData.getLoginDate(); + String userName = loginUserData.getUserName(); + Date firstLoginDate = userNameLoginDateMap.get(userName); + if(firstLoginDate == null || firstLoginDate.after(loginDate)){ + userNameLoginDateMap.put(userName, loginDate); + } + } + + if(MapUtils.isEmpty(userNameLoginDateMap)){ + return onlineUserHours; + } + + Date now = new Date(); + for (Entry entry : userNameLoginDateMap.entrySet()) { + Date loginDate = entry.getValue(); + Long duration = now.getTime() - loginDate.getTime(); + Double hour = MathTools.div(duration, 1000*60*60*60*60, 5).doubleValue(); + onlineUserHours.put(entry.getKey(), hour); + } + + return onlineUserHours; + } } Index: forgon-core/src/main/java/com/forgon/directory/vo/LoginUserData.java =================================================================== diff -u -r20147 -r41214 --- forgon-core/src/main/java/com/forgon/directory/vo/LoginUserData.java (.../LoginUserData.java) (revision 20147) +++ forgon-core/src/main/java/com/forgon/directory/vo/LoginUserData.java (.../LoginUserData.java) (revision 41214) @@ -1,6 +1,7 @@ package com.forgon.directory.vo; import java.io.Serializable; +import java.util.Date; import com.forgon.Constants; import com.forgon.security.model.UserAttribute; @@ -120,6 +121,11 @@ * 会话id */ private String sessionID; + + /** + * 登录时间 + */ + private Date loginDate = new Date(); public Boolean getFirstSupplyRoomUser() { return firstSupplyRoomUser; @@ -474,5 +480,13 @@ public void setMouseHoverEventOfApply(String mouseHoverEventOfApply) { this.mouseHoverEventOfApply = mouseHoverEventOfApply; } + + public Date getLoginDate() { + return loginDate; + } + + public void setLoginDate(Date loginDate) { + this.loginDate = loginDate; + } } Index: forgon-core/src/main/java/com/forgon/security/model/User.java =================================================================== diff -u -r40894 -r41214 --- forgon-core/src/main/java/com/forgon/security/model/User.java (.../User.java) (revision 40894) +++ forgon-core/src/main/java/com/forgon/security/model/User.java (.../User.java) (revision 41214) @@ -273,6 +273,12 @@ */ private String smsVerificationCode; + /** + * 创建时间 + * 旧用户数据创建时间为空ZSYY-444 + */ + private Date createTime = new Date(); + public String getPasswd() { return this.passwd; } @@ -955,5 +961,13 @@ public void setSmsVerificationCode(String smsVerificationCode) { this.smsVerificationCode = smsVerificationCode; } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } } Index: ssts-web/src/main/java/com/forgon/disinfectsystem/directory/dwr/table/UserTableManager.java =================================================================== diff -u -r38960 -r41214 --- ssts-web/src/main/java/com/forgon/disinfectsystem/directory/dwr/table/UserTableManager.java (.../UserTableManager.java) (revision 38960) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/directory/dwr/table/UserTableManager.java (.../UserTableManager.java) (revision 41214) @@ -13,6 +13,7 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.apache.commons.collections.MapUtils; import org.apache.commons.lang.StringUtils; import org.hibernate.Hibernate; @@ -23,11 +24,13 @@ import com.forgon.directory.service.SysUserManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; +import com.forgon.oa.onlineusers.service.OnlineUserManager; import com.forgon.security.model.Role; import com.forgon.security.model.User; import com.forgon.security.service.RoleManager; import com.forgon.security.service.UserManager; import com.forgon.systemsetting.service.SystemconfigureManager; +import com.forgon.tools.date.DateTools; import com.forgon.tools.string.StringTools; /** @@ -47,7 +50,13 @@ private SystemconfigureManager systemconfigureManager; private UserManager userManager; + + private OnlineUserManager onlineUserManager; + public void setOnlineUserManager(OnlineUserManager onlineUserManager) { + this.onlineUserManager = onlineUserManager; + } + public void setUserManager(UserManager userManager) { this.userManager = userManager; } @@ -228,6 +237,7 @@ Set userSet = new LinkedHashSet(); if (null != list && list.size() > 0) { + Map onlineUserHours = onlineUserManager.getOnlineUserHours(); Map orgUserRelationMap = new HashMap(); for (OrgUserRelation orgUserRelation : list) { User user = orgUserRelation.getUser(); @@ -278,6 +288,24 @@ } userObj.put("user", userDetail); + + //用户在线时间,退出登录后清0 + if(MapUtils.isNotEmpty(onlineUserHours)){ + Double onlineHours = onlineUserHours.get(user.getName()); + if(onlineHours != null){ + userObj.put("onlineHours", String.format("%.5f", onlineHours)); + }else{ + userObj.put("onlineHours", ""); + } + } + + //用户创建时间 + if(user.getCreateTime() != null){ + userObj.put("createTime", DateTools.getFormatDateStr(user.getCreateTime(), DateTools.COMMON_DATE_HMS)); + }else{ + userObj.put("createTime", ""); + } + userArray.add(userObj); }