1
xiaoyong931011
2023-02-01 e7163ceea7970a5022da2f45b51edd0c749ad14e
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 cc.mrbird.febs.mall.service.impl;
 
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.mall.chain.enums.CoinTypeEnum;
import cc.mrbird.febs.mall.chain.service.EthService;
import cc.mrbird.febs.mall.dto.ApiChargeInfoDto;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.entity.MemberCoinAddressEntity;
import cc.mrbird.febs.mall.entity.MemberCoinChargeEntity;
import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cc.mrbird.febs.mall.mapper.MemberCoinAddressDao;
import cc.mrbird.febs.mall.mapper.MemberCoinChargeDao;
import cc.mrbird.febs.mall.service.BlockSerive;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
 
@Slf4j
@Service
public class BlockSeriveImpl implements BlockSerive {
 
    @Resource
    MallMemberMapper memberDao;
 
    @Resource
    MemberCoinAddressDao memberCoinAddressDao;
 
    @Resource
    private AgentProducer agentProducer;
 
    @Resource
    private MemberCoinChargeDao memberCoinChargeDao;
 
    @Resource
    private DataDictionaryCustomMapper dataDictionaryCustomMapper;
 
    @Override
    public FebsResponse findBlockAddress(String symbol, String lable) {
        //获取用户ID
        Long mId = LoginUserUtil.getLoginUser().getId();
        MallMember member = memberDao.selectById(mId);
        if (member == null) {
            return new FebsResponse().fail().message("用户不存在");
        }
        if(StringUtils.isBlank(lable)){
            lable = "ERC20";
//            lable = "TRC20";
        }
 
        FebsResponse result = new FebsResponse();
        try {
            Map<String, String> map = new HashMap<String, String>();
            MemberCoinAddressEntity memberCoinAddress = new MemberCoinAddressEntity();
 
            if ("USDT".equals(symbol)) {
                memberCoinAddress = memberCoinAddressDao.selectBlockAddressWithTag(mId, symbol, lable);
            } else {
                memberCoinAddress = memberCoinAddressDao.selectBlockAddress(mId, symbol);
            }
 
            if (memberCoinAddress != null) {
                map.put("address", memberCoinAddress.getAddress());
                map.put("lable", memberCoinAddress.getLabel());
                result.data(map);
            } else {
                String address = "";
                String key = "";
                String uuid = member.getInviteId();
                Map<String, String> usdtMap = EthService.createEth();
//                Map<String, String> usdtMap = Trc20Service.createAddress();
                address = usdtMap.get("address");
                key = usdtMap.get("privateKey");
                map.put("address", address);
 
                // 发送新增的地址到监听集合
                agentProducer.sendAddressMsg(address+","+"ERC20");
 
                MemberCoinAddressEntity coinAddress = new MemberCoinAddressEntity();
                coinAddress.setAddress(address);
                coinAddress.setIsBiyict(MemberCoinAddressEntity.IS_BIYICT_YES);
                coinAddress.setMemberId(mId);
                coinAddress.setPrivateKey(key);
                coinAddress.setSymbol(symbol);
                coinAddress.setLabel(uuid);
                if (symbol.equals("USDT")) {
                    coinAddress.setTag(lable);
                }
 
                memberCoinAddressDao.insert(coinAddress);
                result.data(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
 
    @Override
    public FebsResponse findAddress() {
        DataDictionaryCustom addressDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.ADDRESS.getType(), DataDictionaryEnum.ADDRESS.getCode());
        String value = addressDic.getValue();
        return new FebsResponse().success().data(value);
    }
 
    @Override
    public FebsResponse setChargeInfo(ApiChargeInfoDto apiChargeInfoDto) {
        Long mId = LoginUserUtil.getLoginUser().getId();
        MallMember member = memberDao.selectById(mId);
 
        String hash = apiChargeInfoDto.getHash();
        MemberCoinChargeEntity memberCoinChargeEntityExist  = memberCoinChargeDao.selectByHash(hash);
        if(ObjectUtil.isNotEmpty(memberCoinChargeEntityExist)){
            return new FebsResponse().fail().message("提供正确的HASH值");
        }
        MemberCoinChargeEntity memberCoinChargeEntity = new MemberCoinChargeEntity();
        memberCoinChargeEntity.setAddress(apiChargeInfoDto.getAddress());
        memberCoinChargeEntity.setMemberId(member.getId());
        memberCoinChargeEntity.setAmount(apiChargeInfoDto.getAmount());
        memberCoinChargeEntity.setSymbol(CoinTypeEnum.USDT.name());
        memberCoinChargeEntity.setTag("ERC20");
        memberCoinChargeEntity.setStatus(1);
        memberCoinChargeEntity.setLastAmount(BigDecimal.ZERO);
        memberCoinChargeEntity.setHash(hash);
        memberCoinChargeDao.insert(memberCoinChargeEntity);
        return new FebsResponse().success();
    }
 
}