package com.lst.lc.web.frontend.controller;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpSession;
import org.apache.http.HttpRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.lst.lc.dao.BlogDao;
import com.lst.lc.dao.LetterDao;
import com.lst.lc.dao.QuestionDao;
import com.lst.lc.dao.UserDao;
import com.lst.lc.entities.Admin;
import com.lst.lc.entities.Blog;
import com.lst.lc.entities.BlogComment;
import com.lst.lc.entities.Course;
import com.lst.lc.entities.Letter;
import com.lst.lc.entities.LetterId;
import com.lst.lc.entities.Question;
import com.lst.lc.entities.QuestionAnswer;
import com.lst.lc.entities.RelUserCourse;
import com.lst.lc.entities.User;
import com.lst.lc.hbase.model.IntegralRecord;
import com.lst.lc.hbase.service.IntegralRecordOperation;
import com.lst.lc.utils.DateUtils;
import com.lst.lc.utils.EncryptUtils;
import com.lst.lc.utils.MultipartFileUtils;
import com.lst.lc.web.bean.Info;
import com.lst.lc.web.bean.StatusMessage;
import com.lst.lc.web.service.BlogPageHandler;
import com.lst.lc.web.service.LogHandler;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private IntegralRecordOperation integralRecordOperation;
@Autowired
@Qualifier("userDao")
private UserDao userDao;
@Autowired
@Qualifier("letterDao")
private LetterDao letterDao;
@Autowired
@Qualifier("blogDao")
private BlogDao blogDao;
@Autowired
@Qualifier("questionDao")
private QuestionDao questionDao;
@Autowired
private LogHandler logHandler;
@Autowired
@Qualifier("blogPageHandler")
private BlogPageHandler blogPageHandler;
public UserController() {
super();
}
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(Model model) {
return "frontend/user/login";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
@ResponseBody
public StatusMessage login(HttpSession session, String email,
String password) throws Exception {
password = EncryptUtils.encryptMD5(password.getBytes());
User user = userDao.validateUser(email, password);
StatusMessage statusMessage;
String message = null;
if (user == null) {
message = "邮箱错误";
statusMessage = new StatusMessage(0, message);
} else if (user.getPassword().equals(password)) {
message = "登录成功";
session.setAttribute("loginUser", user);
statusMessage = new StatusMessage(1, message);
// 写进日志,积分加1
logHandler.toLog(user, "登录网站");
logHandler.updateIntegral(user.getUserId(), "login");
integralRecordOperation
.update(user.getEmail(), "login");
} else {
message = "密码错误";
statusMessage = new StatusMessage(0, message);
}
return statusMessage;
}
@RequestMapping(value = "/zone/{userId}", method = RequestMethod.GET)
public String index(Model model, @PathVariable int userId,
String pageNum, String pageSize, String type) {
User user = userDao.getById(userId);
model.addAttribute("user", user);
int pageNow = 1;
int pagesize = 10;
int sorttype = 1;
if (pageSize != null) {
pagesize = Integer.valueOf(pageSize);
}
if (pageSize != null) {
pageNow = Integer.valueOf(pageNum);
}
if (type != null) {
sorttype = Integer.valueOf(type);
}
model.addAttribute("page", blogPageHandler.getBlogs(pageNow,
pagesize, sorttype));
return "frontend/user/zone";
}
@RequestMapping(value = "/{userId}/center", method = RequestMethod.GET)
public String center(Model model, @PathVariable int userId,
HttpSession session) {
// User user = (User) session.getAttribute("loginUser");
// if(user == null){
// return "redirect:/course/courses";
// }else{
// user = userDao.getById(user.getUserId());
User user = userDao.getById(userId);
model.addAttribute("user", user);
Set<RelUserCourse> relUserCourses = user.getRelUserCourses();
Iterator<RelUserCourse> iterator = relUserCourses.iterator();
List<Course> courses = new ArrayList<Course>();
while (iterator.hasNext()) {
RelUserCourse relUserCourse = iterator.next();
Course course = relUserCourse.getCourse();
courses.add(course);
}
model.addAttribute("courses", courses);
List<Blog> blogs = blogDao.getBlogsOfUser(user.getUserId());
List<Question> questions = questionDao.getQuestionOfUser(user
.getUserId());
model.addAttribute("blogs", blogs);
model.addAttribute("questions", questions);
return "frontend/user/center";
}
@RequestMapping(value = "/{userId}/comment", method = RequestMethod.GET)
public String comment(Model model, @PathVariable int userId,
HttpSession session) {
User user = userDao.getById(userId);
model.addAttribute("user", user);
List<BlogComment> comments = new ArrayList<BlogComment>(
user.getBlogComments());
model.addAttribute("comments", comments);
model.addAttribute("center_module", "comment");
return "frontend/user/center";
}
@RequestMapping(value = "/{userId}/blog", method = RequestMethod.GET)
public String blog(Model model, @PathVariable int userId,
HttpSession session) {
User user = userDao.getById(userId);
model.addAttribute("user", user);
List<Blog> blogs = blogDao.getBlogsOfUser(userId);
model.addAttribute("blogs", blogs);
model.addAttribute("center_module", "blog");
return "frontend/user/center";
}
@RequestMapping(value = "/{userId}/course", method = RequestMethod.GET)
public String course(Model model, @PathVariable int userId,
HttpSession session) {
User user = userDao.getById(userId);
model.addAttribute("user", user);
Set<RelUserCourse> relUserCourses = user.getRelUserCourses();
Iterator<RelUserCourse> iterator = relUserCourses.iterator();
List<Course> courses = new ArrayList<Course>();
while (iterator.hasNext()) {
RelUserCourse relUserCourse = iterator.next();
Course course = relUserCourse.getCourse();
courses.add(course);
}
model.addAttribute("courses", courses);
model.addAttribute("center_module", "course");
return "frontend/user/center";
}
@RequestMapping(value = "/{userId}/ask", method = RequestMethod.GET)
public String ask(Model model, @PathVariable int userId,
HttpSession session) {
User user = userDao.getById(userId);
model.addAttribute("user", user);
List<Question> questions = questionDao.getQuestionOfUser(user
.getUserId());
model.addAttribute("questions", questions);
model.addAttribute("center_module", "ask");
return "frontend/user/center";
}
@RequestMapping(value = "/{userId}/answer", method = RequestMethod.GET)
public String answer(Model model, @PathVariable int userId,
HttpSession session) {
User user = userDao.getById(userId);
model.addAttribute("user", user);
List<QuestionAnswer> questionAnswers = new ArrayList<QuestionAnswer>(
user.getQuestionAnswers());
model.addAttribute("answers", questionAnswers);
model.addAttribute("center_module", "answer");
return "frontend/user/center";
}
@ResponseBody
@RequestMapping(value = "/register", method = RequestMethod.POST)
public StatusMessage register(String userName, String email,
String password, String captcha, HttpSession session)
throws Exception {
StatusMessage statusMessage;
String message = null;
// 先判断邮箱是否已经被注册
if (userDao.ifEmailExisted(email)) {
message = "该邮箱已被注册";
statusMessage = new StatusMessage(0, message);
}
// 判断验证码
else if (!captcha
.equals(session.getAttribute("validationCode"))) {
message = "验证码错误";
statusMessage = new StatusMessage(0, message);
} else {
User user = new User(userName, email,
EncryptUtils.encryptMD5(password
.getBytes()), "未知", 10,
"菜鸟", "", "user");
userDao.addUser(user);
message = "注册成功,您已登录";
statusMessage = new StatusMessage(1, message);
session.setAttribute("loginUser", user);
}
return statusMessage;
}
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logout(HttpSession session,
RedirectAttributes redirectAttributes) {
redirectAttributes.addFlashAttribute("logoutMsg", "退出成功");
session.removeAttribute("loginUser");
return "redirect:/index";
}
@RequestMapping(value = "/completeInfo", method = RequestMethod.GET)
public String completeInfo(Model model, HttpSession session) {
User user = (User) session.getAttribute("loginUser");
model.addAttribute("user", user);
return "frontend/user/complete";
}
@RequestMapping(value = "/completeInfo", method = RequestMethod.POST)
public String complete(Model model, HttpSession session, String gender,
MultipartFile avatar, String motto, String city,
RedirectAttributes redirectAttributes) {
User user = (User) session.getAttribute("loginUser");
String avatarPath = "/opt/LearningCommunity/avatar";
String avatarUrl = MultipartFileUtils.saveFile(avatar,
avatarPath);
userDao.update(user.getUserId(), gender, avatarUrl, motto, city);
redirectAttributes.addFlashAttribute("userMsg", "信息完善成功");
return "redirect:/course/courses";
}
@RequestMapping(value = "/addFriend/{uid}", method = RequestMethod.GET)
public String addFriend(Model model, HttpSession session,
@PathVariable int uid,
RedirectAttributes redirectAttributes,
HttpRequest request) {
User user = (User) session.getAttribute("loginUser");
model.addAttribute("user", user);
String message = null;
if (!userDao.ifFriend(user.getUserId(), uid)) {
userDao.addRel(user.getUserId(), uid);
message = "好友请求已发送";
} else {
message = "你们已经是好友";
}
redirectAttributes.addFlashAttribute("userMsg", message);
return "redirect:/user/notification/letter";
}
/**
*
* @param model
* @param session
* @param state
* 为0表示拒绝,其他为同意
* @param uid
* 对方的id
* @return
*/
@RequestMapping(value = "/validateFriend/{uid}/{state}", method = RequestMethod.GET)
public String validateFriend(Model model, HttpSession session,
@PathVariable int state, @PathVariable int uid) {
User user = (User) session.getAttribute("loginUser");
model.addAttribute("user", user);
if (state != 0) {
userDao.validateFriend(uid, user.getUserId(), 1);
}
return "redirect:/user/notification/friends";
}
@RequestMapping(value = "/friends", method = RequestMethod.GET)
public String friends(Model model, HttpSession session) {
User user = (User) session.getAttribute("loginUser");
model.addAttribute("user", user);
List<User> friends = userDao.getFriends(user.getUserId());
model.addAttribute("friends", friends);
return "frontend/user/center";
}
@RequestMapping(value = "/notification/letter", method = RequestMethod.GET)
public String notificationLetter(Model model, HttpSession session) {
User user = (User) session.getAttribute("loginUser");
List<Letter> letters = letterDao.getAll(user.getUserId());
model.addAttribute("letters", letters);
if (letters.size() > 0) {
for (int i = 0; i < letters.size(); i++) {
Letter letter = letters.get(i);
letterDao.updateState(letter.getId()
.getFromUid(), letter.getId()
.getToUid(), letter.getId()
.getTime(), 1);
}
}
session.removeAttribute("notify_letters");
model.addAttribute("notify_module", "message");
return "frontend/notify/index";
}
@RequestMapping(value = "/notification/friends", method = RequestMethod.GET)
public String notification(Model model, HttpSession session) {
User user = (User) session.getAttribute("loginUser");
model.addAttribute("user", user);
List<User> friends = userDao.getValidateFriends(user
.getUserId());
model.addAttribute("friends", friends);
model.addAttribute("notify_module", "friendApplication");
session.removeAttribute("notify_friends");
return "frontend/notify/index";
}
// @RequestMapping(value = "/read/{uid}/{time}", method = RequestMethod.GET)
// public String read(Model model, HttpSession session,
// @PathVariable int uid, @PathVariable String time)
// throws Exception {
// User user = (User) session.getAttribute("loginUser");
// System.out.println(time);
// letterDao.updateState(uid, user.getUserId(), time, 1);
// return "frontend/user/login";
// }
@RequestMapping(value = "/notification/write", method = RequestMethod.GET)
public String addLetter(Model model, HttpSession session) {
User user = (User) session.getAttribute("loginUser");
List<User> friends = userDao.getFriends(user.getUserId());
model.addAttribute("friends", friends);
model.addAttribute("notify_module", "writeLetter");
return "frontend/notify/index";
}
@RequestMapping(value = "/notification/write", method = RequestMethod.POST)
public String addLetter(Model model, HttpSession session, int uid,
String content) {
User user = (User) session.getAttribute("loginUser");
User toUser = userDao.getById(uid);
LetterId id = new LetterId(user.getUserId(), uid,
DateUtils.getDateString(new Date()));
Letter letter = new Letter(id, toUser, user, content, 0);
letterDao.add(letter);
return "redirect:/user/notification/write";
}
@RequestMapping(value = "/record/{userId}", method = RequestMethod.GET)
@ResponseBody
public List<IntegralRecord> record(Model model, HttpSession session,
@PathVariable int userId) {
int day = 54;
User user = userDao.getById(userId);
List<IntegralRecord> records = integralRecordOperation
.getRecent(user.getEmail(), day);
return records;
}
@RequestMapping(value = "/tags/{userId}", method = RequestMethod.GET)
@ResponseBody
public List<Map.Entry<String, Integer>> tags(Model model, HttpSession session,@PathVariable int userId ) {
return userDao.getTags(userId);
}
}