From 370c0e6d54be9222fcaa416fdd605f09e3c49e8a Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Sun, 25 May 2025 17:14:45 +0800
Subject: [PATCH] 1

---
 src/main/java/project/blockchain/internal/RechargeBlockchainServiceImpl.java |  552 ++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 402 insertions(+), 150 deletions(-)

diff --git a/src/main/java/project/blockchain/internal/RechargeBlockchainServiceImpl.java b/src/main/java/project/blockchain/internal/RechargeBlockchainServiceImpl.java
index 999bad9..790a5a4 100644
--- a/src/main/java/project/blockchain/internal/RechargeBlockchainServiceImpl.java
+++ b/src/main/java/project/blockchain/internal/RechargeBlockchainServiceImpl.java
@@ -5,14 +5,16 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
-import org.apache.commons.lang3.ObjectUtils;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 
 import kernel.bo.RecordObjectMapper;
 import kernel.exception.BusinessException;
 import kernel.util.Arith;
 import kernel.web.ApplicationUtil;
+import org.springframework.transaction.annotation.Transactional;
 import project.Constants;
 import project.blockchain.ChannelBlockchain;
 import project.blockchain.ChannelBlockchainService;
@@ -27,14 +29,16 @@
 import project.log.MoneyLogService;
 import project.party.PartyService;
 import project.party.model.Party;
-import project.redis.RedisHandler;
 import project.syspara.Syspara;
 import project.syspara.SysparaService;
 import project.tip.TipConstants;
 import project.tip.TipService;
 import project.user.UserDataService;
-import project.wallet.*;
-import project.wallet.internal.WalletGatherServiceImpl;
+import project.wallet.Wallet;
+import project.wallet.WalletExtend;
+import project.wallet.WalletLog;
+import project.wallet.WalletLogService;
+import project.wallet.WalletService;
 import project.wallet.rate.ExchangeRateService;
 import security.SecUser;
 import security.internal.SecUserService;
@@ -57,30 +61,9 @@
 	protected SysparaService sysparaService;
 	protected ChannelBlockchainService channelBlockchainService;
 	protected TipService tipService;
-	protected RedisHandler redisHandler;
 
 	@Override
 	public void save(RechargeBlockchain recharge) {
-
-		List<RechargeBlockchain> oreders = this.findByPartyIdAndSucceeded(recharge.getPartyId(), 0);
-		double recharge_only_one = Double.valueOf(sysparaService.find("recharge_only_one").getValue());
-		if (oreders != null && recharge_only_one==1) {
-			throw new BusinessException("提交失败,当前有未处理订单");
-		}
-		
-		if (!"ETH".equals(recharge.getSymbol().toUpperCase())) {
-			JdbcTemplate jdbcTemplate=ApplicationUtil.getBean(JdbcTemplate.class);
-			List<HashMap> list=jdbcTemplate.query("SELECT * FROM T_PARTY_BLOCKCHAIN WHERE ADDRESS =?",RecordObjectMapper.newInstance(HashMap.class),recharge.getChannel_address());
-			if(ObjectUtils.isEmpty(list)) {
-				ChannelBlockchain channel = channelBlockchainService.findByNameAndCoinAndAdd(recharge.getBlockchain_name(),
-						recharge.getSymbol(), recharge.getChannel_address());
-
-				if (channel == null || !recharge.getSymbol().toUpperCase().equals(channel.getCoin())) {
-					throw new BusinessException("充值链错误");
-				}
-			}
-		}
-
 		DecimalFormat df = new DecimalFormat("#.##");
 //		amount = Double.valueOf(df.format(amount));
 		double recharge_limit_min = Double.valueOf(sysparaService.find("recharge_limit_min").getValue());
@@ -389,65 +372,75 @@
 		tipService.deleteTip(recharge.getId().toString());
 
 	}
-	
+
 	/**
 	 * 根据ID获取充值订单
 	 */
 	public RechargeBlockchain get(String id) {
-        List<RechargeBlockchain> list = jdbcTemplate.query("SELECT * FROM T_RECHARGE_BLOCKCHAIN_ORDER WHERE UUID=?", RecordObjectMapper.newInstance(RechargeBlockchain.class), id);
-        if (null != list && list.size() > 0) {
-            return list.get(0);
-        }
-        return null;
+		List<RechargeBlockchain> list = jdbcTemplate.query("SELECT * FROM T_RECHARGE_BLOCKCHAIN_ORDER WHERE UUID=?", RecordObjectMapper.newInstance(RechargeBlockchain.class), id);
+		if (null != list && list.size() > 0) {
+			return list.get(0);
+		}
+		return null;
 	}
