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 | 238 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 217 insertions(+), 21 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 eb9bb9c..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("金币不足");
}
@@ -79,9 +77,19 @@
memberCannonService.updateTotalBalanceAndAvailableBalance(memberAccountGold.getId(),balance.negate(),balance.negate(),null);
//代币账户增加
coinService.updateWalletBalance(memberWalletCoinEntity.getId(),divide,divide,null);
+
+ CannonAccountMoneyChange cannonAccountMoneyChange = new CannonAccountMoneyChange();
+ cannonAccountMoneyChange.setMemberId(memberId);
+ cannonAccountMoneyChange.setAmount(balance.negate());
+ cannonAccountMoneyChange.setType(2);
+ cannonAccountMoneyChange.setContent("金币兑换");
+ cannonAccountMoneyChange.setChangeBalance(balance);
+ cannonAccountMoneyChange.setChangeBefore(memberAccountGold.getAvailableBalance());
+ cannonAccountMoneyChange.setChangeAfter(memberAccountGold.getAvailableBalance().subtract(balance));
+ 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("代币不足");
}
@@ -91,6 +99,16 @@
memberCannonService.updateTotalBalanceAndAvailableBalance(memberAccountGold.getId(),multiply,multiply,null);
//代币账户减少
coinService.updateWalletBalance(memberWalletCoinEntity.getId(),balance.negate(),balance.negate(),null);
+
+ CannonAccountMoneyChange cannonAccountMoneyChange = new CannonAccountMoneyChange();
+ cannonAccountMoneyChange.setMemberId(memberId);
+ cannonAccountMoneyChange.setAmount(balance);
+ cannonAccountMoneyChange.setType(3);
+ cannonAccountMoneyChange.setContent("兑换金币");
+ cannonAccountMoneyChange.setChangeBalance(balance);
+ cannonAccountMoneyChange.setChangeBefore(memberWalletCoinEntity.getAvailableBalance());
+ cannonAccountMoneyChange.setChangeAfter(memberWalletCoinEntity.getAvailableBalance().add(balance));
+ cannonAccountMoneyChangeDao.insert(cannonAccountMoneyChange);
}
return Result.ok("兑换成功");
}
@@ -158,7 +176,8 @@
CannonAccountMoneyChange cannonAccountMoneyChange = new CannonAccountMoneyChange();
cannonAccountMoneyChange.setMemberId(memberId);
cannonAccountMoneyChange.setAmount(exchangePrice);
- cannonAccountMoneyChange.setType(2);
+ cannonAccountMoneyChange.setType(1);
+ cannonAccountMoneyChange.setContent("购买炮塔");
cannonAccountMoneyChange.setChangeBalance(exchangePrice);
cannonAccountMoneyChange.setChangeBefore(memberWalletCoinEntity.getAvailableBalance());
cannonAccountMoneyChange.setChangeAfter(memberWalletCoinEntity.getAvailableBalance().subtract(exchangePrice));
@@ -216,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