📄 topicserviceimpl.java
字号:
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 + -