|  |  |  | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | 
|---|
|  |  |  | @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() { | 
|---|