topicproxy.java

来自「社区文章采用的是平板、树形自由选择的两种展示方式」· Java 代码 · 共 621 行 · 第 1/2 页

JAVA
621
字号
/* 
 * Created on 2007-3-17
 * Last modified on 2007-12-14
 * Powered by YeQiangWei.com
 */
package com.yeqiangwei.club.service.topic;

import java.util.List;

import org.apache.log4j.Logger;

import com.yeqiangwei.club.dao.TContentDAO;
import com.yeqiangwei.club.dao.TopicDAO;
import com.yeqiangwei.club.exception.ClubException;
import com.yeqiangwei.club.ip.IPSeeker;
import com.yeqiangwei.club.model.Topic;
import com.yeqiangwei.club.param.TopicParameter;
import com.yeqiangwei.club.service.ServiceLocator;
import com.yeqiangwei.club.service.ServiceWrapper;
import com.yeqiangwei.club.service.counter.CountService;
import com.yeqiangwei.club.service.forum.ForumService;
import com.yeqiangwei.club.service.util.ManageLogService;
import com.yeqiangwei.club.service.util.NoAllowedCharService;
import com.yeqiangwei.club.model.Message;
import com.yeqiangwei.club.model.TContent;
import com.yeqiangwei.club.model.Counters;
import com.yeqiangwei.club.model.Forum;
import com.yeqiangwei.club.model.ManageLog;
import com.yeqiangwei.club.model.User;
import com.yeqiangwei.club.service.message.MessageService;
import com.yeqiangwei.club.service.search.SearchFactory;
import com.yeqiangwei.club.service.search.SearchProvider;
import com.yeqiangwei.club.service.security.UserPower;
import com.yeqiangwei.club.service.user.RuleService;
import com.yeqiangwei.club.service.user.UserService;
import com.yeqiangwei.club.util.LocalizeFile;
import com.yeqiangwei.club.util.MessageUtils;
import com.yeqiangwei.club.view.util.UrlUtils;
import com.yeqiangwei.club.view.util.ViewCoder;
import com.yeqiangwei.cache.Cache;
import com.yeqiangwei.club.controller.form.TopicBetterForm;
import com.yeqiangwei.club.controller.form.TopicMoveForm;
import com.yeqiangwei.club.controller.form.TopicTrashForm;
import com.yeqiangwei.util.FormatDateTime;
import com.yeqiangwei.util.IpUtils;
import com.yeqiangwei.util.Validator;

public class TopicProxy implements TopicService{
	
	private static final Logger logger = Logger.getLogger(TopicProxy.class);
	
	public static TopicService TOPIC_SERVICE;
	
	private static UserPower USER_POWER;
	
	@Override
	public List<Topic> getViewingTopics() {
		return TOPIC_SERVICE.getViewingTopics();
	}

	@Override
	public void setTopicViewing(Topic topic) {
		TOPIC_SERVICE.setTopicViewing(topic);
	}
	
	public String getTopicCacheKey(int topicId){
		return TOPIC_SERVICE.getTopicCacheKey(topicId);
	}
	
	@Override
	public Cache<Topic> getTopicCache() {
		return TOPIC_SERVICE.getTopicCache();
	}
	
	static{
		if(TOPIC_SERVICE==null)TOPIC_SERVICE = new TopicServiceImpl();
		if(USER_POWER==null)USER_POWER = new UserPower();
	}
	
	@Override
	public int updateIsManaged(Topic topic) {
		return TOPIC_SERVICE.updateIsManaged(topic);
	}

	public Topic findNextOrPrevious(int topicId, int forumId, boolean isNext) {
		return TOPIC_SERVICE.findNextOrPrevious(topicId, forumId, isNext);
	}

	public int trash(List<Integer> list, boolean isDeleted) throws ClubException {
		return TOPIC_SERVICE.trash(list, isDeleted);
	}

	public int delete(List<Integer> ids) throws ClubException {
		return TOPIC_SERVICE.delete(ids);
	}
	
	public Topic trash(TopicTrashForm form) throws ClubException {
		Topic model = TOPIC_SERVICE.trash(form);
		if(!Validator.isEmpty(model)){
			SearchProvider<Topic> searcher = SearchFactory.getInstance(SearchProvider.SEARCH_TOPIC);
			searcher.deleteIndex(model.getTopicId()); //删除索引
			User byuser = form.getUser(); //操作人员
			User umodel = this.getUserService().findById(form.getUserId()); //帖子作者
			if(!Validator.isEmpty(umodel)){ //如果是非过客发表的帖子
				ManageLog log = new ManageLog();
				log.setTopicId(model.getTopicId());
				log.setTitle(model.getTitle());
				if(!Validator.isEmpty(byuser)){
					log.setByUserId(byuser.getUserId() );
					log.setByUserName(byuser.getUserName());
					log.setByUserIp(form.getUserIp());	
				}
				log.setCreateDateTime(FormatDateTime.now());
				log.setForumId(model.getForumId());
				log.setUserName(umodel.getUserName());
				log.setUserId(umodel.getUserId());
				log.setIsList(form.getIsList());
				log.setListByUserName(form.getListByUserName());
				log.setIsManaged(true);
				if(form.getIsDeleted()){
					this.getUserService().ruleUtils(umodel,model.getForumId(),8); //获取用户积分变动
					this.getUserService().update(umodel,false);
					this.getUserService().ruleUtils(log,model.getForumId(),8); //获取日志积分变动
					log.setMemo("文章被删除");
				}else{
					log.setMemo("文章被恢复");
				}
				StringBuffer temp = new StringBuffer();
				temp.append(form.getContent());
				log.setContent(temp.toString());
				this.getManageLogService().create(log);
				if(form.getSendMessage()==1){ //如果需要通知用户
					Message message = new Message();
					message.setUserIdOfTake(umodel.getUserId());
					message.setUserNameOfTake(umodel.getUserName());
					message.setUserIdOfSend(form.getUser().getUserId());
					message.setUserNameOfSend(form.getUser().getUserName());
					message.setIsOpened(false);
					message.setCreateDateTime(FormatDateTime.now());
					message.setUserIpOfTake(model.getUserIp());
					message.setUserIpOfSend(form.getUserIp());
					message.setTitle(log.getMemo()+"("+model.getTitle()+")");
					StringBuffer sb = new StringBuffer();
					if(!Validator.isEmpty(form.getContent())){
						sb.append(form.getContent());
						sb.append("\r\n");
					}
					sb.append("信誉:");
					sb.append(ViewCoder.getRuleElement(log.getCredit()));
					sb.append("\r\n积分:");
					sb.append(ViewCoder.getRuleElement(log.getScore()));
					sb.append("\r\n金币:");
					sb.append(ViewCoder.getRuleElement(log.getMoney()));
					sb.append("\r\n人气:");
					sb.append(ViewCoder.getRuleElement(log.getViews()));
					message.setContent(sb.toString());
					this.getMessageService().create(message, true);
				}
			}
		}		
		return model;
	}
	
	public Topic findTopicAndContentById(int id) {
		return TOPIC_SERVICE.findTopicAndContentById(id);
	}
	
	public int update_forumId(int forumId, int toForumId) throws ClubException{
		return TOPIC_SERVICE.update_forumId(forumId, toForumId);
	}
	
	public void updateViews(int topicId) throws ClubException {
		TOPIC_SERVICE.updateViews(topicId);
	}

