| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- package com.punchsettle.server.service.manager.impl;
- import com.punchsettle.server.atomic.entity.LotteryScratchRecord;
- import com.punchsettle.server.atomic.entity.User;
- import com.punchsettle.server.atomic.service.ILotteryScratchRecordService;
- import com.punchsettle.server.atomic.service.IUserService;
- import com.punchsettle.server.common.exception.BusinessException;
- import com.punchsettle.server.constant.ScratchActionTypeEnum;
- import com.punchsettle.server.dto.scratch.ScratchDto;
- import com.punchsettle.server.dto.scratch.ScratchQuery;
- import com.punchsettle.server.service.manager.IScratchManager;
- import com.punchsettle.server.utiis.UserUtils;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.util.CollectionUtils;
- import org.springframework.util.StringUtils;
- import java.util.List;
- import java.util.Objects;
- import java.util.Optional;
- /**
- * @author tyuio
- * @version 1.0.0
- * @description TODO
- * @date 2024/12/13 16:25
- */
- @Service
- public class ScratchManagerImpl implements IScratchManager {
- @Autowired
- private IUserService userService;
- @Autowired
- private ILotteryScratchRecordService scratchRecordService;
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void addScratchRecord(ScratchDto dto) {
- if (ScratchActionTypeEnum.REVOKE_WIN.equals(dto.getActionType()) || ScratchActionTypeEnum.REVOKE_INVEST.equals(dto.getActionType())) {
- BusinessException.throwFail("传入了错误的记录动作类型");
- }
- Long currentUserId = UserUtils.getCurrentUserId();
- User user = Optional.ofNullable(userService.getById(currentUserId)).orElseThrow(() -> BusinessException.fail("无法获取当前用户信息"));
- User updateUser = new User();
- updateUser.setId(user.getId());
- if (ScratchActionTypeEnum.INVEST.equals(dto.getActionType())) {
- updateUser.setLotteryInvestAmount(user.getLotteryInvestAmount().add(dto.getAmount()));
- }
- if (ScratchActionTypeEnum.WIN.equals(dto.getActionType())) {
- updateUser.setLotteryWinAmount(user.getLotteryWinAmount().add(dto.getAmount()));
- }
- userService.updateById(updateUser);
- LotteryScratchRecord scratchRecord = new LotteryScratchRecord();
- BeanUtils.copyProperties(dto, scratchRecord);
- scratchRecord.setId(null);
- scratchRecord.setUserId(user.getId());
- scratchRecordService.insert(scratchRecord);
- }
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void revokeScratchRecord(ScratchDto dto) {
- if (ScratchActionTypeEnum.WIN.equals(dto.getActionType()) || ScratchActionTypeEnum.INVEST.equals(dto.getActionType())) {
- BusinessException.throwFail("传入了错误的记录动作类型");
- }
- // 获取当前用户信息
- Long currentUserId = UserUtils.getCurrentUserId();
- User user = Optional.ofNullable(userService.getById(currentUserId)).orElseThrow(() -> BusinessException.fail("无法获取当前用户信息"));
- // 获取待撤销的刮刮乐记录
- LotteryScratchRecord scratchRecord = Optional.ofNullable(scratchRecordService.selectById(dto.getId())).orElseThrow(() -> BusinessException.fail("无法获取刮刮乐记录"));
- // 待更新的用户信息
- User updateUser = new User();
- updateUser.setId(user.getId());
- // 待更新的刮刮乐记录
- LotteryScratchRecord updateScratchRecord = new LotteryScratchRecord();
- updateScratchRecord.setId(scratchRecord.getId());
- // 撤销投入
- if (ScratchActionTypeEnum.INVEST.equals(scratchRecord.getActionType())) {
- if (scratchRecord.getAmount().compareTo(user.getLotteryInvestAmount()) > 0) {
- BusinessException.throwFail("撤销投入金额异常,用户已投入金额小于待撤销金额");
- }
- updateScratchRecord.setActionType(ScratchActionTypeEnum.REVOKE_INVEST);
- updateUser.setLotteryInvestAmount(user.getLotteryInvestAmount().subtract(scratchRecord.getAmount()));
- }
- // 撤销中奖
- if (ScratchActionTypeEnum.WIN.equals(scratchRecord.getActionType())) {
- if (scratchRecord.getAmount().compareTo(user.getLotteryWinAmount()) > 0) {
- BusinessException.throwFail("撤销中奖金额异常,用户已中奖金额小于待撤销金额");
- }
- updateScratchRecord.setActionType(ScratchActionTypeEnum.REVOKE_WIN);
- updateUser.setLotteryWinAmount(user.getLotteryWinAmount().subtract(scratchRecord.getAmount()));
- }
- // 更新用户
- userService.updateById(updateUser);
- // 更新刮刮乐记录
- scratchRecordService.update(updateScratchRecord);
- }
- @Override
- public List<ScratchDto> queryScratchRecord(ScratchQuery query) {
- if (Objects.isNull(query) || !StringUtils.hasText(query.getStartDate()) || !StringUtils.hasText(query.getEndDate())) {
- BusinessException.throwFail("请选择待查询的时间范围");
- }
- query.setStartDate(String.format("%s 00:00:00.000", query.getStartDate()));
- query.setEndDate(String.format("%s 23:59:59.999", query.getEndDate()));
- // 获取当前用户信息
- Long currentUserId = UserUtils.getCurrentUserId();
- User user = Optional.ofNullable(userService.getById(currentUserId)).orElseThrow(() -> BusinessException.fail("无法获取当前用户信息"));
- query.setUserId(user.getId());
- List<LotteryScratchRecord> scratchRecords = scratchRecordService.listByCondition(query);
- if (CollectionUtils.isEmpty(scratchRecords)) {
- return List.of();
- }
- return scratchRecords.stream().map(record -> {
- ScratchDto dto = new ScratchDto();
- BeanUtils.copyProperties(record, dto);
- return dto;
- }).toList();
- }
- }
|