VIPServiceImpl.java 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package com.example.cinema.blImpl;
  2. import com.example.cinema.bl.VIPService;
  3. import com.example.cinema.data.VIPCardMapper;
  4. import com.example.cinema.vo.VIPCardForm;
  5. import com.example.cinema.po.VIPCard;
  6. import com.example.cinema.strategy.ChargeStrategy;
  7. import com.example.cinema.strategy.ReturnStrategy;
  8. import com.example.cinema.vo.ResponseVO;
  9. import com.example.cinema.vo.VIPInfoVO;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Service;
  12. import java.lang.reflect.Modifier;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. /**
  16. * Created by liying on 2019/4/14.
  17. */
  18. @Service
  19. public class VIPServiceImpl implements VIPService {
  20. @Autowired
  21. VIPCardMapper vipCardMapper;
  22. @Override
  23. public ResponseVO addVIPCard(int userId) {
  24. VIPCard vipCard = new VIPCard();
  25. vipCard.setUserId(userId);
  26. vipCard.setBalance(0);
  27. try {
  28. return ResponseVO.buildSuccess(vipCardMapper.insertOneCard(vipCard));
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. return ResponseVO.buildFailure("失败");
  32. }
  33. }
  34. @Override
  35. public ResponseVO getCardById(int id) {
  36. try {
  37. return ResponseVO.buildSuccess(vipCardMapper.selectCardById(id));
  38. } catch (Exception e) {
  39. e.printStackTrace();
  40. return ResponseVO.buildFailure("失败");
  41. }
  42. }
  43. @Override
  44. public ResponseVO getVIPInfo() {
  45. List<ChargeStrategy> strategies = new ArrayList<>();
  46. strategies.add(new ReturnStrategy());
  47. VIPInfoVO vipInfoVO = new VIPInfoVO();
  48. vipInfoVO.setStrategies(strategies);
  49. vipInfoVO.setPrice(VIPCard.price);
  50. return ResponseVO.buildSuccess(vipInfoVO);
  51. }
  52. @Override
  53. public ResponseVO charge(VIPCardForm vipCardForm) {
  54. if (vipCardForm.getStrategyName() == null) {
  55. return ResponseVO.buildFailure("充值优惠策略不能为空");
  56. }
  57. ChargeStrategy chargeStrategy;
  58. try {
  59. Class c = Class.forName(vipCardForm.getStrategyName());
  60. //如果是抽象类或接口
  61. if (Modifier.isAbstract(c.getModifiers()) || Modifier.isInterface(c.getModifiers())) {
  62. return ResponseVO.buildFailure("充值优惠策略不存在");
  63. }
  64. chargeStrategy = (ChargeStrategy) c.newInstance();
  65. } catch (ClassNotFoundException e) {
  66. return ResponseVO.buildFailure("充值优惠策略不存在");
  67. } catch (IllegalAccessException e) {
  68. chargeStrategy = new ReturnStrategy();
  69. } catch (InstantiationException e) {
  70. chargeStrategy = new ReturnStrategy();
  71. }
  72. VIPCard vipCard=vipCardMapper.selectCardById(vipCardForm.getVipId());
  73. if(vipCard==null){
  74. return ResponseVO.buildFailure("会员卡不存在");
  75. }
  76. double balance = chargeStrategy.calculate(vipCardForm.getAmount());
  77. vipCard.setBalance(vipCard.getBalance()+balance);
  78. try {
  79. return ResponseVO.buildSuccess(vipCardMapper.updateCardBalance(vipCardForm.getVipId(),balance));
  80. } catch (Exception e) {
  81. e.printStackTrace();
  82. return ResponseVO.buildFailure("失败");
  83. }
  84. }
  85. }