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 + -
显示快捷键?