From a2dc849bc20bffaa4ad45d68e401d3892ace24b3 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Fri, 04 Jul 2025 22:21:20 +0800
Subject: [PATCH] 1
---
trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 152 insertions(+), 0 deletions(-)
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java
index 1de166c..869413b 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java
@@ -1,10 +1,21 @@
package com.yami.trading.api.controller.exchange;
+import cn.hutool.core.lang.Console;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpStatus;
+import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.yami.trading.api.UD.*;
+import com.yami.trading.api.UD.Address;
import com.yami.trading.bean.exchange.PartyBlockchain;
import com.yami.trading.bean.model.ChannelBlockchain;
+import com.yami.trading.bean.model.RechargeBlockchainOrder;
import com.yami.trading.bean.model.User;
+import com.yami.trading.bean.vo.RechargeAddressVo;
import com.yami.trading.common.constants.Constants;
import com.yami.trading.common.domain.Result;
import com.yami.trading.common.exception.YamiShopBindException;
@@ -12,19 +23,24 @@
import com.yami.trading.common.util.StringUtils;
import com.yami.trading.security.common.util.SecurityUtils;
import com.yami.trading.service.ChannelBlockchainService;
+import com.yami.trading.service.RechargeBlockchainOrderService;
import com.yami.trading.service.exchange.PartyBlockchainService;
import com.yami.trading.service.syspara.SysparaService;
import com.yami.trading.service.user.UserService;
+import com.yami.trading.sys.model.SysUser;
+import com.yami.trading.sys.service.SysUserService;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
+import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -43,6 +59,19 @@
UserService userService;
@Autowired
PartyBlockchainService partyBlockchainService;
+ @Autowired
+ RedisTemplate redisTemplate;
+ @Autowired
+ private SysUserService sysUserService;
+ @Autowired
+ RechargeBlockchainOrderService rechargeBlockchainOrderService;
+
+ private final String gateway = "https://sig11.udun.io";
+ private final String merchantKey = "7fd79e4ed59e7c31e1fa2e13d64f7e6c";
+ private final String merchantId = "319563";
+ private final String defaultCallBackUrl = "https://openapi.yanshiz.com/api/channelBlockchain!rechargeCallback.action";
+
+
/**
* 获取所有链地址
@@ -119,6 +148,8 @@
return cbc;
}).collect(Collectors.toList());
}
+
+ //后台设置地址
if (data.isEmpty()) data = this.channelBlockchainService.findByCoin(coin.toLowerCase());
for (int i = 0; i < data.size(); i++) {
data.get(i).setBlockchain_name(data.get(i).getBlockchainName());
@@ -134,9 +165,130 @@
data.get(i).setAddress(null);
}
}
+
+// String partyId =SecurityUtils.getUser().getUserId();
+// if(!StringUtils.isNotEmpty(partyId)){
+// throw new YamiShopBindException("请登录!");
+// }
+// if (0 == this.sysparaService.find("can_recharge").getInteger()) {
+// return Result.failed("请联系客服充值");
+// }
+// RechargeAddressVo rechargeAddressVo = new RechargeAddressVo();
+//
+// //获取u盾地址
+// //获取商户支持币种
+// List<Coin> coinList = listSupportCoin(merchantId,false);
+// //创建地址
+// coinList.forEach(f->{
+// Address address = new Address();
+// if(f.getName().equals("BTC")){
+// String ress = (String)redisTemplate.opsForValue().get(partyId + "BTC");
+// if(StringUtils.isNotEmpty(ress)){
+// rechargeAddressVo.setAddress(ress);
+// rechargeAddressVo.setCoin(coin);
+// rechargeAddressVo.setBlockchainName(coin);
+// }else{
+// address = createAddress(f.getMainCoinType(),null,null,null);
+// rechargeAddressVo.setAddress(address.getAddress());
+// rechargeAddressVo.setCoin(coin);
+// rechargeAddressVo.setBlockchainName(coin);
+// redisTemplate.opsForValue().set(partyId + "BTC",address.getAddress());
+// }
+// }else if(f.getName().equals("ETH")){
+// String ress = (String)redisTemplate.opsForValue().get(partyId + "ETH");
+// if(StringUtils.isNotEmpty(ress)){
+// rechargeAddressVo.setAddress(ress);
+// rechargeAddressVo.setCoin(coin);
+// rechargeAddressVo.setBlockchainName(coin);
+// }else{
+// address = createAddress(f.getMainCoinType(),null,null,null);
+// rechargeAddressVo.setAddress(address.getAddress());
+// rechargeAddressVo.setCoin(coin);
+// rechargeAddressVo.setBlockchainName(coin);
+// redisTemplate.opsForValue().set(partyId + "ETH",address.getAddress());
+// }
+// }else if(f.getName().equals("USDT")){
+// String ress = (String)redisTemplate.opsForValue().get(partyId + "USDT");
+// if(StringUtils.isNotEmpty(ress)){
+// rechargeAddressVo.setAddress(ress);
+// rechargeAddressVo.setCoin(coin);
+// rechargeAddressVo.setBlockchainName(coin);
+// }else{
+// address = createAddress(f.getMainCoinType(),null,null,null);
+// rechargeAddressVo.setAddress(address.getAddress());
+// rechargeAddressVo.setCoin(coin);
+// rechargeAddressVo.setBlockchainName(coin);
+// redisTemplate.opsForValue().set(partyId + "USDT",address.getAddress());
+// }
+// }
+// });
+// return Result.succeed(rechargeAddressVo);
return Result.succeed(data);
}
+ public List<Coin> listSupportCoin(String merchantId , boolean showBalance) {
+ Map<String, Object> params = new HashMap<>();
+ params.put("merchantId", merchantId);
+ params.put("showBalance", showBalance);
+ ResultMsg result = JSONUtil.toBean(UdunUtils.post(gateway, merchantKey, ApiPath.SUPPORT_COIN, JSONUtil.toJsonStr(params)), ResultMsg.class);
+ if (result.getCode() != HttpStatus.HTTP_OK) {
+ Console.error(JSONUtil.toJsonStr(result));
+ return null;
+ }
+ return JSONUtil.toList(JSONUtil.parseArray(result.getData()), Coin.class);
+ }
+
+ public Address createAddress(String mainCoinType, String alias, String walletId, String callUrl) throws UdunException {
+ Map<String, String> params = new HashMap<>();
+ params.put("merchantId", merchantId);
+ params.put("coinType", mainCoinType);
+ params.put("callUrl", defaultCallBackUrl);
+ params.put("walletId", walletId);
+ params.put("alias", alias);
+
+ ResultMsg result = JSONUtil.toBean(UdunUtils.post(gateway, merchantKey, ApiPath.CREATE_ADDRESS, StrUtil.format("[{}]", JSONUtil.toJsonStr(params))), ResultMsg.class);
+ if (result.getCode() != HttpStatus.HTTP_OK) {
+ throw new UdunException(result.getCode(), result.getMessage());
+ }
+ return JSONUtil.toBean(result.getData(), Address.class);
+ }
+
+ @RequestMapping(action +"rechargeCallback.action")
+ public ResultMsg rechargeCallback(HttpServletRequest request){
+ String timestamp = request.getParameter("timestamp");
+ String nonce = request.getParameter("nonce");
+ String sign = request.getParameter("sign");
+ String body = request.getParameter("body");
+ try{
+ ObjectMapper objectMapper = new ObjectMapper();
+ Map<String, Object> map = objectMapper.readValue(body, HashMap.class);
+ double amounts = Double.parseDouble(map.get("amount").toString()); // 假设 amount 的值为 1000
+ double decimals = Double.parseDouble(map.get("decimals").toString());
+ double success_amount = amounts / Math.pow(10, decimals);
+ String address = map.get("address").toString();
+
+
+ RechargeBlockchainOrder blockchainOrder = rechargeBlockchainOrderService.getOne(new LambdaQueryWrapper<>(RechargeBlockchainOrder.class)
+ .eq(RechargeBlockchainOrder::getSucceeded, 0)
+ .eq(RechargeBlockchainOrder::getChannelAddress, address).last(" limit 1 "));
+ if(ObjectUtil.isEmpty(blockchainOrder)){
+ ResultMsg resultMsg = new ResultMsg();
+ resultMsg.setCode(200);
+ return resultMsg;
+ }
+ SysUser user = sysUserService.getSysUserById( Long.getLong(blockchainOrder.getPartyId()));
+ rechargeBlockchainOrderService.manualReceipt(1,blockchainOrder.getPartyId(), BigDecimal.valueOf(success_amount),user.getUsername());
+ ResultMsg resultMsg = new ResultMsg();
+ resultMsg.setCode(200);
+ return resultMsg;
+ }catch (Exception e){
+ ResultMsg resultMsg = new ResultMsg();
+ resultMsg.setCode(500);
+ resultMsg.setMessage("回调处理失败");
+ return resultMsg;
+ }
+ }
+
/**
* 根据第三方充值链接
*/
--
Gitblit v1.9.3