亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bbstopicdao.java

?? 個人Blog java編寫的Blog可以直接使用!
?? JAVA
字號:
/*
 *  BBSTopicDAO.java
 *  
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Library General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *  
 *  Author: Winter Lau (javayou@gmail.com)
 *  http://dlog4j.sourceforge.net
 */
package com.liusoft.dlog4j.dao;

import java.io.IOException;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

import com.liusoft.dlog4j.base._BeanBase;
import com.liusoft.dlog4j.beans.BookmarkBean;
import com.liusoft.dlog4j.beans.DiaryBean;
import com.liusoft.dlog4j.beans.ForumBean;
import com.liusoft.dlog4j.beans.SiteBean;
import com.liusoft.dlog4j.beans.TagBean;
import com.liusoft.dlog4j.beans.TopicBean;
import com.liusoft.dlog4j.beans.TopicOutlineBean;
import com.liusoft.dlog4j.beans.TopicReplyBean;
import com.liusoft.dlog4j.search.SearchDataProvider;

/**
 * 論壇帖子的數據庫訪問接口
 * 
 * @author Winter Lau
 */
public class BBSTopicDAO extends DAO implements SearchDataProvider {

	/**
	 * 獲取網站的精華帖子數
	 * @param site
	 * @param fbean
	 * @return
	 */
	public static int getEliteCount(SiteBean site, ForumBean fbean){
		StringBuffer hql = new StringBuffer("SELECT COUNT(*) FROM TopicBean AS t WHERE t.status=:status");
		if(site!=null)
			hql.append(" AND t.site.id=:site");
		if(fbean!=null)
			hql.append(" AND t.forum.id=:forum");
		hql.append(" AND (t.type=:elite OR t.type=:top_elite)");
		Session ssn = getSession();
		Query q = ssn.createQuery(hql.toString());
		q.setInteger("status", TopicBean.STATUS_NORMAL);
		q.setInteger("elite", TopicBean.INFO_TYPE_ELITE);
		q.setInteger("top_elite", TopicBean.INFO_TYPE_TOP_ELITE);
		if(site!=null)
			q.setInteger("site", site.getId());
		if(fbean!=null)
			q.setInteger("forum", fbean.getId());		
		return ((Number)q.uniqueResult()).intValue();
	}
	
	/**
	 * 列出精華帖
	 * @param site
	 * @param fbean
	 * @param fromIdx
	 * @param count
	 * @return
	 */
	public static List listEliteTopics(SiteBean site, ForumBean fbean, int fromIdx, int count){
		StringBuffer hql = new StringBuffer("FROM TopicOutlineBean AS t WHERE t.status=:status");
		if(site!=null)
			hql.append(" AND t.site.id=:site");
		if(fbean!=null)
			hql.append(" AND t.forum.id=:forum");
		hql.append(" AND (t.type=:elite OR t.type=:top_elite) ORDER BY ROUND(t.type / 16, 0) DESC, t.id DESC");
		Session ssn = getSession();
		Query q = ssn.createQuery(hql.toString());
		q.setInteger("status", TopicBean.STATUS_NORMAL);
		q.setInteger("elite", TopicBean.INFO_TYPE_ELITE);
		q.setInteger("top_elite", TopicBean.INFO_TYPE_TOP_ELITE);
		if(site!=null)
			q.setInteger("site", site.getId());
		if(fbean!=null)
			q.setInteger("forum", fbean.getId());
		if(fromIdx > 0)
			q.setFirstResult(fromIdx);
		if(count > 0)
			q.setMaxResults(count);
		return q.list();
	}
	
	/**
	 * 獲取下一篇帖子
	 * @param forum_id
	 * @param current_topic_id
	 * @param forward 向前或者向后
	 * @return
	 */
	public static TopicOutlineBean getNextTopic(int forum_id, int current_topic_id, boolean forward){
		return (TopicOutlineBean)namedUniqueResult(forward?"NEXT_TOPIC":"LAST_TOPIC", forum_id, current_topic_id, TopicOutlineBean.STATUS_NORMAL);		
	}

