📄 favoriteforumserviceimpl.java
字号:
/*
* Created on 2007-5-10
* Last modified on 2007-7-27
* 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.club.cache.Cache;
import com.yeqiangwei.club.cache.CacheFactory;
import com.yeqiangwei.club.cache.CacheRegion;
import com.yeqiangwei.club.dao.DAOLocator;
import com.yeqiangwei.club.dao.DAOWrapper;
import com.yeqiangwei.club.dao.FavoriteForumDAO;
import com.yeqiangwei.club.dao.ForumDAO;
import com.yeqiangwei.club.dao.model.FavoriteForum;
import com.yeqiangwei.club.dao.model.Forum;
import com.yeqiangwei.club.param.FavoriteParameter;
import com.yeqiangwei.club.param.TopicParameter;
import com.yeqiangwei.club.service.ServiceLocator;
import com.yeqiangwei.club.service.ServiceWrapper;
import com.yeqiangwei.club.service.model.FavoriteForumModel;
import com.yeqiangwei.club.service.model.ForumModel;
import com.yeqiangwei.club.service.model.TopicModel;
import com.yeqiangwei.club.service.model.UserModel;
import com.yeqiangwei.club.service.topic.TopicComparator;
import com.yeqiangwei.club.service.topic.TopicService;
import com.yeqiangwei.club.service.user.UserService;
import com.yeqiangwei.club.util.BeanUtils;
import com.yeqiangwei.club.util.MessageUtils;
import com.yeqiangwei.util.Validator;
public class FavoriteForumServiceImpl extends MessageUtils implements FavoriteForumService{
private static final Logger logger = Logger.getLogger(FavoriteForumServiceImpl.class);
/**
* 为每个版创建一个缓存实例,便于批量清理某个版的收藏缓存
* @param forumId
* @return
*/
private Cache getCache(Integer forumId){
return CacheFactory.creator(CacheRegion.FAVORITE_FORUM+"-forumId:"+forumId);
}
public int delFavorite(int favoriteForumId, int userId) {
FavoriteForumModel model = this.findById(favoriteForumId);
if(!Validator.isEmpty(model)){
if(model.getUserId()==userId){
return this.delete(model);
}else{
return 0;
}
}else{
return 0;
}
}
public List<ForumModel> findForumByUserId(int userId) {
List<ForumModel> list = null;
FavoriteParameter param = new FavoriteParameter();
param.setUserId(userId);
List<FavoriteForum> flist = this.getFavoriteForumDAO().findByParameter(param);
if(!Validator.isEmpty(flist)){
list = new ArrayList<ForumModel>();
for(int i=0; i<flist.size(); i++){
FavoriteForum fa = flist.get(i);
Forum forum = this.getForumDAO().findById(fa.getForumId());
ForumModel model = new ForumModel();
BeanUtils.copyProperties(model,forum);
list.add(model);
}
}
return list;
}
public FavoriteForumModel findOnlyByUserIdAndForumId(int userId, int forumId) {
String key = this.cacheKey(userId,forumId,4);
FavoriteForumModel model = (FavoriteForumModel) getCache(forumId).get(key);
Boolean isput = (Boolean) getCache(forumId).get(key+"-isput");
if(Validator.isEmpty(model)&&Validator.isEmpty(isput)){
FavoriteForum item = this.getFavoriteForumDAO().findOnly(userId,forumId);
if(!Validator.isEmpty(item)){
model = new FavoriteForumModel();
BeanUtils.copyProperties(model,item);
}
getCache(forumId).put(key,model);
getCache(forumId).put(key+"-isput",new Boolean(true));
}
return model;
}
@SuppressWarnings("unchecked")
public List<UserModel> findUser(FavoriteParameter param) {
String key = this.cacheKey(param.getUserId(),param.getForumId(),0);
List<UserModel> ulist = (List<UserModel>) getCache(param.getForumId()).get(key);
Boolean isput = (Boolean) getCache(param.getForumId()).get(key+"-isput");
if(Validator.isEmpty(ulist)&&Validator.isEmpty(isput)){
List<FavoriteForum> list = this.getFavoriteForumDAO().findByParameter(param);
if(!Validator.isEmpty(list)){
ulist = new java.util.ArrayList<UserModel>();
for(int i=0; i<list.size(); i++){
FavoriteForum item = list.get(i);
UserModel user = this.getUserService().findById(item.getUserId());
ulist.add(user);
}
}
getCache(param.getForumId()).put(key,ulist);
getCache(param.getForumId()).put(key+"-isput",new Boolean(true));
}else{
logger.debug("find users in cache");
}
return ulist;
}
@SuppressWarnings("unchecked")
public List<TopicModel> findTopic(FavoriteParameter param) {
String key = this.cacheKey(param.getUserId(),param.getForumId(),1);
List<TopicModel> tlist = (List<TopicModel>) getCache(param.getForumId()).get(key);
Boolean isput = (Boolean) getCache(param.getForumId()).get(key+"-isput");
if(Validator.isEmpty(tlist)&&Validator.isEmpty(isput)){
tlist = new java.util.ArrayList<TopicModel>();
List<FavoriteForum> list = this.getFavoriteForumDAO().findByParameter(param);
if(!Validator.isEmpty(list)){
for(int i=0; i<list.size(); i++){
FavoriteForum item = list.get(i);
TopicParameter tparam = new TopicParameter();
tparam.setForumId(new Integer(item.getForumId()));
tparam.setIsDeleted(new Boolean(false));
tparam.setPage(new Integer(1));
tparam.setRows(5);
tparam.setOrderBy(new Byte("2"));
List<TopicModel> tmlist = this.getTopicService().findByParameter(tparam);
if(!Validator.isEmpty(tmlist)){
for(int i2=0; i2<tmlist.size(); i2++){
TopicModel topic = tmlist.get(i2);
tlist.add(topic);
}
}
}
}
Collections.sort(tlist,new TopicComparator());
getCache(param.getForumId()).put(key,tlist);
getCache(param.getForumId()).put(key+"-isput",new Boolean(true));
}else{
logger.debug("find topics in cache");
}
return tlist;
}
public FavoriteForumModel doFavorite(FavoriteForumModel model) {
FavoriteForum item = this.getFavoriteForumDAO().findOnly(model.getUserId(),model.getForumId());
if(Validator.isEmpty(item)){
item = new FavoriteForum();
BeanUtils.copyProperties(item,model);
item = this.getFavoriteForumDAO().create(item);
if(Validator.isEmpty(item)){
model = null;
}else{
model.setFavoriteForumId(item.getFavoriteForumId());
}
}
getCache(model.getForumId()).clear();
logger.debug("cache cleared of Favorite forum");
return model;
}
public FavoriteForumModel findById(int id) {
FavoriteForum item = this.getFavoriteForumDAO().findById(id);
if(!Validator.isEmpty(item)){
FavoriteForumModel model = new FavoriteForumModel();
BeanUtils.copyProperties(model,item);
return model;
}
return null;
}
public FavoriteForumModel createOrUpdate(FavoriteForumModel model) {
return null;
}
public FavoriteForumModel create(FavoriteForumModel model) {
return null;
}
public FavoriteForumModel update(FavoriteForumModel model) {
return null;
}
public int delete(FavoriteForumModel model){
FavoriteForum item = this.getFavoriteForumDAO().findById(model.getFavoriteForumId());
BeanUtils.copyProperties(item,model);
int c = this.getFavoriteForumDAO().delete(item);
getCache(model.getForumId()).remove(cacheKey(model.getUserId(),model.getForumId(),4));
return c;
}
public List<FavoriteForumModel> findByParameter(FavoriteParameter param) {
List<FavoriteForumModel> list = null;
List<FavoriteForum> flist = this.getFavoriteForumDAO().findByParameter(param);
if(!Validator.isEmpty(flist)){
list = new ArrayList<FavoriteForumModel>();
for(int i=0; i<flist.size(); i++){
FavoriteForum item = flist.get(i);
FavoriteForumModel model = new FavoriteForumModel();
BeanUtils.copyProperties(model,item);
list.add(model);
}
}
return list;
}
/**
* 可以根据用户ID统计收藏的版面数,也可以根据版面ID统计收藏的用户数
* @param param
* @return
*/
public long countByParameter(FavoriteParameter param) {
String key = this.cacheKey(param.getUserId(),param.getForumId(),3);
Long l = (Long) getCache(param.getForumId()).get(key);
if(Validator.isEmpty(l)){
l= new Long(this.getFavoriteForumDAO().countByParameter(param));
getCache(param.getForumId()).put(key,l);
}
return l.longValue();
}
public ForumDAO getForumDAO() {
return DAOWrapper.<ForumDAO>getSingletonInstance(DAOLocator.FORUM);
}
public FavoriteForumDAO getFavoriteForumDAO() {
return DAOWrapper.<FavoriteForumDAO>getSingletonInstance(DAOLocator.FAVORITEFORUM);
}
public UserService getUserService() {
return ServiceWrapper.getSingletonInstance(ServiceLocator.USER);
}
public TopicService getTopicService() {
return ServiceWrapper.<TopicService>getSingletonInstance(ServiceLocator.TOPIC);
}
/**
*
* @param userId
* @param forumId
* @param type 0缓存用户 1缓存文章 3统计相关总数 4查询某用户是否收藏过指定版面
* @return
*/
public String cacheKey(Integer userId, Integer forumId, int type){
StringBuffer sb = new StringBuffer();
sb.append("FavoriteForum-");
sb.append(userId);
sb.append("-");
sb.append(forumId);
sb.append("-");
sb.append(type);
return sb.toString();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -