⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 topicserviceimpl.java

📁 新技术论坛系统 v1.0 前后台管理的初始用户名 : admin 密码 123456
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.ntsky.bbs.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.ntsky.framework.util.DateUtil;

import com.ntsky.bbs.Symbols;
import com.ntsky.bbs.domain.Poll;
import com.ntsky.bbs.domain.Post;
import com.ntsky.bbs.domain.Role;
import com.ntsky.bbs.domain.Topic;
import com.ntsky.bbs.domain.User;
import com.ntsky.bbs.domain.PollResult;
import com.ntsky.bbs.dao.PollResultDAO;
import com.ntsky.bbs.dao.PostDAO;
import com.ntsky.bbs.dao.UserDAO;
import com.ntsky.bbs.dao.PollDAO;
import com.ntsky.bbs.dao.RoleDAO;
import com.ntsky.bbs.dao.TopicDAO;
import com.ntsky.bbs.exception.DAOException;
import com.ntsky.bbs.exception.ServiceException;
import com.ntsky.bbs.service.TopicService;
import com.ntsky.bbs.util.page.Pagination;
import com.ntsky.bbs.util.page.QueryResult;
import com.ntsky.bbs.util.memory.RoleSingleton;
import com.ntsky.bbs.util.memory.ForumSingleton;
import com.ntsky.bbs.util.memory.BadwordSingleton;
import com.ntsky.bbs.util.config.SystemConfig;

/**
 * 主题模块业务处理接口
 * 
 * @author ntsky
 * @link www.ntsky.com
 */
public class TopicServiceImpl extends BaseServiceImpl implements TopicService{
	
	private TopicDAO topicDAO;
	public void setTopicDAO(TopicDAO topicDAO){
		this.topicDAO = topicDAO;
	}

	private PostDAO postDAO;
	public void setPostDAO(PostDAO postDAO){
		this.postDAO = postDAO;
	}

	private RoleDAO roleDAO;
	public void setRoleDAO(RoleDAO roleDAO){
		this.roleDAO = roleDAO;
	}
	
	private PollDAO pollDAO;
	public void setPollDAO(PollDAO pollDAO){
		this.pollDAO = pollDAO;
	}
	
	private PollResultDAO pollResultDAO;
	public void setPollResultDAO(PollResultDAO pollResultDAO){
		this.pollResultDAO = pollResultDAO;
	}	
	
