From e3bf96ad189e12d7c2201734e9121063e7f39a37 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Fri, 13 Nov 2020 15:32:03 +0800 Subject: [PATCH] modify --- src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java | 37 ++++++++++++ src/main/resources/application-prod.yml | 8 +- src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml | 2 src/main/java/com/xcong/excoin/common/utils/TRC20ApiUtils.java | 77 +++++++++++++++++++++++++ 4 files changed, 119 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/xcong/excoin/common/utils/TRC20ApiUtils.java b/src/main/java/com/xcong/excoin/common/utils/TRC20ApiUtils.java new file mode 100644 index 0000000..2785f2f --- /dev/null +++ b/src/main/java/com/xcong/excoin/common/utils/TRC20ApiUtils.java @@ -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"); + } +} diff --git a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java index add560d..6b4f701 100644 --- a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java +++ b/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) { diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index e037295..84c4b29 100644 --- a/src/main/resources/application-prod.yml +++ b/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 \ No newline at end of file + timeout: 10000 \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml b/src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml index 7ae7e60..29051f3 100644 --- a/src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml +++ b/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}) -- Gitblit v1.9.1