From 54ef34c7d62acb35ed7b4928e58c8e9db3c90107 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 25 Nov 2021 10:20:32 +0800
Subject: [PATCH] 20211125 fish
---
src/test/java/com/xcong/excoin/HuobiTest.java | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++
src/main/resources/mapper/fish/MemberAccountGoldDao.xml | 2
src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java | 9 ++--
src/main/java/com/xcong/excoin/modules/fish/dto/CoinGoldExchangeDto.java | 2 +
4 files changed, 109 insertions(+), 5 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java b/src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java
index 822a233..63fcbd0 100644
--- a/src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java
+++ b/src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java
@@ -17,6 +17,7 @@
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import javax.validation.Valid;
@Slf4j
@Api(value = "MemberCannonController", tags = "炮台接口类")
@@ -52,7 +53,7 @@
*/
@ApiOperation(value = "代币金币互转")
@PostMapping(value = "/coinGoldExchange")
- public Result coinGoldExchange(@RequestBody CoinGoldExchangeDto coinGoldExchangeDto) {
+ public Result coinGoldExchange(@RequestBody @Valid CoinGoldExchangeDto coinGoldExchangeDto) {
return memberCannonService.coinGoldExchange(coinGoldExchangeDto);
}
@@ -71,7 +72,7 @@
@ApiOperation(value = "获取大炮列表")
@ApiResponses({@ApiResponse( code = 200, message = "success", response = CannonSettingVo.class)})
@PostMapping(value = "/getCannons")
- public Result getCannons(@RequestBody GetCannonsDto getCannonsDto) {
+ public Result getCannons(@RequestBody @Valid GetCannonsDto getCannonsDto) {
return memberCannonService.getCannons(getCannonsDto);
}
@@ -80,7 +81,7 @@
*/
@ApiOperation(value = "兑换大炮")
@PostMapping(value = "/cannonExchange")
- public Result cannonExchange(@RequestBody CannonExchangeDto cannonExchangeDto) {
+ public Result cannonExchange(@RequestBody @Valid CannonExchangeDto cannonExchangeDto) {
return memberCannonService.cannonExchange(cannonExchangeDto);
}
@@ -99,7 +100,7 @@
*/
@ApiOperation(value = "捕鱼")
@PostMapping(value = "/fishing")
- public Result fishing(@RequestBody FishingDto fishingDto) {
+ public Result fishing(@RequestBody @Valid FishingDto fishingDto) {
return memberCannonService.fishing(fishingDto);
}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/dto/CoinGoldExchangeDto.java b/src/main/java/com/xcong/excoin/modules/fish/dto/CoinGoldExchangeDto.java
index 8404623..07ab17b 100644
--- a/src/main/java/com/xcong/excoin/modules/fish/dto/CoinGoldExchangeDto.java
+++ b/src/main/java/com/xcong/excoin/modules/fish/dto/CoinGoldExchangeDto.java
@@ -4,6 +4,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@@ -12,6 +13,7 @@
public class CoinGoldExchangeDto {
@NotNull(message = "兑换金额不能为空")
+ @DecimalMin(value = "1",message = "兑换数量最小为1")
@ApiModelProperty(value = "兑换金额", example = "100")
private BigDecimal balance;
diff --git a/src/main/resources/mapper/fish/MemberAccountGoldDao.xml b/src/main/resources/mapper/fish/MemberAccountGoldDao.xml
index bf8057b..e9ceec9 100644
--- a/src/main/resources/mapper/fish/MemberAccountGoldDao.xml
+++ b/src/main/resources/mapper/fish/MemberAccountGoldDao.xml
@@ -11,7 +11,7 @@
<set>
<if test="availableBalance != null">
available_balance = (
- case when IFNULL(available_balance, 0) + #{available_balance}>0 then IFNULL(available_balance, 0) + #{availableBalance} else 0 end
+ case when IFNULL(available_balance, 0) + #{availableBalance}>0 then IFNULL(available_balance, 0) + #{availableBalance} else 0 end
),
</if>
<if test="totalBalance != null">
diff --git a/src/test/java/com/xcong/excoin/HuobiTest.java b/src/test/java/com/xcong/excoin/HuobiTest.java
index 1491015..0710303 100644
--- a/src/test/java/com/xcong/excoin/HuobiTest.java
+++ b/src/test/java/com/xcong/excoin/HuobiTest.java
@@ -1,13 +1,31 @@
package com.xcong.excoin;
+import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONObject;
import com.huobi.client.SubscriptionClient;
import com.huobi.client.SubscriptionOptions;
import com.huobi.client.model.Candlestick;
import com.huobi.client.model.enums.CandlestickInterval;
+import com.xcong.excoin.common.LoginUserUtils;
+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.*;
+import com.xcong.excoin.modules.fish.dto.CoinGoldExchangeDto;
+import com.xcong.excoin.modules.fish.entity.CannonAccountMoneyChange;
+import com.xcong.excoin.modules.fish.entity.CannonExchangeRatio;
+import com.xcong.excoin.modules.fish.entity.MemberAccountGold;
+import com.xcong.excoin.modules.fish.service.MemberCannonService;
+import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
+import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
+import com.xcong.excoin.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.List;
/**
* @author wzy
@@ -16,6 +34,89 @@
@Slf4j
@SpringBootTest
public class HuobiTest {
+ @Resource
+ MemberAccountGoldDao memberAccountGoldDao;
+ @Resource
+ MemberWalletCoinDao memberWalletCoinDao;
+ @Resource
+ private MemberCannonService memberCannonService;
+ @Resource
+ CannonAccountMoneyChangeDao cannonAccountMoneyChangeDao;
+ @Resource
+ CannonOwnRecordDao cannonOwnRecordDao;
+ @Resource
+ CannonSettingDao cannonSettingDao;
+ @Resource
+ CannonGameRecordDao cannonGameRecordDao;
+ @Resource
+ RedisUtils redisUtils;
+ @Resource
+ private CoinService coinService;
+ @Test
+ public void exchange(){
+
+ CoinGoldExchangeDto coinGoldExchangeDto = new CoinGoldExchangeDto();
+ coinGoldExchangeDto.setBalance(new BigDecimal(1));
+ coinGoldExchangeDto.setType(2);
+ BigDecimal balance = coinGoldExchangeDto.getBalance();
+ if (balance.compareTo(BigDecimal.ZERO) <= 0) {
+// return Result.fail("兑换金额不能小于或等于0");
+ }
+ Long memberId = 3L;
+ //获取兑换比例
+ List<CannonExchangeRatio> cannonExchangeRatios = cannonSettingDao.selectCannonExchangeRatio();
+ if(CollUtil.isEmpty(cannonExchangeRatios)){
+// return Result.fail("系统繁忙请稍候重试");
+ }
+ CannonExchangeRatio cannonExchangeRatio = cannonExchangeRatios.get(0);
+ Integer type = coinGoldExchangeDto.getType();
+ //1:金币兑换1代币 2:1代币兑换金币
+ if(type == 1){
+ MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId);
+ MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.XCT.name());
+ if(balance.compareTo(memberAccountGold.getAvailableBalance()) > 0){
+// return Result.fail("金币不足");
+ }
+ BigDecimal coinRatio = cannonExchangeRatio.getCoinRatio();
+ BigDecimal divide = balance.divide(coinRatio).setScale(8,BigDecimal.ROUND_DOWN);
+ //金币账户减少
+ 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());
+ if(balance.compareTo(memberWalletCoinEntity.getAvailableBalance()) > 0){
+// return Result.fail("代币不足");
+ }
+ BigDecimal coinRatio = cannonExchangeRatio.getCoinRatio();
+ BigDecimal multiply = balance.multiply(coinRatio);
+ //金币账户增加
+ 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);
+ }
+ }
@Test
public void websocketTest() {
--
Gitblit v1.9.1