TicketServiceImpl.java 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. package com.example.cinema.blImpl.sales;
  2. import com.example.cinema.bl.sales.TicketService;
  3. import com.example.cinema.data.management.HallMapper;
  4. import com.example.cinema.data.management.ScheduleMapper;
  5. import com.example.cinema.data.promotion.ActivityMapper;
  6. import com.example.cinema.data.promotion.CouponMapper;
  7. import com.example.cinema.data.promotion.VIPCardMapper;
  8. import com.example.cinema.data.sales.TicketMapper;
  9. import com.example.cinema.po.Coupon;
  10. import com.example.cinema.po.Ticket;
  11. import com.example.cinema.po.VIPCard;
  12. import com.example.cinema.vo.*;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. import java.util.stream.Collectors;
  19. /**
  20. * Created by liying on 2019/4/16.
  21. */
  22. @Service
  23. public class TicketServiceImpl implements TicketService {
  24. @Autowired
  25. TicketMapper ticketMapper;
  26. @Autowired
  27. VIPCardMapper vipCardMapper;
  28. @Autowired
  29. ScheduleMapper scheduleMapper;
  30. @Autowired
  31. CouponMapper couponMapper;
  32. @Autowired
  33. HallMapper hallmapper;
  34. @Autowired
  35. ActivityMapper activityMapper;
  36. @Override
  37. @Transactional
  38. public ResponseVO addTicket(TicketForm ticketForm) {
  39. List<SeatForm> seats = ticketForm.getSeats();
  40. List<Ticket> tickets=new ArrayList<>();
  41. for (SeatForm seat : seats) {
  42. Ticket ticket = new Ticket();
  43. ticket.setUserId(ticketForm.getUserId());
  44. ticket.setScheduleId(ticketForm.getScheduleId());
  45. ticket.setColumnIndex(seat.getColumnIndex());
  46. ticket.setRowIndex(seat.getRowIndex());
  47. ticket.setState(0);
  48. if (ticketMapper.selectTicketByScheduleIdAndSeat(ticketForm.getScheduleId(), seat.getColumnIndex(), seat.getRowIndex()) != null) {
  49. return ResponseVO.buildFailure("该位置已被占");
  50. }
  51. tickets.add(ticket);
  52. }
  53. try {
  54. ticketMapper.insertTickets(tickets);
  55. TicketWithCouponVO vo=new TicketWithCouponVO();
  56. vo.setTicketVOList(tickets.stream().map(ticket -> ticket.getVO()).collect(Collectors.toList()));
  57. ScheduleItem scheduleItem = scheduleMapper.selectScheduleById(tickets.get(0).getScheduleId());
  58. double total=scheduleItem.getFare()*tickets.size();
  59. vo.setTotal(total);
  60. vo.setCoupons(couponMapper.selectCouponByUserAndAmount(tickets.get(0).getUserId(),total));
  61. // 按电影优惠
  62. List<ActivityVO> activityVOS=activityMapper.selectActivitiesByMovie(scheduleItem.getMovieId());
  63. // 按时间优惠
  64. List<ActivityVO> timeActivityVOS=activityMapper.selectActivitiesWithoutMovie();
  65. activityVOS.addAll(timeActivityVOS);
  66. vo.setActivities(activityVOS);
  67. return ResponseVO.buildSuccess(vo);
  68. } catch (Exception e) {
  69. e.printStackTrace();
  70. return ResponseVO.buildFailure("失败");
  71. }
  72. }
  73. @Override
  74. @Transactional
  75. public ResponseVO completeTicket(List<Integer> id, int couponId) {
  76. try {
  77. List<Ticket> tickets=updateState(id,1);
  78. int userId=tickets.get(0).getUserId();
  79. if (couponId != 0) {
  80. couponMapper.deleteCouponUser(couponId, userId);
  81. }
  82. ScheduleItem schedule=scheduleMapper.selectScheduleById(tickets.get(0).getScheduleId());
  83. // 按电影优惠
  84. List<ActivityVO> activityVOS=activityMapper.selectActivitiesByMovie(schedule.getMovieId());
  85. List<Integer> coupons=new ArrayList<>();
  86. for (ActivityVO vo:activityVOS ) {
  87. coupons.add(vo.getCoupon().getId());
  88. }
  89. // 按时间优惠
  90. List<ActivityVO> timeActivityVOS=activityMapper.selectActivitiesWithoutMovie();
  91. for (ActivityVO vo:timeActivityVOS ) {
  92. coupons.add(vo.getCoupon().getId());
  93. }
  94. coupons=coupons.stream().distinct().collect(Collectors.toList());
  95. for (Integer coupon : coupons) {
  96. couponMapper.insertCouponUser(coupon,userId);
  97. }
  98. return ResponseVO.buildSuccess(tickets.stream().map(ticket -> ticket.getVO()).collect(Collectors.toList()));
  99. } catch (Exception e) {
  100. e.printStackTrace();
  101. return ResponseVO.buildFailure("失败");
  102. }
  103. }
  104. @Override
  105. public ResponseVO getBySchedule(int scheduleId) {
  106. try {
  107. List<Ticket> tickets = ticketMapper.selectTicketsBySchedule(scheduleId);
  108. ScheduleItem schedule=scheduleMapper.selectScheduleById(scheduleId);
  109. HallVO hall=hallmapper.selectHallById(schedule.getHallId());
  110. int[][] seats=new int[hall.getRow()][hall.getColumn()];
  111. tickets.stream().forEach(ticket -> {
  112. seats[ticket.getRowIndex()][ticket.getColumnIndex()]=1;
  113. });
  114. ScheduleWithSeatVO scheduleWithSeatVO=new ScheduleWithSeatVO();
  115. scheduleWithSeatVO.setScheduleItem(schedule);
  116. scheduleWithSeatVO.setSeats(seats);
  117. return ResponseVO.buildSuccess(scheduleWithSeatVO);
  118. } catch (Exception e) {
  119. e.printStackTrace();
  120. return ResponseVO.buildFailure("失败");
  121. }
  122. }
  123. @Override
  124. public ResponseVO getTicketByUser(int userId) {
  125. try {
  126. List<TicketWithScheduleVO> vos = ticketMapper.selectTicketByUser(userId).stream().map(ticket -> {
  127. TicketWithScheduleVO vo=ticket.getWithScheduleVO();
  128. ScheduleItem scheduleItem=scheduleMapper.selectScheduleById(ticket.getScheduleId());
  129. vo.setSchedule(scheduleItem);
  130. return vo;
  131. }).collect(Collectors.toList());
  132. return ResponseVO.buildSuccess(vos);
  133. } catch (Exception e) {
  134. e.printStackTrace();
  135. return ResponseVO.buildFailure("失败");
  136. }
  137. }
  138. @Override
  139. @Transactional
  140. public ResponseVO completeByVIPCard(List<Integer> id, int couponId) {
  141. try {
  142. Ticket ticket = ticketMapper.selectTicketById(id.get(0));
  143. VIPCard vipCard = vipCardMapper.selectCardByUserId(ticket.getUserId());
  144. ScheduleItem scheduleItem = scheduleMapper.selectScheduleById(ticket.getScheduleId());
  145. double balance = vipCard.getBalance() - scheduleItem.getFare()*id.size();
  146. if (couponId != 0) {
  147. Coupon coupon = couponMapper.selectById(couponId);
  148. if(scheduleItem.getFare()*id.size()<coupon.getTargetAmount()){
  149. return ResponseVO.buildFailure("未达到优惠券使用标准");
  150. }
  151. balance += coupon.getDiscountAmount();
  152. }
  153. if (balance < 0) {
  154. return ResponseVO.buildFailure("会员卡余额不足");
  155. }
  156. vipCardMapper.updateCardBalance(vipCard.getId(), balance);
  157. return completeTicket(id, couponId);
  158. } catch (Exception e) {
  159. e.printStackTrace();
  160. return ResponseVO.buildFailure("失败");
  161. }
  162. }
  163. @Override
  164. public ResponseVO cancelTicket(List<Integer> id) {
  165. try {
  166. List<Ticket> tickets=updateState(id,2);
  167. return ResponseVO.buildSuccess(tickets.stream().map(ticket -> ticket.getVO()).collect(Collectors.toList()));
  168. } catch (Exception e) {
  169. e.printStackTrace();
  170. return ResponseVO.buildFailure("失败");
  171. }
  172. }
  173. private List<Ticket> updateState(List<Integer> id,int state){
  174. List<Ticket> tickets=new ArrayList<>();
  175. for (Integer i:id) {
  176. ticketMapper.updateTicketState(i, state);
  177. Ticket ticket = ticketMapper.selectTicketById(id.get(0));
  178. tickets.add(ticket);
  179. }
  180. return tickets;
  181. }
  182. }