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<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() {
|
}
|
|
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));
|
});
|
}
|
}
|