ScratchManagerImpl.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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.stereotype.Service;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import org.springframework.util.CollectionUtils;
  17. import org.springframework.util.StringUtils;
  18. import java.util.List;
  19. import java.util.Objects;
  20. import java.util.Optional;
  21. /**
  22. * @author tyuio
  23. * @version 1.0.0
  24. * @description TODO
  25. * @date 2024/12/13 16:25
  26. */
  27. @Service
  28. public class ScratchManagerImpl implements IScratchManager {
  29. @Autowired
  30. private IUserService userService;
  31. @Autowired
  32. private ILotteryScratchRecordService scratchRecordService;
  33. @Override
  34. @Transactional(rollbackFor = Exception.class)
  35. public void addScratchRecord(ScratchDto dto) {
  36. if (ScratchActionTypeEnum.REVOKE_WIN.equals(dto.getActionType()) || ScratchActionTypeEnum.REVOKE_INVEST.equals(dto.getActionType())) {
  37. BusinessException.throwFail("传入了错误的记录动作类型");
  38. }
  39. Long currentUserId = UserUtils.getCurrentUserId();
  40. User user = Optional.ofNullable(userService.getById(currentUserId)).orElseThrow(() -> BusinessException.fail("无法获取当前用户信息"));
  41. User updateUser = new User();
  42. updateUser.setId(user.getId());
  43. if (ScratchActionTypeEnum.INVEST.equals(dto.getActionType())) {
  44. updateUser.setLotteryInvestAmount(user.getLotteryInvestAmount().add(dto.getAmount()));
  45. }
  46. if (ScratchActionTypeEnum.WIN.equals(dto.getActionType())) {
  47. updateUser.setLotteryWinAmount(user.getLotteryWinAmount().add(dto.getAmount()));
  48. }
  49. userService.updateById(updateUser);
  50. LotteryScratchRecord scratchRecord = new LotteryScratchRecord();
  51. BeanUtils.copyProperties(dto, scratchRecord);
  52. scratchRecord.setId(null);
  53. scratchRecord.setUserId(user.getId());
  54. scratchRecordService.insert(scratchRecord);
  55. }
  56. @Override
  57. @Transactional(rollbackFor = Exception.class)
  58. public void revokeScratchRecord(ScratchDto dto) {
  59. if (ScratchActionTypeEnum.WIN.equals(dto.getActionType()) || ScratchActionTypeEnum.INVEST.equals(dto.getActionType())) {
  60. BusinessException.throwFail("传入了错误的记录动作类型");
  61. }
  62. // 获取当前用户信息
  63. Long currentUserId = UserUtils.getCurrentUserId();
  64. User user = Optional.ofNullable(userService.getById(currentUserId)).orElseThrow(() -> BusinessException.fail("无法获取当前用户信息"));
  65. // 获取待撤销的刮刮乐记录
  66. LotteryScratchRecord scratchRecord = Optional.ofNullable(scratchRecordService.selectById(dto.getId())).orElseThrow(() -> BusinessException.fail("无法获取刮刮乐记录"));
  67. // 待更新的用户信息
  68. User updateUser = new User();
  69. updateUser.setId(user.getId());
  70. // 待更新的刮刮乐记录
  71. LotteryScratchRecord updateScratchRecord = new LotteryScratchRecord();
  72. updateScratchRecord.setId(scratchRecord.getId());
  73. // 撤销投入
  74. if (ScratchActionTypeEnum.INVEST.equals(scratchRecord.getActionType())) {
  75. if (scratchRecord.getAmount().compareTo(user.getLotteryInvestAmount()) > 0) {
  76. BusinessException.throwFail("撤销投入金额异常,用户已投入金额小于待撤销金额");
  77. }
  78. updateScratchRecord.setActionType(ScratchActionTypeEnum.REVOKE_INVEST);
  79. updateUser.setLotteryInvestAmount(user.getLotteryInvestAmount().subtract(scratchRecord.getAmount()));
  80. }
  81. // 撤销中奖
  82. if (ScratchActionTypeEnum.WIN.equals(scratchRecord.getActionType())) {
  83. if (scratchRecord.getAmount().compareTo(user.getLotteryWinAmount()) > 0) {
  84. BusinessException.throwFail("撤销中奖金额异常,用户已中奖金额小于待撤销金额");
  85. }
  86. updateScratchRecord.setActionType(ScratchActionTypeEnum.REVOKE_WIN);
  87. updateUser.setLotteryWinAmount(user.getLotteryWinAmount().subtract(scratchRecord.getAmount()));
  88. }
  89. // 更新用户
  90. userService.updateById(updateUser);
  91. // 更新刮刮乐记录
  92. scratchRecordService.update(updateScratchRecord);
  93. }
  94. @Override
  95. public List<ScratchDto> queryScratchRecord(ScratchQuery query) {
  96. if (Objects.isNull(query) || !StringUtils.hasText(query.getStartDate()) || !StringUtils.hasText(query.getEndDate())) {
  97. BusinessException.throwFail("请选择待查询的时间范围");
  98. }
  99. query.setStartDate(String.format("%s 00:00:00.000", query.getStartDate()));
  100. query.setEndDate(String.format("%s 23:59:59.999", query.getEndDate()));
  101. // 获取当前用户信息
  102. Long currentUserId = UserUtils.getCurrentUserId();
  103. User user = Optional.ofNullable(userService.getById(currentUserId)).orElseThrow(() -> BusinessException.fail("无法获取当前用户信息"));
  104. query.setUserId(user.getId());
  105. List<LotteryScratchRecord> scratchRecords = scratchRecordService.listByCondition(query);
  106. if (CollectionUtils.isEmpty(scratchRecords)) {
  107. return List.of();
  108. }
  109. return scratchRecords.stream().map(record -> {
  110. ScratchDto dto = new ScratchDto();
  111. BeanUtils.copyProperties(record, dto);
  112. return dto;
  113. }).toList();
  114. }
  115. }