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 * @date 2020-05-22 **/ @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 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() { } public static void main(String[] args) { System.out.println("========价格更新开启======="); SubscriptionOptions subscriptionOptions = new SubscriptionOptions(); //3秒重试 subscriptionOptions.setConnectionDelayOnFailure(5); subscriptionOptions.setUri("wss://api.hadax.com/ws"); SubscriptionClient subscriptionClient = SubscriptionClient.create("", "", subscriptionOptions); // subscriptionClient.subscribeTradeEvent("btcusdt,ethusdt,xrpusdt,ltcusdt,bchusdt,eosusdt,etcusdt", tradeEvent -> { // log.info("{}", JSONObject.toJSONString(tradeEvent)); // }); subscriptionClient.subscribeCandlestickEvent("btcusdt,ethusdt,eosusdt,etcusdt,ltcusdt,bchusdt,xrpusdt", CandlestickInterval.DAY1, (candlestickEvent) -> { log.info("{}", JSONObject.toJSONString(candlestickEvent)); }); } }