src/main/java/com/xcong/excoin/common/utils/TRC20ApiUtils.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/application-prod.yml | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml | ●●●●● 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})