From 7ba7366a8c6ce8019339e433b218386645cb5312 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 28 Dec 2020 17:38:53 +0800
Subject: [PATCH] Merge branch 'piot' of https://gitee.com/chonggaoxiao/new_excoin_manage into piot

---
 src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java |  168 ++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 128 insertions(+), 40 deletions(-)

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..02b733b 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,10 @@
 	private final AgentFriendRelationMapper agentFriendRelationMapper;
 
 	private final TdFinancialReordDao tdFinancialReordDao;
+
+	private final RedisUtils redisUtils;
+
+	private final TrcAddressDao trcAddressDao;
 	
 	@Override
 	public IPage<AgentFriendRelationEntity> findAgentInfoListInPage(AgentFriendRelationEntity agentFriendRelationEntity,
@@ -482,50 +490,91 @@
 		if ("Y".equals(selectById.getIsInside())) {
 			// 查询算力系统中是否存在该地址
 			TdCoinWallet tdCoinWallet = memberWalletCoinMapper.selectTdCoinWalletByAddress(address, "USDT");
-			if (tdCoinWallet != null) {
-				// 更新算力系统中用户钱包余额
-				memberWalletCoinMapper.updateTdCoinWalletAvaliable(amount, address);
+			TrcAddressEntity trcAddressEntity = trcAddressDao.selectTrcAddressByAddress(address);
+			// 判断是否为TRC20地址
+			if (trcAddressEntity == null) {
+				if (tdCoinWallet != null) {
+					// 更新算力系统中用户钱包余额
+					memberWalletCoinMapper.updateTdCoinWalletAvaliable(amount, address);
 
-				TdFinancialReord tdFinancialReord = new TdFinancialReord();
-				tdFinancialReord.setAmount(amount);
-				tdFinancialReord.setCreateTime(new Date());
-				tdFinancialReord.setMemId(tdCoinWallet.getMemId());
-				tdFinancialReord.setSymbol("USDT");
-				tdFinancialReord.setTitle("USDT交易所转账");
-				tdFinancialReord.setContent("USDT交易所转账");
-				// 插入算力系统中财务记录
-				tdFinancialReordDao.insert(tdFinancialReord);
-			} else {
-				Map<String, Object> columnMap = new HashMap<>();
-				columnMap.put("symbol", symbol);
-				columnMap.put("address", address);
-				// 如果是内部转账 则需要将币加到内部地址
-				List<MemberCoinAddressEntity> selectByMap = memberCoinAddressMapper.selectByMap(columnMap);
-				if (selectByMap == null || selectByMap.isEmpty()) {
-					return new FebsResponse().fail().message("地址有误,请拒绝!");
+					TdFinancialReord tdFinancialReord = new TdFinancialReord();
+					tdFinancialReord.setAmount(amount);
+					tdFinancialReord.setCreateTime(new Date());
+					tdFinancialReord.setMemId(tdCoinWallet.getMemId());
+					tdFinancialReord.setSymbol("USDT");
+					tdFinancialReord.setTitle("USDT交易所转账");
+					tdFinancialReord.setContent("USDT交易所转账");
+					// 插入算力系统中财务记录
+					tdFinancialReordDao.insert(tdFinancialReord);
+				} else {
+					Map<String, Object> columnMap = new HashMap<>();
+					columnMap.put("symbol", symbol);
+					columnMap.put("address", address);
+					// 如果是内部转账 则需要将币加到内部地址
+					List<MemberCoinAddressEntity> selectByMap = memberCoinAddressMapper.selectByMap(columnMap);
+					if (selectByMap == null || selectByMap.isEmpty()) {
+						return new FebsResponse().fail().message("地址有误,请拒绝!");
+					}
+					Long aimMemberId = selectByMap.get(0).getMemberId();
+					MemberWalletCoinEntity aimWalletCoin = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(aimMemberId, symbol);
+
+					BigDecimal addTotal = aimWalletCoin.getTotalBalance().add(amount);
+					BigDecimal addAvailable = aimWalletCoin.getAvailableBalance().add(amount);
+					aimWalletCoin.setTotalBalance(addTotal);
+					aimWalletCoin.setAvailableBalance(addAvailable);
+
+					memberWalletCoinMapper.updateById(aimWalletCoin);
+
+					MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity = new MemberAccountMoneyChangeEntity();
+					memberAccountMoneyChangeEntity.setContent("收款");
+					memberAccountMoneyChangeEntity.setMemberId(aimMemberId);
+					memberAccountMoneyChangeEntity.setAmount(amount);
+					memberAccountMoneyChangeEntity.setStatus(MemberAccountMoneyChangeEntity.STATUS_SUCCESS_INTEGER);
+					memberAccountMoneyChangeEntity.setSymbol(selectById.getSymbol());
+					memberAccountMoneyChangeEntity.setType(MemberAccountMoneyChangeEntity.TYPE_WALLET_COIN);
+					memberAccountMoneyChangeEntity.setCreateBy(selectById.getCreateBy());
+					memberAccountMoneyChangeEntity.setCreateTime(new Date());
+					memberAccountMoneyChangeEntity.setUpdateBy(selectById.getCreateBy());
+					memberAccountMoneyChangeEntity.setUpdateTime(new Date());
+					memberAccountMoneyChangeMapper.insert(memberAccountMoneyChangeEntity);
 				}
-				Long aimMemberId = selectByMap.get(0).getMemberId();
-				MemberWalletCoinEntity aimWalletCoin = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(aimMemberId, symbol);
+			} else {
+				if (trcAddressEntity.getSystemFlag().equals(TrcAddressEntity.SYSTEM_FLAG_SL)) {
+					memberWalletCoinMapper.updateTdCoinWalletTrc20(amount, trcAddressEntity.getMemberId());
 
-				BigDecimal addTotal = aimWalletCoin.getTotalBalance().add(amount);
-				BigDecimal addAvailable = aimWalletCoin.getAvailableBalance().add(amount);
-				aimWalletCoin.setTotalBalance(addTotal);
-				aimWalletCoin.setAvailableBalance(addAvailable);
+					TdFinancialReord tdFinancialReord = new TdFinancialReord();
+					tdFinancialReord.setAmount(amount);
+					tdFinancialReord.setCreateTime(new Date());
+					tdFinancialReord.setMemId(trcAddressEntity.getMemberId());
+					tdFinancialReord.setSymbol("USDT");
+					tdFinancialReord.setTitle("USDT交易所转账");
+					tdFinancialReord.setContent("USDT交易所转账");
+					// 插入算力系统中财务记录
+					tdFinancialReordDao.insert(tdFinancialReord);
+				} else {
+					Long aimMemberId = trcAddressEntity.getMemberId();
+					MemberWalletCoinEntity aimWalletCoin = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(aimMemberId, symbol);
 
-				memberWalletCoinMapper.updateById(aimWalletCoin);
+					BigDecimal addTotal = aimWalletCoin.getTotalBalance().add(amount);
+					BigDecimal addAvailable = aimWalletCoin.getAvailableBalance().add(amount);
+					aimWalletCoin.setTotalBalance(addTotal);
+					aimWalletCoin.setAvailableBalance(addAvailable);
 
-				MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity = new MemberAccountMoneyChangeEntity();
-				memberAccountMoneyChangeEntity.setContent("收款");
-				memberAccountMoneyChangeEntity.setMemberId(aimMemberId);
-				memberAccountMoneyChangeEntity.setAmount(amount);
-				memberAccountMoneyChangeEntity.setStatus(MemberAccountMoneyChangeEntity.STATUS_SUCCESS_INTEGER);
-				memberAccountMoneyChangeEntity.setSymbol(selectById.getSymbol());
-				memberAccountMoneyChangeEntity.setType(MemberAccountMoneyChangeEntity.TYPE_WALLET_COIN);
-				memberAccountMoneyChangeEntity.setCreateBy(selectById.getCreateBy());
-				memberAccountMoneyChangeEntity.setCreateTime(new Date());
-				memberAccountMoneyChangeEntity.setUpdateBy(selectById.getCreateBy());
-				memberAccountMoneyChangeEntity.setUpdateTime(new Date());
-				memberAccountMoneyChangeMapper.insert(memberAccountMoneyChangeEntity);
+					memberWalletCoinMapper.updateById(aimWalletCoin);
+
+					MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity = new MemberAccountMoneyChangeEntity();
+					memberAccountMoneyChangeEntity.setContent("收款");
+					memberAccountMoneyChangeEntity.setMemberId(aimMemberId);
+					memberAccountMoneyChangeEntity.setAmount(amount);
+					memberAccountMoneyChangeEntity.setStatus(MemberAccountMoneyChangeEntity.STATUS_SUCCESS_INTEGER);
+					memberAccountMoneyChangeEntity.setSymbol(selectById.getSymbol());
+					memberAccountMoneyChangeEntity.setType(MemberAccountMoneyChangeEntity.TYPE_WALLET_COIN);
+					memberAccountMoneyChangeEntity.setCreateBy(selectById.getCreateBy());
+					memberAccountMoneyChangeEntity.setCreateTime(new Date());
+					memberAccountMoneyChangeEntity.setUpdateBy(selectById.getCreateBy());
+					memberAccountMoneyChangeEntity.setUpdateTime(new Date());
+					memberAccountMoneyChangeMapper.insert(memberAccountMoneyChangeEntity);
+				}
 			}
 		}
 		
@@ -540,13 +589,29 @@
 		
 		selectById.setStatus(MemberCoinWithdrawEntity.IS_STATUS_Y);
 		memberCoinWithdrawMapper.updateById(selectById);
+
+		if (!"Y".equals(selectById.getIsInside())) {
+			if ("TRC20".equals(selectById.getLabel())) {
+				Thread thread = new Thread(new Runnable() {
+					@Override
+					public void run() {
+						log.info("远程调用TRC执行:{}", selectById.getId());
+						String orderNo = generateOrderNo(memberId);
+						TRC20ApiUtils.coinApply(orderNo, memberId.toString(), selectById.getSymbol(), selectById.getAmount().subtract(selectById.getFeeAmount()).toPlainString(), selectById.getAddress());
+						selectById.setTag(orderNo);
+						memberCoinWithdrawMapper.updateById(selectById);
+					}
+				});
+				thread.start();
+			}
+		}
+
 		MemberEntity memberEntity = memberMapper.selectById(memberId);
 		String phone = memberEntity.getPhone();
 		//String email = memberEntity.getEmail();
 		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
         String time = format.format(new Date()); // 将当前时间袼式化为指定的格式
 
-		log.info("---->{}", phone);
 		if(StrUtil.isNotBlank(phone)) {
 			Sms106Send.sendWithdrawalCoinMsg(phone, time);
 		}
@@ -579,6 +644,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) {

--
Gitblit v1.9.1