-	
+
+	/**
+	 * 根据区块地址获取充值订单
+	 */
+	public RechargeBlockchain getAddress(String address) {
+		List<RechargeBlockchain> list = jdbcTemplate.query("SELECT * FROM T_RECHARGE_BLOCKCHAIN_ORDER WHERE blockchain_name=?", RecordObjectMapper.newInstance(RechargeBlockchain.class), address);
+		if (null != list && list.size() > 0) {
+			return list.get(0);
+		}
+		return null;
+	}
+
 	@Override
 	public RechargeBlockchain findByOrderNo(String order_no) {
-        List<RechargeBlockchain> list = jdbcTemplate.query("SELECT * FROM T_RECHARGE_BLOCKCHAIN_ORDER WHERE ORDER_NO=?", 
-        		RecordObjectMapper.newInstance(RechargeBlockchain.class), order_no);
-        if (null != list && list.size() > 0) {
-            return list.get(0);
-        }
-        return null;
+		List<RechargeBlockchain> list = jdbcTemplate.query("SELECT * FROM T_RECHARGE_BLOCKCHAIN_ORDER WHERE ORDER_NO=?",
+				RecordObjectMapper.newInstance(RechargeBlockchain.class), order_no);
+		if (null != list && list.size() > 0) {
+			return list.get(0);
+		}
+		return null;
 	}
 
 	public List<RechargeBlockchain> findByPartyIdAndToday(Serializable partyId) {
-        List<RechargeBlockchain> list = jdbcTemplate.query("SELECT * FROM T_RECHARGE_BLOCKCHAIN_ORDER WHERE PARTY_ID=? AND DateDiff(CREATED,NOW())=0 ", 
-        		RecordObjectMapper.newInstance(RechargeBlockchain.class), partyId);
-        if (list.size() > 0) {
-            return list;
-        }
-        return null;
+		List<RechargeBlockchain> list = jdbcTemplate.query("SELECT * FROM T_RECHARGE_BLOCKCHAIN_ORDER WHERE PARTY_ID=? AND DateDiff(CREATED,NOW())=0 ",
+				RecordObjectMapper.newInstance(RechargeBlockchain.class), partyId);
+		if (list.size() > 0) {
+			return list;
+		}
+		return null;
 	}
 
 	public List<RechargeBlockchain> findBySucceededAndDay(int succeeded, Integer days) {
-        List<RechargeBlockchain> list = jdbcTemplate.query("SELECT * FROM T_RECHARGE_BLOCKCHAIN_ORDER WHERE SUCCEEDED=? AND DateDiff(CREATED,NOW())=-1 ", 
-        		RecordObjectMapper.newInstance(RechargeBlockchain.class), succeeded);
-        if (list.size() > 0) {
-            return list;
-        }
-        return null;
+		List<RechargeBlockchain> list = jdbcTemplate.query("SELECT * FROM T_RECHARGE_BLOCKCHAIN_ORDER WHERE SUCCEEDED=? AND DateDiff(CREATED,NOW())=-1 ",
+				RecordObjectMapper.newInstance(RechargeBlockchain.class), succeeded);
+		if (list.size() > 0) {
+			return list;
+		}
+		return null;
 	}
 
 	public List<RechargeBlockchain> findByPartyIdAndSucceeded(Serializable partyId, int succeeded) {
-        List<RechargeBlockchain> list = jdbcTemplate.query("SELECT * FROM T_RECHARGE_BLOCKCHAIN_ORDER WHERE PARTY_ID=? AND SUCCEEDED=? ", 
-        		RecordObjectMapper.newInstance(RechargeBlockchain.class), partyId, succeeded);
-        if (list.size() > 0) {
-            return list;
-        }
-        return null;
+		List<RechargeBlockchain> list = jdbcTemplate.query("SELECT * FROM T_RECHARGE_BLOCKCHAIN_ORDER WHERE PARTY_ID=? AND SUCCEEDED=? ",
+				RecordObjectMapper.newInstance(RechargeBlockchain.class), partyId, succeeded);
+		if (list.size() > 0) {
+			return list;
+		}
+		return null;
 	}
 
 	@Override
 	public boolean saveSucceeded(String id, String operator, double success_amount) {
-		System.out.println("进入saveSucceeded方法,参数operator="+operator+",success_amount="+success_amount);
 		// RechargeBlockchain recharge = this.findByOrderNo(order_no);
 		RechargeBlockchain recharge = this.get(id);
 		String order_no = recharge.getOrder_no();
 		if (recharge.getSucceeded() == 1) {
 			return false;
 		}
-		
+
 		recharge.setReviewTime(new Date());
 		recharge.setSucceeded(1);
 
@@ -461,8 +454,8 @@
 			log.setUsername(secUser.getUsername());
 			log.setPartyId(recharge.getPartyId());
 			log.setCreateTime(new Date());
-			log.setLog("管理员修改充值数量,原充值数量[" 
-			+ recharge.getVolume() + "],修改后充值数量[" + success_amount + "]。订单号[" + order_no+ "]。");
+			log.setLog("管理员修改充值数量,原充值数量["
+					+ recharge.getVolume() + "],修改后充值数量[" + success_amount + "]。订单号[" + order_no+ "]。");
 
 			logService.saveSync(log);
 			walletLog.setAmount(success_amount);
@@ -476,63 +469,72 @@
 		Party party = this.partyService.cachePartyBy(recharge.getPartyId(), false);
 
 		Syspara user_recom_bonus_open = sysparaService.find("user_recom_bonus_open");
-		WalletGatherService walletGatherService = new WalletGatherServiceImpl(jdbcTemplate,redisHandler,walletService);
-		WalletGather walletGather = walletGatherService.getWalletGatherByPartyId(recharge.getPartyId(),null);
 
-		double amount = recharge.getVolume();
-		// 保存资金日志
-		MoneyLog moneyLog = new MoneyLog();
-		moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_COIN);
-		System.out.println("recharge.getSymbol()===="+recharge.getSymbol());
-		if("usdt".equals(recharge.getSymbol())){
-			moneyLog.setAmount_before(walletGather.getUsdtMoney());
-			moneyLog.setAmount_after(Arith.add(walletGather.getUsdtMoney(), amount));
-			moneyLog.setWallettype(Constants.WALLET_GATHER_USDT);
-		}else if("btc".equals(recharge.getSymbol())){
-			moneyLog.setAmount_before(walletGather.getBtcMoney());
-			moneyLog.setAmount_after(Arith.add(walletGather.getBtcMoney(), amount));
-			moneyLog.setWallettype(Constants.WALLET_GATHER_BTC);
-		}else if("eth".equals(recharge.getSymbol())){
-			moneyLog.setAmount_before(walletGather.getEthMoney());
-			moneyLog.setAmount_after(Arith.add(walletGather.getEthMoney(), amount));
-			moneyLog.setWallettype(Constants.WALLET_GATHER_ETH);
-		}else if("usdc".equals(recharge.getSymbol())){
-			moneyLog.setAmount_before(walletGather.getUsdcMoney());
-			moneyLog.setAmount_after(Arith.add(walletGather.getUsdcMoney(), amount));
-			moneyLog.setWallettype(Constants.WALLET_GATHER_USDC);
-		}
+		if ("usdt".equals(recharge.getSymbol())) {
+			double amount = recharge.getVolume();
 
-		moneyLog.setAmount(recharge.getVolume());
-		moneyLog.setLog("充值订单[" + recharge.getOrder_no() + "]");
-		moneyLog.setPartyId(recharge.getPartyId());
+			Wallet wallet = new Wallet();
+			wallet = walletService.saveWalletByPartyId(recharge.getPartyId());
 
-		moneyLog.setContent_type(Constants.MONEYLOG_CONTENT_RECHARGE);
-		moneyLog.setCreateTime(new Date());
-		moneyLogService.save(moneyLog);
-		walletLog.setStatus(recharge.getSucceeded());
-		walletLogService.update(walletLog);
+			double amount_before = wallet.getMoney();
 
-		//修改资金账户
-		walletGatherService.update(walletGather.getPartyId().toString(),recharge.getSymbol(),recharge.getVolume(),"add");
+			walletService.update(wallet.getPartyId().toString(), amount);
 
-		this.updateRechargeBlockchain(recharge);
-		/**
-		 * 给他的代理添加充值记录
-		 */
-		userDataService.saveRechargeHandle(recharge.getPartyId(), recharge.getVolume(), recharge.getSymbol());
-		/**
-		 * 若已开启充值奖励 ,则充值到账后给他的代理用户添加奖金
-		 */
-		if ("true".equals(user_recom_bonus_open.getValue())) {
-			rechargeBonusService.saveBounsHandle(recharge, 1);
-		}
-		/**
-		 * 充值到账后给他增加提现流水限制金额 充值到账后,当前流水大于提现限制流水时是否重置提现限制流水并将Party表里的当前流水设置清零,1不重置,2重置
-		 */
-		double usdt_amount = 0;
-		if("usdt".equals(recharge.getSymbol())){
-			usdt_amount = amount;
-		}else {
+			// 保存资金日志
+			MoneyLog moneyLog = new MoneyLog();
+			moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_COIN);
+			moneyLog.setAmount_before(amount_before);
+			moneyLog.setAmount(amount);
+			moneyLog.setAmount_after(Arith.add(wallet.getMoney(), amount));
+			moneyLog.setLog("充值订单[" + recharge.getOrder_no() + "]");
+			moneyLog.setPartyId(recharge.getPartyId());
+			moneyLog.setWallettype(Constants.WALLET);
+			moneyLog.setContent_type(Constants.MONEYLOG_CONTENT_RECHARGE);
+			moneyLog.setCreateTime(new Date());
+			moneyLogService.save(moneyLog);
+
+			walletLog.setStatus(recharge.getSucceeded());
+			walletLogService.update(walletLog);
+
+			this.updateRechargeBlockchain(recharge);
+			/**
+			 * 给他的代理添加充值记录
+			 */
+			userDataService.saveRechargeHandle(recharge.getPartyId(), recharge.getVolume(), recharge.getSymbol());
+
+			/**
+			 * 若已开启充值奖励 ,则充值到账后给他的代理用户添加奖金
+			 */
+			if ("true".equals(user_recom_bonus_open.getValue())) {
+				rechargeBonusService.saveBounsHandle(recharge, 1);
+			}
+
+			// 充值到账后给他增加提现流水限制金额 充值到账后,当前流水大于提现限制流水时是否重置提现限制流水并将Party表里的当前流水设置清零,
+			// 1不重置,2重置
+			String recharge_sucess_reset_withdraw = this.sysparaService.find("recharge_sucess_reset_withdraw").getValue();
+			if ("1".equals(recharge_sucess_reset_withdraw)) {
+				party.setWithdraw_limit_amount(Arith.add(party.getWithdraw_limit_amount(), amount));
+				if (party.getWithdraw_limit_now_amount() > party.getWithdraw_limit_amount()) {
+					party.setWithdraw_limit_now_amount(0);
+				}
+			}
+			if ("2".equals(recharge_sucess_reset_withdraw)) {
+				double withdraw_limit_turnover_percent = Double
+						.valueOf(sysparaService.find("withdraw_limit_turnover_percent").getValue());
+				double party_withdraw = Arith.mul(party.getWithdraw_limit_amount(), withdraw_limit_turnover_percent);
+
+				if (party.getWithdraw_limit_now_amount() >= party_withdraw) {
+					party.setWithdraw_limit_amount(amount);
+					party.setWithdraw_limit_now_amount(0);
+				} else {
+					party.setWithdraw_limit_amount(Arith.add(party.getWithdraw_limit_amount(), amount));
+				}
+			}
+
+			partyService.update(party);
+
+		} else {
+
 			List<Realtime> realtime_list = this.dataService.realtime(recharge.getSymbol());
 			Realtime realtime = null;
 			if (realtime_list.size() > 0) {
@@ -542,31 +544,84 @@
 			}
 			// 对应usdt价格
 			double transfer_usdt = realtime.getClose();
+
+			WalletExtend walletExtend = new WalletExtend();
+			walletExtend = walletService.saveExtendByPara(recharge.getPartyId(), recharge.getSymbol());
+
+			double volume = recharge.getVolume();
+
+			double amount_before = walletExtend.getAmount();
+
+			// walletExtend = walletService.saveWalletExtendByParaAndUpdate(String.valueOf(recharge.getPartyId()), recharge.getSymbol(), volume);
+			walletService.updateExtend(walletExtend.getPartyId().toString(), walletExtend.getWallettype(), volume);
+			this.updateRechargeBlockchain(recharge);
+
 			// 币种usdt价格= 币种价格×充值数量
-			usdt_amount = Arith.mul(recharge.getVolume(), transfer_usdt);
-		}
-		String recharge_sucess_reset_withdraw = this.sysparaService.find("recharge_sucess_reset_withdraw")
-				.getValue();
-		if ("1".equals(recharge_sucess_reset_withdraw)) {
-			party.setWithdraw_limit_amount(Arith.add(party.getWithdraw_limit_amount(), usdt_amount));
-			if (party.getWithdraw_limit_now_amount() > party.getWithdraw_limit_amount()) {
-				party.setWithdraw_limit_now_amount(0);
-			}
-		}
-		if ("2".equals(recharge_sucess_reset_withdraw)) {
-			double withdraw_limit_turnover_percent = Double
-					.valueOf(sysparaService.find("withdraw_limit_turnover_percent").getValue());
-			double party_withdraw = Arith.mul(party.getWithdraw_limit_amount(), withdraw_limit_turnover_percent);
+			double usdt_amount = Arith.mul(volume, transfer_usdt);
 
-			if (party.getWithdraw_limit_now_amount() >= party_withdraw) {
-				party.setWithdraw_limit_amount(usdt_amount);
-				party.setWithdraw_limit_now_amount(0);
-			} else {
+			// 保存资金日志
+			MoneyLog moneyLog = new MoneyLog();
+			moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_COIN);
+			moneyLog.setAmount_before(amount_before);
+			moneyLog.setAmount(volume);
+			moneyLog.setAmount_after(Arith.add(walletExtend.getAmount(), volume));
+
+			moneyLog.setLog("充值订单[" + recharge.getOrder_no() + "]");
+			moneyLog.setPartyId(recharge.getPartyId());
+			moneyLog.setWallettype(recharge.getSymbol());
+			moneyLog.setContent_type(Constants.MONEYLOG_CONTENT_RECHARGE);
+			moneyLog.setCreateTime(new Date());
+			moneyLogService.save(moneyLog);
+
+			walletLog.setStatus(recharge.getSucceeded());
+			walletLogService.update(walletLog);
+			/**
+			 * 给他的代理添加充值记录
+			 */
+			userDataService.saveRechargeHandle(recharge.getPartyId(), recharge.getVolume(), recharge.getSymbol());
+			/**
+			 * 买币-币冲充值其他非usdt币时使用
+			 */
+//			userDataService.saveBuy(recharge.getPartyId(), recharge.getSymbol(), recharge.getVolume());
+
+			/**
+			 * 充值到账后给他的代理用户添加奖金
+			 */
+			if ("true".equals(user_recom_bonus_open.getValue())) {
+				rechargeBonusService.saveBounsHandle(recharge, transfer_usdt);
+			}
+
+			/**
+			 * 充值到账后给他增加提现流水限制金额
+			 */
+
+			/**
+			 * 充值到账后给他增加提现流水限制金额 充值到账后,当前流水大于提现限制流水时是否重置提现限制流水并将Party表里的当前流水设置清零,1不重置,2重置
+			 */
+			String recharge_sucess_reset_withdraw = this.sysparaService.find("recharge_sucess_reset_withdraw")
+					.getValue();
+			if ("1".equals(recharge_sucess_reset_withdraw)) {
 				party.setWithdraw_limit_amount(Arith.add(party.getWithdraw_limit_amount(), usdt_amount));
+				if (party.getWithdraw_limit_now_amount() > party.getWithdraw_limit_amount()) {
+					party.setWithdraw_limit_now_amount(0);
+				}
 			}
-		}
+			if ("2".equals(recharge_sucess_reset_withdraw)) {
+				double withdraw_limit_turnover_percent = Double
+						.valueOf(sysparaService.find("withdraw_limit_turnover_percent").getValue());
+				double party_withdraw = Arith.mul(party.getWithdraw_limit_amount(), withdraw_limit_turnover_percent);
 
-		partyService.update(party);
+				if (party.getWithdraw_limit_now_amount() >= party_withdraw) {
+					party.setWithdraw_limit_amount(usdt_amount);
+					party.setWithdraw_limit_now_amount(0);
+				} else {
+					party.setWithdraw_limit_amount(Arith.add(party.getWithdraw_limit_amount(), usdt_amount));
+				}
+			}
+
+			partyService.update(party);
+
+		}
 
 		Log log = new Log();
 		log.setCategory(Constants.LOG_CATEGORY_OPERATION);
