package com.example.cinema.blImpl; import com.example.cinema.bl.MovieService; import com.example.cinema.data.AccountMapper; import com.example.cinema.data.MovieLikeMapper; import com.example.cinema.data.MovieMapper; import com.example.cinema.data.ScheduleMapper; import com.example.cinema.vo.MovieBatchOffForm; import com.example.cinema.vo.MovieForm; import com.example.cinema.vo.ResponseVO; import com.example.cinema.vo.ScheduleItem; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.swing.plaf.synth.SynthScrollBarUI; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; /** * @author fjj * @date 2019/3/12 6:43 PM */ @Service public class MovieServiceImpl implements MovieService { private static final String ALREADY_LIKE_ERROR_MESSAGE = "用户已标记该电影为想看"; private static final String UNLIKE_ERROR_MESSAGE = "用户未标记该电影为想看"; private static final String USER_NOT_EXIST_ERROR_MESSAGE = "用户不存在"; private static final String MOVIE_NOT_EXIST_ERROR_MESSAGE = "电影不存在"; private static final String SCHEDULE_ERROR_MESSAGE = "有电影后续仍有排片或已有观众购票且未使用"; @Autowired private MovieMapper movieMapper; @Autowired private MovieLikeMapper movieLikeMapper; @Autowired private AccountMapper accountMapper; @Autowired private ScheduleMapper scheduleMapper; @Override public ResponseVO addMovie(MovieForm addMovieForm) { try { movieMapper.insertOneMovie(addMovieForm); return ResponseVO.buildSuccess(); } catch (Exception e) { e.printStackTrace(); return ResponseVO.buildFailure("失败"); } } @Override public ResponseVO searchOneMovieByIdAndUserId(int id, int userId) { try { return ResponseVO.buildSuccess(movieMapper.selectMovieByIdAndUserId(id, userId)); } catch (Exception e) { e.printStackTrace(); return ResponseVO.buildFailure("失败"); } } @Override public ResponseVO searchAllMovie() { try { return ResponseVO.buildSuccess(movieMapper.selectAllMovie()); } catch (Exception e) { e.printStackTrace(); return ResponseVO.buildFailure("失败"); } } @Override public ResponseVO searchOtherMoviesExcludeOff() { try { return ResponseVO.buildSuccess(movieMapper.selectOtherMoviesExcludeOff()); } catch (Exception e) { e.printStackTrace(); return ResponseVO.buildFailure("失败"); } } @Override public ResponseVO likeMovie(int userId, int movieId) { //todo: user 判空 if (userLikeTheMovie(userId, movieId)) { return ResponseVO.buildFailure(ALREADY_LIKE_ERROR_MESSAGE); } else if (movieMapper.selectMovieById(movieId) == null) { return ResponseVO.buildFailure(MOVIE_NOT_EXIST_ERROR_MESSAGE); } try { return ResponseVO.buildSuccess(movieLikeMapper.insertOneLike(movieId, userId)); } catch (Exception e) { e.printStackTrace(); return ResponseVO.buildFailure("失败"); } } @Override public ResponseVO unLikeMovie(int userId, int movieId) { if (!userLikeTheMovie(userId, movieId)) { return ResponseVO.buildFailure(UNLIKE_ERROR_MESSAGE); } else if (movieMapper.selectMovieById(movieId) == null) { return ResponseVO.buildFailure(MOVIE_NOT_EXIST_ERROR_MESSAGE); } try { return ResponseVO.buildSuccess(movieLikeMapper.deleteOneLike(movieId, userId)); } catch (Exception e) { e.printStackTrace(); return ResponseVO.buildFailure("失败"); } } @Override public ResponseVO getCountOfLikes(int movieId) { try { return ResponseVO.buildSuccess(movieLikeMapper.selectLikeNums(movieId)); } catch (Exception e) { e.printStackTrace(); return ResponseVO.buildFailure("失败"); } } @Override public ResponseVO getMovieByKeyword(String keyword) { if (keyword==null||keyword.equals("")) return ResponseVO.buildSuccess(movieMapper.selectAllMovie()); return ResponseVO.buildSuccess(movieMapper.selectMovieByKeyword(keyword)); } @Override public ResponseVO getLikeNumsGroupByDate(int movieId) { try { return ResponseVO.buildSuccess(movieLikeMapper.getDateLikeNum(movieId)); } catch (Exception e) { e.printStackTrace(); return ResponseVO.buildFailure("失败"); } } @Override public ResponseVO pullOfBatchOfMovie(MovieBatchOffForm movieBatchOffForm) { try { List movieIdList = movieBatchOffForm.getMovieIdList(); ResponseVO responseVO = preCheck(movieIdList); if(!responseVO.getSuccess()){ return responseVO; } movieMapper.updateMovieStatusBatch(movieIdList); return ResponseVO.buildSuccess(); } catch (Exception e) { e.printStackTrace(); return ResponseVO.buildFailure("失败"); } } @Override public ResponseVO updateMovie(MovieForm updateMovieForm) { try { ResponseVO responseVO = preCheck(Arrays.asList(updateMovieForm.getId())); if(!responseVO.getSuccess()){ return responseVO; } movieMapper.updateMovie(updateMovieForm); return ResponseVO.buildSuccess(); }catch (Exception e) { e.printStackTrace(); return ResponseVO.buildFailure("失败"); } } /** * 下架和修改电影的前置检查 * @param movieIdList * @return */ public ResponseVO preCheck(List movieIdList){ Date thisTime = new Date(); List scheduleItems = scheduleMapper.selectScheduleByMovieIdList(movieIdList); // 检查是否有电影后续有排片及是否有观众购票未使用 for(ScheduleItem s : scheduleItems){ if(s.getEndTime().after(thisTime)){ return ResponseVO.buildFailure(SCHEDULE_ERROR_MESSAGE); } } return ResponseVO.buildSuccess(); } private boolean userLikeTheMovie(int userId, int movieId) { return movieLikeMapper.selectLikeMovie(movieId, userId) == 0 ? false : true; } }