forumserviceimpl.java
来自「社区文章采用的是平板、树形自由选择的两种展示方式」· Java 代码 · 共 328 行
JAVA
328 行
/*
* Created on 2007-2-16
* Last modified on 2008-1-1
* Powered by YeQiangWei.com
*/
package com.yeqiangwei.club.service.forum;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.log4j.Logger;
import com.yeqiangwei.cache.Cache;
import com.yeqiangwei.club.cache.CacheRegion;
import com.yeqiangwei.cache.singleton.CacheFactory;
import com.yeqiangwei.club.cache.CacheKeys;
import com.yeqiangwei.club.dao.DAOLocator;
import com.yeqiangwei.club.dao.DAOWrapper;
import com.yeqiangwei.club.dao.ForumDAO;
import com.yeqiangwei.club.model.Forum;
import com.yeqiangwei.club.exception.ClubException;
import com.yeqiangwei.club.param.CounterParameter;
import com.yeqiangwei.club.param.ForumParameter;
import com.yeqiangwei.club.service.ServiceLocator;
import com.yeqiangwei.club.service.ServiceWrapper;
import com.yeqiangwei.club.service.counter.CountService;
import com.yeqiangwei.club.model.Counters;
import com.yeqiangwei.club.model.ModelsOfForum;
import com.yeqiangwei.club.util.BeanUtils;
import com.yeqiangwei.club.util.MessageUtils;
import com.yeqiangwei.util.FormatDateTime;
import com.yeqiangwei.util.Validator;
import com.yeqiangwei.util.TypeChange;
public class ForumServiceImpl extends MessageUtils implements ForumService {
private static final Logger logger = Logger.getLogger(ForumService.class);
private static Cache<Long> CACHE_LONG = CacheFactory.<Long>creator(CacheRegion.LONG);
private static Cache<Forum> CACHE_FORUM = CacheFactory.<Forum>creator(CacheRegion.FORUM);
private static Cache<List<Forum>> CACHE_FORUM_LIST = CacheFactory.<List<Forum>>creator(CacheRegion.FORUM_LIST);
private static Cache<ModelsOfForum> CACHE_MODELS_OF_FORUM = CacheFactory.<ModelsOfForum>creator(CacheRegion.MODELS_OF_FORUM);
private static final String CACHE_TOPS = "TopForums";
private static final String CACHE_TIME = "TopYmd";
private static final int CACHE_TIMEOUT = 300; //缓存超时後更新到数据库(秒数)
/* test */
public static void main(String args[]){
com.yeqiangwei.club.dao.hibernate.ConnectionManager.init();
ForumParameter param = new ForumParameter();
ForumServiceImpl f = new ForumServiceImpl();
List<Forum> list = f.findByParameter(param);
for(int i=0; i<list.size(); i++){
Forum model = list.get(i);
System.out.println(model.getForumName());
}
}
public Forum findByForumName(String name){
return this.getForumDAO().findByForumName(name);
}
public List<Forum> findTops(int rows) {
List<Forum> forumList = null;
long time = TypeChange.stringToLong(FormatDateTime.dateAdd(FormatDateTime.SECOND,CACHE_TIMEOUT,"yyyyMMddHHmmss"));
Long cacheTime = CACHE_LONG.get(CACHE_TIME);
Long nowTime = new Long(FormatDateTime.now());
if(cacheTime!=null && cacheTime>nowTime){
forumList = CACHE_FORUM_LIST.get(CACHE_TOPS);
if(!Validator.isEmpty(forumList)){
logger.debug("findTops from cache");
return forumList;
}
}
logger.debug("find all forums");
ForumTemplate forumTemplate = new ForumResults();
List<Forum> list = forumTemplate.findAll(); //查询出全部版面
if(Validator.isEmpty(list))return null;
int ymd = FormatDateTime.formatDateTimeToInt("yyyyMMdd");
/**
* 遍历论坛查询每个版面的人气
*/
for(int i=0; i<list.size(); i++){
Forum forum = list.get(i);
if(forum.getForumIdd()==0){//如果是分类则跳出进行下一个查询
continue;
}
CounterParameter cparam = new CounterParameter();
cparam.setYmd(ymd);
cparam.setForumId(forum.getForumId());
Counters counters = this.getCountService().findOnlyByParameter(cparam);
if(!Validator.isEmpty(counters)){
forum.setSort(counters.getBoys()
+counters.getGirls()
+counters.getOthers()
+counters.getHits());
}else{
forum.setSort(0);
}
}
//创建一个新实例让排序结果不影响全部版面列表
List<Forum> templist = new ArrayList<Forum>();
for(Forum forum:list){
templist.add(forum);
}
/**
* 为版面排序
*/
Collections.sort(templist, new ForumComparator());
forumList = new ArrayList<Forum>();
for(int i=0; i<templist.size(); i++){
if(i>rows){
break;
}
Forum forum = templist.get(i);
if(forum.getForumIdd()==0){//如果是分类则跳出进行下一个查询
continue;
}
forumList.add(forum);
}
CACHE_FORUM_LIST.put(CACHE_TOPS,forumList);
CACHE_LONG.put(CACHE_TIME,new Long(time));
return forumList;
}
public Forum findById(int id) {
if(id>0){
Forum model = CACHE_FORUM.get(CacheKeys.getForumKey(id));
if(Validator.isEmpty(model)){
model = this.getForumDAO().findById(id);
if(!Validator.isEmpty(model)){
CACHE_FORUM.put(CacheKeys.getKey(model),model);
}
}
return model;
}else{
logger.debug("Forum findById id<=01");
return null;
}
}
public void createOrUpdate(Forum model) throws ClubException {
if(model.getForumId()>0){
this.update(model);
}else{
this.create(model);
}
}
public void create(Forum model) throws ClubException {
this.setForumLayer(model); //设置上层对象
getForumDAO().create(model);
CACHE_FORUM_LIST.remove(CacheKeys.ALL_FORUMS);
CACHE_FORUM.put(CacheKeys.getKey(model),model);
}
public void update(Forum model) throws ClubException {
this.setForumLayer(model); //设置上层对象
Forum item = this.getForumDAO().findById(model.getForumId());
if(Validator.isEmpty(item)){
throw new ClubException(MessageUtils.getMessage("error_system"));
}
model.setForumId(item.getForumId());
BeanUtils.copyProperties(item,model); //BO->PO
this.getForumDAO().update(item);
CACHE_FORUM_LIST.remove(CacheKeys.ALL_FORUMS);
CACHE_FORUM.put(CacheKeys.getForumKey(model.getForumId()),model);
CACHE_MODELS_OF_FORUM.remove("ModelsOfForum:forumId="+model.getForumId());
}
/**
* 删除版面同时删除帖子以及更新用户发贴数
* @param item
* @return
* @throws ClubException
*/
public int delete(Forum model) throws ClubException {
int c = 0;
if(Validator.isEmpty(model)){
throw new ClubException(MessageUtils.getMessage("error_system"));
}
else if(model.getForumId()<1){
throw new ClubException(MessageUtils.getMessage("error_update_noid"));
}
else{
c = getForumDAO().delete(model);
CACHE_FORUM.remove(CacheKeys.getKey(model));
CACHE_FORUM_LIST.remove(CacheKeys.ALL_FORUMS);
}
return c;
}
public int delete(String[] ids) throws ClubException {
int c = 0;
if(!Validator.isEmpty(ids)){
for(int i=0; i<ids.length; i++){
int id = TypeChange.stringToInt(ids[i]);
Forum model = new Forum();
model.setForumId(id);
try {
c+=this.delete(model);
} catch (ClubException e) {
logger.error(e.toString());
}
}
}else{
throw new ClubException(MessageUtils.getMessage("error_update_noid"));
}
return c;
}
public List<Forum> findByParameter(ForumParameter param) {
return this.getForumDAO().findByParameter(param);
}
public long countByParameter(ForumParameter param) {
return getForumDAO().countByParameter(param);
}
private Forum setForumLayer(Forum model){
if(model.getForumIdd()>0){
Forum forum = this.findById(model.getForumIdd());
if(Validator.isEmpty(forum)){
model.setLayer(0);
logger.debug("找不到Forum上层对象,forumId:"+model.getForumId());
}else{
model.setLayer(forum.getLayer()+1);
}
}else{
model.setLayer(0);
}
return model;
}
/**
* 根据版面ID获取版面以及上级分类信息
* 获取版面管理员信息
* 最后形成多个List集合
*/
public ModelsOfForum getModelsOfForum(int forumId) {
ModelsOfForum models = CACHE_MODELS_OF_FORUM.get("ModelsOfForum:forumId="+forumId);
if(models!=null){
return models;
}
List<Forum> list = new ArrayList<Forum>();
if(forumId>0){
models = new ModelsOfForum();
Forum forum = this.findById(forumId); //取当前Forum
if(Validator.isEmpty(forum)){
return null;
}else{
models.setForum(forum);
models.setForumId(forumId);
this.Forums(forum,list);
Collections.sort(list, new ForumComparator()); //按版面分类层次从高到底排序
list.add(forum);
models.setForums(list);
}
}
CACHE_MODELS_OF_FORUM.put("ModelsOfForum:forumId="+forumId,models);
return models;
}
/**
* 辅助 getForum方法 获取版面上级分类信息形成List集合
* @param item
* @param list
*/
private void Forums(Forum model, List<Forum> list){
if(model.getForumIdd()>0){
Forum forum = this.findById(model.getForumIdd());
if(!Validator.isEmpty(forum)){
list.add(forum);
if(forum.getForumIdd()>0){
this.Forums(forum,list);
}
}
}
}
public ForumDAO getForumDAO() {
return DAOWrapper.getSingletonInstance(DAOLocator.FORUM);
}
private CountService getCountService() {
return ServiceWrapper.<CountService>getSingletonInstance(ServiceLocator.COUNT);
}
public void cacheClear() {
CACHE_LONG.clear();
CACHE_FORUM.clear();
CACHE_MODELS_OF_FORUM.clear();
CACHE_FORUM_LIST.clear();
}
/* test
public static void main(String args[]){
com.yeqiangwei.club.dao.hibernate.ConnectionManager.init();
ForumServiceImpl f = new ForumServiceImpl();
ModelsOfForum m;
m = f.getModelsOfForum(7);
if(m!=null){
//System.out.print(m.getForum().getForumName());
}
List<Forum> list = m.getForums();
for(int i=0; i<list.size(); i++){
Forum ff = list.get(i);
System.out.print(ff.getForumName());
System.out.print(" ");
}
System.out.println();
}
*/
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?