KKSU
2024-07-06 12e933d42d1a3ba5d2a69f7dc923da2d312457a0
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package cc.mrbird.febs.dapp.service.impl;
 
import cc.mrbird.febs.dapp.chain.ContractEventService;
import cc.mrbird.febs.dapp.chain.EthUsdtContract;
import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
import cc.mrbird.febs.dapp.entity.DappMemberEntity;
import cc.mrbird.febs.dapp.entity.DappStorage;
import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
import cc.mrbird.febs.dapp.mapper.DappMemberDao;
import cc.mrbird.febs.dapp.mapper.DappStorageMapper;
import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.dapp.service.DappMemberService;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.web3j.utils.Numeric;
 
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
 
@Slf4j
@Service
public class BscCoinContractEvent implements ContractEventService {
 
    @Resource
    private DappMemberService dappMemberService;
    @Resource
    private DappFundFlowDao dappFundFlowDao;
    @Resource
    private DappMemberDao dappMemberDao;
    @Resource
    private DataDictionaryCustomMapper dataDictionaryCustomMapper;
    @Resource
    private DappStorageMapper dappStorageMapper;
    @Resource
    private ChainProducer chainProducer;
 
    public static void main(String[] args) {
        System.out.println(Numeric.toBigInt("0x12e4e85"));
    }
 
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void compile(EthUsdtContract.TransferEventResponse e) {
        return;
    }
 
    @Override
    public void sdmUSDT(EthUsdtContract.TransferEventResponse e) {
        return;
    }
 
    @Override
    public void receivePeopleEvent(EthUsdtContract.ReceivePeopleEventResponse e) {
 
        if (e.from == null) {
            return;
        }
 
        if (e.regFlow == null) {
            return;
        }
 
        Long flowId = Long.parseLong(e.regFlow);
 
//        int decimals = ChainService.getInstance(ChainEnum.BSC_TFC.name()).decimals();
        int decimals = 18;
        BigInteger tokens = e.tokens;
        BigDecimal amount = new BigDecimal(tokens.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN).setScale(2,BigDecimal.ROUND_DOWN);
        log.info("触发用户存储:{},金额:{},流水ID:{}",e.from,amount,flowId);
        // 账户是否已经注册
        DappMemberEntity fromMember = dappMemberService.findByAddress(e.from, null);
        if (fromMember == null) {
            return;
        }
        // 判断是否已经同步过了
        DappFundFlowEntity fundFlow = dappFundFlowDao.selectById(flowId);
        if(ObjectUtil.isEmpty(fundFlow)){
            return;
        }
        if(1 != fundFlow.getStatus()){
            return;
        }
        // 更改状态为已同步
        fundFlow.setStatus(2);
        dappFundFlowDao.updateById(fundFlow);
 
        log.info("产生用户存储:{},金额:{},流水ID:{}",e.from,amount,flowId);
 
        /**
         * 新增一条记录
         */
        DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.RELEASE_PERCENT.getType(),
                DataDictionaryEnum.RELEASE_PERCENT.getCode()
        );
        BigDecimal releasePercent = new BigDecimal(dataDictionaryCustom.getValue());
        DappStorage dappStorage = new DappStorage();
        dappStorage.setState(1);
        dappStorage.setMemberId(fromMember.getId());
        dappStorage.setAmount(amount);
        dappStorage.setReleasePercent(releasePercent);
        BigDecimal releaseAmount = amount.multiply(releasePercent).setScale(2, BigDecimal.ROUND_DOWN);
        dappStorage.setReleaseAmount(releaseAmount);
        dappStorageMapper.insert(dappStorage);
 
        DataDictionaryCustom usdtBalanceTimeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.USDT_BALANCE_TIME.getType(),
                DataDictionaryEnum.USDT_BALANCE_TIME.getCode()
        );
        BigDecimal usdtBalanceTime = new BigDecimal(usdtBalanceTimeDic.getValue());
        BigDecimal multiply = usdtBalanceTime.multiply(amount);
        BigDecimal bigDecimal = fromMember.getUsdtBalance().add(multiply).setScale(2, BigDecimal.ROUND_DOWN);
        fromMember.setUsdtBalance(bigDecimal);
        fromMember.setActiveStatus(1);
        dappMemberDao.updateById(fromMember);
 
        Long id = fundFlow.getId();
        Long memberId = fromMember.getId();
        /**
         * 发送直推8%
         */
        chainProducer.sendDirectPerkMsg(id);
        /**
         * DAO成员动态:
         *      * 1.直推1个拿2代,直推10个拿20代,直推15个拿30代,最高30代
         */
        chainProducer.sendMemberDynamicPerkMsg(id);
        /**
         *
         *      * 六、永动补偿池2%
         *      * 五、DAO永动激励池:6%
         *      * 四、DAO联盟委员会 :   5%
         *      50名全球DAO委员)DAO成员团队奖:5%
         */
        chainProducer.sendNodePerkMsg(id);
        /**
         *
         *   3.  DAO成员团队奖:5%加权分红(people数量)
         *       DAO1: 加权分红50%
         *       DAO2:加权分红30%
         *       DAO3:加权分红20%
         */
        chainProducer.sendTeamPerk(id);
        /**
         *3.  成员升级
         *      *       DAO1:小区业绩30万/币
         *      *       DAO2:小区业绩100万/币
         *      *       DAO3:小区业绩500万/币
         */
        chainProducer.sendMemberLevel(memberId);
 
    }
}