	/**
	 * 创建主题
	 * <ol>
	 * <li>创建主题</li>
	 * <li>创建第一条帖子信息</li>
	 * <li>投票信息</li>
	 * <li>更新论坛内存</li>
	 * <li>更新角色(根据文章总是判断是否要更新角色)</li>
	 * </ol>
	 * 
	 * @param topic 主题信息
	 * @param firstPost 第一条帖子信息
	 * @param poll 投票信息 
	 */
	public void createTopic(Topic topic,Post firstPost,Poll poll) throws ServiceException {
		try{
			Date date = new Date();
			// 创建主题
			topic.setDateCreated(date);
			if(logger.isDebugEnabled()){
				logger.debug("新帖标题 : " + topic.getTitle());
			}			
			topic.setLastPostUser(topic.getUsername());
			topic.setReplies(0);
			topic.setLastPostTime(date);
			topic.setTitle(BadwordSingleton.getInstance().replaceString(topic.getTitle()));
			topicDAO.save(topic);
			
			// 创建顶层帖子
			topic = topicDAO.findTopic(topic.getId());
			firstPost.setForumId(topic.getForumId());
			firstPost.setTopicId(topic.getId().intValue());
			firstPost.setForumId(topic.getForumId());
			firstPost.setTitle(BadwordSingleton.getInstance().replaceString(topic.getTitle()));
			firstPost.setContent(BadwordSingleton.getInstance().replaceString(firstPost.getContent()));
			firstPost.setDateCreated(date);
			firstPost.setTopicId(topic.getId().intValue());
			//topic.addPost(firstPost);
			postDAO.save(firstPost);

			// 投票帖
			if(topic.getIsVote()==1){
				poll.setTopicId(topic.getId().intValue());
				poll.setDateCreated(new Date());
				pollDAO.save(poll);
				
				//poll = (Poll) pollDAO.load(Poll.class,poll.getId());
				// 创建投票选项
				Object[] pollResultArray = poll.getPollResults().toArray();
				PollResult pollResult = null;
				for (int i = 0; i < pollResultArray.length; i++) {
					pollResult = (PollResult)pollResultArray[i];
					pollResult.setPollId(poll.getId().intValue());
					//pollResult.setPoll(poll);
					poll.addPollResult(pollResult);
					pollResultDAO.save(pollResult);
				}
			}

			// 更新Forum内存 1、最后的提交的回复 2、主题总数 
			List list = topicDAO.findTopic(topic.getForumId(),1);
			Topic lastTopic = null;
			if(list!=null&&list.size()>0){
				lastTopic = (Topic)list.toArray()[0];
			}
			ForumSingleton.getInstance().setLastPostTopic(topic.getForumId(),lastTopic);
			ForumSingleton.getInstance().setTopicCount(topic.getForumId(),Symbols.INCREASE);
			ForumSingleton.getInstance().setPostCount(topic.getForumId(),Symbols.INCREASE);
			ForumSingleton.getInstance().setTodayPostCount(topic.getForumId(),Symbols.INCREASE);
			
			// 如果是guest用户就不需要如下操作
			if(!(Symbols.GUEST.equals(topic.getUsername()))){
				// 发表主题增加金钱数
				userDAO.updateMoney(topic.getUsername(),SystemConfig.getInstance().getIntPropertyValue(Symbols.MONEY,Symbols.MONEY_ADD_TOPIC));
				
				// 更新用户信息(用户发表贴子数+1,主题+1)
				userDAO.updateAboutPost(topic.getUsername(),Symbols.TOPIC,Symbols.INCREASE);
				userDAO.updateAboutPost(topic.getUsername(),Symbols.POST,Symbols.INCREASE);
	
				// 更新角色
				User user = userDAO.findUser(topic.getUsername());
				// 如果是注册用户组用户进行下面步骤
				if(RoleSingleton.getInstance().getRole(user.getRoles()).getType()==0){
					Role role = roleDAO.findRole(user.getTotalTopic());
					// 用户角色和判断出来的角色一致不更新用户角色
					if(!role.getId().toString().equals(user.getRoles())){
						userDAO.updateRole(user.getUsername(),role.getId().toString());
					}
				}
			}
		}
		catch(DAOException de){
			throw new ServiceException("创建主题 ['"+topic.getTitle()+"'] 发生错误.");
		}
		catch(Exception ex){
			logger.error("创建主题 ['"+topic.getTitle()+"'] 发生错误.");
			throw new ServiceException("创建主题 ['"+topic.getTitle()+"'] 发生错误.");
		}
	}
	
	/**
	 * 取得用户发表的帖子 
	 * @param username 用户名
	 * @param forumId 论坛序号
	 * @param keyword 标题关键字
	 * @param orderMap 排序map
	 * @param pagination 分页对象
	 * @return 查询结果
	 * @throws DAOException
	 */
	public QueryResult getUserTopics(String username, int forumId, String keyword, Map orderMap, Pagination pagination) throws ServiceException {
		try {
			return topicDAO.findUserTopics(username, forumId, keyword, orderMap, pagination);
		}
		catch(DAOException daoException){
			throw new ServiceException(daoException.getMessage());
		}
	}

