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