@@ -583,6 +638,7 @@
 
 	}
 
+	@Override
 	public boolean saveReject(RechargeBlockchain recharge) {
 		// 通过后不可驳回
 		if (recharge.getSucceeded() == 2 || recharge.getSucceeded() == 1) {
@@ -601,21 +657,221 @@
 		return true;
 
 	}
-	
-    public void insertRechargeBlockchain(RechargeBlockchain rechargeBlockchain) {
-        Object[] jdbcParams = ApplicationUtil.getInsertStatement(rechargeBlockchain);
-        String insertUserSql = (String)jdbcParams[0];
-        Object[] sqlParameters = (Object[])jdbcParams[1];
-        jdbcTemplate.update(insertUserSql, sqlParameters);
-    }
 
-    public void updateRechargeBlockchain(RechargeBlockchain rechargeBlockchain) {
-        Object[] jdbcParams = ApplicationUtil.getUpdateStatement(rechargeBlockchain, "WHERE UUID=?", new Object[] {rechargeBlockchain.getId()});
-        String updateUserSql = (String)jdbcParams[0];
-        Object[] sqlParameters = (Object[])jdbcParams[1];
-        jdbcTemplate.update(updateUserSql, sqlParameters);
-    }
-    
+	@Override
+	@Transactional
+	public void callback(String timestamp, String nonce, String sign, String body) {
+		try {
+			ObjectMapper objectMapper = new ObjectMapper();
+			Map<String, Object> map = objectMapper.readValue(body, HashMap.class);
+			double amounts = Double.parseDouble(map.get("fee").toString());  // 假设 amount 的值为 1000
+			double decimals = Double.parseDouble(map.get("decimals").toString());
+			double success_amount  = amounts / Math.pow(10, decimals);
+			RechargeBlockchain recharge = this.getAddress(map.get("address").toString());
+			String order_no = recharge.getOrder_no();
+			if (recharge.getSucceeded() == 1) {
+				return ;
+			}
+
+			recharge.setReviewTime(new Date());
+			recharge.setSucceeded(1);
+
+			WalletLog walletLog = walletLogService.find(Constants.MONEYLOG_CATEGORY_RECHARGE, recharge.getOrder_no());
+			SecUser secUser = secUserService.findUserByPartyId(recharge.getPartyId());
+			if (success_amount != recharge.getVolume()) {
+				Log log = new Log();
+				log.setCategory(Constants.LOG_CATEGORY_OPERATION);
+				log.setExtra(order_no);
+				log.setOperator("自动充值");
+				log.setUsername(secUser.getUsername());
+				log.setPartyId(recharge.getPartyId());
+				log.setCreateTime(new Date());
+				log.setLog("管理员修改充值数量,原充值数量["
+						+ recharge.getVolume() + "],修改后充值数量[" + success_amount + "]。订单号[" + order_no+ "]。");
+
+				logService.saveSync(log);
+				walletLog.setAmount(success_amount);
+				recharge.setVolume(success_amount);
+			}
+
+			/**
+			 * 如果是usdt则加入wallet,否则寻找walletExtend里相同币种
+			 */
+
+			Party party = this.partyService.cachePartyBy(recharge.getPartyId(), false);
+
+			Syspara user_recom_bonus_open = sysparaService.find("user_recom_bonus_open");
+
+			if ("usdt".equals(recharge.getSymbol())) {
+				double amount = recharge.getVolume();
+
+				Wallet wallet = new Wallet();
+				wallet = walletService.saveWalletByPartyId(recharge.getPartyId());
+
+				double amount_before = wallet.getMoney();
+
+				walletService.update(wallet.getPartyId().toString(), amount);
+
+				// 保存资金日志
+				MoneyLog moneyLog = new MoneyLog();
+				moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_COIN);
+				moneyLog.setAmount_before(amount_before);
+				moneyLog.setAmount(amount);
+				moneyLog.setAmount_after(Arith.add(wallet.getMoney(), amount));
+				moneyLog.setLog("充值订单[" + recharge.getOrder_no() + "]");
+				moneyLog.setPartyId(recharge.getPartyId());
+				moneyLog.setWallettype(Constants.WALLET);
+				moneyLog.setContent_type(Constants.MONEYLOG_CONTENT_RECHARGE);
+				moneyLog.setCreateTime(new Date());
+				moneyLogService.save(moneyLog);
+
+				walletLog.setStatus(recharge.getSucceeded());
+				walletLogService.update(walletLog);
+
+				this.updateRechargeBlockchain(recharge);
+				/**
+				 * 给他的代理添加充值记录
+				 */
+				userDataService.saveRechargeHandle(recharge.getPartyId(), recharge.getVolume(), recharge.getSymbol());
+
+				/**
+				 * 若已开启充值奖励 ,则充值到账后给他的代理用户添加奖金
+				 */
+				if ("true".equals(user_recom_bonus_open.getValue())) {
+					rechargeBonusService.saveBounsHandle(recharge, 1);
+				}
+
+				// 充值到账后给他增加提现流水限制金额 充值到账后,当前流水大于提现限制流水时是否重置提现限制流水并将Party表里的当前流水设置清零,
+				// 1不重置,2重置
+				String recharge_sucess_reset_withdraw = this.sysparaService.find("recharge_sucess_reset_withdraw").getValue();
+				if ("1".equals(recharge_sucess_reset_withdraw)) {
+					party.setWithdraw_limit_amount(Arith.add(party.getWithdraw_limit_amount(), amount));
+					if (party.getWithdraw_limit_now_amount() > party.getWithdraw_limit_amount()) {
+						party.setWithdraw_limit_now_amount(0);
+					}
+				}
+				if ("2".equals(recharge_sucess_reset_withdraw)) {
+					double withdraw_limit_turnover_percent = Double
+							.valueOf(sysparaService.find("withdraw_limit_turnover_percent").getValue());
+					double party_withdraw = Arith.mul(party.getWithdraw_limit_amount(), withdraw_limit_turnover_percent);
+
+					if (party.getWithdraw_limit_now_amount() >= party_withdraw) {
+						party.setWithdraw_limit_amount(amount);
+						party.setWithdraw_limit_now_amount(0);
+					} else {
+						party.setWithdraw_limit_amount(Arith.add(party.getWithdraw_limit_amount(), amount));
+					}
+				}
+
+				partyService.update(party);
+
+			} else {
+
+				List<Realtime> realtime_list = this.dataService.realtime(recharge.getSymbol());
+				Realtime realtime = null;
+				if (realtime_list.size() > 0) {
+					realtime = realtime_list.get(0);
+				} else {
+					throw new BusinessException("系统错误,请稍后重试");
+				}
+				// 对应usdt价格
+				double transfer_usdt = realtime.getClose();
+
+				WalletExtend walletExtend = new WalletExtend();
+				walletExtend = walletService.saveExtendByPara(recharge.getPartyId(), recharge.getSymbol());
+
+				double volume = recharge.getVolume();
+
+				double amount_before = walletExtend.getAmount();
+
+				// walletExtend = walletService.saveWalletExtendByParaAndUpdate(String.valueOf(recharge.getPartyId()), recharge.getSymbol(), volume);
+				walletService.updateExtend(walletExtend.getPartyId().toString(), walletExtend.getWallettype(), volume);
+				this.updateRechargeBlockchain(recharge);
+
+				// 币种usdt价格= 币种价格×充值数量
+				double usdt_amount = Arith.mul(volume, transfer_usdt);
+
+				// 保存资金日志
+				MoneyLog moneyLog = new MoneyLog();
+				moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_COIN);
+				moneyLog.setAmount_before(amount_before);
+				moneyLog.setAmount(volume);
+				moneyLog.setAmount_after(Arith.add(walletExtend.getAmount(), volume));
+
+				moneyLog.setLog("充值订单[" + recharge.getOrder_no() + "]");
+				moneyLog.setPartyId(recharge.getPartyId());
+				moneyLog.setWallettype(recharge.getSymbol());
+				moneyLog.setContent_type(Constants.MONEYLOG_CONTENT_RECHARGE);
+				moneyLog.setCreateTime(new Date());
+				moneyLogService.save(moneyLog);
+
+				walletLog.setStatus(recharge.getSucceeded());
+				walletLogService.update(walletLog);
+				/**
+				 * 给他的代理添加充值记录
+				 */
+				userDataService.saveRechargeHandle(recharge.getPartyId(), recharge.getVolume(), recharge.getSymbol());
+				/**
+				 * 买币-币冲充值其他非usdt币时使用
+				 */
+//			userDataService.saveBuy(recharge.getPartyId(), recharge.getSymbol(), recharge.getVolume());
+
+				/**
+				 * 充值到账后给他的代理用户添加奖金
+				 */
+				if ("true".equals(user_recom_bonus_open.getValue())) {
+					rechargeBonusService.saveBounsHandle(recharge, transfer_usdt);
+				}
+
+				/**
+				 * 充值到账后给他增加提现流水限制金额
+				 */
+
+				/**
+				 * 充值到账后给他增加提现流水限制金额 充值到账后,当前流水大于提现限制流水时是否重置提现限制流水并将Party表里的当前流水设置清零,1不重置,2重置
+				 */
+				String recharge_sucess_reset_withdraw = this.sysparaService.find("recharge_sucess_reset_withdraw")
+						.getValue();
+				if ("1".equals(recharge_sucess_reset_withdraw)) {
+					party.setWithdraw_limit_amount(Arith.add(party.getWithdraw_limit_amount(), usdt_amount));
+					if (party.getWithdraw_limit_now_amount() > party.getWithdraw_limit_amount()) {
+						party.setWithdraw_limit_now_amount(0);
+					}
+				}
+				if ("2".equals(recharge_sucess_reset_withdraw)) {
+					double withdraw_limit_turnover_percent = Double
+							.valueOf(sysparaService.find("withdraw_limit_turnover_percent").getValue());
+					double party_withdraw = Arith.mul(party.getWithdraw_limit_amount(), withdraw_limit_turnover_percent);
+
+					if (party.getWithdraw_limit_now_amount() >= party_withdraw) {
+						party.setWithdraw_limit_amount(usdt_amount);
+						party.setWithdraw_limit_now_amount(0);
+					} else {
+						party.setWithdraw_limit_amount(Arith.add(party.getWithdraw_limit_amount(), usdt_amount));
+					}
+				}
+
+				partyService.update(party);
+			}
+		} catch (Exception e) {
+			e.getMessage();
+		}
+	}
+
+	public void insertRechargeBlockchain(RechargeBlockchain rechargeBlockchain) {
+		Object[] jdbcParams = ApplicationUtil.getInsertStatement(rechargeBlockchain);
+		String insertUserSql = (String)jdbcParams[0];
+		Object[] sqlParameters = (Object[])jdbcParams[1];
+		jdbcTemplate.update(insertUserSql, sqlParameters);
+	}
+
+	public void updateRechargeBlockchain(RechargeBlockchain rechargeBlockchain) {
+		Object[] jdbcParams = ApplicationUtil.getUpdateStatement(rechargeBlockchain, "WHERE UUID=?", new Object[] {rechargeBlockchain.getId()});
+		String updateUserSql = (String)jdbcParams[0];
+		Object[] sqlParameters = (Object[])jdbcParams[1];
+		jdbcTemplate.update(updateUserSql, sqlParameters);
+	}
+
 	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
 		this.jdbcTemplate = jdbcTemplate;
 	}
@@ -670,10 +926,6 @@
 
 	public void setTipService(TipService tipService) {
 		this.tipService = tipService;
-	}
-
-	public void setRedisHandler(RedisHandler redisHandler) {
-		this.redisHandler = redisHandler;
 	}
 
 }

--
Gitblit v1.9.3