peternameyakj
2024-07-21 25e1d54f2295934446473fe85cf022fa6140b4e0
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
package project.monitor.internal;
 
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
import kernel.util.ThreadUtils;
//import cn.hutool.core.thread.ThreadUtil;
import project.monitor.AdminAutoMonitorIndexService;
import project.monitor.bonus.AutoMonitorSettleAddressConfigService;
import project.monitor.bonus.model.SettleAddressConfig;
import project.monitor.etherscan.EtheBalance;
import project.monitor.etherscan.EtherscanRemoteService;
 
public class AdminAutoMonitorIndexServiceImpl implements AdminAutoMonitorIndexService {
    
    private EtherscanRemoteService etherscanRemoteService;
    
    private AutoMonitorSettleAddressConfigService autoMonitorSettleAddressConfigService;
    
    private static final Logger logger = LoggerFactory.getLogger(AdminAutoMonitorIndexServiceImpl.class);
    
    /**
     * 间隔(毫秒)
     */
    private long interval = 60*1000*5;
    
    private volatile Date lastTime = new Date();
    
    /**
     * key:地址
     * value:eth余额
     */
    private Map<String,Double> ethMap = new ConcurrentHashMap<String,Double>();
    
    private Double collectAddressUsdt;
    
    /**
     * 异步加载余额
     * @param addresses
     */
    public void loadValue(Collection<String> addresses,String collectAddress) {
        
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    List<EtheBalance> etherMultipleBalance = etherscanRemoteService.getEtherMultipleBalance(String.join(",", addresses), 0);
                    for(EtheBalance etheBalance:etherMultipleBalance) {
                        ethMap.put(etheBalance.getAccount(), etheBalance.getBalance());
                    }
                    
                    //数据同步成功时,更新时间
                    lastTime = new Date();
                }catch (Exception e) {
                    // TODO: handle exception
                    logger.error("AdminAutoMonitorIndexServiceImpl loadEthValue fail e:{}",e);
                    e.printStackTrace();
                }
                
            }
        });
        t.start();
    }
    
    @Override
    public Map<String,Double> getEthMap(List<String> addresses){
        if (!ethMap.isEmpty()&&(new Date().getTime() - lastTime.getTime()) < interval) {
            return ethMap;
        }
        SettleAddressConfig findDefault = autoMonitorSettleAddressConfigService.findDefault();
        if(findDefault!=null) {
            loadValue(addresses,findDefault.getChannel_address());
        }else {
            loadValue(addresses,null);
        }
        //等待1秒,获取数据,如未获取,下次刷新即可
        ThreadUtils.sleep(1000);
        return ethMap;
    }
    /**
     * 归集地址usdt余额
     * @return
     */
    public Double getCollectAddressUsdt(){
        return collectAddressUsdt;
    }
    public void setEtherscanRemoteService(EtherscanRemoteService etherscanRemoteService) {
        this.etherscanRemoteService = etherscanRemoteService;
    }
 
    public void setAutoMonitorSettleAddressConfigService(
            AutoMonitorSettleAddressConfigService autoMonitorSettleAddressConfigService) {
        this.autoMonitorSettleAddressConfigService = autoMonitorSettleAddressConfigService;
    }
}