From f5e6133809c553cfd9fb28ee61019927c547c374 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Wed, 08 Dec 2021 15:58:33 +0800 Subject: [PATCH] 20211208 fish --- src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java | 215 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 195 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java b/src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java index ee974e7..fd5277a 100644 --- a/src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java +++ b/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; @@ -10,19 +12,11 @@ import com.xcong.excoin.common.enumerates.CoinTypeEnum; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.modules.coin.service.CoinService; -import com.xcong.excoin.modules.fish.dao.CannonAccountMoneyChangeDao; -import com.xcong.excoin.modules.fish.dao.CannonOwnRecordDao; -import com.xcong.excoin.modules.fish.dao.CannonSettingDao; -import com.xcong.excoin.modules.fish.dao.MemberAccountGoldDao; -import com.xcong.excoin.modules.fish.dto.CannonExchangeDto; -import com.xcong.excoin.modules.fish.dto.CoinGoldExchangeDto; -import com.xcong.excoin.modules.fish.dto.GetCannonsDto; -import com.xcong.excoin.modules.fish.dto.GoldExchangeDto; +import com.xcong.excoin.modules.fish.dao.*; +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.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; @@ -36,21 +30,25 @@ public class MemberCannonServiceImpl extends ServiceImpl<CannonOwnRecordDao, CannonOwnRecord> implements MemberCannonService { @Resource - CannonSettingDao cannonSettingDao; - @Resource MemberAccountGoldDao memberAccountGoldDao; - @Resource - CannonAccountMoneyChangeDao cannonAccountMoneyChangeDao; @Resource MemberWalletCoinDao memberWalletCoinDao; @Resource + private MemberCannonService memberCannonService; + @Resource + CannonAccountMoneyChangeDao cannonAccountMoneyChangeDao; + @Resource CannonOwnRecordDao cannonOwnRecordDao; + @Resource + CannonSettingDao cannonSettingDao; + @Resource + CannonGameRecordDao cannonGameRecordDao; + @Resource + CannonWinRecordDao cannonWinRecordDao; @Resource RedisUtils redisUtils; @Resource private CoinService coinService; - @Resource - private MemberCannonService memberCannonService; @Override public Result coinGoldExchange(CoinGoldExchangeDto coinGoldExchangeDto) { @@ -69,7 +67,7 @@ //1:金币兑换1代币 2:1代币兑换金币 if(type == 1){ MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId); - MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.XCT.name()); + MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.XCC.name()); if(balance.compareTo(memberAccountGold.getAvailableBalance()) > 0){ return Result.fail("金币不足"); } @@ -91,7 +89,7 @@ cannonAccountMoneyChangeDao.insert(cannonAccountMoneyChange); }else if(type == 2){ MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId); - MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.XCT.name()); + MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.XCC.name()); if(balance.compareTo(memberWalletCoinEntity.getAvailableBalance()) > 0){ return Result.fail("代币不足"); } @@ -237,8 +235,185 @@ return Result.ok(cannonOwnRecords); } + @Override + public Result fishing(FishingDto fishingDto) { + Long memberId = LoginUserUtils.getAppLoginUser().getId(); + Integer goldWin = fishingDto.getGoldWin() == null?0:fishingDto.getGoldWin(); + if(goldWin < 0){ + return Result.fail("请求异常,请刷新页面"); + } + Long cannonOwnId = fishingDto.getCannonOwnId(); + List<CannonOwnRecord> cannonOwnRecords = cannonOwnRecordDao.selectCannonOwnRecordsByIdAndMemberId(cannonOwnId,memberId); + if(CollUtil.isEmpty(cannonOwnRecords)){ + Result.fail("请求异常,请刷新页面"); + } + //消耗金币 = 每发炮弹的消耗 - 获得金币; + CannonOwnRecord cannonOwnRecord = cannonOwnRecords.get(0); + CannonSetting cannonSetting = cannonSettingDao.selectCannonSettingByCannonCode(cannonOwnRecord.getCannonCode()); + BigDecimal goldConsume = cannonSetting.getGoldConsume().subtract(new BigDecimal(goldWin)).setScale(0,BigDecimal.ROUND_DOWN); + MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId); + memberCannonService.updateTotalBalanceAndAvailableBalance(memberAccountGold.getId(),goldConsume.negate(),goldConsume.negate(),null); + //增加一条游戏记录 + CannonGameRecord cannonGameRecord = new CannonGameRecord(); + cannonGameRecord.setMemberId(memberId); + cannonGameRecord.setCannonOwnId(cannonOwnRecord.getId()); + cannonGameRecord.setCannonName(cannonOwnRecord.getCannonName()); + cannonGameRecord.setCannonCode(cannonOwnRecord.getCannonCode()); + cannonGameRecord.setGoldConsume(cannonSetting.getGoldConsume()); + cannonGameRecord.setGoldReward(new BigDecimal(goldWin)); + cannonGameRecordDao.insert(cannonGameRecord); + + return Result.ok("success"); + } + + @Override + public Result getAccountAvaBanlace() { + Long memberId = LoginUserUtils.getAppLoginUser().getId(); + MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId); + MemberWalletCoinEntity memberWalletCoinEntityXCC = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.XCC.name()); + MemberWalletCoinEntity memberWalletCoinEntityUSDT = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.USDT.name()); + AccountAvaBanlaceVo accountAvaBanlaceVo = new AccountAvaBanlaceVo(); +// accountAvaBanlaceVo.setMemberId(memberId); + accountAvaBanlaceVo.setGoldAvailableBalance(memberAccountGold.getAvailableBalance() == null?BigDecimal.ZERO:memberAccountGold.getAvailableBalance()); + accountAvaBanlaceVo.setCoinAvailableBalance(memberWalletCoinEntityXCC.getAvailableBalance() == null?BigDecimal.ZERO:memberWalletCoinEntityXCC.getAvailableBalance()); + accountAvaBanlaceVo.setUsdtAvailableBalance(memberWalletCoinEntityUSDT.getAvailableBalance() == null?BigDecimal.ZERO:memberWalletCoinEntityUSDT.getAvailableBalance()); + 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()); } -- Gitblit v1.9.1