	/**
	 * 分頁瀏覽整個系統的熱門帖子
	 * 帖子按照回帖數
	 * @param forum_id
	 * @param fromIdx
	 * @param count
	 * @return
	 */
	public static List listHotTopics(int fromIdx, int count, int days){
		Calendar cur_time = Calendar.getInstance();
		cur_time.add(Calendar.DATE, -days);
		return executeNamedQuery("HOT_TOPICS", fromIdx,count, new Object[]{new Integer(TopicOutlineBean.STATUS_NORMAL), cur_time.getTime()});		
	}

	/**
	 * 分頁瀏覽某個論壇的熱門帖子
	 * 帖子按照回帖數
	 * @param forum_id
	 * @param fromIdx
	 * @param count
	 * @return
	 */
	public static List listHotTopics(SiteBean site, ForumBean forum, int fromIdx, int count, int days){
		StringBuffer hql = new StringBuffer("FROM TopicOutlineBean AS t WHERE t.site.id=? AND t.status=? AND t.createTime >= ? AND t.replyCount > 0");
		if(forum != null)
			hql.append(" AND t.forum.id=?");
		hql.append(" ORDER BY ROUND(t.type / 16, 0) DESC, t.replyCount DESC, t.id DESC");
		Session ssn = getSession();
		try{
			Query q = ssn.createQuery(hql.toString());
			q.setInteger(0, site.getId());
			q.setInteger(1, TopicOutlineBean.STATUS_NORMAL);
			Calendar cur_time = Calendar.getInstance();
			cur_time.add(Calendar.DATE, -days);
			q.setTimestamp(2, new Timestamp(cur_time.getTime().getTime()));
			if(forum != null)
				q.setInteger(3, forum.getId());
			if(fromIdx > 0)
				q.setFirstResult(fromIdx);
			q.setMaxResults(count);
			return q.list();
		}finally{
			hql = null;
		}
	}

	/**
	 * 返回某個站點論壇中的帖子數
	 * @param site
	 * @return
	 */
	public static int getTopicCount(int site){
		return executeNamedStatAsInt("TOPIC_COUNT_OF_SITE", TopicBean.STATUS_NORMAL, site);
	}
	
	/**
	 * 分頁瀏覽某個論壇的帖子
	 * 帖子按照置頂狀態/最近評論時間/帖子創建時間進行排序
	 * @param forum_id
	 * @param fromIdx
	 * @param count
	 * @return
	 */
	public static List listTopics(int forum_id, int fromIdx, int count){
		return executeNamedQuery("LIST_TOPICS", fromIdx, count, forum_id, TopicOutlineBean.STATUS_NORMAL);
	}
	
	/**
	 * 列出整個論壇的所有帖子
	 * @param site_id
	 * @param fromIdx
	 * @param count
	 * @return
	 */
	public static List listAllTopics(int site_id, int fromIdx, int count){
		return executeNamedQuery("LIST_ALL_TOPICS", fromIdx, count, site_id, TopicOutlineBean.STATUS_NORMAL);
	}

	/**
	 * 列出所有論壇的所有帖子
	 * @param site_id
	 * @param fromIdx
	 * @param count
	 * @return
	 */
	public static List listAllTopics(int fromIdx, int count){
		return executeNamedQuery("LIST_ALL_TOPICS2", fromIdx, count, TopicOutlineBean.STATUS_NORMAL);
	}

	/**
	 * 根據帖子的編號獲取帖子詳細信息
	 * 
	 * @param topic_id
	 * @return
	 */
	public static TopicBean getTopicByID(int topic_id) {
		if(topic_id <= 0)
			return null;
		return (TopicBean)getBean(TopicBean.class, topic_id);
	}

	/**
	 * 根據帖子的編號獲取帖子概要信息
	 * 
	 * @param topic_id
	 * @return
	 */
	public static TopicOutlineBean getTopicOutlineByID(int topic_id) {
		if(topic_id <= 0)
			return null;
		return (TopicOutlineBean)getBean(TopicOutlineBean.class, topic_id);
	}

