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