package com.ourlinc.conference.controller;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
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.conference.DateUtil;
import com.ourlinc.conference.book.Book;
import com.ourlinc.conference.book.BookService;
import com.ourlinc.swift.util.Misc;
import com.ourlinc.swift.util.ResultPage;
/**
*
* 预定会议室模块控制器
* @author pengchengji
*/
@Controller
public class BookController {
@Resource(name="bookService")
public BookService bookService;
/**
* 预定会议室
* @return
*/
@RequestMapping
String addbook(HttpServletRequest request, HttpServletResponse response){
//接收预定表单的预定信息
String stringDate = request.getParameter("date");
String strbeginTime = request.getParameter("beginTime");
String strcontinueTime = request.getParameter("continueTime");
String department = request.getParameter("department");
String linkman = request.getParameter("linkman");
String title = request.getParameter("title");
String content = request.getParameter("content");
//存放冲突的Book对象
List<Book> books = new ArrayList<Book>();
//防止用户直接访问addbook.jspx带来的问题
if (null == stringDate || null == department){
return "book/addbook";
}else {
strbeginTime = strbeginTime.replace(":", ":");
String[] strbeginTimes = strbeginTime.split(":");
int beginTime = Integer.parseInt(strbeginTimes[0])*60 + Integer.parseInt(strbeginTimes[1]);
int continueTime = Integer.parseInt(strcontinueTime);
Date date = DateUtil.strFormatDate(stringDate);
books = bookService.getExistBook(date, beginTime, continueTime);
//books中保存冲突的预定信息
if(0 != books.size()){
Iterator<Book> iter = books.iterator();
StringBuilder msg = new StringBuilder();
msg.append("预定失败 !<br />");
Book book = null ;
while (iter.hasNext()){
book = iter.next();
msg.append(stringDate + " ");
msg.append(book.getStrBeginTime()+ " 至 ");
msg.append(book.getStrEndTime()+ " 都已被");
msg.append(" " + book.getDepartment() + " ");
msg.append("占用 !<br />如有必要,请找预订人 "+book.getLinkman()+" 协商 !<br />");
}
//如果预定已经存在,那么就提示这个时间段已被某部门预定
request.setAttribute("msg", msg);
return "book/addbook";
}else {
//如果如果不存在冲突预定,就预定会议室,接着提示预定成功,并告知开会时间
Book book = bookService.addBook(date, beginTime, continueTime, department, linkman);
if ("".equals(title) || null == title){
title = book.getDepartment() + "的会议" ;
}
if ("".equals(content) || null == content){
content = book.getDepartment() + "的会议" ;
}
book.init(title, content);
book.flush();//刷新对象
request.setAttribute("msg", "预定成功,开会时间为 "+stringDate
+ " " + book.getStrBeginTime() + " 至 " + book.getStrEndTime()+" !");
return "book/addbook";
}
}
}
/**
* 取消预定
* @return
*/
@RequestMapping
String delete(HttpServletRequest request, HttpServletResponse response){
String id = request.getParameter("id");
String from = request.getParameter("from");
Book book = bookService.cancleBook(id);
request.setAttribute("msg", "取消成功,"+ book.getStrDate()+" "+book.getStrBeginTime()+" 至 "+book.getStrEndTime()+" 的会议已被成功取消 !");
if ("index".equals(from)){
List<Book> todaybooks = bookService.searchBook(DateUtil.formatDate(new Date()));
request.setAttribute("todaybooks", todaybooks);
return "book/"+from;
}
return "book/"+from;
}
/**
* 更改预定
* @return
*/
@RequestMapping
String update(HttpServletRequest request, HttpServletResponse response){
String id = request.getParameter("id");
Book book = bookService.getBook(id);
request.setAttribute("book", book);
if (book.getDepartment().trim().equals("市场部")){
request.setAttribute("market", "selected");
}else if (book.getDepartment().trim().equals("数据部")){
request.setAttribute("data", "selected");
}else if (book.getDepartment().trim().equals("开发部")){
request.setAttribute("dev", "selected");
}else if (book.getDepartment().trim().equals("人事部")){
request.setAttribute("hr", "selected");
}else {
request.setAttribute("finance", "selected");
}
return "book/update";
}
/**
* 更改预定信息
* @return
*/
@RequestMapping
String updatebook(HttpServletRequest request, HttpServletResponse response){
/**
* 接收预定表单的预定信息
*/
String stringDate = request.getParameter("date");
String strbeginTime = request.getParameter("beginTime");
String strcontinueTime = request.getParameter("continueTime");
String linkman = request.getParameter("linkman");
String department = request.getParameter("department");
String title = request.getParameter("title");
String content = request.getParameter("content");
String id = request.getParameter("bookid");
String from = request.getParameter("from");
if (null == stringDate || null == department){
return "book/addbook";
}else {
strbeginTime = strbeginTime.replace(":", ":");
String[] strbeginTimes = strbeginTime.split(":");
int beginTime = Integer.parseInt(strbeginTimes[0])*60 + Integer.parseInt(strbeginTimes[1]);
int continueTime = Integer.parseInt(strcontinueTime);
//存放冲突的Book对象
List<Book> books = new ArrayList<Book>();
Date date = DateUtil.strFormatDate(stringDate);
Book oldBook = bookService.cancleBook(id);
oldBook.flush();//刷新对象
books = bookService.getExistBook(date, beginTime, continueTime);
//如果books存在元素,那么说明存在冲突的预定信息
if(0 != books.size()){
oldBook = bookService.activateBook(id);
oldBook.flush();//刷新对象
Iterator<Book> iter = books.iterator();
StringBuilder msg = new StringBuilder();
msg.append("更改失败 !<br />");
Book book = null;
while (iter.hasNext()){
book = iter.next();
msg.append(stringDate + " ");
msg.append(book.getStrBeginTime()+ " 至 ");
msg.append(book.getStrEndTime()+ " 都已被");
msg.append(" " + book.getDepartment() + " ");
msg.append("占用 !<br />如有必要,请找预订人 "+book.getLinkman()+" 协商 !<br />");
}
//如果预定已经存在,那么就提示这个时间段已被某部门预定
request.setAttribute("msg", msg);
request.setAttribute("book",oldBook);
return "book/update";
}else {
//如果如果不存在冲突预定,那么就提示预定成功,并告知开会时间
Book book = bookService.addBook(date, beginTime, continueTime, department,linkman);
if ("".equals(title) || null == title){
title = book.getDepartment() + "的会议" ;
}
if ("".equals(content) || null == content){
content = book.getDepartment() + "的会议" ;
}
book.init(title, content);
book.flush();//刷新对象
request.setAttribute("msg", "更改成功,开会时间更改为 "+stringDate
+ " " + book.getStrBeginTime() + " 至 " + book.getStrEndTime()+ " !");
//如果来自index.jspx,那么操作后,跳转到原页面
if ("index".equals(from)){
List<Book> todaybooks = bookService.searchBook(DateUtil.formatDate(new Date()));
request.setAttribute("todaybooks", todaybooks);
return "book/"+from;
}
return "book/"+from;
}
}
}
/**
* 显示当天的预定信息
* @return
*/
@RequestMapping
String index(HttpServletRequest request, HttpServletResponse response){
Date today = new Date ();
today = DateUtil.formatDate(today);
List<Book> todaybooks = bookService.searchBook(today);
request.setAttribute("todaybooks", todaybooks);
return "book/index";
}
/**
* 显示某一天的预定信息
* @return
*/
@RequestMapping
String onedate(HttpServletRequest request, HttpServletResponse response){
String strOneDate = request.getParameter("date");
if (null != strOneDate){
Date oneDate = DateUtil.strFormatDate(strOneDate);
List<Book> oneDateBooks = bookService.searchBook(oneDate);
request.setAttribute("todaybooks", oneDateBooks);
return "book/index";
}
return null ;
}
/**
* 显示所有预定
* @return
*/
@RequestMapping
String listall(){
return "book/listall";
}
/**
* 显示所有预定信息方法
*/
@RequestMapping
String listotal(HttpServletRequest request, HttpServletResponse response){
String strOneDate = request.getParameter("date");
if (null != strOneDate){
Date oneDate = DateUtil.strFormatDate(strOneDate);
List<Book> oneDateBooks = bookService.searchBook(oneDate);
response.setContentType("text/xml;charset=gbk");
//设置不缓存
response.setHeader("Cache-Control","no-cache");
StringBuilder xmlDoc = new StringBuilder();
Iterator<Book> iterbooks = oneDateBooks.iterator();
if (0 == oneDateBooks.size()){
xmlDoc.append("日期:"+strOneDate+"<br />");
xmlDoc.append("暂无预定");
}else {
String url = " <a href=\"onedate.jspx?date=" + strOneDate + "\">查看详细</a>";
xmlDoc.append("日期:" + strOneDate + url + "<br />");
}
Book book = null ;
while (iterbooks.hasNext()){
book = iterbooks.next();
xmlDoc.append("使用部门:"+book.getDepartment()+"<br />");
xmlDoc.append("会议主题:"+book.getTitle()+ "<br />");
xmlDoc.append("使用时间:"+book.getStrBeginTime()+" 至 ");
xmlDoc.append(book.getStrEndTime()+"<br />");
xmlDoc.append("<a href=\"javascript:show_confirm('"+book.getId().getIdentify()+"');\">" +
"取 消</a> | <a href=\"update.jspx?id="+book.getId().getIdentify()+"&from=listall\">更 改</a><br />");
xmlDoc.append("------------------------<br />");
}
try {
Thread.sleep(100);
response.getWriter().write(xmlDoc.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
/**
* 根据用户的查询要求,查询符合条件的预定
* @return
* @throws UnsupportedEncodingException
*/
@RequestMapping
String search(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException{
String department = request.getParameter("department");
String linkman = request.getParameter("linkman");
String title = request.getParameter("title");
String content = request.getParameter("content");
String strBeginDate = request.getParameter("beginDate");
String strEndDate = request.getParameter("endDate");
Date beginDate = null ;
Date endDate = null ;
String msg = null ;
ResultPage<Book> books = null ;
if (("".equals(department) && "".equals(linkman) && "".equals(title)
&& "".equals(content) && "".equals(strBeginDate) && "".equals(strEndDate))
||(null == department && null == linkman && null == title && null == content
&& null == strBeginDate && null == strEndDate)){
msg = "请输入搜索条件!" ;
request.setAttribute("msg", msg);
request.setAttribute("list", ResultPage.OnList.wrap(new ArrayList<Book>(0)));
return "book/search";
}
msg = "搜索结果如下:" ;
if ("".equals(strBeginDate)||null==strBeginDate){
beginDate = null ;
}else {
beginDate = DateUtil.strFormatDate(strBeginDate);
}
if ("".equals(strEndDate)||null==strEndDate){
endDate = null;
}else {
endDate = DateUtil.strFormatDate(strEndDate);
}
request.setAttribute("msg", msg);
int p = Misc.toInt(request.getParameter("p"),1);
books = bookService.searchBook(department, linkman, title, content,beginDate,endDate);
books.setPageSize(3);
books.gotoPage(p);
if ("市场部".equals(department)){
request.setAttribute("market", "selected");
}else if ("数据部".equals(department)){
request.setAttribute("data", "selected");
}else if ("开发部".equals(department)){
request.setAttribute("dev", "selected");
}else if ("人事部".equals(department)){
request.setAttribute("hr", "selected");
}else if ("全部".equals(department)){
request.setAttribute("all", "selected");
}else if("财务部".equals(department)){
request.setAttribute("finance", "selected");
}
request.setAttribute("department", URLEncoder.encode(department,"utf-8"));
request.setAttribute("linkman", URLEncoder.encode(linkman,"utf-8"));
request.setAttribute("title", URLEncoder.encode(title,"utf-8"));
request.setAttribute("content", URLEncoder.encode(content,"utf-8"));
request.setAttribute("beginDate",strBeginDate);
request.setAttribute("endDate",strEndDate);
request.setAttribute("p", p);
request.setAttribute("list", books);
return "book/search";
}
}