| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- package com.example.cinema.blImpl.sales;
- import com.example.cinema.bl.sales.TicketService;
- import com.example.cinema.data.management.HallMapper;
- import com.example.cinema.data.management.ScheduleMapper;
- import com.example.cinema.data.promotion.ActivityMapper;
- import com.example.cinema.data.promotion.CouponMapper;
- import com.example.cinema.data.promotion.VIPCardMapper;
- import com.example.cinema.data.sales.TicketMapper;
- import com.example.cinema.po.Coupon;
- import com.example.cinema.po.Ticket;
- import com.example.cinema.po.VIPCard;
- import com.example.cinema.vo.*;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.stream.Collectors;
- /**
- * Created by liying on 2019/4/16.
- */
- @Service
- public class TicketServiceImpl implements TicketService {
- @Autowired
- TicketMapper ticketMapper;
- @Autowired
- VIPCardMapper vipCardMapper;
- @Autowired
- ScheduleMapper scheduleMapper;
- @Autowired
- CouponMapper couponMapper;
- @Autowired
- HallMapper hallmapper;
- @Autowired
- ActivityMapper activityMapper;
- @Override
- @Transactional
- public ResponseVO addTicket(TicketForm ticketForm) {
- List<SeatForm> seats = ticketForm.getSeats();
- List<Ticket> tickets=new ArrayList<>();
- for (SeatForm seat : seats) {
- Ticket ticket = new Ticket();
- ticket.setUserId(ticketForm.getUserId());
- ticket.setScheduleId(ticketForm.getScheduleId());
- ticket.setColumnIndex(seat.getColumnIndex());
- ticket.setRowIndex(seat.getRowIndex());
- ticket.setState(0);
- if (ticketMapper.selectTicketByScheduleIdAndSeat(ticketForm.getScheduleId(), seat.getColumnIndex(), seat.getRowIndex()) != null) {
- return ResponseVO.buildFailure("该位置已被占");
- }
- tickets.add(ticket);
- }
- try {
- ticketMapper.insertTickets(tickets);
- TicketWithCouponVO vo=new TicketWithCouponVO();
- vo.setTicketVOList(tickets.stream().map(ticket -> ticket.getVO()).collect(Collectors.toList()));
- ScheduleItem scheduleItem = scheduleMapper.selectScheduleById(tickets.get(0).getScheduleId());
- double total=scheduleItem.getFare()*tickets.size();
- vo.setTotal(total);
- vo.setCoupons(couponMapper.selectCouponByUserAndAmount(tickets.get(0).getUserId(),total));
- // 按电影优惠
- List<ActivityVO> activityVOS=activityMapper.selectActivitiesByMovie(scheduleItem.getMovieId());
- // 按时间优惠
- List<ActivityVO> timeActivityVOS=activityMapper.selectActivitiesWithoutMovie();
- activityVOS.addAll(timeActivityVOS);
- vo.setActivities(activityVOS);
- return ResponseVO.buildSuccess(vo);
- } catch (Exception e) {
- e.printStackTrace();
- return ResponseVO.buildFailure("失败");
- }
- }
- @Override
- @Transactional
- public ResponseVO completeTicket(List<Integer> id, int couponId) {
- try {
- List<Ticket> tickets=updateState(id,1);
- int userId=tickets.get(0).getUserId();
- if (couponId != 0) {
- couponMapper.deleteCouponUser(couponId, userId);
- }
- ScheduleItem schedule=scheduleMapper.selectScheduleById(tickets.get(0).getScheduleId());
- // 按电影优惠
- List<ActivityVO> activityVOS=activityMapper.selectActivitiesByMovie(schedule.getMovieId());
- List<Integer> coupons=new ArrayList<>();
- for (ActivityVO vo:activityVOS ) {
- coupons.add(vo.getCoupon().getId());
- }
- // 按时间优惠
- List<ActivityVO> timeActivityVOS=activityMapper.selectActivitiesWithoutMovie();
- for (ActivityVO vo:timeActivityVOS ) {
- coupons.add(vo.getCoupon().getId());
- }
- coupons=coupons.stream().distinct().collect(Collectors.toList());
- for (Integer coupon : coupons) {
- couponMapper.insertCouponUser(coupon,userId);
- }
- return ResponseVO.buildSuccess(tickets.stream().map(ticket -> ticket.getVO()).collect(Collectors.toList()));
- } catch (Exception e) {
- e.printStackTrace();
- return ResponseVO.buildFailure("失败");
- }
- }
- @Override
- public ResponseVO getBySchedule(int scheduleId) {
- try {
- List<Ticket> tickets = ticketMapper.selectTicketsBySchedule(scheduleId);
- ScheduleItem schedule=scheduleMapper.selectScheduleById(scheduleId);
- HallVO hall=hallmapper.selectHallById(schedule.getHallId());
- int[][] seats=new int[hall.getRow()][hall.getColumn()];
- tickets.stream().forEach(ticket -> {
- seats[ticket.getRowIndex()][ticket.getColumnIndex()]=1;
- });
- ScheduleWithSeatVO scheduleWithSeatVO=new ScheduleWithSeatVO();
- scheduleWithSeatVO.setScheduleItem(schedule);
- scheduleWithSeatVO.setSeats(seats);
- return ResponseVO.buildSuccess(scheduleWithSeatVO);
- } catch (Exception e) {
- e.printStackTrace();
- return ResponseVO.buildFailure("失败");
- }
- }
- @Override
- public ResponseVO getTicketByUser(int userId) {
- try {
- List<TicketWithScheduleVO> vos = ticketMapper.selectTicketByUser(userId).stream().map(ticket -> {
- TicketWithScheduleVO vo=ticket.getWithScheduleVO();
- ScheduleItem scheduleItem=scheduleMapper.selectScheduleById(ticket.getScheduleId());
- vo.setSchedule(scheduleItem);
- return vo;
- }).collect(Collectors.toList());
- return ResponseVO.buildSuccess(vos);
- } catch (Exception e) {
- e.printStackTrace();
- return ResponseVO.buildFailure("失败");
- }
- }
- @Override
- @Transactional
- public ResponseVO completeByVIPCard(List<Integer> id, int couponId) {
- try {
- Ticket ticket = ticketMapper.selectTicketById(id.get(0));
- VIPCard vipCard = vipCardMapper.selectCardByUserId(ticket.getUserId());
- ScheduleItem scheduleItem = scheduleMapper.selectScheduleById(ticket.getScheduleId());
- double balance = vipCard.getBalance() - scheduleItem.getFare()*id.size();
- if (couponId != 0) {
- Coupon coupon = couponMapper.selectById(couponId);
- if(scheduleItem.getFare()*id.size()<coupon.getTargetAmount()){
- return ResponseVO.buildFailure("未达到优惠券使用标准");
- }
- balance += coupon.getDiscountAmount();
- }
- if (balance < 0) {
- return ResponseVO.buildFailure("会员卡余额不足");
- }
- vipCardMapper.updateCardBalance(vipCard.getId(), balance);
- return completeTicket(id, couponId);
- } catch (Exception e) {
- e.printStackTrace();
- return ResponseVO.buildFailure("失败");
- }
- }
- @Override
- public ResponseVO cancelTicket(List<Integer> id) {
- try {
- List<Ticket> tickets=updateState(id,2);
- return ResponseVO.buildSuccess(tickets.stream().map(ticket -> ticket.getVO()).collect(Collectors.toList()));
- } catch (Exception e) {
- e.printStackTrace();
- return ResponseVO.buildFailure("失败");
- }
- }
- private List<Ticket> updateState(List<Integer> id,int state){
- List<Ticket> tickets=new ArrayList<>();
- for (Integer i:id) {
- ticketMapper.updateTicketState(i, state);
- Ticket ticket = ticketMapper.selectTicketById(id.get(0));
- tickets.add(ticket);
- }
- return tickets;
- }
- }
|