	/**
	 * 修改主题
	 * @param topic 主题信息
	 * @param firstPost 第一条帖子
	 */
	public void editTopic(Topic topic,Post firstPost) throws ServiceException {
		try{
			Topic tempTopic = topicDAO.findTopic(topic.getId());
			tempTopic.setTitle(BadwordSingleton.getInstance().replaceString(topic.getTitle()));
			tempTopic.setMood(topic.getMood());
			tempTopic.setCategoryId(topic.getCategoryId());
			topicDAO.update(tempTopic);
			
			// 修改post中第一个主题信息
			Post tempPost = postDAO.findPost(firstPost.getId());
			tempPost.setTitle(BadwordSingleton.getInstance().replaceString(firstPost.getTitle()));
			tempPost.setContent(BadwordSingleton.getInstance().replaceString(firstPost.getContent()));
			postDAO.update(tempPost);
		}
		catch(DAOException de){
			throw new ServiceException("修改主题 ['"+topic.getTitle()+"'] 发生错误.");
		}
	}
	
	/**
	 * 根据主题编号删除主题(物理删除)
	 * @param topicId 主题编号 
	 */
	public void deleteTopic(int topicId) throws ServiceException {
		try{
			Topic topic = topicDAO.findTopic(topicId);
			topicDAO.delete(topic);
		}
		catch(DAOException de){
			throw new ServiceException(de.getMessage());
		}
	}
	
	/**
	 * 删除主题,将主题丢到垃圾箱
	 * @param topicId
	 * @throws ServiceException
	 */
	public void trashTopic(int topicId) throws ServiceException {
		try{
			topicDAO.trashTopic(topicId);
			
			Topic topic = topicDAO.findTopic(new Long(topicId));

			// 更新Forum内存 1、最后的提交的回复 2、主题总数 
			List list = topicDAO.findTopic(topic.getForumId(),1);
			Topic lastPostTopic = null;
			if(list!=null&&list.size()>0){
				lastPostTopic = (Topic)list.toArray()[0];
			}
			ForumSingleton.getInstance().setLastPostTopic(topic.getForumId(),lastPostTopic);
			ForumSingleton.getInstance().setTopicCount(topic.getForumId(),Symbols.DECREASE);
			ForumSingleton.getInstance().setPostCount(topic.getForumId(),Symbols.DECREASE);
			ForumSingleton.getInstance().setTodayPostCount(topic.getForumId(),Symbols.DECREASE);			
			
			// 如果是guest用户就不需要如下操作
			if(!(Symbols.GUEST.equals(topic.getUsername()))){
				// 删除主题减少金钱数
				userDAO.updateMoney(topic.getUsername(),SystemConfig.getInstance().getIntPropertyValue(Symbols.MONEY,Symbols.MONEY_DELETE_TOPIC));
				
				// 更新用户信息(用户发表贴子数-1,主题-1)
				userDAO.updateAboutPost(topic.getUsername(),Symbols.TOPIC,Symbols.DECREASE);
				userDAO.updateAboutPost(topic.getUsername(),Symbols.POST,Symbols.DECREASE);
	
				// 更新角色
				User user = userDAO.findUser(topic.getUsername());
				// 如果是管理组用户不需要进行下面步骤
				if(RoleSingleton.getInstance().getRole(user.getRoles()).getType()==0){
					Role role = roleDAO.findRole(user.getTotalTopic());
					// 用户角色和判断出来的角色一致不更新用户角色
					if(!role.getId().toString().equals(user.getRoles())){
						userDAO.updateRole(user.getUsername(),role.getId().toString());
					}
				}
			}
		}
		catch(DAOException de){
			throw new ServiceException("删除主题topicId ['"+topicId+"'] 发生错误.");
		}
	}
	
	/**
	 * 根据主题编号取得主题信息
	 * @param topicId 主题编号
	 * @return Topic 主题对象
	 */	
	public Topic getTopic(int topicId) throws ServiceException {
		try{
			return topicDAO.findTopic(topicId);
		}
		catch(DAOException de){
			throw new ServiceException("查找主题topicId ['"+topicId+"'] 发生错误.");
		}
	}
	

⌨️ 快捷键说明

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