package com.ourlinc.activity.web;
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.activity.EmailConfig;
import com.ourlinc.activity.EmailTemplates;
import com.ourlinc.activity.Mail;
import com.ourlinc.activity.Page;
import com.ourlinc.activity.WebUtils;
import com.ourlinc.activity.domain.Activity;
import com.ourlinc.activity.domain.Comment;
import com.ourlinc.activity.domain.User;
import com.ourlinc.activity.service.IActivityService;
import com.ourlinc.activity.service.IUserService;
@Controller
@RequestMapping(value = "/activity")
public class ActivityController {
@Resource
private IUserService userService;
@Resource
private IActivityService activityService;
/**
* 主页
*
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value = "/index.jspx")
String index(HttpServletRequest request) throws Exception {
String p = request.getParameter("p");
int intp = WebUtils.toInt(p);
Page rp = activityService.listActApply(intp);
System.out.println("xxx");
request.setAttribute("list", rp);
request.setAttribute("act", "listNow");
return "activity/index";
}
/**
* 列出已结束活动
*
* @param request
* @return
*/
@RequestMapping(value = "/listover.jspx")
String listover(HttpServletRequest request) {
String p = request.getParameter("p");
int intp = WebUtils.toInt(p);
Page rp = activityService.listActDone(intp);
request.setAttribute("list", rp);
request.setAttribute("act", "listOver");
return "activity/index";
}
/**
* 列出已取消活动
*
* @param request
* @return
*/
@RequestMapping(value = "/listcancel.jspx")
String listcancel(HttpServletRequest request) {
String p = request.getParameter("p");
int intp = WebUtils.toInt(p);
Page rp = activityService.listActCancel(intp);
request.setAttribute("list", rp);
request.setAttribute("act", "listCancel");
return "activity/index";
}
/**
* 取消活动
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping(value = "/cancel.jspx")
String cancel(HttpServletRequest request, HttpServletResponse response)
throws IOException {
String actId = request.getParameter("actId");
Activity act = activityService.getActivity(Integer.valueOf(actId));
if (null == act) {
request.setAttribute("errorMsg", "找不到id=" + actId + "的活动");
return "error";
}
activityService.cancelActivity(act.getId());
response.sendRedirect("sendemail.jspx?op=cancel&actId="
+ WebUtils.encodeUrl(String.valueOf(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(value = "/search.jspx")
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;
String p = request.getParameter("p");
int intp = WebUtils.toInt(p);
Page rp = activityService.searchActivity(name, intYear, intMonth, 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(value = "/addact.jspx")
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 = new Activity();
act.setTitle(title);
act.setTime(dTime);
act.setPlace(place);
act.setContent(content);
act.setStartTime(dStartDate);
act.setOverTime(dOverDate);
act.setNote(note);
activityService.addActivity(act);
// 把人员添加到活动中
Page rp = userService.listAllUser(1);
for (User u : (List<User>) rp.getData()) {
userService.joinActivity(u.getId(), act.getId());
}
// 重定向防止重复提交
response.sendRedirect("sendemail.jspx?op=add&actId="
+ WebUtils.encodeUrl(String.valueOf(act.getId())));
return null;
}
/**
* 发送邮件
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping(value = "/sendemail.jspx")
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");
Page rp = userService.listAllUser(1);
Activity act = activityService.getActivity(Integer.valueOf(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(value = "/editpro_aj.jspx")
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(value = "/postcomment.jspx")
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 = activityService.getActivity(Integer.valueOf(actId));
if (null == act || null == content) {
request.setAttribute("errorMsg", "找不到id=" + actId + "的活动");
return "error";
}
content = WebUtils.escapeHTML(content);
userService.postComment(user.getId(), act.getId(), content);
response.sendRedirect("../activity/activity.jspx?actId="
+ URLEncoder.encode(actId, "utf-8"));
return null;
}
/**
* 删除评论
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping(value = "/deletecomment.jspx")
String deletecomment(HttpServletRequest request,
HttpServletResponse response) throws IOException {
String actId = request.getParameter("actId");
String comId = request.getParameter("comId");
Comment com = activityService.getComment(Integer.valueOf(comId));
if (null == actId) {
request.setAttribute("errorMsg", "找不到id=" + actId + "的活动");
return "error";
}
if (null == com) {
request.setAttribute("errorMsg", "找不到id=" + comId + "的评论");
return "error";
}
activityService.deleteComment(com.getId());
response.sendRedirect("../activity/activity.jspx?actId="
+ URLEncoder.encode(actId, "utf-8"));
return null;
}
/**
* 修改活动
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping(value = "/editact.jspx")
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 = activityService.getActivity(Integer.valueOf(actId));
if (null == act) {
request.setAttribute("errorMsg", "找不到id=" + actId + "的活动");
return "error";
}
List<User> userList = activityService.getActMembers(act.getId());
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.setTitle(title);
act.setTime(dTime);
act.setPlace(place);
act.setContent(content);
act.setNote(note);
act.setStartTime(dStartDate);
act.setOverTime(dOverDate);
activityService.updateActivity(act);
// 把修改的内容记到文件吧
try {
EmailConfig.updateProperties("editContent", diff0);
} catch (Exception e) {
e.printStackTrace();
}
response.sendRedirect("sendemail.jspx?op=edit&actId="
+ WebUtils.encodeUrl(String.valueOf(act.getId())));
return null;
}
response.sendRedirect("index.jspx");
return null;
}
/**
* 查看某活动
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping(value = "/activity.jspx")
String activity(HttpServletRequest request, HttpServletResponse response)
throws IOException {
String actId = request.getParameter("actId");
Activity act = activityService.getActivity(Integer.valueOf(actId));
if (null == act) {
request.setAttribute("errorMsg", "找不到id=" + actId + "的活动");
return "error";
}
List<User> userList = activityService.getActMembers(act.getId());
List<Comment> rp2 = activityService.listComment(Integer.valueOf(actId));
request.setAttribute("userList", userList);
request.setAttribute("commentList", rp2);
request.setAttribute("activity", act);
return "activity/activity";
}
/**
* 增删参加活动的人员
*
* @param request
* @return
* @throws IOException
*/
@RequestMapping(value = "/adddeleteuser.jspx")
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 = activityService.getActivity(Integer.valueOf(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 = userService
.getUserByEmail(inputText.toLowerCase());
if (null != dUser) {
users.add(dUser);
}
} else if ("username".equals(condition)) {
users = userService.getUserByUsername(inputText);
}
// 找不到人
if (0 == users.size()) {
request.setAttribute("errorMsg", "找不到" + condition + "为 "
+ inputText + " 人员");
return "error";
}
// 这个活动能不能参加
if (!activityService.isJoinEnable(act.getId())) {
request.setAttribute("errorMsg", condition + "为 " + inputText
+ " 人员不能参加这个活动");
return "error";
}
// 帮用户参加活动
for (User u : users) {
userService.joinActivity(u.getId(), act.getId());
}
} else if ("delete".equals(op)) {// 删除用户
User dUser = userService.getUserById(Integer.valueOf(id));
if (null != dUser) {
userService.cancelJoinActivity(dUser.getId(), act.getId());
}
}
List<User> u = activityService.getActMembers(act.getId());
Page rp = new Page();
rp.setData(u);
int intp = WebUtils.toInt(p);
rp.setNowpage(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();
}
}