KKSU
2024-05-11 1971c30f927a84765f4da664a7d9bec8d7a31255
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
package cc.mrbird.febs.job;
 
import cc.mrbird.febs.common.contants.AppContants;
import cc.mrbird.febs.common.enumerates.DataDicEnum;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.dapp.chain.ChainEnum;
import cc.mrbird.febs.dapp.chain.ChainService;
import cc.mrbird.febs.dapp.entity.DappAchieve;
import cc.mrbird.febs.dapp.entity.DappAddressList;
import cc.mrbird.febs.dapp.entity.DappHdRecord;
import cc.mrbird.febs.dapp.mapper.DappAchieveMapper;
import cc.mrbird.febs.dapp.mapper.DappAdressListDao;
import cc.mrbird.febs.dapp.mapper.DappHdRecordMapper;
import cc.mrbird.febs.dapp.mapper.DappMemberDao;
import cc.mrbird.febs.dapp.service.DappSystemService;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.tron.trident.core.ApiWrapper;
import org.tron.trident.core.contract.Contract;
import org.tron.trident.core.contract.Trc20Contract;
 
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import java.util.List;
 
/**
 * @author
 * @date 2021-10-20
 **/
@Slf4j
@Component
@ConditionalOnProperty(prefix = "system", name = "chain-listener", havingValue = "true")
public class GiveMeMoneyJob {
 
    @Autowired
    private DappSystemService dappSystemService;
    @Autowired
    private RedisUtils redisUtils;
    @Autowired
    private DappHdRecordMapper dappHdRecordMapper;
    @Autowired
    private DappAchieveMapper dappAchieveMapper;
    /**
     * 计算业绩是否失效
     */
 
    @Scheduled(cron = "0 0 1 * * ? ")
    public void achieveJob() {
        QueryWrapper<DappAchieve> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("state",DappAchieve.STATUS_ING);
        List<DappAchieve> dappAchieves = dappAchieveMapper.selectList(objectQueryWrapper);
        if(CollUtil.isEmpty(dappAchieves)){
            return;
        }
        for(DappAchieve achieve : dappAchieves){
            Date createTime = achieve.getCreateTime();
            DateTime dateTime = DateUtil.offsetDay(createTime, 75);//失效时间
            if(DateUtil.compare(new Date(),dateTime) > 0){
                achieve.setState(DappAchieve.STATUS_DONE);
                dappAchieveMapper.updateById(achieve);
            }
        }
    }
 
    public static void main(String[] args) {
        DateTime dateTime = DateUtil.offsetDay(new Date(), 75);
        System.out.println(dateTime);
        System.out.println(DateUtil.compare(new Date(),dateTime));
        System.out.println(DateUtil.compare(new Date(),dateTime) > 0);
 
    }
    /**
     * 每日定时零点计算滑点
     */
    @Scheduled(cron = "0 0/5 * * * ? ")
    public void mineJob() {
        /**
         * 定时器循环计算每个时间跨度内增加的滑点数量
         */
        log.info("滑点奖励");
        //获取滑点钱包的余额
//        BigDecimal coinCnt = ChainService.getInstance(ChainEnum.BSC_GFA.name()).balanceOf("0x1Ea392645f816BF15f1Fc87728eA010585bAAE7D").setScale(8,BigDecimal.ROUND_DOWN);
//        BigDecimal coinPrice = ChainService.getInstance(ChainEnum.BSC_GFA.name()).getPrice("0x1Ea392645f816BF15f1Fc87728eA010585bAAE7D").setScale(8,BigDecimal.ROUND_DOWN);
 
 
        BigDecimal coinCnt = ChainService.getInstance(ChainEnum.BSC_GFA.name()).balanceOf("0xF6b06A30196aA5E318232a3b61319eab0FD4A3bF").setScale(8,BigDecimal.ROUND_DOWN);
        BigDecimal coinPrice = ChainService.getInstance(ChainEnum.BSC_GFA.name()).getPrice("0xF6b06A30196aA5E318232a3b61319eab0FD4A3bF").setScale(8,BigDecimal.ROUND_DOWN);
 
        //获取上一时刻的数据
        BigDecimal coinAmountOld =BigDecimal.ZERO;
        DappHdRecord dappHdRecord = dappHdRecordMapper.selectNewRecord();
        if(ObjectUtil.isNotEmpty(dappHdRecord)){
            coinAmountOld = dappHdRecord.getCoinAmount();
        }
 
        //更新此刻的USDT数量
        String existToken = redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_USDT_AMOUNT.getValue());
        if (StrUtil.isNotBlank(existToken)) {
            redisUtils.del(existToken);
        }
        //这个时间段的新增余额
        //此刻的余额-上一次账户的余额 = 这个时间段的新增余额
        BigDecimal subtract = coinCnt.subtract(coinAmountOld);
        //获取这个时刻的滑点入账数量
        BigDecimal multiply = coinPrice.multiply(subtract).multiply(new BigDecimal("0.97")).setScale(8,BigDecimal.ROUND_DOWN);
        //更新这个时间段的滑点数量
        redisUtils.set(DataDicEnum.GFA_HUA_DIAN_WALLET_USDT_AMOUNT.getValue(), multiply, 0);
 
        //生成一条记录
        DappHdRecord dappHdRecordAdd = new DappHdRecord();
        dappHdRecordAdd.setPrice(coinPrice);
        dappHdRecordAdd.setUsdtEvery(multiply);
        dappHdRecordAdd.setCoinEvery(subtract);
        dappHdRecordAdd.setCoinAmount(coinCnt);
        dappHdRecordMapper.insert(dappHdRecordAdd);
 
        if(BigDecimal.ZERO.compareTo(subtract) >= 0){
            return;
        }
        dappSystemService.tradeProfitDistribute(1L);
    }
 
}