	/**
	 * 創建新帖子
	 * 
	 * @param topic
	 * @param add_bookmark
	 */
	public static void create(TopicBean topic, boolean add_bookmark) {
		try {
			if (topic.getCreateTime() == null)
				topic.setCreateTime(new Date());
			Session ssn = getSession();
			beginTransaction();
			topic.getUser().getCount().incTopicCount(1);
			topic.getForum().incTopicCount(1);
			topic.getForum().setLastPostTime(new Date());
			topic.getForum().setLastUser(topic.getUser());
			topic.getForum().setLastUsername(topic.getUsername());
			topic.getForum().setLastTopic(topic);

			List tags = topic.getKeywords();
			if(tags!=null && tags.size()>0){
				int tag_count = 0;
				for(int i=0;i<tags.size();i++){
					if(tag_count>=MAX_TAG_COUNT)
						break;
					String tag_name = (String)tags.get(i);
					if(tag_name.getBytes().length > MAX_TAG_LENGTH)
						continue;
					TagBean tag = new TagBean();
					tag.setSite(topic.getSite());
					tag.setRefId(topic.getId());
					tag.setRefType(DiaryBean.TYPE_BBS);
					tag.setName(tag_name);
					ssn.save(tag);
					tag_count ++;
				}
			}			
			
			ssn.save(topic);
			if (add_bookmark) {
				BookmarkBean bmb = new BookmarkBean();
				bmb.setOwner(topic.getUser());
				bmb.setSite(topic.getSite());
				bmb.setCreateTime(new Date());
				bmb.setParentId(topic.getId());
				bmb.setParentType(_BeanBase.TYPE_BBS);
				bmb.setTitle(topic.getTitle());
				ssn.save(bmb);
			}
			commit();
		} catch (HibernateException e) {
			rollback();
			throw e;
		}
	}

	/**
	 * 修改帖子
	 * @param topic
	 */
	public static void update(TopicBean topic, boolean updateTags){
		try{
			beginTransaction();			
			if(updateTags){				
				TagDAO.deleteTagByRefId(topic.getId(), DiaryBean.TYPE_BBS);				
				List tags = topic.getKeywords();
				if(tags!=null && tags.size()>0){
					int tag_count = 0;
					for(int i=0;i<tags.size();i++){
						if(tag_count>=MAX_TAG_COUNT)
							break;
						String tag_name = (String)tags.get(i);
						if(tag_name.getBytes().length > MAX_TAG_LENGTH)
							continue;
						TagBean tag = new TagBean();
						tag.setSite(topic.getSite());
						tag.setRefId(topic.getId());
						tag.setRefType(DiaryBean.TYPE_BBS);
						tag.setName((String)tags.get(i));
						topic.getTags().add(tag);
						tag_count ++;
					}
				}
			}
			commit();
		}catch(HibernateException e){
			rollback();
			throw e;
		}
	}
	
	/**
	 * 刪除帖子
	 * 
	 * @param topic
	 * @throws SQLException
	 * @throws IOException 
	 */
	public static void delete(TopicOutlineBean topic) throws Exception {
		if(topic==null)
			return ;
		Session ssn = getSession();
		try {
			beginTransaction();
			// 論壇的帖子數減一
			topic.getForum().incTopicCount(-1);
			//論壇的最后回帖
			if (topic.getForum().getLastTopic() != null
					&& topic.getForum().getLastTopic().getId() == topic.getId()) {
				topic.getForum().setLastTopic(null);
				topic.getForum().setLastPostTime(null);
				topic.getForum().setLastUsername(null);
				topic.getForum().setLastUser(null);
			}
			topic.getUser().getCount().incTopicCount(-1);
			
			List rpls = topic.getReplies();
			for(int i=rpls.size()-1;i>=0;i--){
				TopicReplyBean rbean = (TopicReplyBean)rpls.get(i);
				if(rbean.getUser()!=null)
					rbean.getUser().getCount().incTopicReplyCount(-1);
			}
			
			ssn.delete(topic);

			//刪除標簽
			TagDAO.deleteTagByRefId(topic.getId(), TagBean.TYPE_BBS);

			//刪除附件
			FCKUploadFileDAO.deleteFilesByRef(ssn, topic.getSite().getId(),
					topic.getId(), DiaryBean.TYPE_BBS);
			
			commit();
		} catch (HibernateException e) {
			rollback();
			throw e;
		}
	}

