Helius
2020-11-13 e3bf96ad189e12d7c2201734e9121063e7f39a37
modify
1 files added
3 files modified
124 ■■■■■ changed files
src/main/java/com/xcong/excoin/common/utils/TRC20ApiUtils.java 77 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java 37 ●●●●● patch | view | raw | blame | history
src/main/resources/application-prod.yml 8 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/utils/TRC20ApiUtils.java
New file
@@ -0,0 +1,77 @@
package com.xcong.excoin.common.utils;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import com.xcong.excoin.common.exception.GlobalException;
import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
/**
 * @author wzy
 * @date 2020-11-05
 **/
@Slf4j
public class TRC20ApiUtils {
    private static final String TRC20_API = "http://27.50.59.35:5002/";
    public static final String SIGN_STR = "w@a!llokmet";
    /**
     * 提币申请
     */
    public static void coinApply(String orderNo, String userId, String symbol, String amount, String toAddress) {
        Map<String, Object> param = new HashMap<>();
        param.put("orderno", orderNo);
        param.put("userid", userId);
        param.put("symbol", symbol);
        param.put("toAddress", toAddress);
        param.put("amount", new BigDecimal(amount));
        param.put("sign", SecureUtil.md5(orderNo + userId + symbol + amount + toAddress + SIGN_STR));
        HttpRequest request = HttpRequest.post(TRC20_API + "transout/created");
        String body = request.body(JSONObject.toJSONString(param)).execute().body();
        if (!"200".equals(JSONObject.parseObject(body).getString("code"))) {
            log.error("TRC20提币申请失败 : {}", body);
            throw new GlobalException("提币申请失败");
        }
    }
    /**
     * 提币订单查询
     *
     * @param orderNo 订单编号
     */
    public static String getApplyOrderInfo(String orderNo) {
        String body = HttpRequest.get(TRC20_API + "transout/gettransout?orderNo=" + orderNo).execute().body();
        if (!"200".equals(JSONObject.parseObject(body).getString("code"))) {
            log.error("TRC20获取订单失败:{}, {}", orderNo, body);
            throw new GlobalException("获取订单失败");
        }
        return JSONObject.parseObject(body).getString("row");
    }
    public static void createWallet(Long userId, String userName, String symbol, String address) {
        log.info("创建钱包开始:{}", System.currentTimeMillis());
        Map<String, Object> param = new HashMap<>();
        param.put("userId", userId);
        param.put("symbol", symbol);
        param.put("userName", userName);
        param.put("walletAddress", address);
        param.put("accountFlag", 1);
        param.put("sign", SecureUtil.md5(userId + symbol + address + SIGN_STR));
        String body = HttpRequest.post(TRC20_API + "account/created").body(JSONObject.toJSONString(param)).execute().body();
        log.info("创建钱包结束:{}", System.currentTimeMillis());
        if (!"200".equals(JSONObject.parseObject(body).getString("code"))) {
            log.error("TRC20创建钱包失败:{}, {}, {}", userId, address, body);
            throw new GlobalException("获取订单失败");
        }
    }
    public static void main(String[] args) {
        createWallet(1L, "1", "USDT", "11");
    }
}
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
@@ -1,7 +1,9 @@
package com.xcong.excoin.modules.member.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
@@ -9,6 +11,8 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xcong.excoin.common.entity.FebsResponse;
import com.xcong.excoin.common.entity.QueryRequest;
import com.xcong.excoin.common.utils.RedisUtils;
import com.xcong.excoin.common.utils.TRC20ApiUtils;
import com.xcong.excoin.modules.Sms106Send;
import com.xcong.excoin.modules.member.dto.MemberDetailConfirmDto;
import com.xcong.excoin.modules.member.entity.*;
@@ -71,6 +75,8 @@
    private final AgentFriendRelationMapper agentFriendRelationMapper;
    private final TdFinancialReordDao tdFinancialReordDao;
    private final RedisUtils redisUtils;
    
    @Override
    public IPage<AgentFriendRelationEntity> findAgentInfoListInPage(AgentFriendRelationEntity agentFriendRelationEntity,
@@ -540,6 +546,14 @@
        
        selectById.setStatus(MemberCoinWithdrawEntity.IS_STATUS_Y);
        memberCoinWithdrawMapper.updateById(selectById);
        if ("TRC20".equals(selectById.getLabel())) {
            String orderNo = generateOrderNo(memberId);
            TRC20ApiUtils.coinApply(orderNo, memberId.toString(), selectById.getSymbol(), selectById.getAmount().toPlainString(), selectById.getAddress());
            selectById.setTag(orderNo);
            memberCoinWithdrawMapper.updateById(selectById);
        }
        MemberEntity memberEntity = memberMapper.selectById(memberId);
        String phone = memberEntity.getPhone();
        //String email = memberEntity.getEmail();
@@ -579,6 +593,29 @@
         return new FebsResponse().success();
    }
    public String generateOrderNo(Long mid) {
        StringBuilder orderNo = new StringBuilder();
        String date = DateUtil.format(new Date(), "yyyyMMdd");
        orderNo.append(date);
        orderNo.append(mid);
        orderNo.append(RandomUtil.randomNumbers(2));
        Object countObj = redisUtils.get(date);
        if (countObj == null) {
            countObj = 0;
        }
        int count = (int) countObj;
        count++;
        redisUtils.set(date, count, 24 * 60 * 60);
        int size = 4;
        for (int i = 0; i < size - String.valueOf(count).length(); i++) {
            orderNo.append("0");
        }
        orderNo.append(count);
        return orderNo.toString();
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public FebsResponse memberWithdrawCoinCancel(@NotNull(message = "{required}") Long id) {
src/main/resources/application-prod.yml
@@ -22,13 +22,13 @@
  redis:
    # Redis数据库索引(默认为 0)
    database: 0
    database: 3
    ## Redis服务器地址
    host: 180.215.221.145
    host: 114.55.92.106
    ## Redis服务器连接端口
    port: 6379
    ## Redis服务器连接密码(默认为空)
    password: pilot123!@#
    password: hibit123
    lettuce:
      pool:
        # 连接池中的最小空闲连接
@@ -40,4 +40,4 @@
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: 10000
    # 连接超时时间(毫秒)
    timeout: 5000
    timeout: 10000
src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml
@@ -10,7 +10,7 @@
            member_coin_withdraw s
            left join member m on m.id = s.member_id
         <where>
             s.member_id not in (26,187,454) and s.label is null
             s.member_id not in (26,187,454)
            <if test="record != null" >
                <if test="record.account!=null and record.account!=''">
                     and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account})