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 seats = ticketForm.getSeats(); List 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 activityVOS=activityMapper.selectActivitiesByMovie(scheduleItem.getMovieId()); // 按时间优惠 List 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 id, int couponId) { try { List 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 activityVOS=activityMapper.selectActivitiesByMovie(schedule.getMovieId()); List coupons=new ArrayList<>(); for (ActivityVO vo:activityVOS ) { coupons.add(vo.getCoupon().getId()); } // 按时间优惠 List 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 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 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 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() id) { try { List 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 updateState(List id,int state){ List tickets=new ArrayList<>(); for (Integer i:id) { ticketMapper.updateTicketState(i, state); Ticket ticket = ticketMapper.selectTicketById(id.get(0)); tickets.add(ticket); } return tickets; } }