	/**
	 * 增加日記的閱讀數
	 * @param log_id
	 * @param incCount
	 * @return
	 */
	public static void incViewCount(int topic_id, int incCount){
		executeNamedUpdate("INC_TOPIC_VIEW_COUNT", incCount, topic_id);
	}
	
	/**
	 * @see com.liusoft.dlog4j.search.SearchDataProvider#fetchAfter(Date)
	 */
	public List fetchAfter(Date date) throws Exception {
		return findNamedAll("LIST_TOPICS_AFTER_SQL", new Object[]{date, new Integer(TopicBean.STATUS_NORMAL)});
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区激情| xnxx国产精品| 欧美一级黄色大片| 国产精品乱码久久久久久| 天天av天天翘天天综合网| 国产麻豆视频一区二区| 日韩av午夜在线观看| av毛片久久久久**hd| 日韩欧美一二区| 一区二区三区欧美在线观看| 精品一区二区免费在线观看| 欧美日韩国产在线观看| 国产精品毛片无遮挡高清| 免费人成在线不卡| 欧美日韩一区不卡| 亚洲日本va在线观看| 国产盗摄女厕一区二区三区 | 亚洲色图20p| 韩日精品视频一区| 欧美午夜理伦三级在线观看| 中文字幕第一区二区| 国产精品综合视频| 精品久久久久久久久久久久久久久 | 色8久久人人97超碰香蕉987| 欧美日韩国产bt| 成人精品电影在线观看| 欧美电影精品一区二区| 亚洲成人自拍偷拍| 在线观看亚洲一区| 亚洲天堂久久久久久久| hitomi一区二区三区精品| 亚洲精品一线二线三线| 毛片av一区二区| 日韩精品一区国产麻豆| 蜜臀av国产精品久久久久| 制服丝袜中文字幕亚洲| 亚洲妇熟xx妇色黄| 欧美性猛片xxxx免费看久爱 | 欧美视频一二三区| 亚洲资源在线观看| 欧美日韩在线免费视频| jiyouzz国产精品久久| 成人一级黄色片| 欧美经典一区二区三区| 国产suv一区二区三区88区| 中文字幕免费不卡| 成人av免费在线观看| 亚洲日本va午夜在线影院| 一本到一区二区三区| 亚洲.国产.中文慕字在线| 91精品国产综合久久久久久漫画 | 亚洲欧洲日韩在线| 色88888久久久久久影院野外 | 国产一区二区三区免费看| 久久久综合精品| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲色图欧美偷拍| 91精品国产色综合久久不卡蜜臀 | 久久久久久久综合色一本| 成人开心网精品视频| 亚洲欧美另类小说视频| 欧美日韩大陆在线| 精品亚洲免费视频| 国产精品入口麻豆九色| 欧美在线啊v一区| 久久99精品国产91久久来源| 日本一区二区三区四区在线视频 | 欧美一级免费观看| 国产激情精品久久久第一区二区 | 国产欧美日韩麻豆91| 91久久国产综合久久| 久久精品国产久精国产| 国产精品久久久久桃色tv| 欧美色精品在线视频| 国产传媒欧美日韩成人| 亚洲综合区在线| 国产色一区二区| 777亚洲妇女| 成人av电影免费在线播放| 日韩精品一二区| 国产精品视频观看| 678五月天丁香亚洲综合网| 成人性生交大片免费看视频在线| 夜夜精品视频一区二区| 国产日产欧美一区| 欧美日韩精品欧美日韩精品| 丁香网亚洲国际| 久久99国产精品免费| 亚洲午夜在线电影| 亚洲欧洲精品一区二区三区| 日韩精品一区二区三区中文不卡| 99久久er热在这里只有精品66| 免费成人深夜小野草| 亚洲一区二区在线观看视频| 国产精品情趣视频| 精品乱人伦小说| 欧美久久婷婷综合色| 日本韩国欧美在线| 99久久精品国产麻豆演员表| 国产成人精品www牛牛影视| 日本不卡一二三区黄网| 一区二区三区精密机械公司| 亚洲欧洲www| 中文子幕无线码一区tr| 久久天天做天天爱综合色| 欧美性猛交xxxx黑人交| 国内外精品视频| 自拍偷拍国产亚洲| 色综合欧美在线视频区| 国产91露脸合集magnet| 热久久免费视频| 三级成人在线视频| 亚洲不卡av一区二区三区| 亚洲精品高清视频在线观看| 亚洲视频一二三| 亚洲人成精品久久久久久| 亚洲欧洲精品一区二区精品久久久| 久久久亚洲综合| 久久久久99精品一区| 国产亚洲精品久| 国产欧美视频在线观看| 中文字幕av免费专区久久| 国产精品黄色在线观看| 国产精品久久久久久亚洲伦 | 欧美亚洲国产怡红院影院| 欧美性受xxxx黑人xyx性爽| 在线观看不卡一区| 欧美放荡的少妇| 日韩午夜三级在线| 欧美精品一区二区三区久久久| 久久久久久久久久久久久女国产乱| 精品成人一区二区三区四区| 久久精品亚洲乱码伦伦中文| 欧美国产综合色视频| 亚洲男人的天堂一区二区| 亚洲国产人成综合网站| 日本欧美一区二区三区乱码| 国产一区二区三区黄视频| 成人av午夜电影| 精品视频在线免费看| 欧美一个色资源| 久久综合九色综合97_久久久| 国产精品久久久爽爽爽麻豆色哟哟 | 国产美女视频91| 国产成人av资源| 在线免费观看不卡av| 日韩视频免费直播| 国产午夜亚洲精品不卡| 亚洲同性gay激情无套| 亚洲成av人**亚洲成av**| 狠狠色综合播放一区二区| 91麻豆国产在线观看| 日韩一区二区免费视频| 中文字幕日韩一区二区| 午夜国产精品一区| 国产美女精品人人做人人爽| 91成人免费在线| 精品国产一区二区在线观看| 亚洲欧美激情插| 国产自产v一区二区三区c| 91蝌蚪porny| www国产成人| 一区二区三区久久| 国产99久久精品| 这里只有精品99re| 国产免费观看久久| 首页欧美精品中文字幕| 国产东北露脸精品视频| 国产成人av电影在线播放| 欧美三级乱人伦电影| 717成人午夜免费福利电影| 国产精品拍天天在线| 视频一区在线视频| 国产精品综合二区| 欧美一区二区三级| 国产精品福利av| 日本怡春院一区二区| 国产不卡视频一区二区三区| 在线电影一区二区三区| 欧美国产日韩a欧美在线观看| 亚洲一区二区三区不卡国产欧美| 国产乱码精品一区二区三区av| 91视频.com| 精品国产乱码久久久久久图片 | 丁香激情综合五月| 欧美一二三区精品| 亚洲色图在线视频| 国产一区二区美女| 91国偷自产一区二区开放时间 | 美女视频黄免费的久久| 99re66热这里只有精品3直播 | 日本大胆欧美人术艺术动态| 色综合天天做天天爱| 久久久久久一二三区| 国产精品一区二区三区乱码| 日韩一区二区三区在线| 一区二区久久久久久| 在线观看视频一区| 国产精品久久久久久久久久久免费看| 久久精品二区亚洲w码|