Package com.jeecms.cms.statistic

Source Code of com.jeecms.cms.statistic.CmsStatisticDaoImpl

package com.jeecms.cms.statistic;

import static com.jeecms.cms.statistic.CmsStatistic.SITEID;
import static com.jeecms.cms.statistic.CmsStatistic.ISREPLYED;
import static com.jeecms.cms.statistic.CmsStatistic.USERID;
import static com.jeecms.cms.statistic.CmsStatistic.CHANNELID;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.hibernate.Query;
import org.springframework.stereotype.Repository;

import com.jeecms.cms.statistic.CmsStatistic.TimeRange;
import com.jeecms.common.hibernate3.Finder;
import com.jeecms.common.hibernate3.HibernateSimpleDao;
import com.jeecms.common.page.Pagination;

@Repository
public class CmsStatisticDaoImpl extends HibernateSimpleDao implements
    CmsStatisticDao {
  public long memberStatistic(TimeRange timeRange) {
    Finder f = createCacheableFinder("select count(*) from CmsUser bean where 1=1");
    if (timeRange != null) {
      f.append(" and bean.registerTime >= :begin");
      f.append(" and bean.registerTime < :end");
      f.setParam("begin", timeRange.getBegin());
      f.setParam("end", timeRange.getEnd());
    }
    return (Long) find(f).iterator().next();
  }

  public long contentStatistic(TimeRange timeRange,
      Map<String, Object> restrictions) {
    Finder f = createCacheableFinder("select count(*) from Content bean");
    Integer userId = (Integer) restrictions.get(USERID);
    Integer channelId = (Integer) restrictions.get(CHANNELID);
    if (channelId != null) {
      f.append(" join bean.channel channel,Channel parent");
      f.append(" where channel.lft between parent.lft and parent.rgt");
      f.append(" and channel.site.id=parent.site.id");
      f.append(" and parent.id=:parentId");
      f.setParam("parentId", channelId);
    } else {
      f.append(" where bean.site.id=:siteId").setParam("siteId",
          restrictions.get(SITEID));
    }
    if (timeRange != null) {
      f.append(" and bean.contentExt.releaseDate >= :begin");
      f.append(" and bean.contentExt.releaseDate < :end");
      f.setParam("begin", timeRange.getBegin());
      f.setParam("end", timeRange.getEnd());
    }
    if (userId != null) {
      f.append(" and bean.user.id=:userId").setParam("userId", userId);
    }
    return (Long) find(f).iterator().next();
  }

  public long commentStatistic(TimeRange timeRange,
      Map<String, Object> restrictions) {
    Finder f = createCacheableFinder("select count(*) from CmsComment bean where bean.site.id=:siteId");
    f.setParam("siteId", restrictions.get(SITEID));
    if (timeRange != null) {
      f.append(" and bean.createTime >= :begin");
      f.append(" and bean.createTime < :end");
      f.setParam("begin", timeRange.getBegin());
      f.setParam("end", timeRange.getEnd());
    }
    Boolean isReplyed = (Boolean) restrictions.get(ISREPLYED);
    if (isReplyed != null) {
      if (isReplyed) {
        f.append(" and bean.replayTime is not null");
      } else {
        f.append(" and bean.replayTime is null");
      }
    }
    return (Long) find(f).iterator().next();
  }

  public long guestbookStatistic(TimeRange timeRange,
      Map<String, Object> restrictions) {
    Finder f = createCacheableFinder("select count(*) from CmsGuestbook bean where bean.site.id=:siteId");
    f.setParam("siteId", restrictions.get(SITEID));
    if (timeRange != null) {
      f.append(" and bean.createTime >= :begin");
      f.append(" and bean.createTime < :end");
      f.setParam("begin", timeRange.getBegin());
      f.setParam("end", timeRange.getEnd());
    }
    Boolean isReplyed = (Boolean) restrictions.get(ISREPLYED);
    if (isReplyed != null) {
      if (isReplyed) {
        f.append(" and bean.replayTime is not null");
      } else {
        f.append(" and bean.replayTime is null");
      }
    }
    return (Long) find(f).iterator().next();
  }

  @SuppressWarnings("unchecked")
  public List<Object[]> getPvCountByGroup(Integer siteId) {
    Finder f = createCacheableFinder("select count(*),bean.accessDate from CmsSiteFlow bean where bean.site.id=:siteId group by bean.accessDate");
    f.setParam("siteId", siteId);
    return find(f);
  }

  public long getPvCountByTimeRange(Integer siteId, TimeRange timeRange) {
    Finder f = createCacheableFinder("select count(*) from CmsSiteFlow bean");
    return byTimeRange(f, siteId, timeRange);
  }
 
  public long getPvCount(Integer siteId) {
    return getPvCountByTimeRange(siteId, null);
  }

  @SuppressWarnings("unchecked")
  public List<Object[]> getUniqueIpCountByGroup(Integer siteId) {
    Finder f = createCacheableFinder("select count(distinct bean.accessIp),bean.accessDate from CmsSiteFlow bean where bean.site.id=:siteId group by bean.accessDate");
    f.setParam("siteId", siteId);
    return find(f);
  }

  public long getUniqueIpCountByTimeRange(Integer siteId, TimeRange timeRange) {
    Finder f = createCacheableFinder("select count(distinct bean.accessIp) from CmsSiteFlow bean");
    return byTimeRange(f, siteId, timeRange);
  }

  public long getUniqueIpCount(Integer siteId) {
    return getUniqueIpCountByTimeRange(siteId, null);
  }

  @SuppressWarnings("unchecked")
  public List<Object[]> getUniqueVisitorCountByGroup(Integer siteId) {
    Finder f = createCacheableFinder("select count(distinct bean.sessionId),bean.accessDate from CmsSiteFlow bean where bean.site.id=:siteId group by bean.accessDate");
    f.setParam("siteId", siteId);
    return find(f);
  }

  public long getUniqueVisitorCountByTimeRange(Integer siteId,
      TimeRange timeRange) {
    Finder f = createCacheableFinder("select count(distinct bean.sessionId) from CmsSiteFlow bean");
    return byTimeRange(f, siteId, timeRange);
  }

  public long getUniqueVisitorCount(Integer siteId) {
    return getUniqueVisitorCountByTimeRange(siteId, null);
  }

  public Pagination flowAnalysisPage(String groupCondition, Integer siteId,
      Integer pageNo, Integer pageSize) {
    Finder f = createCacheableFinder("select count(*),bean."
        + groupCondition
        + " from CmsSiteFlow bean where bean.site.id=:siteId group by bean."
        + groupCondition + " order by count(*) desc");
    f.setParam("siteId", siteId);
    f.setMaxResults(pageSize);
    f.setFirstResult((pageNo - 1) * pageSize);
    return new Pagination(pageNo, pageSize, getTotalCount(f.getOrigHql(),
        siteId), find(f));
  }

  public void flowInit(Integer siteId, Date startDate, Date endDate) {
    Finder f = Finder.create("delete from CmsSiteFlow bean where bean.site.id=:siteId");
    f.setParam("siteId", siteId);
    if (startDate != null) {
      f.append(" and bean.accessTime >= :startDate");
      f.setParam("startDate", startDate);
    }
    if (endDate != null) {
      f.append(" and bean.accessTime <= :endDate");
      f.setParam("endDate", endDate);
    }
    Query query = f.createQuery(getSession());
    query.executeUpdate();
  }

  public long flowAnalysisTotal(Integer siteId) {
    Finder f = createCacheableFinder("select count(*) from CmsSiteFlow bean where bean.site.id=:siteId");
    f.setParam("siteId", siteId);
    return (Long) find(f).iterator().next();
  }

  private int getTotalCount(String hql, Integer siteId) {
    Finder f = createCacheableFinder(hql);
    f.setParam("siteId", siteId);
    return find(f).size();
  }
 
  private long byTimeRange(Finder f, Integer siteId, TimeRange timeRange){
    f.append(" where bean.site.id=:siteId").setParam("siteId", siteId);
    if (timeRange != null) {
      f.append(" and bean.accessTime >= :begin");
      f.append(" and bean.accessTime < :end");
      f.setParam("begin", timeRange.getBegin());
      f.setParam("end", timeRange.getEnd());
    }
    return (Long) find(f).iterator().next();
  }

  private Finder createCacheableFinder(String hql) {
    Finder finder = Finder.create(hql);
    finder.setCacheable(true);
    return finder;
  }

}
TOP

Related Classes of com.jeecms.cms.statistic.CmsStatisticDaoImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.