package org.beanfuse.webapp.security.action; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import org.apache.commons.lang.StringUtils; import org.beanfuse.collection.Order; import org.beanfuse.query.Condition; import org.beanfuse.query.EntityQuery; import org.beanfuse.security.UserCategory; import org.beanfuse.security.online.SessionActivity; /** * 用户登陆退出的会话管理 * * @author chaostone * */ public class SessionActivityAction extends SecurityAction { protected void indexSetting() { put("categories", entityService.loadAll(UserCategory.class)); } /** * 显示用户某时间段的登陆记录 * * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public String search() { EntityQuery query = new EntityQuery(SessionActivity.class, "sessionActivity"); populateConditions(query); addTimeCondition(query); query.setLimit(getPageLimit()); query.addOrder(Order.parse(get("orderBy"))); put("sessionActivitys", entityService.search(query)); return forward(); } private void addTimeCondition(EntityQuery query) { String stime = get("startTime"); String etime = get("endTime"); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm"); Date sdate = null, edate = null; if (StringUtils.isNotBlank(stime)) { try { sdate = df.parse(stime); // 截至日期增加一天 if (StringUtils.isNotBlank(etime)) { edate = df.parse(etime); Calendar gc = new GregorianCalendar(); gc.setTime(edate); gc.set(Calendar.DAY_OF_YEAR, gc.get(Calendar.DAY_OF_YEAR) + 1); edate = gc.getTime(); } } catch (ParseException e) { throw new RuntimeException(e); } } if (null != sdate && null == edate) { query.add(new Condition("sessionActivity.loginAt >=:sdate", sdate)); } else if (null != sdate && null != edate) { query .add(new Condition( "sessionActivity.loginAt >=:sdate and sessionActivity.loginAt <:edate", sdate, edate)); } else if (null == sdate && null != edate) { query.add(new Condition("sessionActivity.loginAt <:edate", edate)); } } /** * 显示用户组某时间段的登陆记录 * * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public String loginCountStat() { EntityQuery query = new EntityQuery(SessionActivity.class, "sessionActivity"); query.setSelect("sessionActivity.name,sessionActivity.fullname,count(sessionActivity.name)"); populateConditions(query); String groupName = get("groupName"); addTimeCondition(query); if (StringUtils.isNotEmpty(groupName)) { query.add(new Condition("exists( from User u join u.groups as group " + "where u.name=sessionActivity.name and group.name like :groupName )", "%" + groupName + "%")); } query.groupBy("sessionActivity.name,sessionActivity.fullname"); query.setLimit(getPageLimit()); query.addOrder(Order.parse(get("orderBy"))); put("loginCountStats", entityService.search(query)); return forward(); } /** * 显示登陆次数 * * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public String timeIntervalStat() { EntityQuery query = new EntityQuery(SessionActivity.class, "sessionActivity"); addTimeCondition(query); query.setSelect("hour(sessionActivity.loginAt),count(*)"); query.groupBy("hour(sessionActivity.loginAt)"); List datas = (List) entityService.search(query); put("logonStats", datas); return forward(); } }