fix
Helius
2021-11-30 c13c98374281a6316348979841a2fb249575ac26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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));
        });
    }
}