package com.syzton.sunread.service.recommend; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import com.syzton.sunread.dto.recommend.RecommendDTO; import com.syzton.sunread.exception.common.NotFoundException; import com.syzton.sunread.model.book.Book; import com.syzton.sunread.model.bookshelf.BookInShelf; import com.syzton.sunread.model.bookshelf.Bookshelf; import com.syzton.sunread.model.organization.Campus; import com.syzton.sunread.model.organization.Clazz; import com.syzton.sunread.model.recommend.Recommend; import com.syzton.sunread.model.user.Student; import com.syzton.sunread.model.user.Teacher; import com.syzton.sunread.repository.book.BookRepository; import com.syzton.sunread.repository.bookshelf.BookInShelfRepository; import com.syzton.sunread.repository.bookshelf.BookshelfRepository; import com.syzton.sunread.repository.organization.CampusRepository; import com.syzton.sunread.repository.organization.ClazzRepository; import com.syzton.sunread.repository.recommend.RecommendRepository; import com.syzton.sunread.repository.user.StudentRepository; import com.syzton.sunread.repository.user.TeacherRepository; /** * @author Morgan-Leon * @Date 2015年5月12日 * */ @Service public class RecommendRepositoryService implements RecommendService{ private RecommendRepository recommendRepository; private TeacherRepository teacherRepositiry; private StudentRepository studentRepository; private BookInShelfRepository bookInShelfRepository; private BookRepository bookRepository; private BookshelfRepository bookshelfRepository; private ClazzRepository clazzRepository; private CampusRepository campusRepository; private Teacher teacher; private Book book; private Bookshelf bookshelf; @Autowired public RecommendRepositoryService(RecommendRepository recommendRepository,BookshelfRepository bookshelfRepository ,TeacherRepository teacherRepositiry,StudentRepository studentRepository,ClazzRepository clazzRepository ,CampusRepository campusRepository,BookInShelfRepository bookInShelfRepository,BookRepository bookRepository) { // TODO Auto-generated constructor stub this.recommendRepository = recommendRepository; this.bookshelfRepository = bookshelfRepository; this.teacherRepositiry = teacherRepositiry; this.studentRepository = studentRepository; this.clazzRepository = clazzRepository; this.campusRepository = campusRepository; this.bookInShelfRepository = bookInShelfRepository; this.bookRepository = bookRepository; } /* (non-Javadoc) * @see com.syzton.sunread.service.recommend.RecommendService#add(com.syzton.sunread.model.user.Teacher, com.syzton.sunread.model.bookshelf.BookInShelf) */ @Override public RecommendDTO add(RecommendDTO recommendDTO,Long teacherId, Long studentId) { teacher = teacherRepositiry.findOne(teacherId); if(teacher == null) throw new NotFoundException("Not Found Teacher with id" + teacherId); book = bookRepository.findOne(recommendDTO.getBookId()); if(book == null) throw new NotFoundException("Not Found Book with id" + recommendDTO.getBookId()); bookshelf = bookshelfRepository.findOne(studentId); if(bookshelf == null) throw new NotFoundException("Not Found Bookshelf with id" + studentId); BookInShelf isInShelf = bookInShelfRepository.findOneByBookshelfAndBookId(bookshelf, recommendDTO.getBookId()); Recommend recommend = new Recommend(); if (isInShelf == null) { isInShelf = BookInShelf.getBuilder(book.getId(),book.getName() ,book.getIsbn(),book.getPictureUrl(),book.getAuthor(),book.getPoint() ,bookshelf,recommendDTO.getBookAttribute(),recommendDTO.getReadState()).build(); recommend = Recommend.getBuilder(teacher, isInShelf).description(recommendDTO.getDescription()).build(); bookInShelfRepository.save(isInShelf); recommendRepository.save(recommend); RecommendDTO dto = RecommendDTO.getBuilder(book.getId(), book.getName(), teacherId, teacher.getUsername() ,studentId, bookshelf.getUsername(),isInShelf.getBookAttribute(),isInShelf.getReadState(),0,recommend.getDescription()).build(); return dto; } else { Recommend isRecommended = recommendRepository.findByBookinshelf(isInShelf); if(isRecommended == null){ if (isInShelf.getDeleted()) { isInShelf.setDeleted(false); } isInShelf.setBookAttribute(recommendDTO.getBookAttribute()); bookInShelfRepository.flush(); recommend = Recommend.getBuilder(teacher, isInShelf).build(); recommendRepository.save(recommend); RecommendDTO dto = RecommendDTO.getBuilder(book.getId(), book.getName(), teacherId, teacher.getUsername() ,studentId, bookshelf.getUsername(),isInShelf.getBookAttribute(),isInShelf.getReadState(),1,recommend.getDescription()).build(); return dto; } else { int recommendState = 3; if (isInShelf.getDeleted()) isInShelf.setDeleted(false); if(!isInShelf.getBookAttribute()){ isInShelf.setBookAttribute(recommendDTO.getBookAttribute()); recommendState = 2; } bookInShelfRepository.flush(); RecommendDTO dto = RecommendDTO.getBuilder(book.getId(), book.getName(), teacherId, teacher.getUsername() ,studentId, bookshelf.getUsername(),isInShelf.getBookAttribute(),isInShelf.getReadState(),recommendState,recommend.getDescription()).build(); return dto; } } } /* (non-Javadoc) * @see com.syzton.sunread.service.recommend.RecommendService#addToClazz(com.syzton.sunread.dto.recommend.RecommendDTO, java.lang.Long, java.lang.Long) */ @Override public ArrayList<RecommendDTO> addToClazz(RecommendDTO recommendDTO, Long teacherId, Long clazzId) { // TODO Auto-generated method stub // teacher = teacherRepositiry.findOne(teacherId); // if(teacher == null) // throw new NotFoundException("Not Found Teacher with id" + teacherId); // book = bookRepository.findOne(recommendDTO.getBookId()); // if(book == null) // throw new NotFoundException("Not Found Book with id" + recommendDTO.getBookId()); Clazz clazz= clazzRepository.findOne(clazzId); if(clazz == null) throw new NotFoundException("Not Found CLASS with id" + clazzId); List<Student> students = studentRepository.findByClazzId(clazzId); ArrayList<RecommendDTO> dtos = new ArrayList<RecommendDTO>(); for (int i = 0; i < students.size(); i++) { RecommendDTO dto = add(recommendDTO, teacherId, students.get(i).getId()); dtos.add(dto); } return dtos; } /* (non-Javadoc) * @see com.syzton.sunread.service.recommend.RecommendService#findById(java.lang.Long) */ @Override public Recommend findById(Long id) throws NotFoundException { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see com.syzton.sunread.service.recommend.RecommendService#findAll(org.springframework.data.domain.Pageable) */ @Override public Page<Recommend> findAll(Pageable pageable) throws NotFoundException { // TODO Auto-generated method stub return null; } @Override public ArrayList<RecommendDTO> findByTeacher(Long teacherId) { // TODO Auto-generated method stub ArrayList<RecommendDTO> recommendDTOs = new ArrayList<RecommendDTO>(); teacher = teacherRepositiry.findOne(teacherId); if(teacher == null) throw new NotFoundException("Not Found Teacher with id" + teacher.getId()); ArrayList<Recommend> recommends = recommendRepository.findByTeacher(teacher); if(recommends.isEmpty()){ throw new NotFoundException("Not Found any recommends from teacher :"+teacher.getUsername()); } for (Recommend recommend : recommends) { BookInShelf bookInShelf = recommend.getBookinshelf(); Student student = studentRepository.findOne(bookInShelf.getBookShelf().getId()); Campus campus = campusRepository.findOne(student.getCampusId()); Clazz clazz = clazzRepository.findOne(student.getClazzId()); RecommendDTO dto = RecommendDTO.getBuilder(bookInShelf.getBookName(),campus.getName(),clazz.getName(),student.getUsername(),bookInShelf.getBookAttribute(),recommend.getDescription()).build(); recommendDTOs.add(dto); } return recommendDTOs; } @Override public Page<RecommendDTO> findByTeacher(Long teacherId,Pageable pageable) { // TODO Auto-generated method stub ArrayList<RecommendDTO> recommendDTOs = new ArrayList<RecommendDTO>(); teacher = teacherRepositiry.findOne(teacherId); if(teacher == null) throw new NotFoundException("Not Found Teacher with id" + teacher.getId()); Page<Recommend> pageRecommends = recommendRepository.findByTeacher(teacher,pageable); List<Recommend> recommends = pageRecommends.getContent(); if(recommends.isEmpty()){ throw new NotFoundException("Not Found any recommends from teacher :"+teacher.getUsername()); } for (Recommend recommend : recommends) { BookInShelf bookInShelf = recommend.getBookinshelf(); Student student = studentRepository.findOne(bookInShelf.getBookShelf().getId()); Campus campus = campusRepository.findOne(student.getCampusId()); Clazz clazz = clazzRepository.findOne(student.getClazzId()); RecommendDTO dto = RecommendDTO.getBuilder(bookInShelf.getBookName(),campus.getName(),clazz.getName(),student.getUsername(),bookInShelf.getBookAttribute(),recommend.getDescription()).build(); recommendDTOs.add(dto); } Page<RecommendDTO> recommendDTOPage = new PageImpl<>(recommendDTOs,pageable,pageRecommends.getTotalElements()); return recommendDTOPage; } @Override public ArrayList<Book> findRecommendBooks(long teacherId){ ArrayList<Book> recommendBooks = new ArrayList<Book>(); // ArrayList<BookInShelf> bookInshelfs= new ArrayList<BookInShelf>(); teacher = teacherRepositiry.findOne(teacherId); if(teacher == null) throw new NotFoundException("Not Found Teacher with id" + teacherId); ArrayList<Recommend> recommends = recommendRepository.findByTeacher(teacher); int size = recommends.size(); int i=size -1; if(size != 0){ for (i=size -1;i>0;i--) { long temp = recommends.get(i).getBookinshelf().getBookId(); if (temp != recommends.get(i-1).getBookinshelf().getBookId()) { book = bookRepository.findOne(recommends.get(i).getBookinshelf().getBookId()); recommendBooks.add(book); } } } return recommendBooks; } }