From 99924733282cb812aab96b0b0be1632f4d0bbc7c Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Wed, 15 Oct 2025 19:36:34 +0800
Subject: [PATCH] 1
---
trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 103 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..d42a9b4 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,9 +1,23 @@
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.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.yami.trading.huobi.hobi.http.HttpHelper;
+import com.yami.trading.security.common.enums.CryptoCurrencyEnum;
+import com.yami.trading.security.common.util.LocalKeyStorageAESUtil;
+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.common.constants.Constants;
import com.yami.trading.common.domain.Result;
@@ -12,19 +26,29 @@
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.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
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.File;
+import java.io.FileInputStream;
import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -43,6 +67,21 @@
UserService userService;
@Autowired
PartyBlockchainService partyBlockchainService;
+ @Autowired
+ RedisTemplate redisTemplate;
+ @Autowired
+ private SysUserService sysUserService;
+ @Autowired
+ RechargeBlockchainOrderService rechargeBlockchainOrderService;
+ @Autowired
+ protected UserService partyService;
+
+ 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";
+
+
/**
* 获取所有链地址
@@ -137,6 +176,70 @@
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