package cn.newgxu.bbs.domain; import java.util.Date; import java.util.LinkedHashMap; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import cn.newgxu.bbs.common.util.TimerUtils; import cn.newgxu.jpamodel.JPAEntity; import cn.newgxu.jpamodel.ObjectNotFoundException; /** * * @author polly * @since 4.0.0 * @version $Revision 1.1$ */ @Entity @Table(name = "hits_counter") public class HitsCounter extends JPAEntity { private static final long serialVersionUID = -6707611077779314643L; @Id @Column(name = "id") // @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="id_seq") // @SequenceGenerator(name="id_seq", sequenceName="seq_hits_counter") @GeneratedValue(strategy = GenerationType.IDENTITY) private int id = -1; @Column(name = "forum_id") private int forumId; @Column(name = "hits_date") private Date hitsDate; @Column(name = "hits_hour") private int hitsHour; @Column(name = "hits_count") private int hitsCount; public int getForumId() { return forumId; } public void setForumId(int forumId) { this.forumId = forumId; } public int getHitsCount() { return hitsCount; } public void setHitsCount(int hitsCount) { this.hitsCount = hitsCount; } public Date getHitsDate() { return hitsDate; } public void setHitsDate(Date hitsDate) { this.hitsDate = hitsDate; } public int getHitsHour() { return hitsHour; } public void setHitsHour(int hitsHour) { this.hitsHour = hitsHour; } public int getId() { return id; } public void setId(int id) { this.id = id; } // ------------------------------------------------ public static HitsCounter getByForumId_Date_Hour(int forumId, Date date, int hour) throws ObjectNotFoundException { return (HitsCounter) SQ( "from HitsCounter where hitsDate = ?1 and hitsHour = ?2 and forumId = ?3", P(1, date), P(2, hour), P(3, forumId)); } public void addHit() { this.hitsCount++; } public void incorporate(HitsCounter o) { this.hitsCount += o.getHitsCount(); } public static int getTodayHitsCounter() { try { return ((Long) SQ( "select sum(h.hitsCount) from HitsCounter h where h.hitsDate between ?1 and ?2", P(1, TimerUtils.getDate()), P(2, TimerUtils.getTomorrow()))) .intValue(); } catch (Exception e) { return 0; } } public static int getTotalHitsCounter() { try { return ((Long) SQ("select sum(h.hitsCount) from HitsCounter h")) .intValue(); } catch (ObjectNotFoundException e) { return 0; } } // ------------------------------------------------ @SuppressWarnings("serial") @Override public String toString() { return "hitsCounter" + new LinkedHashMap<String, Object>() { { put("id", id); put("forumId", forumId); put("hitsDate", hitsDate); put("hitsHour", hitsHour); put("hitsCount", hitsCount); } }.toString(); } @Override public int hashCode() { return (int) (this.hitsDate.getTime() / 1000) + forumId; } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof HitsCounter) { return ((HitsCounter) obj).hashCode() == this.hashCode(); } return false; } }