From de00eeb45e3aee0cbb5f62210c05ef32bb7478b4 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 30 Nov 2021 14:22:49 +0800
Subject: [PATCH] fix

---
 src/test/java/com/xcong/excoin/HuobiTest.java |  101 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 101 insertions(+), 0 deletions(-)

diff --git a/src/test/java/com/xcong/excoin/HuobiTest.java b/src/test/java/com/xcong/excoin/HuobiTest.java
index 1491015..7b43598 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.XCC.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.XCC.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