xiaoyong931011
2021-12-08 f5e6133809c553cfd9fb28ee61019927c547c374
src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java
@@ -3,6 +3,8 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -14,10 +16,7 @@
import com.xcong.excoin.modules.fish.dto.*;
import com.xcong.excoin.modules.fish.entity.*;
import com.xcong.excoin.modules.fish.service.MemberCannonService;
import com.xcong.excoin.modules.fish.vo.AccountAvaBanlaceVo;
import com.xcong.excoin.modules.fish.vo.CannonSettingVo;
import com.xcong.excoin.modules.fish.vo.GoldAccountVo;
import com.xcong.excoin.modules.fish.vo.OwnCannonVo;
import com.xcong.excoin.modules.fish.vo.*;
import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
import com.xcong.excoin.utils.RedisUtils;
@@ -44,6 +43,8 @@
    CannonSettingDao cannonSettingDao;
    @Resource
    CannonGameRecordDao cannonGameRecordDao;
    @Resource
    CannonWinRecordDao cannonWinRecordDao;
    @Resource
    RedisUtils redisUtils;
    @Resource
@@ -279,8 +280,140 @@
        return Result.ok(accountAvaBanlaceVo);
    }
    @Override
    public Result getAwards() {
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
//        Long memberId = 1L;
        AwardsVo awardsVo = cannonOwnRecordDao.getAwards();
        return Result.ok(awardsVo);
    }
    @Override
    public Result lotteryDraw(LotteryDrawDto lotteryDrawDto) {
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
//        Long memberId = 1L;
        //获取每次抽奖需要的USDT数量
        CannonAwardSet cannonAwardSet = cannonOwnRecordDao.getCannonAwardSet();
        if(ObjectUtil.isEmpty(cannonAwardSet)){
            Result.fail("活动还没开始,请稍候");
        }
        BigDecimal consume = cannonAwardSet.getConsume() == null ? BigDecimal.ZERO : cannonAwardSet.getConsume();
        if(consume.compareTo(BigDecimal.ZERO) <= 0){
            Result.fail("活动还没开始,请稍候");
        }
        //验证账户USDT余额是否足够
        MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.USDT.name());
        BigDecimal availableBalance = memberWalletCoinEntity.getAvailableBalance() == null ? BigDecimal.ZERO : memberWalletCoinEntity.getAvailableBalance();
        if(availableBalance.compareTo(consume) < 0){
            Result.fail("用户USDT余额不足");
        }
        //用户USDT余额减少
        coinService.updateWalletBalance(memberWalletCoinEntity.getId(),consume.negate(),consume.negate(),null);
        //增加一条抽奖记录
        CannonAccountMoneyChange cannonAccountMoneyChange = new CannonAccountMoneyChange();
        cannonAccountMoneyChange.setMemberId(memberId);
        cannonAccountMoneyChange.setAmount(consume);
        cannonAccountMoneyChange.setType(4);
        cannonAccountMoneyChange.setContent("抽奖");
        cannonAccountMoneyChange.setChangeBalance(consume);
        cannonAccountMoneyChange.setChangeBefore(memberWalletCoinEntity.getAvailableBalance());
        cannonAccountMoneyChange.setChangeAfter(memberWalletCoinEntity.getAvailableBalance().subtract(consume));
        cannonAccountMoneyChangeDao.insert(cannonAccountMoneyChange);
        //抽奖品
        CannonAwardVo award = getAward(memberId);
        CannonWinRecord cannonWinRecord = new CannonWinRecord();
        cannonWinRecord.setMemberId(memberId);
        cannonWinRecord.setAwardName(award.getName()+"*"+award.getQuantity());
        cannonWinRecord.setConsumeNum(consume);
        cannonWinRecordDao.insert(cannonWinRecord);
        return Result.ok(award);
    }
    @Override
    public Result getOwnAwards(CannonWinRecordDto cannonWinRecordDto) {
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        Page<CannonWinRecordVo> page = new Page<>(cannonWinRecordDto.getPageNum(), cannonWinRecordDto.getPageSize());
        CannonWinRecord cannonWinRecord = new CannonWinRecord();
        cannonWinRecord.setMemberId(memberId);
        IPage<CannonWinRecordVo> list = cannonSettingDao.findCannonWinRecordInPage(page, cannonWinRecord);
        return Result.ok(list);
    }
    @Override
    public Result getListAwards() {
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        List<CannonWinRecordVo> list = cannonSettingDao.findCannonWinRecordList();
        return Result.ok(list);
    }
    private CannonAwardVo getAward(Long memberId) {
        CannonAwardVo cannonAwardVo = new CannonAwardVo();
        //获取所有的奖品列表
        List<CannonAward> cannonAwards = cannonOwnRecordDao.selectCannonAward();
        if(CollUtil.isNotEmpty(cannonAwards)){
            CannonAward cannonAward = RandomUtil.randomEle(cannonAwards);
            //获得金币
            if("GOLD".equals(cannonAward.getCode())){
                BigDecimal quantity = new BigDecimal(cannonAward.getQuantity());
                MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId);
                memberCannonService.updateTotalBalanceAndAvailableBalance(memberAccountGold.getId(),quantity,quantity,null);
                cannonAwardVo.setName(cannonAward.getName());
                cannonAwardVo.setImage(cannonAward.getImage());
                cannonAwardVo.setQuantity(cannonAward.getQuantity());
            }else if("COIN".equals(cannonAward.getCode())){
                BigDecimal quantity = new BigDecimal(cannonAward.getQuantity());
                MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.XCC.name());
                coinService.updateWalletBalance(memberWalletCoinEntity.getId(),quantity,quantity,null);
                cannonAwardVo.setName(cannonAward.getName());
                cannonAwardVo.setImage(cannonAward.getImage());
                cannonAwardVo.setQuantity(cannonAward.getQuantity());
            }else if("USDT".equals(cannonAward.getCode())){
                BigDecimal quantity = new BigDecimal(cannonAward.getQuantity());
                MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.USDT.name());
                coinService.updateWalletBalance(memberWalletCoinEntity.getId(),quantity,quantity,null);
                cannonAwardVo.setName(cannonAward.getName());
                cannonAwardVo.setImage(cannonAward.getImage());
                cannonAwardVo.setQuantity(cannonAward.getQuantity());
            }else{
                CannonSetting cannonSetting = cannonSettingDao.selectCannonSettingByCannonCode(cannonAward.getCode());
                List<CannonOwnRecord> cannonOwnRecords = cannonOwnRecordDao.selectCannonOwnRecordsByMemberIdAndCannonCode(memberId, cannonAward.getCode());
                Integer cannonAccountMoneyChanges = cannonOwnRecordDao.selectCannonAccountMoneyChangeByMemberId(memberId);
                //抽奖次数小于十次的抽不到炮台
                if(CollUtil.isEmpty(cannonOwnRecords) && cannonAccountMoneyChanges > 10){
                    //增加一条拥有记录【cannon_own_record】
                    CannonOwnRecord cannonOwnRecord = new CannonOwnRecord();
                    cannonOwnRecord.setMemberId(memberId);
                    cannonOwnRecord.setCannonUuid(UUID.randomUUID().toString());
                    cannonOwnRecord.setCannonCode(cannonSetting.getCode());
                    cannonOwnRecord.setCannonName(cannonSetting.getName());
                    cannonOwnRecord.setCannonPrice(cannonSetting.getExchangePrice());
                    cannonOwnRecord.setType(1);
                    cannonOwnRecordDao.insert(cannonOwnRecord);
                    cannonAwardVo.setName(cannonAward.getName());
                    cannonAwardVo.setImage(cannonAward.getImage());
                    cannonAwardVo.setQuantity(cannonAward.getQuantity());
                }else{
                    CannonAward cannonAwardGold = cannonOwnRecordDao.selectCannonAwardByCode("GOLD");
                    BigDecimal quantity = new BigDecimal(cannonAwardGold.getQuantity());
                    MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId);
                    memberCannonService.updateTotalBalanceAndAvailableBalance(memberAccountGold.getId(),quantity,quantity,null);
                    cannonAwardVo.setName(cannonAwardGold.getName());
                    cannonAwardVo.setImage(cannonAwardGold.getImage());
                    cannonAwardVo.setQuantity(cannonAwardGold.getQuantity());
                }
            }
        }
        return cannonAwardVo;
    }
    public static void main(String[] args) {
        System.out.println(UUID.randomUUID().toString());
    }