package cn.newgxu.bbs.service.impl;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import cn.newgxu.bbs.common.Authorization;
import cn.newgxu.bbs.common.AuthorizationManager;
import cn.newgxu.bbs.common.CheckRemoteLogin;
import cn.newgxu.bbs.common.Constants;
import cn.newgxu.bbs.common.Pagination;
import cn.newgxu.bbs.common.exception.BBSException;
import cn.newgxu.bbs.common.exception.BBSExceptionMessage;
import cn.newgxu.bbs.common.exception.ValidationException;
import cn.newgxu.bbs.common.util.RegisterWordFilter;
import cn.newgxu.bbs.common.util.TimerUtils;
import cn.newgxu.bbs.common.util.UpdateLastWeekExp;
import cn.newgxu.bbs.common.util.Util;
import cn.newgxu.bbs.common.util.ValidationUtil;
import cn.newgxu.bbs.domain.FootBallTeam;
import cn.newgxu.bbs.domain.Honor;
import cn.newgxu.bbs.domain.ManageLog;
import cn.newgxu.bbs.domain.TopThree;
import cn.newgxu.bbs.domain.Topic;
import cn.newgxu.bbs.domain.UploadItem;
import cn.newgxu.bbs.domain.UserLogonLog;
import cn.newgxu.bbs.domain.group.GroupManager;
import cn.newgxu.bbs.domain.group.UserGroup;
import cn.newgxu.bbs.domain.market.ItemLine;
import cn.newgxu.bbs.domain.market.ItemWork;
import cn.newgxu.bbs.domain.message.Message;
import cn.newgxu.bbs.domain.other.Hits;
import cn.newgxu.bbs.domain.user.OnlineUser;
import cn.newgxu.bbs.domain.user.User;
import cn.newgxu.bbs.domain.vote.VoteWebMaster;
import cn.newgxu.bbs.domain.vote.VoteWebMasterRecord;
import cn.newgxu.bbs.service.UserService;
import cn.newgxu.bbs.web.cache.BBSCache;
import cn.newgxu.bbs.web.model.OnlineStatus;
import cn.newgxu.bbs.web.model.OnlineUserModel;
import cn.newgxu.bbs.web.model.accounts.LoginModel;
import cn.newgxu.bbs.web.model.accounts.RegisterModel;
import cn.newgxu.bbs.web.model.admin.SelectUserInfoModel;
import cn.newgxu.bbs.web.model.admin.UsersManageModel;
import cn.newgxu.bbs.web.model.admin.WebMasterModel;
import cn.newgxu.bbs.web.model.admin.WebMastersManageModel;
import cn.newgxu.bbs.web.model.market.ItemComplimentAwayDoModel;
import cn.newgxu.bbs.web.model.market.ItemUseDoModel;
import cn.newgxu.bbs.web.model.market.MyItemsModel;
import cn.newgxu.bbs.web.model.user.EidtFaceModel;
import cn.newgxu.bbs.web.model.user.EidtPasswordModel;
import cn.newgxu.bbs.web.model.user.EidtQuestionModel;
import cn.newgxu.bbs.web.model.user.EidtTitleModel;
import cn.newgxu.bbs.web.model.user.EidtUserInfoModel;
import cn.newgxu.bbs.web.model.user.GetUsersModel;
import cn.newgxu.bbs.web.model.user.MyUploadModel;
import cn.newgxu.bbs.web.model.user.SaveCupOfLifeModel;
import cn.newgxu.bbs.web.model.user.UserFavoriteTopic;
import cn.newgxu.jpamodel.ObjectNotFoundException;
/**
*
* @author polly
* @since 4.0.0
* @version $Revision 1.1$
*/
public class UserServiceImpl implements UserService {
protected Log log = LogFactory.getLog(getClass());
public User loginWithoutValidCode(LoginModel model) throws BBSException {
if (model.getRightCode() != null
&& model.getRightCode().equalsIgnoreCase("twitter")) {
User user = null;
try {
user = User.getByUsername(model.getUsername());
} catch (ObjectNotFoundException e) {
}
if (user == null || !user.getPassword().equals(model.getPassword()))
throw new BBSException(
BBSExceptionMessage.USERNAME_PASSWORD_INVALID);
} else {
if (!isValidUser(model.getUsername(), model.getPassword())) {
throw new BBSException(
BBSExceptionMessage.USERNAME_PASSWORD_INVALID);
}
}
User user;
try {
user = User.getByUsername(model.getUsername());
} catch (ObjectNotFoundException e) {
log.error("不可能出错的地方出错...");
throw new RuntimeException();
}
if (user.getAccountStatus() == Constants.ACCOUNT_STATUS_FORBID) {
throw new BBSException(BBSExceptionMessage.USER_PROHIBIT);
}
if (user.getAccountStatus() == Constants.ACCOUNT_STATUS_UNPAST) {
throw new BBSException(BBSExceptionMessage.USER_UNPAST);
}
loginLogic(user);
UserLogonLog.log(user, new Date(), model.getIp());
return user;
}
public User login(LoginModel model) throws BBSException {
if (!isValidCode(model.getValidCode(), model.getRightCode())) {
throw new BBSException(BBSExceptionMessage.VALID_CODE_INVALID);
}
return loginWithoutValidCode(model);
}
private boolean isValidCode(String validCode, String rightCode) {
if (log.isDebugEnabled()) {
log.debug("input=" + validCode + ", right=" + rightCode);
}
return Util.equalsValidCode(validCode, rightCode);
}
private void loginLogic(User user) {
user.addLoginTimes();
user.addPower();
user.setLastLoginTime(new Date());
// user.save();
user.update();
}
/**
* 检查用户输入的用户名密码是否有效。
*
* @param username
* 用户名
* @param password
* 密码
* @return true 如果有效;false 如果无效。
*/
private boolean isValidUser(String username, String password) {
User user;
try {
user = User.getByUsername(username);
} catch (ObjectNotFoundException e) {
return false;
}
return user.getPassword().equals(Util.hash(password));
}
private void registerCheck(String username, String nick)
throws BBSException {
checkUsernameExist(username);
checkNickExist(nick);
}
private void checkUsernameExist(String username) throws BBSException {
try {
User.getByUsername(username);
throw new BBSException(BBSExceptionMessage.USERNAME_EXIST);
} catch (ObjectNotFoundException e) {
// ignore
}
}
private void checkNickExist(String nick) throws BBSException {
try {
User.getByNick(nick);
throw new BBSException(BBSExceptionMessage.NICK_EXIST);
} catch (ObjectNotFoundException e) {
// ignore
}
}
private void checkStudentid(String studentid, String mima)
throws BBSException {
if (!CheckRemoteLogin.checkRemoteUser(studentid, mima)) {
throw new BBSException(BBSExceptionMessage.XUEHAO_INVALID);
}
}
// 原方法有错误,这里重写一个
/**
* 由于图书馆的验证方式有误,这里重写这个方法,图书馆的初试密码是00000
*
* @param studentId
*/
private void checkIdcode(String studentId, String password, int type)
throws BBSException {
try {
if (!CheckRemoteLogin.checkUser(studentId, password, type)) {
throw new BBSException("您输入的学号或者密码不正确!");
}
} catch (IOException e) {
throw new BBSException("您输入的学号或者密码不正确!");
}
}
/*
* private void checkIdcode(String trueName, String Studentid, String
* IDCard) throws BBSException { try { if
* (!CheckRemoteLogin.checkUser(Studentid, IDCard, 1)) { throw new
* BBSException(BBSExceptionMessage.XUEHAO_NOT_EXIST); } } catch
* (IOException e1) { throw new
* BBSException(BBSExceptionMessage.XUEHAO_NOT_EXIST); } // Graduate
* graduate; // try { // graduate = Graduate.getByXuehao(Studentid); // }
* catch (ObjectNotFoundException e) { // throw new
* BBSException(BBSExceptionMessage.XUEHAO_NOT_EXIST); // } // if
* (!Util.equalsIDCard(IDCard, graduate.getIDCard())) { // throw new
* BBSException(BBSExceptionMessage.IDCARD_INVALID); // } }
*/
// 老师的数据库没有表,所以这个方法没有被使用
// private void checkTeacherIDCard(String IDCard, String name)
// throws BBSException {
//
// Teacher teacher;
// try {
// teacher = Teacher.getByIDCard(IDCard);
// } catch (ObjectNotFoundException e) {
// throw new BBSException(BBSExceptionMessage.IDCARD_INVALID);
// }
// if (!name.equals(teacher.getName())) {
// throw new BBSException(BBSExceptionMessage.IDCARD_INVALID);
// }
// }
public User register(RegisterModel model) throws BBSException,
ValidationException {
if (!isValidCode(model.getValidCode(), model.getRightCode())) {
throw new BBSException(BBSExceptionMessage.VALID_CODE_INVALID);
}
// -----------------check
ValidationUtil.username(model.getUsername());
ValidationUtil.nick(model.getNick());
ValidationUtil.password(model.getPassword(), model.getPassword());
ValidationUtil.truename(model.getTrueName());
ValidationUtil.email(model.getEmail());
// ValidationUtil.title(model.getTitle());
// ValidationUtil.idiograph(model.getIdiograph());
if (RegisterWordFilter.StringFilter(model.getNick())) {
throw new BBSException(BBSExceptionMessage.REGISTER_SPECIALS_WORD);
}
// username不能带有特殊字符
// since 2012-06-26
if (RegisterWordFilter.StringFilter(model.getUsername())) {
throw new BBSException(BBSExceptionMessage.REGISTER_SPECIALS_WORD);
}
// -----------------
User user = new User();
user.setUsername(model.getUsername());
// 注意,这里对密码进行加密。
user.setPassword(Util.hash(model.getPassword()));
user.setEmail(model.getEmail());
user.setSex(model.getSex() == 1);
user.setIdcode(model.getIdcode());
user.setBirthday(model.getBirthday());
user.setNick(model.getNick());
user.setTrueName(model.getTrueName());
switch (model.getRegType()) {
case 1: // 本科生
if (RegisterWordFilter.LoginStringFilter(model.getStudentid())) {
throw new BBSException(BBSExceptionMessage.ONLY_NUMBER);
}
//ValidationUtil.checkStudentIdAndMima(model.getStudentid(),
// model.getMima());
user.setRegisterType(Constants.REG_TYPE_STUDENT);
user.setAccountStatus(Constants.ACCOUNT_STATUS_NORMAL);
user.setStudentid(model.getStudentid());
System.out.println(user.getStudentid());
//checkStudentid(user.getStudentid(), model.getMima());
break;
case 2: // 研究生、博士生
if (RegisterWordFilter.LoginStringFilter(model.getStudentid())) {
throw new BBSException(BBSExceptionMessage.ONLY_NUMBER);
}
user.setRegisterType(Constants.REG_TYPE_DOCTOR);
user.setAccountStatus(Constants.ACCOUNT_STATUS_NORMAL);
user.setStudentid(model.getStudentid());
// checkIdcode(user.getTrueName(), user.getStudentid(),
// model.getMima()); 根据新方法改变
checkIdcode(model.getStudentid(), model.getMima(), 1);
break;
case 3: // 教师
user.setRegisterType(Constants.REG_TYPE_TEACHER);
user.setAccountStatus(Constants.ACCOUNT_STATUS_NORMAL);
user.setTel(model.getTel());
user.setUnits(model.getUnits());
// checkTeacherIDCard(user.getIdcode(), user.getTrueName()); longkai@2012-08-31
// 教师注册的问题出在这里,数据库没有教师的表
break;
case 4: // 校外
user.setRegisterType(Constants.REG_TYPE_OUTER);
user.setAccountStatus(Constants.ACCOUNT_STATUS_NORMAL);
// user.setAccountStatus(Constants.ACCOUNT_STATUS_WAIT);
/**
* 添加校外注册过滤----by 余影
*/
System.out.println(model.getTrueName().trim());
if (!RegisterWordFilter.isChinese(model.getTrueName().trim())) {
throw new BBSException(BBSExceptionMessage.TURENAME_ERROR);
}
try {
if (!CheckRemoteLogin.checkCard(model.getIdcode())) {
throw new BBSException(BBSExceptionMessage.IDCARD_ERROR);
}
} catch (Exception e) {
throw new BBSException(BBSExceptionMessage.IDCARD_ERROR);
}
break;
case 5:// 行健
if (RegisterWordFilter.LoginStringFilter(model.getStudentid())) {
throw new BBSException(BBSExceptionMessage.ONLY_NUMBER);
}
user.setRegisterType(Constants.REG_TYPE_DOCTOR);
user.setAccountStatus(Constants.ACCOUNT_STATUS_NORMAL);
user.setStudentid(model.getStudentid());
try {
if (!CheckRemoteLogin.checkUser(user.getStudentid(),
model.getMima(), 2)) {
throw new BBSException(BBSExceptionMessage.XUEHAO_NOT_EXIST);
}
} catch (IOException e) {
throw new BBSException(BBSExceptionMessage.XUEHAO_NOT_EXIST);
}
break;
case 100: // 新生 longkai @2012-07-14
user.setRegisterType(Constants.REG_TYPE_FRESHMAN);
user.setAccountStatus(Constants.ACCOUNT_STATUS_NORMAL);
if (!RegisterWordFilter.isChinese(model.getTrueName().trim())) {
throw new BBSException(BBSExceptionMessage.TURENAME_ERROR);
}
try {
if (!CheckRemoteLogin.checkCard(model.getIdcode())) {
throw new BBSException(BBSExceptionMessage.IDCARD_ERROR);
}
} catch (Exception e) {
throw new BBSException(BBSExceptionMessage.IDCARD_ERROR);
}
break;
default:
throw new BBSException(BBSExceptionMessage.PARAMETER_ERROR);
}
user.setRegisterTime(new Date());
user.setGroupTypeId(Constants.DEFAULT_GROUP_TYPE);
user.setGroupId(Constants.DEFAULT_GROUP_ID);
user.setMoney(Constants.DEFAULT_MONEY);
user.setLastLoginTime(new Date());
user.setCurrentPower(GroupManager.getUserGroup(
Constants.DEFAULT_GROUP_TYPE, Constants.DEFAULT_GROUP_ID)
.getMaxPower());
// user.setExp(0);
// user.setNumberOfGood(0);
// user.setNumberOfReply(0);
// user.setNumberOfTopic(0);
// user.setGold(0);
// user.setBadboy(0);
// user.setLoginTimes(0);
user.setLoginmt((long) 0);
user.setIdiograph("");
user.setFace("");
user.setTitle("");
registerCheck(user.getUsername(), user.getNick());
user.save();
return user;
}
public void reInput(RegisterModel model) throws BBSException {
if (!isValidCode(model.getValidCode(), model.getRightCode())) {
throw new BBSException(BBSExceptionMessage.VALID_CODE_INVALID);
}
User user = model.getUser();
user.setIdcode(model.getIdcode());
user.setEmail(model.getEmail());
user.setBirthday(model.getBirthday());
user.setTrueName(model.getTrueName());
switch (model.getRegType()) {
case 3: // 教师
user.setAccountStatus(Constants.ACCOUNT_STATUS_WAIT);
user.setTel(model.getTel());
user.setUnits(model.getUnits());
break;
case 4: // 校外
user.setAccountStatus(Constants.ACCOUNT_STATUS_WAIT);
break;
default:
throw new BBSException(BBSExceptionMessage.PARAMETER_ERROR);
}
user.update();
}
public void reckonItems(List<UploadItem> uploadItems, Authorization auth)
throws BBSException {
User user = AuthorizationManager.getUser(auth);
if (!acceptableUploadItemsSize(uploadItems)) {
deleteUploadItems(uploadItems);
throw new BBSException(BBSExceptionMessage.OUT_OF_ACCEPTABLE_SIZE);
}
if (user.canPayFor(totalCost(user, uploadItems))) {
saveUploadItems(uploadItems, user);
user.payFor(totalCost(user, uploadItems));
user.save();
} else {
deleteUploadItems(uploadItems);
throw new BBSException(BBSExceptionMessage.OUT_OF_MONEY);
}
}
public void FaceReckonItems(List<UploadItem> uploadItems, Authorization auth)
throws BBSException {
if (!acceptableUploadItemsSize(uploadItems)) {
deleteUploadItems(uploadItems);
throw new BBSException(BBSExceptionMessage.OUT_OF_ACCEPTABLE_SIZE);
}
User user = AuthorizationManager.getUser(auth);
// ---------2010-06-02 网管部要求上传头像不要钱-------------
saveUploadItems(uploadItems, user);
StringBuffer face = new StringBuffer();
for (UploadItem item : uploadItems) {
face.append("<img src='")
.append(Util.getFaceUriFromStoragePath(item
.getStoragePath()))
.append("' style='border:1px;' />");
user.setFace(face.toString());
}
user.save();
}
private boolean acceptableUploadItemsSize(List<UploadItem> uploadItems) {
for (UploadItem item : uploadItems) {
if (!item.acceptableSize()) {
return false;
}
}
return true;
}
private int totalCost(User user, List<UploadItem> uploadItems) {
int totalCost = 0;
if (user.getGroupTypeId() == GroupManager.BASIC_GROUP) {
for (UploadItem item : uploadItems) {
totalCost += user.reckonPriceOfUploadItemPrice(item);
}
}
return totalCost;
}
private void deleteUploadItems(List<UploadItem> uploadItems) {
for (UploadItem item : uploadItems) {
item.deleteFile();
}
}
private void saveUploadItems(List<UploadItem> uploadItems, User user) {
for (UploadItem item : uploadItems) {
item.setCost(user.reckonPriceOfUploadItemPrice(item));
item.setStoragePath(StringUtils.substringBeforeLast(
item.getStoragePath(), ".tmp"));
item.setUploader(user);
item.setUri(Util.getUriFromStoragePath(item.getStoragePath()));
item.save();
}
}
public void itemUseDo(ItemUseDoModel model) throws BBSException {
// 对人用道具
if (model.getNick() != null) {
User object = getUser(model.getNick());
try {
if (log.isDebugEnabled()) {
log.debug("itemLine id=" + model.getId());
log.debug("object id=" + object.getId());
}
/*
* 在执行这前,需要验证是否可以使用 这个道具, 看一下数据库,我们发现只有
* item_type_id=4的物品会消耗体力与金钱 那么就对这两个项进行验证
*/
ItemLine itemLine = ItemLine.get(model.getId());
if (itemLine.getItem().getType().getId() == 4) {
if (model.getUser().getCurrentPower()
+ itemLine.getItem().getSelfPower() < 0) {
throw new BBSException("您使用的是需要体力与金钱支持的物品,可是<br />"
+ BBSExceptionMessage.OUT_OF_POWER);
}
if (model.getUser().getMoney()
+ itemLine.getItem().getSelfMoney() < 0) {
throw new BBSException("您使用的是需要体力与金钱支持的物品,可是<br />"
+ BBSExceptionMessage.OUT_OF_MONEY);
}
}
/*
* 检查是否是女性用户(用于2012年女生节)
*/
if (!model.getUser().isSex()
&& itemLine.getItem().getId() == 70) {
throw new BBSException("节日是她们的,我们什么也没有。。。");
}
//
// if (itemLine.get)
if (itemLine.getItem().getExpand1() != null)
if (TimerUtils.isOverdue(itemLine.getItem().getExpand1()))
throw new BBSException("您所使用的物品已经过期啦!");
// itemLine.getItem().getExpand1()
model.getUser().useItem(itemLine, object);
} catch (ObjectNotFoundException e) {
throw new BBSException(BBSExceptionMessage.PARAMETER_ERROR);
}
}
// 对帖子用道具
if (model.getTopicId() != 0) {
try {
Topic topic = Topic.get(model.getTopicId());
// 如果帖子是由管理员或斑竹置顶的话,即在itemWork表中没有记录,topic.getTopType()!=0说明帖子是置顶了的
if (!ItemWork.hasItemWork(topic) && topic.getTopType() != 0) {
throw new BBSException(BBSExceptionMessage.CANNOT_SETTOP);
}
List<ItemLine> list = ItemLine.getItemLinesByUser(
model.getUser(), (int) model.getId());
if (list.size() == 0)
throw new BBSException(BBSExceptionMessage.OUT_OF_STORAGE);
model.getUser().useItem(list.get(0), topic);
} catch (ObjectNotFoundException e) {
throw new BBSException(BBSExceptionMessage.OUT_OF_STORAGE);
}
}
}
public void myItemsModel(MyItemsModel model) {
model.getPagination().setRecordSize(
ItemLine.getNumberOfItemLines(model.getUser()));
model.setItems(ItemLine.getItemLines(model.getUser(),
model.getPagination()));
}
public void itemComplimentAwayDo(ItemComplimentAwayDoModel model)
throws BBSException, ObjectNotFoundException {
User user = model.getUser();
// 取得所有转给物品的用户
List<String> nicks = Util.splitNicks(model.getNick());
// 转物品成功用户
System.out.println(nicks);
List<String> receiveUsers = new LinkedList<String>();
// 物品数量不足,转物品失败用户
List<String> unReceiveUsers = new LinkedList<String>();
// 错误昵称,用户不存在
List<String> notExistUsers = new LinkedList<String>();
List<ItemLine> itemLines = null;
itemLines = ItemLine.getItemLinesByUser(user,
ItemLine.get(model.getId()).getItem().getId());
for (int i = 0; i < nicks.size(); i++) {
String nick = nicks.get(i);
try {
User object = User.getByNick(nick);
if (log.isDebugEnabled()) {
log.debug("itemLine id=" + model.getId());
log.debug("object id=" + object.getId());
}
canNotToSelf(user, object);
if (itemLines.size() > i) {
model.getUser().complimentAwayItem(itemLines.get(i),
object, model.getWish());
receiveUsers.add(nick);
} else {
unReceiveUsers.add(nick);
}
} catch (ObjectNotFoundException e) {
notExistUsers.add(nick);
}
}
model.setReceiveUsers(receiveUsers);
model.setUnReceiveUsers(unReceiveUsers);
model.setNotExistUsers(notExistUsers);
}
/**
* 这个私有方法和上面那个很像,但是这个可以控制具体送那一个
* @param model
* @throws BBSException
* @throws ObjectNotFoundException
* @author longkai
* @since 2012-10-21
*/
private void sendSystemItems(ItemComplimentAwayDoModel model) throws BBSException, ObjectNotFoundException {
User user = model.getUser();
// 取得所有转给物品的用户
List<String> nicks = Util.splitNicks(model.getNick());
// 转物品成功用户
System.out.println(nicks);
List<String> receiveUsers = new LinkedList<String>();
// 物品数量不足,转物品失败用户
List<String> unReceiveUsers = new LinkedList<String>();
// 错误昵称,用户不存在
List<String> notExistUsers = new LinkedList<String>();
List<ItemLine> itemLines = null;
itemLines = ItemLine.getItemLinesByUser(user,
model.getItemId());
for (int i = 0; i < nicks.size(); i++) {
String nick = nicks.get(i);
try {
User object = User.getByNick(nick);
canNotToSelf(user, object);
if (itemLines.size() > i) {
model.getUser().complimentAwayItem(itemLines.get(i),
object, model.getWish());
receiveUsers.add(nick);
} else {
unReceiveUsers.add(nick);
}
} catch (ObjectNotFoundException e) {
notExistUsers.add(nick);
}
}
model.setReceiveUsers(receiveUsers);
model.setUnReceiveUsers(unReceiveUsers);
model.setNotExistUsers(notExistUsers);
}
private void canNotToSelf(User user, User object) throws BBSException {
if (user.isSelf(object)) {
throw new BBSException(BBSExceptionMessage.CANNOT_TO_SELF);
}
}
public void cleanOnlineUser() {
OnlineUser.clean();
}
public void signOnlineUser(OnlineUserModel model) {
if (OnlineUser.getNumberByIp(model.getIp()) > 300) {
throw new RuntimeException();
}
OnlineUser.sign(model.getUserId(), model.getLastAliveTime(),
model.getForumId(), model.getOs(), model.getIp(),
model.getLocation(), model.getSessionid());
}
public void onlineStatus(OnlineStatus model) {
model.setTotal(OnlineUser.getTotal());
if (model.getForumId() > 0) {
model.setNumberOfForum(OnlineUser.getNumberOfForum(model
.getForumId()));
}
}
public void deleteOnlineUser(Authorization auth) {
if (auth != null) {
try {
OnlineUser.getByUserId(auth.getId()).delete();
} catch (ObjectNotFoundException e) {
// ignore
}
}
}
public void editUserInfo(EidtUserInfoModel model) throws BBSException {
User user = model.getUser();
user.setSex(model.getSex() == 1);
user.setBirthday(model.getBirthday());
user.setEmail(model.getEmail());
user.setHomepage(model.getHomepage());
user.setQq(model.getQq());
user.setTel(model.getTel());
user.setIdiograph(model.getIdiograph());
user.save();
}
/**
* 修改是否接收短信
*
* @param model
* @param type
* @return
*/
public boolean editReplyMessage(EidtUserInfoModel model, Integer type) {
try {
User user = model.getUser();
user.setReplyMessage(type);
user.save();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public void editFace(EidtFaceModel model) throws BBSException {
User user = model.getUser();
user.setFace(model.getFace());
user.save();
}
public void editPassword(EidtPasswordModel model) throws BBSException {
User user = model.getUser();
if (!user.getPassword().equals(Util.hash(model.getOldPassword()))) {
throw new BBSException(BBSExceptionMessage.OLD_PASSWORD_INVALID);
}
user.setPassword(Util.hash(model.getNewPassword()));
user.save();
}
public void resetPassword(EidtPasswordModel model) {
User user = model.getUser();
user.setPassword(Util.hash("123456"));
user.save();
}
public void editQuestion(EidtQuestionModel model) throws BBSException {
User user = model.getUser();
user.setQuestion(model.getQuestion());
user.setAnswer(StringUtils.isEmpty(model.getQuestion()) ? "" : Util
.hash(model.getAnswer()));
user.save();
}
public void editTitle(EidtTitleModel model) throws BBSException {
User user = model.getUser();
// 扣XDB
if (!user.getUserGroup().isEditTitleFree()) {
if (!user.canPayFor(1000)) {
throw new BBSException(BBSExceptionMessage.OUT_OF_MONEY);
}
user.payFor(1000);// 扣XDB
}
user.setTitle((model.getTitle()));
user.save();
}
public User getUser(int id) throws BBSException {
try {
return User.get(id);
} catch (ObjectNotFoundException e) {
log.debug("没有找到用户,id:" + id);
throw new BBSException(BBSExceptionMessage.USER_NOT_FOUND);
}
}
// 修改honor add daodaoyu
public Honor getHonor(int id) throws BBSException {
try {
return Honor.getHonorById(id);
} catch (ObjectNotFoundException e) {
log.debug("没有找到用户,id:" + id);
throw new BBSException(BBSExceptionMessage.USER_NOT_FOUND);
}
}
public User getUser(String nick) throws BBSException {
try {
return User.getByNick(nick);
} catch (ObjectNotFoundException e) {
log.debug("没有找到用户,昵称:" + nick);
throw new BBSException(BBSExceptionMessage.USER_NOT_FOUND);
}
}
public List<OnlineUser> getOnlineUsers(int type, Pagination pagination) {
return OnlineUser.getOnlineUsers(pagination);
}
public List<OnlineUser> getOnlineForumUsers(int type, int forum_id,
Pagination pagination) {
return OnlineUser.getOnlineForumUsers(forum_id, pagination);
}
public List<UserGroup> getGroups(int groupTypeId) {
return GroupManager.getGroups(groupTypeId);
}
public void getUsers(GetUsersModel model) {
}
public List<User> getUsers(int type, Pagination pagination) {
boolean index = pagination != null;
if (pagination == null) {
// 十大排行榜
pagination = new Pagination();
pagination.setPage(1);
pagination.setPageSize(10);
} else {
pagination.setPageSize(20);
pagination.setRecordSize(User.getNumberOfUsers());
}
switch (type) {
case 1: // 按经验排序
if (index)
return User.getUsersOrderByExp(pagination);
else
return BBSCache.getExpUserCache();
case 2: // 按西大币排序
if (index)
return User.getUsersOrderByMoney(pagination);
return BBSCache.getMoneyUserCache();
case 3: // 按发表主题数排序
if (index)
return User.getUsersOrderByTopic(pagination);
return BBSCache.getTopicUserCache();
case 4: // 按发表回复数排序
if (index)
return User.getUsersOrderByReply(pagination);
return BBSCache.getReplyUserCache();
case 5: // 按发表精华数排序
if (index)
return User.getUsersOrderByGood(pagination);
return BBSCache.getGoodUserCache();
case 6:
if (index)
return User.getLastWeekMostActiveUsers(pagination);
return User.getLastWeekMostActiveUsers(pagination);
// return BBSCache.getExpUserCache();
default: // 按加入时间排序
return User.getUsersOrderByTime(pagination);
}
}
public void getUsers(UsersManageModel model) {
model.setUsers(User.getUsers(model.getPagination()));
}
public void getNormalUsers(UsersManageModel model) {
model.setUsers(User.getUsersByAccoutStatusType(
Constants.ACCOUNT_STATUS_NORMAL, model.getPagination()));
}
public void getWaitForApproachUsers(UsersManageModel model) {
model.setUsers(User.getUsersByAccoutStatusType(
Constants.ACCOUNT_STATUS_WAIT, model.getPagination()));
}
public void getLastRegisterUsers(UsersManageModel model) {
model.setUsers(User.getLastRegisterUsers(model.getStart(),
model.getEnd(), model.getPagination()));
}
public void getRegisterUsersToday(UsersManageModel model) {
model.setUsers(User.getRegisterUsersToday(model.getPagination()));
}
public void editUser(UsersManageModel model) throws BBSException,
ValidationException {
User user = getUser(model.getId());
user.setAccountStatus(model.getAccountStatus());
// user.setAnswer(model.getAnswer());
// user.setBadboy(model.getBadboy());
user.setBirthday(model.getBirthday());
user.setCurrentPower(model.getCurrentPower());
user.setEmail(model.getEmail());
user.setExp(model.getExp());
user.setFace(model.getFace());
// user.setGold(model.getGold());
user.setGroupId(model.getGroupId());
user.setGroupTypeId(model.getGroupTypeId());
user.setHomepage(model.getHomepage());
user.setHonor(model.getHonor());
user.setIdcode(model.getIdcode());
user.setIdiograph(model.getIdiograph());
user.setLastLoginTime(model.getLastLoginTime());
user.setLoginTimes(model.getLoginTimes());
user.setLoginmt(model.getLoginmt());
user.setMoney(model.getMoney());
user.setNick(model.getNick());
user.setNumberOfGood(model.getNumberOfGood());
user.setNumberOfReply(model.getNumberOfReply());
user.setNumberOfTopic(model.getNumberOfTopic());
if (!user.getPassword().equals(model.getPassword())) {
user.setPassword(Util.hash(model.getPassword()));
}
user.setQq(model.getQq());
// user.setQuestion(model.getQuestion());
user.setRegisterTime(model.getRegisterTime());
// user.setRegisterType(model.getRegisterType());
// user.setRemark(model.getRemark());
// user.setStudentid(model.getStudentid());
user.setTel(model.getTel());
user.setTitle(model.getTitle());
user.setTrueName(model.getTrueName());
// user.setUnits(model.getUnits());
// user.setUsername(model.getUsername());
// user.setConfrere(model.isConfrere());
user.setSex(model.isSex());
// 修改honor modify daodaoyu
List<Honor> honors = new LinkedList<Honor>();
if (model.getHonor() != null) {
String[] ids = model.getHonor().split(", ");
if (ids.length > 0) {
for (int i = 0; i < ids.length; i++) {
System.out.println(ids[i]);
honors.add(getHonor(Integer.parseInt(ids[i])));
}
}
user.setHonors(honors);
}
if (model.getHonor() == null) {
user.setHonors(null);
}
user.save();
}
public void searchUsers(GetUsersModel model) throws Exception {
List<User> users = null;
if (model.getType() == 0) {
int[] ids = { Integer.parseInt(model.getKeywords()) };
users = User.getUsers(ids, model.getPagination());
} else if (model.getType() == 1) {
users = User.getUsersByNick(model.getKeywords(),
model.getPagination());
} else if (model.getType() == 2) {
users = User.getUsersByUsername(model.getKeywords(),
model.getPagination());
} else if (model.getType() == 3) {
users = User.getUsersByStudentid(model.getKeywords(),
model.getPagination());
} else {
throw new BBSException();
}
model.setUsers(users);
}
public void getWebMasters(WebMastersManageModel model) {
List<User> users = null;
String searchType = model.getType();
if (searchType == null)
users = User
.getUsersByGroupType(GroupManager.FORUM_WEBMASTER_GROUP);
else if (searchType.equals("exp"))
users = User
.getUsersByGroupTypeSortByExp(GroupManager.FORUM_WEBMASTER_GROUP);
else if (searchType.equals("money"))
users = User
.getUsersByGroupTypeSortByMoney(GroupManager.FORUM_WEBMASTER_GROUP);
else if (searchType.equals("topics"))
users = User
.getUsersByGroupTypeSortByTopics(GroupManager.FORUM_WEBMASTER_GROUP);
else if (searchType.equals("replys"))
users = User
.getUsersByGroupTypeSortByReplys(GroupManager.FORUM_WEBMASTER_GROUP);
else if (searchType.equals("goods"))
users = User
.getUsersByGroupTypeSortBygoods(GroupManager.FORUM_WEBMASTER_GROUP);
List<WebMasterModel> list = new ArrayList<WebMasterModel>();
for (int i = 0; i < users.size(); i++) {
WebMasterModel webmaster = new WebMasterModel();
webmaster.setUser(users.get(i));
// webmaster.setNumberOfGood(User.getNumberOfGoods(users.get(i),model.getSpan()));
// webmaster.setNumberOfTopic(User.getNumberOfTopics(users.get(i),model.getSpan()));
// webmaster.setNumberOfReply(User.getNumberOfReplys(users.get(i),model.getSpan()));
webmaster.setNumberOfManage(ManageLog.getLogNumberOfUser(users
.get(i)));
list.add(webmaster);
}
model.setWebmasters(list);
}
public int getMessageSizeNotRead(User user) {
return Message.getMessageSizeNotRead(user);
}
public void saveFavoriteTopic(UserFavoriteTopic model) {
User user = model.getUser();
List<Topic> favoriteTopics = user.getFavoriteTopics();
Topic topic = null;
try {
topic = Topic.get(model.getTopicId());
} catch (ObjectNotFoundException e) {
e.printStackTrace();
return;
}
if (favoriteTopics.contains(topic)) {
return;
}
favoriteTopics.add(topic);
user.setFavoriteTopics(favoriteTopics);
user.save();
}
public void delFavoriteTopic(UserFavoriteTopic model) {
User user = model.getUser();
List<Topic> favoriteTopics = user.getFavoriteTopics();
Topic topic = new Topic();
try {
topic = Topic.get(model.getTopicId());
} catch (ObjectNotFoundException e) {
e.printStackTrace();
}
favoriteTopics.remove(topic);
user.setFavoriteTopics(favoriteTopics);
user.save();
}
public void getFavoriteTopics(UserFavoriteTopic model) {
int pageSize = 15;
Pagination p = model.getPagination();
User user = model.getUser();
List<Topic> list = user.getFavoriteTopics();
p.setPageSize(pageSize);
p.setRecordSize(list.size());
int start = (p.getPage() - 1) * pageSize;
int end = p.getPage() * pageSize > list.size() ? list.size() : p
.getPage() * pageSize;
model.setList(list.subList(start, end));
}
public void getUser(UsersManageModel model) {
try {
User user = getUser(model.getId());
model.setExp(user.getExp());
model.setEmail(user.getEmail());
model.setGold(user.getGold());
model.setMoney(user.getMoney());
model.setRemark(user.getRemark());
model.setSex(user.isSex());
model.setNick(user.getNick());
model.setUsername(user.getUsername());
model.setRegisterTime(user.getRegisterTime());
model.setTrueName(user.getTrueName());
model.setIdcode(user.getIdcode());
model.setAccountStatus(user.getAccountStatus());
model.setRegisterType(user.getRegisterType());
} catch (BBSException e) {
e.printStackTrace();
}
}
public void verifyUser(UsersManageModel model) {
try {
User user = getUser(model.getId());
user.setAccountStatus(model.getAccountStatus());
user.setRemark(model.getRemark());
user.save();
} catch (BBSException e) {
e.printStackTrace();
}
}
public boolean isNickNameInUser(String nick) {
try {
System.out.println("====" + nick + "===");
User.getByNick(nick);
return true;
} catch (ObjectNotFoundException e) {
e.printStackTrace();
return false;
}
}
public boolean isUserNameInUser(String userName) {
try {
System.out.println("====" + userName + "===");
User.getByUsername(userName);
return true;
} catch (ObjectNotFoundException e) {
return false;
}
}
public void updateHonors() {
for (int i = 1; i <= 5; i++) {
updateHonorByType(i);
}
}
private void updateHonorByType(int i) {
List<User> tops = getUsers(i, null);
Honor honor = null;
try {
honor = Honor.getHonorById(i);
} catch (ObjectNotFoundException e) {
e.printStackTrace();
}
honor.setUsers(null);
honor.setUsers(tops);
}
public void freshWebMasters(WebMastersManageModel model) {
// 清除现在的候选列表
List<VoteWebMaster> voteWebMasters = VoteWebMaster.getWebMaster();
if (voteWebMasters.size() > 0) {
for (int i = 0; i < voteWebMasters.size(); i++) {
voteWebMasters.get(i).delete();
}
resetVote();
}
// 更换成现任斑竹列表,票数初始化为0
List<WebMasterModel> list = new ArrayList<WebMasterModel>();
List<User> webMasters = User
.getUsersByGroupType(GroupManager.FORUM_WEBMASTER_GROUP);
for (int i = 0; i < webMasters.size(); i++) {
User user = webMasters.get(i);
VoteWebMaster voteWebMaster = new VoteWebMaster();
voteWebMaster.setScore(0);
voteWebMaster.setUser(user);
voteWebMaster.setNick(user.getNick());
voteWebMaster.setForum_name(user.getManagingForums().get(0)
.getName());
voteWebMaster.save();
// WebMasterModel webMasterModel = new WebMasterModel();
// webMasterModel.setId(webMasters.get(i).getId());
// webMasterModel.setUserid(user.getId());
// webMasterModel.setNick(user.getNick());
// webMasterModel.setForum_name(user.getManagingForums().get(0).getName());
// list.add(webMasterModel);
}
model.setWebmasters(list);
}
public void getVoteWebMasters(WebMastersManageModel model) throws Exception {
try {
if (VoteWebMasterRecord.contain(model.getUser())) {
model.setVoteTarget(true);
}
} catch (Exception e1) {
e1.printStackTrace();
model.setVoteTarget(false);
}
List<WebMasterModel> list = new ArrayList<WebMasterModel>();
List<VoteWebMaster> webMasters = VoteWebMaster.getWebMaster();
for (int i = 0; i < webMasters.size(); i++) {
WebMasterModel webMasterModel = new WebMasterModel();
webMasterModel.setUser(webMasters.get(i).getUser());
webMasterModel.setId(webMasters.get(i).getId());
webMasterModel.setUserid(webMasters.get(i).getId());
webMasterModel.setNick(webMasters.get(i).getNick());
webMasterModel.setForum_name(webMasters.get(i).getForum_name());
webMasterModel.setScore(webMasters.get(i).getScore());
list.add(webMasterModel);
}
model.setWebmasters(list);
try {
model.setTotalNum(VoteWebMasterRecord.getNumberOfUser());
} catch (ObjectNotFoundException e) {
e.printStackTrace();
}
}
public void resetVote() {
// 投票记录清零
List<VoteWebMasterRecord> list = VoteWebMasterRecord.getRecords();
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
list.get(i).delete();
}
// 票数清零
List<VoteWebMaster> webMasters = VoteWebMaster.getWebMaster();
for (int i = 0; i < webMasters.size(); i++) {
webMasters.get(i).setScore(0);
}
}
}
public void deleteVoteWebMaster(WebMastersManageModel model) {
try {
VoteWebMaster.getById(model.getId()).delete();
} catch (ObjectNotFoundException e) {
e.printStackTrace();
}
}
public void addVoteWebMaster(WebMastersManageModel model) {
User user = null;
try {
user = User.getByNick(model.getUser().getNick());
VoteWebMaster voteWebMaster = new VoteWebMaster();
voteWebMaster.setUser(user);
voteWebMaster.setNick(model.getUser().getNick());
voteWebMaster.setForum_name(model.getForum_name());
voteWebMaster.setScore(0);
voteWebMaster.save();
} catch (ObjectNotFoundException e) {
e.printStackTrace();
}
}
public void VoteWebMasterDo(WebMastersManageModel model) throws Exception {
if (model.getUser().getExp() < 200) {
throw new BBSException(BBSExceptionMessage.UNVOTEABLE_EXP);
}
if (VoteWebMasterRecord.contain(model.getUser())) {
throw new BBSException(BBSExceptionMessage.UNVOTEABLE);
}
int[] options = model.getOptions();
for (int i = 0; i < options.length; i++) {
VoteWebMaster voteWebMaster;
voteWebMaster = VoteWebMaster.getByUserId(options[i]);
voteWebMaster.setScore(voteWebMaster.getScore() + 1);
voteWebMaster.update();
// 斑竹每得一票奖200xdb
voteWebMaster.getUser().addMoney(200);
}
VoteWebMasterRecord record = new VoteWebMasterRecord();
record.setUser(model.getUser());
record.save();
// 每投一票奖200xdb
model.getUser().addMoney(200);
model.setTotalNum(VoteWebMasterRecord.getNumberOfUser());
}
public void getCupOfLife(SaveCupOfLifeModel model) throws Exception {
model.setFootBallTeams(FootBallTeam.getFootBallTeams());
}
public void saveCupOfLife(SaveCupOfLifeModel model) throws BBSException,
ObjectNotFoundException {
FootBallTeam footballteam = new FootBallTeam();
List<FootBallTeam> fbts = new LinkedList<FootBallTeam>();
User user = model.getUser();
FootBallTeam.deleteFootBallTeam(user);
if (model.getId() > 0) {
footballteam = FootBallTeam.getFootBallTeamById(model.getId());
fbts.add(footballteam);
user.setFootBallTeams(fbts);
user.save();
}
}
public void myUpload(MyUploadModel model) throws BBSException {
System.out.println("aaaaaaaaaaaaaaaaaaaaa111111111111111111");
User user = getUser(model.getId());
if (model.getUser() == null) {
throw new BBSException(BBSExceptionMessage.NOT_LOGIN);
}
if (!model.getUser().equals(user)) {
throw new BBSException(BBSExceptionMessage.USER_UPLOAD_IS_OWS_ERROR);
}
model.setUploadItems(UploadItem.getMyUploadItem(model.getUser(),
model.getPagination()));
}
public void getUploadItems(MyUploadModel model) throws BBSException {
model.setUploadItems(UploadItem.getUploadItems(model.getPagination()));
}
public void searchUserUploadItems(MyUploadModel model) throws BBSException {
User user = getUser(model.getNick());
model.setUploadItems(UploadItem.getMyUploadItem(user,
model.getPagination()));
}
public boolean deleteUploadItems(MyUploadModel model) {
try {
UploadItem uploadItem = UploadItem.get(model.getId());
uploadItem.deleteFile();
uploadItem.delete();
return true;
} catch (ObjectNotFoundException e) {
e.printStackTrace();
return false;
}
}
public void selectUserLoginInfo(SelectUserInfoModel model) throws Exception {
if (model.getStartTime() == null || model.getStartTime().equals("")) {
model.setStartTime(TimerUtils.getDateByFormat(
Util.getDateAfterDay(-30), "yyyy-MM-dd"));
model.setEndTime(TimerUtils.getNowYMD("yyyy-MM-dd"));
}
if (model.getType() == 0) {
model.setUser(User.getUsersByGroupType(model.getGroupTypeId(),
model.getPagination()));
} else if (model.getType() == 1) {
model.getUser().add(User.getByUsername(model.getKeyWord()));
} else if (model.getType() == 2) {
model.getUser().add(User.getByNick(model.getKeyWord()));
}
Date start = TimerUtils.getDate(model.getStartTime(), "yyyy-MM-dd");
Date end = TimerUtils.getDate(model.getEndTime(), "yyyy-MM-dd");
for (User u : model.getUser()) {
u.setNumberOfReply(Topic.getTopicsSizeByReplyUser(u, start, end));
u.setNumberOfTopic(Topic.getTopicsSize(u, start, end));
u.setLoginTimes(UserLogonLog.getLoginCountByUser(u, start, end));
}
}
/**
* 用于每周更新最活跃榜单。
* @author longkai
* @since 2012-09-22
*/
public void updateLastWeekExp() {
UpdateLastWeekExp.updateLastWeekExp(Calendar.getInstance());
// 应网管部要求,暂时取消榜单的自动信息发送 @2012-12-19
// String nicks = UpdateLastWeekExp.updateLastWeekExp(Calendar.getInstance());
// if (nicks != null) {
// ItemComplimentAwayDoModel model = new ItemComplimentAwayDoModel();
// model.setItemId(8); // 8是加苦王老吉。。。
// try {
// model.setUser(User.get(4980)); // 4980是管理员01的user_id...
// } catch (Exception e) {
// e.printStackTrace();
// }
// model.setNick(nicks);
// model.setWish("恭喜您成为本周新星榜前十位,系统奖励您一份神秘礼物~,希望您再接再厉!^_^");
// try {
// sendSystemItems(model);
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
}
public List<TopThree> getTopThree(int type) {
return TopThree.getTopThrees(type, new Pagination());
}
public void addHits(boolean isLogin) {
Hits.addHits(isLogin);
}
/*
* public static void main(String[] args) { Pattern pattern =
* Pattern.compile("([a-zA-Z0-9_])*"); Matcher matcher =
* pattern.matcher("fsdfdsfds_"); if (matcher.matches()) {
* System.out.println(1); } else { System.out.println(0); } }
*/
}