package com.ourlinc.conference.book.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import com.ourlinc.conference.DataSource;
import com.ourlinc.conference.book.Book;
import com.ourlinc.conference.book.BookService;
import com.ourlinc.omni.persistence.Persistence;
import com.ourlinc.omni.persistence.Persister;
import com.ourlinc.omni.persistence.PersisterStorage;
import com.ourlinc.omni.search.Searcher;
import com.ourlinc.swift.util.ResultPage;
/**
* 预定信息管理模块服务接口实现类
* @author pengchengji
* */
public class BookServiceImpl implements BookService{
//依赖的搜索器名,每个实体存在一个搜索器名字
static final String NAME_SEARCHER_BOOK = "book";
final DataSource m_DataSource; // 数据源
final BookPodiImpl m_Podi;
/**
* 构造方法
* @param ds 数据源
*/
public BookServiceImpl(DataSource ds) {
m_DataSource = ds;
m_Podi = new BookPodiImpl();
}
/**
*
* BookPodi的实现类,内部实现类
* @author pengchengji
*/
class BookPodiImpl implements BookPodi {
// 活动线路持久器
final PersisterStorage<Book> psBook;
// 线路动态查询器
final Searcher m_InfoSearcher;
public BookPodiImpl() {
psBook = m_DataSource.newPersister(Book.class, this);
m_InfoSearcher = m_DataSource.newSearcher(NAME_SEARCHER_BOOK);
}
@SuppressWarnings("unchecked")
public <E extends Persistence> Persister<E> getPersister(
Class<E> classOf) {
if (Book.class == classOf)
return (Persister<E>) psBook;
return m_DataSource.getPersister(classOf);
}
public Searcher getSearcher() {
return m_InfoSearcher;
}
}
/**
* 预定会议室
* @param date 预定日期
* @param beginTime 开始时间
* @param continueTime 持续时间
* @param department 预定部门
* @return 返回新增后的预定对象
*/
public Book addBook(Date date, int beginTime, int continueTime, String department, String linkman) {
return new Book(m_Podi, date, beginTime, continueTime, department,linkman,Book.STATUS_ENABLE.getId()) ;
}
/**
* 当用户预定会议室的时候,检查是否存在冲突的预定
* @param date 预定日期
* @param beginTime 会议开始时间
* @param continueTime 会议持续时间
* @return List<Book>返回存在冲突的预定对象
*/
public List<Book> getExistBook(Date date, int beginTime, int continueTime) {
ResultPage<Book> rp = m_Podi.psBook.startsWith(null) ;
rp.setPageSize(2000) ;
rp.gotoPage(1) ;
List<Book> books = new ArrayList<Book>() ;
for (Book book : rp){
if (date.equals(book.getDate()) && book.getStatus() == Book.STATUS_ENABLE.getId()){
if (beginTime >= book.getEndTime() || book.getBeginTime() >= (beginTime + continueTime)){
continue ;
}
books.add(book) ;
}
}
Collections.sort(books);
return books;
}
/**
* 查询某一天的预定信息
* @param oneDate
* @return 返回某一天的预定信息
*/
public List<Book> searchBook (Date oneDate){
ResultPage<Book> rp = m_Podi.psBook.startsWith(null);
rp.setPageSize(2000);
rp.gotoPage(1);
List<Book> books = new ArrayList<Book>();
for (Book book : rp){
if (book.getDate().equals(oneDate) && book.getStatus() == Book.STATUS_ENABLE.getId()){
books.add(book);
}
}
Collections.sort(books);
return books;
}
/**
* 查询符合组合条件的预定
* @param department
* @param linkman
* @param title
* @param content
* @param beginDate
* @param endDate
* @return 返回符合搜索条件的预定
*/
public ResultPage<Book> searchBook(String department, String linkman, String title,
String content,Date beginDate,Date endDate) {
ResultPage<Book> rp = m_Podi.psBook.startsWith(null);
List<Book> list = new ArrayList<Book>();
if ("全部".equals(department)){
department = "";
}
rp.setPageSize(128);
Book book = null;
if (null == beginDate && null == endDate ){
while (rp.gotoPage(rp.getPage()+1)){
while (rp.hasNext()) {
book = rp.next();
if (book.getDepartment().contains(department)
&& book.getLinkman().contains(linkman)
&& book.getTitle().contains(title)
&& book.getContent().contains(content)
&& book.getStatus() == Book.STATUS_ENABLE.getId()) {
list.add(book);
}
}
}
}else if (null == beginDate && null != endDate){
while (rp.gotoPage(rp.getPage()+1)){
while (rp.hasNext()) {
book = rp.next();
if (book.getDepartment().contains(department)
&& book.getLinkman().contains(linkman)
&& book.getTitle().contains(title)
&& book.getContent().contains(content)
&& book.getDate().equals(endDate)
&& book.getStatus() == Book.STATUS_ENABLE.getId()) {
list.add(book);
}
}
}
}else if (null != beginDate && null == endDate){
while (rp.gotoPage(rp.getPage()+1)){
while (rp.hasNext()) {
book = rp.next();
if (book.getDepartment().contains(department)
&& book.getLinkman().contains(linkman)
&& book.getTitle().contains(title)
&& book.getContent().contains(content)
&& book.getDate().equals(beginDate)
&& book.getStatus() == Book.STATUS_ENABLE.getId()) {
list.add(book);
}
}
}
}else {
while (rp.gotoPage(rp.getPage()+1)){
while (rp.hasNext()) {
book = rp.next();
if (book.getDepartment().contains(department)
&& book.getLinkman().contains(linkman)
&& book.getTitle().contains(title)
&& book.getContent().contains(content)
&& !book.getDate().before(beginDate) && !book.getDate().after(endDate)
&& book.getStatus() == Book.STATUS_ENABLE.getId()) {
list.add(book);
}
}
}
}
Collections.sort(list);
return ResultPage.OnList.wrap(list);
}
/**
* 根据ID删除相应的预定信息
* @param id
* @return 返回删除后的预定信息
*/
public Book cancleBook(String id) {
Book book = getBook(id);
book.cancle();
return book;
}
/**
* 根据ID激活相应的预定信息
* @param id
* @return 返回激活后的预定信息
*/
public Book activateBook(String id) {
Book book = getBook(id);
book.activate();
return book;
}
/**
* 根据ID获取预定信息
* @param Id 预定信息的ID
* @return 返回所查询的Book对象
*/
public Book getBook(String id) {
return m_Podi.psBook.get(id);
}
}