ScratchManagerImpl.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package com.punchsettle.server.service.manager.impl;
  2. import com.punchsettle.server.atomic.entity.LotteryScratchRecord;
  3. import com.punchsettle.server.atomic.entity.User;
  4. import com.punchsettle.server.atomic.service.ILotteryScratchRecordService;
  5. import com.punchsettle.server.atomic.service.IUserService;
  6. import com.punchsettle.server.common.exception.BusinessException;
  7. import com.punchsettle.server.constant.ScratchActionTypeEnum;
  8. import com.punchsettle.server.dto.scratch.ScratchDto;
  9. import com.punchsettle.server.dto.scratch.ScratchQuery;
  10. import com.punchsettle.server.service.manager.IScratchManager;
  11. import com.punchsettle.server.utiis.UserUtils;
  12. import org.springframework.beans.BeanUtils;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.transaction.annotation.Transactional;
  15. import java.util.List;
  16. import java.util.Optional;
  17. /**
  18. * @author tyuio
  19. * @version 1.0.0
  20. * @description TODO
  21. * @date 2024/12/13 16:25
  22. */
  23. public class ScratchManagerImpl implements IScratchManager {
  24. @Autowired
  25. private IUserService userService;
  26. @Autowired
  27. private ILotteryScratchRecordService scratchRecordService;
  28. @Override
  29. @Transactional(rollbackFor = Exception.class)
  30. public void modifyScratchAmount(ScratchDto dto) {
  31. Long currentUserId = UserUtils.getCurrentUserId();
  32. User user = Optional.ofNullable(userService.getById(currentUserId)).orElseThrow(() -> BusinessException.fail("无法获取当前用户信息"));
  33. User updateUser = new User();
  34. updateUser.setId(user.getId());
  35. if (ScratchActionTypeEnum.INVEST.equals(dto.getActionType())) {
  36. updateUser.setLotteryInvestAmount(user.getLotteryInvestAmount().add(dto.getAmount()));
  37. }
  38. if (ScratchActionTypeEnum.WIN.equals(dto.getActionType())) {
  39. updateUser.setLotteryWinAmount(user.getLotteryWinAmount().add(dto.getAmount()));
  40. }
  41. userService.updateById(updateUser);
  42. LotteryScratchRecord scratchRecord = new LotteryScratchRecord();
  43. BeanUtils.copyProperties(dto, scratchRecord);
  44. dto.setId(null);
  45. scratchRecordService.insert(scratchRecord);
  46. }
  47. @Override
  48. @Transactional(rollbackFor = Exception.class)
  49. public void revokeScratchRecord(ScratchDto dto) {
  50. // 获取当前用户信息
  51. Long currentUserId = UserUtils.getCurrentUserId();
  52. User user = Optional.ofNullable(userService.getById(currentUserId)).orElseThrow(() -> BusinessException.fail("无法获取当前用户信息"));
  53. // 获取待撤销的刮刮乐记录
  54. LotteryScratchRecord scratchRecord = Optional.ofNullable(scratchRecordService.selectById(dto.getId())).orElseThrow(() -> BusinessException.fail("无法获取刮刮乐记录"));
  55. // 待更新的用户信息
  56. User updateUser = new User();
  57. updateUser.setId(user.getId());
  58. // 待更新的刮刮乐记录
  59. LotteryScratchRecord updateScratchRecord = new LotteryScratchRecord();
  60. updateScratchRecord.setId(scratchRecord.getId());
  61. // 撤销投入
  62. if (ScratchActionTypeEnum.INVEST.equals(scratchRecord.getActionType())) {
  63. if (scratchRecord.getAmount().compareTo(user.getLotteryInvestAmount()) > 0) {
  64. BusinessException.throwFail("撤销投入金额异常,用户已投入金额小于待撤销金额");
  65. }
  66. updateScratchRecord.setActionType(ScratchActionTypeEnum.REVOKE_INVEST);
  67. updateUser.setLotteryInvestAmount(user.getLotteryInvestAmount().subtract(scratchRecord.getAmount()));
  68. }
  69. // 撤销中奖
  70. if (ScratchActionTypeEnum.WIN.equals(scratchRecord.getActionType())) {
  71. if (scratchRecord.getAmount().compareTo(user.getLotteryWinAmount()) > 0) {
  72. BusinessException.throwFail("撤销中奖金额异常,用户已中奖金额小于待撤销金额");
  73. }
  74. updateScratchRecord.setActionType(ScratchActionTypeEnum.REVOKE_WIN);
  75. updateUser.setLotteryWinAmount(user.getLotteryWinAmount().subtract(scratchRecord.getAmount()));
  76. }
  77. // 更新用户
  78. userService.updateById(updateUser);
  79. // 更新刮刮乐记录
  80. scratchRecordService.update(updateScratchRecord);
  81. }
  82. @Override
  83. public List<ScratchDto> queryScratchRecord(ScratchQuery query) {
  84. return List.of();
  85. }
  86. }