	public Topic updateBetter(TopicBetterForm form) throws ClubException {
		Topic model = TOPIC_SERVICE.updateBetter(form);
		User byuser = form.getUser(); //操作人员
		User umodel = this.getUserService().findById(form.getUserId()); //帖子作者
		if(!Validator.isEmpty(umodel)){
			ManageLog log = new ManageLog();
			log.setTopicId(model.getTopicId());
			log.setTitle(model.getTitle());
			if(!Validator.isEmpty(byuser)){
				log.setByUserId(byuser.getUserId() );
				log.setByUserName(byuser.getUserName());
				log.setByUserIp(form.getUserIp());	
			}
			log.setCreateDateTime(FormatDateTime.now());
			log.setForumId(model.getForumId());
			log.setUserName(umodel.getUserName());
			log.setUserId(umodel.getUserId());
			log.setIsList(form.getIsList());
			log.setListByUserName(form.getListByUserName());
			log.setIsManaged(true);
			if(form.getBetter()>0){
				this.getUserService().ruleUtils(umodel,model.getForumId(),10); //获取用户积分变动
				this.getUserService().update(umodel,false);
				this.getUserService().ruleUtils(log,model.getForumId(),10); //获取日志积分变动
				log.setMemo("文章被加为精品");
			}else{
				log.setMemo("文章被解除精品");
			}
			StringBuffer temp = new StringBuffer();
			temp.append(form.getContent());
			log.setContent(temp.toString());
			this.getManageLogService().create(log);
			if(form.getSendMessage()==1){ //如果需要通知用户
				Message message = new Message();
				message.setUserIdOfTake(umodel.getUserId());
				message.setUserNameOfTake(umodel.getUserName());
				message.setUserIdOfSend(form.getUser().getUserId());
				message.setUserNameOfSend(form.getUser().getUserName());
				message.setIsOpened(false);
				message.setCreateDateTime(FormatDateTime.now());
				message.setUserIpOfTake(model.getUserIp());
				message.setUserIpOfSend(form.getUserIp());
				message.setTitle(log.getMemo()+"("+model.getTitle()+")");
				StringBuffer sb = new StringBuffer();
				if(!Validator.isEmpty(form.getContent())){
					sb.append(form.getContent());
					sb.append("\r\n");
				}
				sb.append("信誉:");
				sb.append(ViewCoder.getRuleElement(log.getCredit()));
				sb.append("\r\n积分:");
				sb.append(ViewCoder.getRuleElement(log.getScore()));
				sb.append("\r\n金币:");
				sb.append(ViewCoder.getRuleElement(log.getMoney()));
				sb.append("\r\n人气:");
				sb.append(ViewCoder.getRuleElement(log.getViews()));
				sb.append("\r\n[url]");
				sb.append(this.getUserService().getBasicInfo().getUrl());
				sb.append(UrlUtils.getTopicUrl(model));
				sb.append("[/url]");
				message.setContent(sb.toString());
				this.getMessageService().create(message, true);
			}
		}
		return model;
	}

	public Topic findById(int id) {
		return TOPIC_SERVICE.findById(id);
	}

	public void createOrUpdate(Topic model) throws ClubException {
		if(model.getTopicId()==0){
			this.create(model);
		}else{
			this.update(model);
		}
	}

	private void localizeFile(Topic model){
		if(model.getLocalizeImage()==1
				&&USER_POWER.canAccess(
						model.getUser(),model.getForumId(),UserPower.OPERATEPOWER,6))
		{ //本地化图片
			String temp = model.getTContent().getContent();
			temp = LocalizeFile.localizeImage(temp,LocalizeFile.imagepath(model.getForumId()));
			model.getTContent().setContent(temp);
		}
	}
	
	/**
	 * 验证用户登录、权限,以及敏感字符过滤等
	 * 如果用户没有登录则先去验证用户登录
	 * @param model
	 * @return
	 * @throws ClubException 
	 */
	private void noAllowed(Topic model) throws ClubException{
		if(!this.getNoAllowedCharService().permissionTopic(model)){
			throw new ClubException(MessageUtils.getMessage("error_char_noAllowed"));
		}
		else{
			Forum forum = this.getForumService().findById(model.getForumId());
			if(Validator.isEmpty(forum)){
				//this.setMessage(MessageUtils.getMessage("error_empty"));
				logger.error("Forum("+model.getForumId()+") is null");
				throw new ClubException(MessageUtils.getMessage("error_notfind_forum"));
			}else if(forum.getNeedLabel()==(byte)1&&model.getLabelId()==0){
				//this.setMessage(MessageUtils.getMessage("error_labelId"));
				throw new ClubException(MessageUtils.getMessage("error_labelId"));
			}
			double u_score = 0;
			double u_money = 0;
			double u_credit = 0;
			int u_views = 0;
			if(!Validator.isEmpty(model.getUser())){
				model.setUserId(model.getUser().getUserId());
				model.setUserName(model.getUser().getUserName().trim());
				u_score = model.getUser().getScore();
				u_money = model.getUser().getMoney();
				u_credit = model.getUser().getCredit();
				u_views = model.getUser().getViews();
			}else{//判断用户是否在页面同时输入了用户名和密码,如果是则请求数据库验证,否则只当作过客提交
				User user = null;
				if(!Validator.isEmpty(model.getPassword())&&!Validator.isEmpty(model.getUserName()))
				{
					user = new User();
					user.setUserName(model.getUserName());
					user.setPassword(model.getPassword());
					user = this.getUserService().findByUserNameAndPassword(user,true);
					if(Validator.isEmpty(user)){//如果登录失败
						logger.debug("登录失败 userName:"+model.getUserName());
						logger.debug("登录失败 password:"+model.getPassword());
						throw new ClubException(MessageUtils.getMessage("error_login"));
					}else{
						model.setUserId(user.getUserId());

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?