package com.ourlinc.helloworld.controller;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ourlinc.helloworld.EmailConfig;
import com.ourlinc.helloworld.EmailTemplates;
import com.ourlinc.helloworld.model.Activity;
import com.ourlinc.helloworld.model.Comment;
import com.ourlinc.helloworld.model.Mail;
import com.ourlinc.helloworld.model.User;
import com.ourlinc.helloworld.service.ActivityService;
import com.ourlinc.helloworld.service.UserService;
import com.ourlinc.helloworld.util.WebUtils;
import com.ourlinc.swift.util.Misc;
import com.ourlinc.swift.util.ResultPage;
@Controller
public class ActivityController {
@Resource(name = "userService")
private UserService m_UserService;
@Resource(name = "activityService")
private ActivityService m_ActivityService;
/**
* 主页
*
* @param request
* @return
* @throws Exception
*/
@RequestMapping
String index(HttpServletRequest request) throws Exception {
ResultPage<Activity> rp = m_ActivityService.listBefore();
rp.setPageSize(20);
String p = request.getParameter("p");
int intp = WebUtils.toInt(p);
rp.gotoPage(intp);
request.setAttribute("list", rp);
request.setAttribute("act", "listNow");
return "activity/index";
}
/**
* 列出已结束活动
*
* @param request
* @return
*/
@RequestMapping
String listover(HttpServletRequest request) {
ResultPage<Activity> rp = m_ActivityService.listAfter();
rp.setPageSize(20);
String p = request.getParameter("p");
int intp = WebUtils.toInt(p);
rp.gotoPage(intp);
request.setAttribute("list", rp);
request.setAttribute("act", "listOver");
return "activity/index";
}
/**
* 列出已取消活动
*
* @param request
* @return
*/
@RequestMapping
String listcancel(HttpServletRequest request) {
ResultPage<Activity> rp = m_ActivityService.listCancel();
rp.setPageSize(20);
String p = request.getParameter("p");
int intp = WebUtils.toInt(p);
rp.gotoPage(intp);
request.setAttribute("list", rp);
request.setAttribute("act", "listCancel");
return "activity/index";
}
/**
* 取消活动
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping
String cancel(HttpServletRequest request, HttpServletResponse response)
throws IOException {
String actId = request.getParameter("actId");
Activity act = m_ActivityService.getActivity(actId);
if (null == act) {
request.setAttribute("errorMsg", "找不到id=" + actId + "的活动");
return "error";
}
act.cancel();
act.flush();
response.sendRedirect("sendemail.jspx?op=cancel&actId="
+ Misc.encodeUrl(act.getId()));
return null;
}
// /**
// * 删除活动
// *
// * @param request
// * @return
// */
// @RequestMapping
// String delete(HttpServletRequest request) {
// String actId = request.getParameter("id");
// if (null == actId || "".equals(actId)) {
// return "activity/index";
// }
// Activity act = m_ActivityService.getActivity(actId);
// if (null == act) {
// return "activity/index";
// }
// m_ActivityService.deleteActivity(actId);
// return "activity/index";
// }
/**
* 搜索活动
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping
String search(HttpServletRequest request, HttpServletResponse response)
throws IOException {
String name = request.getParameter("name");
String year = request.getParameter("year");
String month = request.getParameter("month");
if (null == name || null == year || null == month) {
return "activity/search";
}
int intYear = 0;
int intMonth = 0;
try {
intYear = Integer.parseInt(year.trim());
} catch (NumberFormatException e) {
}
try {
intMonth = Integer.parseInt(month.trim());
} catch (NumberFormatException e) {
}
String condition = "活动名称=" + name + ",年份=" + intYear + ",月份="
+ intMonth;
ResultPage<Activity> rp = m_ActivityService.searchActivity(name,
intYear, intMonth);
String p = request.getParameter("p");
int intp = WebUtils.toInt(p);
rp.setPageSize(20);
rp.gotoPage(intp);
request.setAttribute("list", rp);
request.setAttribute("name", URLEncoder.encode(name, "utf-8"));
request.setAttribute("year", URLEncoder.encode(year, "utf-8"));
request.setAttribute("month", URLEncoder.encode(month, "utf-8"));
request.setAttribute("condition", condition);
return "activity/search";
}
/**
* 发布活动
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping
String addact(HttpServletRequest request, HttpServletResponse response)
throws IOException {
String title = request.getParameter("title");
String time = request.getParameter("time");
String place = request.getParameter("place");
String content = request.getParameter("content");
String startDate = request.getParameter("startDate");
String overDate = request.getParameter("overDate");
String note = request.getParameter("note");
if (null == title || null == time || null == place || null == content
|| null == startDate || null == overDate) {
return "activity/addact";
}
Date dTime = WebUtils.strFormatDateAndTime(time);
// 报名开始时间不填表示用现在作为开始时间
Date dStartDate = ("".equals(startDate)) ? WebUtils.getClearDate()
: WebUtils.strFormatDateAndTime(startDate);
Date dOverDate = WebUtils.strFormatDateAndTime(overDate);
// 截止时间必须在现在时间之后
if (new Date().after(dOverDate)) {
request.setAttribute("errorMsg", "截止时间必须在现在时间之后");
request.setAttribute("title", title);
request.setAttribute("time", time);
request.setAttribute("place", place);
request.setAttribute("content", content);
request.setAttribute("startDate", startDate);
request.setAttribute("overDate", overDate);
request.setAttribute("note", note);
return "activity/addact";
}
// 报名时间必须在截止时间之前
if (dStartDate.after(dOverDate)) {
request.setAttribute("errorMsg", "报名时间必须在截止时间之前");
request.setAttribute("title", title);
request.setAttribute("time", time);
request.setAttribute("place", place);
request.setAttribute("content", content);
request.setAttribute("startDate", startDate);
request.setAttribute("overDate", overDate);
request.setAttribute("note", note);
return "activity/addact";
}
// 活动时间必须在截止之后
if (dTime.before(dOverDate)) {
request.setAttribute("errorMsg", "活动时间必须在截止时间之后");
request.setAttribute("title", title);
request.setAttribute("time", time);
request.setAttribute("place", place);
request.setAttribute("content", content);
request.setAttribute("startDate", startDate);
request.setAttribute("overDate", overDate);
request.setAttribute("note", note);
return "activity/addact";
}
// 发布活动
Activity act = m_ActivityService.addActivity(title, dTime, place,
content, dStartDate, dOverDate, note);
act.flush();
// 把人员添加到活动中
ResultPage<User> rp = m_UserService.listUser();
rp.setPageSize(1000);
rp.gotoPage(1);
for (User u : rp) {
u.joinActivity(act);
u.flush();
}
// 重定向防止重复提交
response.sendRedirect("sendemail.jspx?op=add&actId="
+ Misc.encodeUrl(act.getId()));
return null;
}
/**
* 发送邮件
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping
String sendemail(HttpServletRequest request, HttpServletResponse response)
throws IOException {
User user = (User) request.getSession().getAttribute("userLogin");
String email = request.getParameter("email");
String password = request.getParameter("password");
String actId = request.getParameter("actId");
String op = request.getParameter("op");
String[] toAddresses = request.getParameterValues("toAddresses");
String smtpHost = EmailConfig.getValue("smtpHost");
String needAuth = EmailConfig.getValue("needAuth");
ResultPage<User> rp = m_UserService.listUser();
rp.setPageSize(1000);
rp.gotoPage(1);
Activity act = m_ActivityService.getActivity(actId);
// 返回页面
if (WebUtils.isEmptyString(email) || null == act) {
request.setAttribute("actMsg", (null == act) ? "找不到该活动!" : "操作成功!");
request.setAttribute("email", user.getEmail());
request.setAttribute("actId", actId);
request.setAttribute("list", rp);
request.setAttribute("op", op);
request.setAttribute("smtpHost", smtpHost);
request.setAttribute("needAuth", needAuth);
return "activity/sendemail";
}
// 发送邮件
boolean flag = false;
Mail mail = new Mail(email, password);
try {
if ("add".equals(op)) {
mail.send(email, toAddresses, null, "活动通知", EmailTemplates
.buildAddContent(act.getTime(), act.getTitle(), act
.getId()));
} else if ("edit".equals(op)) {
mail.send(email, toAddresses, null, "活动修改通知", EmailTemplates
.buildEditContent(act.getTime(), act.getTitle(),
EmailConfig.getValue("editContent"), act
.getId()));
} else if ("cancel".equals(op)) {
mail.send(email, toAddresses, null, "活动取消通知", EmailTemplates
.buildCancelContent(act.getTime(), act.getTitle()));
}
flag = true;
} catch (Exception e) {
e.printStackTrace();
}
// 发送邮件失败
if (!flag) {
request.setAttribute("actMsg", "发送邮件失败!");
request.setAttribute("email", user.getEmail());
request.setAttribute("actId", actId);
request.setAttribute("list", rp);
request.setAttribute("op", op);
request.setAttribute("smtpHost", smtpHost);
request.setAttribute("needAuth", needAuth);
return "activity/sendemail";
}
response.sendRedirect("/activity/index.jspx");
return null;
}
/**
* ajax修改email配置文件
*
* @param request
* @param repsonse
* @return
* @throws IOException
*/
@RequestMapping
String editpro_aj(HttpServletRequest request, HttpServletResponse repsonse)
throws IOException {
String op = WebUtils.toString(request.getParameter("op"));
String value = WebUtils.toString(request.getParameter("value").trim()
.toLowerCase());
boolean flag = true;
try {
if ("smtp".equals(op)) {
EmailConfig.updateProperties("smtpHost", value);
} else if ("auth".equals(op)) {
EmailConfig.updateProperties("needAuth", value);
}
} catch (Exception e) {
flag = false;
}
repsonse.setContentType("text/plain;charset=UTF-8");
repsonse.setHeader("Cache-Control", "no-cache");
if (flag) {
repsonse.getWriter().write(value);
} else {
repsonse.getWriter().write("发生错误");
}
return null;
}
/**
* 发表评论
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping
String postcomment(HttpServletRequest request, HttpServletResponse response)
throws IOException {
User user = (User) request.getSession().getAttribute("userLogin");
String actId = request.getParameter("actId");
String content = request.getParameter("content");
Activity act = m_ActivityService.getActivity(actId);
if (null == act || null == content) {
request.setAttribute("errorMsg", "找不到id=" + actId + "的活动");
return "error";
}
content = Misc.escapeHTML(content);
Comment com = act.postComment(user, content);
com.flush();
response.sendRedirect("../activity/activity.jspx?actId="
+ URLEncoder.encode(actId, "utf-8"));
return null;
}
/**
* 删除评论
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping
String deletecomment(HttpServletRequest request,
HttpServletResponse response) throws IOException {
String actId = request.getParameter("actId");
String comId = request.getParameter("comId");
Comment com = m_ActivityService.getComment(comId);
if (null == actId) {
request.setAttribute("errorMsg", "找不到id=" + actId + "的活动");
return "error";
}
if (null == com) {
request.setAttribute("errorMsg", "找不到id=" + comId + "的评论");
return "error";
}
com.delete();
com.flush();
response.sendRedirect("../activity/activity.jspx?actId="
+ URLEncoder.encode(actId, "utf-8"));
return null;
}
/**
* 修改活动
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping
String editact(HttpServletRequest request, HttpServletResponse response)
throws IOException {
String title = request.getParameter("title");
String time = request.getParameter("time");
String place = request.getParameter("place");
String content = request.getParameter("content");
String startDate = request.getParameter("startDate");
String overDate = request.getParameter("overDate");
String note = request.getParameter("note");
String actId = request.getParameter("actId");
Activity act = m_ActivityService.getActivity(actId);
if (null == act) {
request.setAttribute("errorMsg", "找不到id=" + actId + "的活动");
return "error";
}
List<User> userList = act.getMembers();
if (null == title || null == time || null == place || null == content
|| null == startDate || null == overDate) {
request.setAttribute("activity", act);
request.setAttribute("userList", userList);
return "activity/editact";
}
Date dTime = WebUtils.strFormatDateAndTime(time);
// 报名开始时间不填表示用现在作为开始时间
Date dStartDate = ("".equals(startDate)) ? WebUtils.getClearDate()
: WebUtils.strFormatDateAndTime(startDate);
Date dOverDate = WebUtils.strFormatDateAndTime(overDate);
// 截止时间必须在现在时间之后
if (new Date().after(dOverDate)) {
request.setAttribute("activity", act);
request.setAttribute("userList", userList);
request.setAttribute("errorMsg", "截止时间必须在现在时间之后");
return "activity/editact";
}
// 报名时间必须在截止时间之前
if (dStartDate.after(dOverDate)) {
request.setAttribute("activity", act);
request.setAttribute("userList", userList);
request.setAttribute("errorMsg", "报名时间必须在截止时间之前");
return "activity/editact";
}
// 活动时间必须在截止之后
if (dTime.before(dOverDate)) {
request.setAttribute("activity", act);
request.setAttribute("userList", userList);
request.setAttribute("errorMsg", "活动时间必须在截止时间之后");
return "activity/editact";
}
// 找出修改了的地方
List<String> diff = findDifferent(act, title, dTime, place, content,
note, dStartDate, dOverDate);
if (diff.size() > 0) {
String diff0 = listToStr(diff);
// EmailUtils eu = new EmailUtils(act);
// eu.setDifferent(diff);
// System.out.print(diff0);
act.edit(title, dTime, place, content, note, dStartDate, dOverDate);
act.flush();
// 把修改的内容记到文件吧
try {
EmailConfig.updateProperties("editContent", diff0);
} catch (Exception e) {
e.printStackTrace();
}
response.sendRedirect("sendemail.jspx?op=edit&actId="
+ Misc.encodeUrl(act.getId()));
return null;
}
response.sendRedirect("index.jspx");
return null;
}
/**
* 查看某活动
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping
String activity(HttpServletRequest request, HttpServletResponse response)
throws IOException {
String actId = request.getParameter("actId");
Activity act = m_ActivityService.getActivity(actId);
if (null == act) {
request.setAttribute("errorMsg", "找不到id=" + actId + "的活动");
return "error";
}
List<User> userList = act.getMembers();
ResultPage<Comment> rp2 = m_ActivityService.listComment(actId);
rp2.setPageSize(20);
rp2.gotoPage(1);
request.setAttribute("userList", userList);
request.setAttribute("commentList", rp2);
request.setAttribute("activity", act);
return "activity/activity";
}
/**
* 增删参加活动的人员
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping
String adddeleteuser(HttpServletRequest request,
HttpServletResponse response) throws IOException {
String p = request.getParameter("p");
String actId = request.getParameter("actId");
String op = request.getParameter("op");
String id = request.getParameter("id");
String condition = request.getParameter("condition");
String inputText = WebUtils.toString(request.getParameter("inputText"))
.trim();
Activity act = m_ActivityService.getActivity(actId);
if (null == act) {
request.setAttribute("errorMsg", "找不到id=" + actId + "的活动");
return "error";
}
if ("add".equals(op)) {// 增加用户
List<User> users = new ArrayList<User>();// 解决重名问题的策略:全加了
if ("email".equals(condition)) {
User dUser = m_UserService.getUserByEmail(inputText
.toLowerCase());
if (null != dUser) {
users.add(dUser);
}
} else if ("username".equals(condition)) {
users = m_UserService.getUserByUsername(inputText);
}
// 找不到人
if (0 == users.size()) {
request.setAttribute("errorMsg", "找不到" + condition + "为 "
+ inputText + " 人员");
return "error";
}
// 这个活动能不能参加
if (!act.canEditByAdmin()) {
request.setAttribute("errorMsg", condition + "为 " + inputText
+ " 人员不能参加这个活动");
return "error";
}
// 帮用户参加活动
for (User u : users) {
u.joinActivity(act);
u.flush();
}
} else if ("delete".equals(op)) {// 删除用户
User dUser = m_UserService.getUser(id);
if (null != dUser) {
dUser.cancelActivity(act);
dUser.flush();
}
}
List<User> u = act.getMembers();
ResultPage<User> rp = ResultPage.OnList.wrap(u);
rp.setPageSize(20);
int intp = WebUtils.toInt(p);
rp.gotoPage(intp);
request.setAttribute("activity", act);
request.setAttribute("list", rp);
return "activity/adddeleteuser";
}
private List<String> findDifferent(Activity oldAct, String title,
Date dTime, String place, String content, String note,
Date dStartDate, Date dOverDate) {
List<String> result = new ArrayList<String>();
if (!oldAct.getTitle().equals(title)) {
result.add("原来标题" + oldAct.getTitle() + ",修改为" + title + "");
}
if (!oldAct.getTime().equals(dTime)) {
result.add("原来活动时间" + oldAct.getTimeString() + ",修改为 "
+ WebUtils.dateAndTimeFormatToStr(dTime));
}
if (!oldAct.getPlace().equals(place)) {
result.add("原来活动地点" + oldAct.getPlace() + ",修改为" + place);
}
if (!oldAct.getContent().equals(content)) {
result.add("原来活动内容" + oldAct.getContent() + ",修改为" + content);
}
if (!oldAct.getStartDate().equals(dStartDate)
|| !oldAct.getOverDate().equals(dOverDate)) {
result.add("原来报名时间" + oldAct.getStartDateString() + "——"
+ oldAct.getOverDateString() + ",修改为"
+ WebUtils.dateAndTimeFormatToStr(dStartDate) + "——"
+ WebUtils.dateAndTimeFormatToStr(dOverDate));
}
return result;
}
private String listToStr(List<String> list) {
StringBuilder sb = new StringBuilder();
if (null != list) {
for (int i = 0; i < list.size(); i++) {
sb.append((i + 1) + "、");
sb.append(list.get(i));
sb.append('。');
sb.append("<br/>");
}
}
return sb.toString();
}
}