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-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline5DayJob.java                       |    2 
 trading-order-service/src/main/java/com/yami/trading/service/impl/WithdrawServiceImpl.java                     |   77 ++--
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1MinuteJob.java                    |    2 
 trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunApi.java                                         |  108 +++++
 trading-order-bean/src/main/java/com/yami/trading/bean/contract/domain/ContractOrder.java                      |    2 
 trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewsController.java                       |    3 
 trading-order-bean/src/main/java/com/yami/trading/bean/contract/domain/ContractApplyOrder.java                 |    5 
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1YearJob.java                      |    2 
 trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRealNameAuthContoller.java                |   18 
 trading-order-admin/src/main/java/com/yami/trading/admin/controller/user/RechargeOrderController.java          |    4 
 trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiCapitaltWalletWalletController.java       |   40 +
 trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWithdrawController.java                   |   18 
 trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java                |   48 ++
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1DayJob.java                       |    4 
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline2HourJob.java                      |    2 
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline4HourJob.java                      |    2 
 trading-order-admin/src/main/java/com/yami/trading/api/UD/Coin.java                                            |   78 ++++
 trading-order-bean/src/main/java/com/yami/trading/bean/vo/RechargeAddressVo.java                               |   31 +
 trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunClient.java                                      |  132 ++++++
 trading-order-service/src/main/java/com/yami/trading/service/impl/RechargeBlockchainOrderServiceImpl.java      |    3 
 trading-order-service/src/main/java/com/yami/trading/service/RechargeBlockchainOrderService.java               |    4 
 trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java |  152 ++++++++
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1QuarterJob.java                   |    2 
 trading-order-admin/src/main/java/com/yami/trading/admin/controller/cms/NewsController.java                    |    4 
 trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderCalculationServiceImpl.java |   34 -
 trading-order-service/src/main/java/com/yami/trading/service/impl/WalletServiceImpl.java                       |    2 
 trading-order-admin/src/main/resources/application.yml                                                         |    2 
 trading-order-admin/src/main/java/com/yami/trading/api/UD/Address.java                                         |   31 +
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1WeekJob.java                      |    2 
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline15MinuteJob.java                   |    2 
 trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java                   |   57 ++
 trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunUtils.java                                       |   88 ++++
 trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java                            |    7 
 trading-order-admin/src/main/java/com/yami/trading/api/dto/OpenAction.java                                     |    2 
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1MonJob.java                       |    2 
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline60MinuteJob.java                   |    2 
 trading-order-service/src/main/java/com/yami/trading/service/impl/StrongLevelCalculationServiceImpl.java       |    4 
 trading-order-admin/src/main/java/com/yami/trading/api/UD/ApiPath.java                                         |   12 
 trading-order-admin/src/main/java/com/yami/trading/admin/task/InitHandle.java                                  |    4 
 trading-order-admin/src/main/java/com/yami/trading/api/UD/ResultMsg.java                                       |   40 ++
 trading-order-service/src/main/java/com/yami/trading/service/item/ItemService.java                             |    6 
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline5MinuteJob.java                    |    2 
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline30MinuteJob.java                   |    2 
 trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java         |    1 
 trading-order-admin/src/main/java/com/yami/trading/admin/model/TransferModel.java                              |    3 
 trading-order-service/src/main/java/com/yami/trading/service/CapitaltWalletService.java                        |    1 
 trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunException.java                                   |   28 +
 trading-order-admin/src/main/resources/config/system.properties                                                |    9 
 48 files changed, 957 insertions(+), 129 deletions(-)

diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/cms/NewsController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/cms/NewsController.java
index 4ddc9b1..8d6bc35 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/cms/NewsController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/cms/NewsController.java
@@ -82,7 +82,7 @@
         }
         news.setTitle(model.getTitle());
         news.setImgJumpUrl(model.getImgJumpUrl());
-        news.setImgUrl(model.getImgUrl());
+        news.setImgUrl(Constants.IMAGES_HTTP+model.getImgUrl());
         news.setClick(model.isClick());
         news.setPopUp(model.isPopUp());
         news.setIndexTop(model.isIndex());
@@ -121,7 +121,7 @@
         news.setImgJumpUrl(model.getImgJumpUrl());
         news.setClick(model.isClick());
         news.setPopUp(model.isPopUp());
-        news.setImgUrl(model.getImgUrl());
+        news.setImgUrl(Constants.IMAGES_HTTP+model.getImgUrl());
         news.setIndexTop(model.isIndex());
         news.setLanguage(model.getLanguage());
         news.setStartTime(model.getStartTime());
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/user/RechargeOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/user/RechargeOrderController.java
index 9f19a04..2e1ad48 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/user/RechargeOrderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/user/RechargeOrderController.java
@@ -61,9 +61,9 @@
     @PostMapping("manualReceipt")
     @SysLog("USDT充值订单-手动到账")
     public Result<?> manualReceipt(@RequestBody @Valid ManualReceiptModel model){
-         SysUser user = sysUserService.getSysUserById( SecurityUtils.getSysUser().getUserId());
+        SysUser user = sysUserService.getSysUserById( SecurityUtils.getSysUser().getUserId());
         sysUserService.checkSafeWord(model.getSafePasssword());
-        rechargeBlockchainOrderService.manualReceipt(model.getId(),model.getAmount(),user.getUsername());
+        rechargeBlockchainOrderService.manualReceipt(2,model.getId(),model.getAmount(),user.getUsername());
         return  Result.ok(null);
     }
 
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/model/TransferModel.java b/trading-order-admin/src/main/java/com/yami/trading/admin/model/TransferModel.java
index adcc983..79fd802 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/model/TransferModel.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/model/TransferModel.java
@@ -30,7 +30,4 @@
     @Min(0)
     private BigDecimal moneyRevise;
 
-    @ApiModelProperty("登录人资金密码")
-    @NotBlank
-    private  String safePassword;
 }
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/task/InitHandle.java b/trading-order-admin/src/main/java/com/yami/trading/admin/task/InitHandle.java
index 8ea6c61..3e7392f 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/task/InitHandle.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/task/InitHandle.java
@@ -130,9 +130,9 @@
         }
 
         klineLoadCache.loadCache();
-//        String symbols = items.stream().map(Item::getSymbol).collect(Collectors.joining(","));
+        String symbols = items.stream().map(Item::getSymbol).collect(Collectors.joining(","));
         // 数据有问题初始化一下
-//         klineInitService.klineInit(symbols);  外汇
+         klineInitService.klineInit(symbols);
         // 高低修正
         highLowHandleJob.start();
 //        stockGetMarketJob.start();
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/UD/Address.java b/trading-order-admin/src/main/java/com/yami/trading/api/UD/Address.java
new file mode 100644
index 0000000..0ad65cd
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/UD/Address.java
@@ -0,0 +1,31 @@
+package com.yami.trading.api.UD;
+
+
+public class Address {
+    private String address;
+    private int coinType;
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public int getCoinType() {
+        return coinType;
+    }
+
+    public void setCoinType(int coinType) {
+        this.coinType = coinType;
+    }
+
+    @Override
+    public String toString() {
+        return "Address{" +
+                "address='" + address + '\'' +
+                ", coinType=" + coinType +
+                '}';
+    }
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/UD/ApiPath.java b/trading-order-admin/src/main/java/com/yami/trading/api/UD/ApiPath.java
new file mode 100644
index 0000000..87a8f72
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/UD/ApiPath.java
@@ -0,0 +1,12 @@
+package com.yami.trading.api.UD;
+
+public class ApiPath {
+    public final static String CREATE_ADDRESS = "/mch/address/create";
+    public final static String WITHDRAW = "/mch/withdraw";
+    public final static String TRANSACTION = "/mch/transaction";
+    public final static String AUTO_WITHDRAW = "/mch/withdraw/proxypay";
+    public final static String SUPPORT_COIN = "/mch/support-coins";
+    public final static String CHECK_PROXY = "/mch/check-proxy";
+    public final static String CHECK_ADDRESS = "/mch/check/address";
+    public final static String CREATE_BATCH_ADDRESS = "/mch/address/create/batch";
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/UD/Coin.java b/trading-order-admin/src/main/java/com/yami/trading/api/UD/Coin.java
new file mode 100644
index 0000000..ee29639
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/UD/Coin.java
@@ -0,0 +1,78 @@
+package com.yami.trading.api.UD;
+
+import java.math.BigDecimal;
+
+public class Coin {
+    private String name;
+    private String symbol;
+    private String mainCoinType;
+    private String coinType;
+    private String decimals;
+    private Integer tokenStatus;
+    private String mainSymbol;
+    private BigDecimal balance;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSymbol() {
+        return symbol;
+    }
+
+    public void setSymbol(String symbol) {
+        this.symbol = symbol;
+    }
+
+    public String getMainCoinType() {
+        return mainCoinType;
+    }
+
+    public void setMainCoinType(String mainCoinType) {
+        this.mainCoinType = mainCoinType;
+    }
+
+    public String getCoinType() {
+        return coinType;
+    }
+
+    public void setCoinType(String coinType) {
+        this.coinType = coinType;
+    }
+
+    public String getDecimals() {
+        return decimals;
+    }
+
+    public void setDecimals(String decimals) {
+        this.decimals = decimals;
+    }
+
+    public Integer getTokenStatus() {
+        return tokenStatus;
+    }
+
+    public void setTokenStatus(Integer tokenStatus) {
+        this.tokenStatus = tokenStatus;
+    }
+
+    public String getMainSymbol() {
+        return mainSymbol;
+    }
+
+    public void setMainSymbol(String mainSymbol) {
+        this.mainSymbol = mainSymbol;
+    }
+
+    public BigDecimal getBalance() {
+        return balance;
+    }
+
+    public void setBalance(BigDecimal balance) {
+        this.balance = balance;
+    }
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/UD/ResultMsg.java b/trading-order-admin/src/main/java/com/yami/trading/api/UD/ResultMsg.java
new file mode 100644
index 0000000..f64658c
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/UD/ResultMsg.java
@@ -0,0 +1,40 @@
+package com.yami.trading.api.UD;
+
+public class ResultMsg {
+    private Integer code;
+    private String message;
+    private String data;
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getData() {
+        return data;
+    }
+
+    public void setData(String data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultMsg{" +
+                "code=" + code +
+                ", message='" + message + '\'' +
+                ", data='" + data + '\'' +
+                '}';
+    }
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunApi.java b/trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunApi.java
new file mode 100644
index 0000000..5e05d0a
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunApi.java
@@ -0,0 +1,108 @@
+package com.yami.trading.api.UD;
+
+
+import java.math.BigDecimal;
+import java.util.List;
+
+public interface UdunApi {
+    /**
+     * 创建币种地址,别名和钱包编号默认,回调地址使用统一配置
+     *
+     * @param mainCoinType 主币种编号,使用获取商户币种信息接口
+     * @return 地址
+     */
+    Address createAddress(String mainCoinType)  throws UdunException;
+
+    /**
+     * 创建币种地址,别名和钱包编号自定义,回调地址使用统一配置
+     *
+     * @param mainCoinType 主币种编号,使用获取商户币种信息接口
+     * @param alias        地址别名
+     * @param walletId     钱包编号
+     * @return 地址
+     */
+    Address createAddress(String mainCoinType, String alias, String walletId)  throws UdunException;
+
+    /**
+     * 创建币种地址,别名和钱包编号自定义,回调地址自定义
+     *
+     * @param mainCoinType 主币种编号,使用获取商户币种信息接口
+     * @param alias        地址别名
+     * @param walletId     钱包编号
+     * @param callUrl      回调地址
+     * @return 地址
+     */
+    Address createAddress(String mainCoinType, String alias, String walletId, String callUrl) throws UdunException;
+
+
+    /**
+     * 提币,回调地址使用统一配置
+     *
+     * @param address      提币地址
+     * @param amount       提币数量
+     * @param mainCoinType 主币种编号,使用获取商户币种信息接口
+     * @param coinType     子币种编号,使用获取商户币种信息接口
+     * @param businessId   业务编号,必须保证该字段在系统内唯一,如果重复,则该笔提币钱包将不会进行接收
+     * @param memo         备注,XRP和EOS,这两种币的提币申请该字段可选,其他类型币种不填
+     * @return 返回信息
+     */
+    ResultMsg withdraw(String address, BigDecimal amount, String mainCoinType, String coinType, String businessId, String memo);
+
+    /**
+     * 提币,回调地址自定义
+     *
+     * @param address      提币地址
+     * @param amount       提币数量
+     * @param mainCoinType 主币种编号,使用获取商户币种信息接口
+     * @param coinType     子币种编号,使用获取商户币种信息接口
+     * @param businessId   业务编号,必须保证该字段在系统内唯一,如果重复,则该笔提币钱包将不会进行接收
+     * @param memo         备注,XRP和EOS,这两种币的提币申请该字段可选,其他类型币种不填
+     * @param callUrl      回调地址
+     * @return 返回信息
+     */
+    ResultMsg withdraw(String address, BigDecimal amount, String mainCoinType, String coinType, String businessId, String memo, String callUrl);
+
+    /**
+     * 代付,回调地址使用统一配置
+     *
+     * @param address      提币地址
+     * @param amount       提币数量
+     * @param mainCoinType 主币种编号,使用获取商户币种信息接口
+     * @param coinType     子币种编号,使用获取商户币种信息接口
+     * @param businessId   业务编号,必须保证该字段在系统内唯一,如果重复,则该笔提币钱包将不会进行接收
+     * @param memo         备注,XRP和EOS,这两种币的提币申请该字段可选,其他类型币种不填
+     * @return 返回信息
+     */
+    ResultMsg autoWithdraw(String address, BigDecimal amount, String mainCoinType, String coinType, String businessId, String memo);
+
+    /**
+     * 代付,回调地址自定义
+     *
+     * @param address      提币地址
+     * @param amount       提币数量
+     * @param mainCoinType 主币种编号,使用获取商户币种信息接口
+     * @param coinType     子币种编号,使用获取商户币种信息接口
+     * @param businessId   业务编号,必须保证该字段在系统内唯一,如果重复,则该笔提币钱包将不会进行接收
+     * @param memo         备注,XRP和EOS,这两种币的提币申请该字段可选,其他类型币种不填
+     * @param callUrl      回调地址
+     * @return 返回信息
+     */
+    ResultMsg autoWithdraw(String address, BigDecimal amount, String mainCoinType, String coinType, String businessId, String memo, String callUrl);
+
+    /**
+     * 检验地址合法性
+     *
+     * @param mainCoinType 主币种编号,使用获取商户币种信息接口
+     * @param address      币种地址
+     * @return 是否合法
+     */
+    boolean checkAddress(String mainCoinType, String address);
+
+    /**
+     * 获取商户支持的币种,以及余额
+     *
+     * @param showBalance 是否显示余额
+     * @return 支持币种列表
+     */
+    List<Coin> listSupportCoin(boolean showBalance);
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunClient.java b/trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunClient.java
new file mode 100644
index 0000000..5e3e6d8
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunClient.java
@@ -0,0 +1,132 @@
+package com.yami.trading.api.UD;
+
+import cn.hutool.core.lang.Console;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpStatus;
+import cn.hutool.json.JSONUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class UdunClient implements UdunApi {
+    private static Logger logger = LoggerFactory.getLogger(UdunClient.class);
+
+    /**
+     * UDUN API Gateway
+     */
+    private final String gateway;
+
+    /**
+     * UDUN Merchant Number
+     */
+    private final String merchantId;
+
+    /**
+     * UDUN Merchant Key
+     */
+    private final String merchantKey;
+
+    /**
+     * Callback to business system
+     */
+    private final String defaultCallBackUrl;
+
+    public UdunClient(String gateway, String merchantId, String merchantKey, String defaultCallBackUrl) {
+        this.gateway = gateway;
+        this.merchantId = merchantId;
+        this.merchantKey = merchantKey;
+        this.defaultCallBackUrl = defaultCallBackUrl;
+    }
+
+    @Override
+    public Address createAddress(String mainCoinType)  throws UdunException {
+        return createAddress(mainCoinType, "", "", defaultCallBackUrl);
+    }
+
+    @Override
+    public Address createAddress(String mainCoinType, String alias, String walletId)  throws UdunException{
+        return createAddress(mainCoinType, alias, walletId, defaultCallBackUrl);
+    }
+
+    @Override
+    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", callUrl);
+        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) {
+            logger.error("createAddress:{}",JSONUtil.toJsonStr(result));
+            throw new UdunException(result.getCode(), result.getMessage());
+        }
+        return JSONUtil.toBean(result.getData(), Address.class);
+    }
+
+    @Override
+    public ResultMsg withdraw(String address, BigDecimal amount, String mainCoinType, String coinType, String businessId, String memo) {
+        return withdraw(address, amount, mainCoinType, coinType, businessId, memo, defaultCallBackUrl);
+    }
+
+    @Override
+    public ResultMsg withdraw(String address, BigDecimal amount, String mainCoinType, String coinType, String businessId, String memo, String callUrl) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("address", address);
+        params.put("amount", amount);
+        params.put("merchantId", merchantId);
+        params.put("mainCoinType", mainCoinType);
+        params.put("coinType", coinType);
+        params.put("callUrl", callUrl);
+        params.put("businessId", businessId);
+        params.put("memo", memo);
+        return JSONUtil.toBean(UdunUtils.post(gateway, merchantKey, ApiPath.WITHDRAW, StrUtil.format("[{}]", JSONUtil.toJsonStr(params))), ResultMsg.class);
+    }
+
+    @Override
+    public ResultMsg autoWithdraw(String address, BigDecimal amount, String mainCoinType, String coinType, String businessId, String memo) {
+        return autoWithdraw(address, amount, mainCoinType, coinType, businessId, memo, defaultCallBackUrl);
+    }
+
+    @Override
+    public ResultMsg autoWithdraw(String address, BigDecimal amount, String mainCoinType, String coinType, String businessId, String memo, String callUrl) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("address", address);
+        params.put("amount", amount);
+        params.put("merchantId", merchantId);
+        params.put("mainCoinType", mainCoinType);
+        params.put("coinType", coinType);
+        params.put("callUrl", callUrl);
+        params.put("businessId", businessId);
+        params.put("memo", memo);
+        return JSONUtil.toBean(UdunUtils.post(gateway, merchantKey, ApiPath.AUTO_WITHDRAW, StrUtil.format("[{}]", JSONUtil.toJsonStr(params))), ResultMsg.class);
+    }
+
+    @Override
+    public boolean checkAddress(String mainCoinType, String address) {
+        Map<String, String> params = new HashMap<>();
+        params.put("merchantId", merchantId);
+        params.put("mainCoinType", mainCoinType);
+        params.put("address", address);
+        ResultMsg result = JSONUtil.toBean(UdunUtils.post(gateway, merchantKey, ApiPath.CHECK_ADDRESS, StrUtil.format("[{}]", JSONUtil.toJsonStr(params))), ResultMsg.class);
+        return result.getCode() == HttpStatus.HTTP_OK;
+    }
+
+    @Override
+    public List<Coin> listSupportCoin(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);
+    }
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunException.java b/trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunException.java
new file mode 100644
index 0000000..702c7a4
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunException.java
@@ -0,0 +1,28 @@
+package com.yami.trading.api.UD;
+
+public class UdunException extends RuntimeException {
+    private Integer code;
+    private String message;
+
+    public UdunException(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    @Override
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunUtils.java b/trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunUtils.java
new file mode 100644
index 0000000..5283585
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/UD/UdunUtils.java
@@ -0,0 +1,88 @@
+package com.yami.trading.api.UD;
+
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.json.JSONUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class UdunUtils {
+    private static Logger logger = LoggerFactory.getLogger(UdunUtils.class);
+
+    public static String post(String gateway, String merchantKey, String path, String body) {
+        try {
+            // 创建 URL 对象
+            URL url = new URL(gateway+path);
+
+            // 打开连接
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+
+            // 设置请求方法为 POST
+            connection.setRequestMethod("POST");
+
+            // 设置请求头
+            connection.setRequestProperty("Content-Type", "application/json");
+            connection.setRequestProperty("Accept", "application/json");
+
+            // 启用输入输出流
+            connection.setDoOutput(true);
+
+            String rawBody = parseParams(merchantKey, body);
+
+            // 写入请求体
+            try (OutputStream os = connection.getOutputStream()) {
+                byte[] input = rawBody.getBytes("utf-8");
+                os.write(input, 0, input.length);
+            }
+
+            // 获取响应代码
+            int responseCode = connection.getResponseCode();
+
+            // 读取响应
+            try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
+                String inputLine;
+                StringBuilder response = new StringBuilder();
+                while ((inputLine = in.readLine()) != null) {
+                    response.append(inputLine);
+                }
+                return response.toString();
+            }
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static String parseParams(String merchantKey, String body) {
+        Map<String, String> params = new HashMap<>();
+        String timestamp = System.currentTimeMillis() + "";
+        String nonce = RandomUtil.randomString(6);
+        String sign = sign(merchantKey, timestamp, nonce, body);
+        params.put("timestamp", timestamp);
+        params.put("nonce", nonce);
+        params.put("sign", sign);
+        params.put("body", body);
+        return JSONUtil.toJsonStr(params);
+    }
+
+    public static String sign(String key, String timestamp, String nonce, String body) {
+        String raw = body + key + nonce + timestamp;
+        return SecureUtil.md5(raw);
+    }
+
+    public static boolean checkSign(String key, String timestamp, String nonce, String body, String sign) {
+        String checkSign = sign(key, timestamp, nonce, body);
+        return checkSign.equals(sign);
+    }
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiCapitaltWalletWalletController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiCapitaltWalletWalletController.java
index 30e706c..dfd5bcb 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiCapitaltWalletWalletController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiCapitaltWalletWalletController.java
@@ -6,6 +6,8 @@
 import com.yami.trading.admin.model.UpdateWalltModel;
 import com.yami.trading.bean.contract.domain.ContractOrder;
 import com.yami.trading.bean.item.domain.Item;
+import com.yami.trading.bean.model.CapitaltWallet;
+import com.yami.trading.bean.model.Wallet;
 import com.yami.trading.common.annotation.SysLog;
 import com.yami.trading.common.domain.Result;
 import com.yami.trading.common.exception.BusinessException;
@@ -14,6 +16,7 @@
 import com.yami.trading.common.web.ResultObject;
 import com.yami.trading.security.common.util.SecurityUtils;
 import com.yami.trading.service.CapitaltWalletService;
+import com.yami.trading.service.WalletService;
 import com.yami.trading.service.contract.ContractOrderService;
 import com.yami.trading.service.user.UserService;
 import com.yami.trading.sys.service.SysUserService;
@@ -27,6 +30,7 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -38,7 +42,7 @@
  * @create: 2025-01-08 17:57
  **/
 @RestController
-@RequestMapping("api/wallet")
+@RequestMapping("/api/wallet")
 @Api(tags = "合约账户")
 public class ApiCapitaltWalletWalletController {
 
@@ -48,21 +52,43 @@
     @Autowired
     CapitaltWalletService capitaltWalletService;
 
+    @Autowired
+    WalletService walletService;
+
+    @Autowired
+    private ContractOrderService contractOrderService;
+
+
 
     @ApiOperation(value = "划转")
-    @PostMapping("transfer.action")
-    public Result updateWallt(@Valid @RequestBody TransferModel model) {
+    @PostMapping("/transfer.action")
+    public Result updateWallt(@Valid TransferModel model) {
         String partyId = SecurityUtils.getCurrentUserId();
         if(!StringUtils.isNotEmpty(partyId)){
             throw new YamiShopBindException("请登录!");
         }
-        boolean b = sysUserService.checkSafeWord(model.getSafePassword());
-        if(!b){
-            throw new YamiShopBindException("资金密码错误");
-        }
         return capitaltWalletService.updateWallt(partyId,model.getDeductAccount(),model.getReceiveAccount(),model.getMoneyRevise());
     }
 
+    @ApiOperation(value = "获取资产")
+    @PostMapping("/getassets.action")
+    public Result updateWallt() {
+        String partyId = SecurityUtils.getCurrentUserId();
+        if(!StringUtils.isNotEmpty(partyId)){
+            throw new YamiShopBindException("请登录!");
+        }
+        // 获取合约账户(contract)
+        Wallet wallet = walletService.saveWalletByPartyId(partyId);
+        // 获取资金账户(capital)
+        CapitaltWallet capitaltWallet = capitaltWalletService.getOne(new LambdaQueryWrapper<>(CapitaltWallet.class)
+                .eq(CapitaltWallet::getUserId, partyId).last(" limit 1 "));
+
+        Map<String, BigDecimal> assets =  new HashMap<>();
+        assets.put("contract",wallet.getMoney());
+        assets.put("capital",capitaltWallet.getMoney());
+        return Result.succeed(assets);
+    }
+
 
 
 }
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java
index 6a317eb..11f9369 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java
@@ -298,6 +298,7 @@
         order.setOrderPriceType(openAction.getPrice_type());
         order.setState(ContractApplyOrder.STATE_SUBMITTED);
         order.setMoney(openAction.getAmount());
+        order.setLocationType(openAction.getLocationType());
 
         contractApplyOrderService.saveCreate(order);
     }
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewsController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewsController.java
index 321698f..5ad71e5 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewsController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewsController.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yami.trading.bean.cms.News;
+import com.yami.trading.common.constants.Constants;
 import com.yami.trading.common.domain.Result;
 import com.yami.trading.common.exception.YamiShopBindException;
 import com.yami.trading.common.util.DateUtils;
@@ -101,7 +102,7 @@
                     news.setShow(news.getUserId().equals(SecurityUtils.getCurrentUserId()));
                 }
                 if (StringUtils.isNotEmpty(news.getImgUrl())) {
-                    news.setImgUrl(awsS3OSSFileService.getUrl(news.getImgUrl()));
+                    news.setImgUrl(news.getImgUrl());
                 }
 
             }
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRealNameAuthContoller.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRealNameAuthContoller.java
index 042d2ea..bfe3a7d 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRealNameAuthContoller.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRealNameAuthContoller.java
@@ -122,20 +122,20 @@
         map.put("idName", record.getIdName());
         map.put("idNumber", record.getIdNumber());
         map.put("name", record.getName());
-        map.put("idFrontImg", record.getIdFrontImg());
-        map.put("idBackImg", record.getIdBackImg());
+        map.put("idFrontImg", Constants.IMAGES_HTTP+record.getIdFrontImg());
+        map.put("idBackImg", Constants.IMAGES_HTTP+record.getIdBackImg());
         map.put("status", record.getStatus());
         map.put("kyc_status", record.getStatus());
         map.put("msg", record.getMsg());
-        map.put("handheldPhoto", record.getHandheldPhoto());
+        map.put("handheldPhoto", Constants.IMAGES_HTTP+record.getHandheldPhoto());
         map.put("idname", record.getIdName());
         map.put("idnumber", record.getIdNumber());
-        map.put("idimg_1_path", awsS3OSSFileService.getUrl(record.getIdFrontImg()));
-        map.put("idimg_2_path", awsS3OSSFileService.getUrl(record.getIdBackImg()));
-        map.put("idimg_3_path", awsS3OSSFileService.getUrl(record.getHandheldPhoto()));
-        map.put("idimg_1", record.getIdFrontImg());
-        map.put("idimg_2", record.getIdBackImg());
-        map.put("idimg_3", record.getHandheldPhoto());
+        map.put("idimg_1_path", Constants.IMAGES_HTTP+record.getIdFrontImg());
+        map.put("idimg_2_path", Constants.IMAGES_HTTP+record.getIdBackImg());
+        map.put("idimg_3_path", Constants.IMAGES_HTTP+record.getHandheldPhoto());
+        map.put("idimg_1", Constants.IMAGES_HTTP+record.getIdFrontImg());
+        map.put("idimg_2", Constants.IMAGES_HTTP+record.getIdBackImg());
+        map.put("idimg_3", Constants.IMAGES_HTTP+record.getHandheldPhoto());
         return Result.succeed(map);
     }
 
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWithdrawController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWithdrawController.java
index 28b9557..384d8ca 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWithdrawController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWithdrawController.java
@@ -1,5 +1,7 @@
 package com.yami.trading.api.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yami.trading.bean.model.CapitaltWallet;
 import com.yami.trading.bean.model.Withdraw;
 import com.yami.trading.common.constants.Constants;
 import com.yami.trading.common.domain.Result;
@@ -8,6 +10,7 @@
 import com.yami.trading.common.util.DateUtils;
 import com.yami.trading.common.util.StringUtils;
 import com.yami.trading.security.common.util.SecurityUtils;
+import com.yami.trading.service.CapitaltWalletService;
 import com.yami.trading.service.SessionTokenService;
 import com.yami.trading.service.WithdrawService;
 import com.yami.trading.service.syspara.SysparaService;
@@ -44,6 +47,8 @@
     private SysparaService sysparaService;
     @Autowired
     protected WalletLogService walletLogService;
+    @Autowired
+    CapitaltWalletService capitaltWalletService;
 
     /**
      * 首次进入页面,传递session_token
@@ -73,7 +78,6 @@
                                 String amount, String from, String currency,
                                 String channel){
         String partyId = SecurityUtils.getUser().getUserId();
-        boolean lock = false;
         String error = this.verif(amount);
         if (!StringUtils.isNullOrEmpty(error)) {
             throw new YamiShopBindException(error);
@@ -99,11 +103,15 @@
                 throw new YamiShopBindException("资金密码错误");
             }
         }
-        Object object = this.sessionTokenService.cacheGet(session_token);
+
+        // 获取资金账户(capital)
+        CapitaltWallet capitaltWallet = capitaltWalletService.getOne(new LambdaQueryWrapper<>(CapitaltWallet.class)
+                .eq(CapitaltWallet::getUserId, partyId).last(" limit 1 "));
+        if(capitaltWallet.getMoney().compareTo(new BigDecimal(amount)) < 0){
+            throw new YamiShopBindException("可提现余额不足!");
+        }
+
         this.sessionTokenService.del(session_token);
-//        if (null == object || !SecurityUtils.getUser().getUserId().equals((String) object)) {
-//            throw new YamiShopBindException("请稍后再试");
-//        }
         Withdraw withdraw = new Withdraw();
         withdraw.setUserId(partyId);
         withdraw.setVolume(new BigDecimal(amount_double));
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;
+        }
+    }
+
     /**
      * 根据第三方充值链接
      */
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/dto/OpenAction.java b/trading-order-admin/src/main/java/com/yami/trading/api/dto/OpenAction.java
index 07932ae..f414977 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/dto/OpenAction.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/dto/OpenAction.java
@@ -20,7 +20,7 @@
     /**
      * 仓位类型:0:逐仓 1:全仓
      */
-    private Integer locationType = 0;
+    private Integer locationType = 1;
 
     @NotBlank
     private String symbol;
diff --git a/trading-order-admin/src/main/resources/application.yml b/trading-order-admin/src/main/resources/application.yml
index 2f1e37d..c1f8266 100644
--- a/trading-order-admin/src/main/resources/application.yml
+++ b/trading-order-admin/src/main/resources/application.yml
@@ -1,5 +1,5 @@
 spring:
-  # 环境 dev|test|prod
+  # 环境 local|dev|test|prod
   profiles:
     active: prod
   #文件上传设置
diff --git a/trading-order-admin/src/main/resources/config/system.properties b/trading-order-admin/src/main/resources/config/system.properties
index b3bef0e..5048099 100644
--- a/trading-order-admin/src/main/resources/config/system.properties
+++ b/trading-order-admin/src/main/resources/config/system.properties
@@ -3,11 +3,10 @@
 admin_url=https://127.0.0.1:8080/admin
 web_url=http://127.0.0.1:8080/wap/
 
-http.server.host=D:/jystp/images/
-images.dir=/mydata/img/
-loca.images.dir=D:/testimg
+images_http=https://okximg.yanshiz.com/
+loca.images.dir=/www/wwwroot/img
 email.host=smtp.gmail.com
-email.username= test
-email.password= test
+email.username=coinzne.com@gmail.com
+email.password=pqupwyxoqedhxlfq
 email.from= smtp.gmail.com
 admin_rest_url=https://enjdhdg.site/api
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/contract/domain/ContractApplyOrder.java b/trading-order-bean/src/main/java/com/yami/trading/bean/contract/domain/ContractApplyOrder.java
index 4eb5e26..f4a99e9 100644
--- a/trading-order-bean/src/main/java/com/yami/trading/bean/contract/domain/ContractApplyOrder.java
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/contract/domain/ContractApplyOrder.java
@@ -117,4 +117,9 @@
 	 * 下单金额
 	 */
 	private BigDecimal money;
+
+	/**
+	 * 仓位类型:0:逐仓 1:全仓
+	 */
+	private Integer locationType = 1;
 }
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/contract/domain/ContractOrder.java b/trading-order-bean/src/main/java/com/yami/trading/bean/contract/domain/ContractOrder.java
index ff44aa4..879d2a2 100644
--- a/trading-order-bean/src/main/java/com/yami/trading/bean/contract/domain/ContractOrder.java
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/contract/domain/ContractOrder.java
@@ -136,7 +136,7 @@
     /**
      * 仓位类型:0:逐仓 1:全仓
      */
-    private Integer locationType = 0;
+    private Integer locationType = 1;
 
     public BigDecimal getAmountClose() {
         if(amountClose == null){
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/vo/RechargeAddressVo.java b/trading-order-bean/src/main/java/com/yami/trading/bean/vo/RechargeAddressVo.java
new file mode 100644
index 0000000..ef16194
--- /dev/null
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/vo/RechargeAddressVo.java
@@ -0,0 +1,31 @@
+package com.yami.trading.bean.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * @program: trading-order-master
+ * @description:
+ * @create: 2025-07-03 16:50
+ **/
+@Data
+@ApiModel
+public class RechargeAddressVo {
+
+    /**
+     * 币种名称 BTC ETH USDT
+     */
+    private String coin;
+
+    /**
+     * 链名称
+     */
+    private String blockchainName;
+
+    /**
+     * 区块链地址
+     */
+    private String address;
+
+}
diff --git a/trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java b/trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java
index 5e1365d..9086780 100644
--- a/trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java
+++ b/trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java
@@ -13,6 +13,8 @@
 
 	public static final String IMAGES_DIR = PropertiesUtil.getProperty("images.dir");
 
+	public static final String IMAGES_HTTP = PropertiesUtil.getProperty("images_http");
+
 	/**
 	 * c2c卖币
 	 */
@@ -192,6 +194,11 @@
 	 * 永续合约平仓
 	 */
 	public static final String MONEYLOG_CONTENT_CONTRACT_CLOSE = "contract_close";
+
+	/**
+	 * 永续合约强制平仓
+	 */
+	public static final String MANDATORY_LIQUIDATION_CONTRACT_CLOSE = "mandatory_liquidation";
 	/**
 	 * 永续合约建仓
 	 */
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline15MinuteJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline15MinuteJob.java
index 695f0fb..16ed4fc 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline15MinuteJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline15MinuteJob.java
@@ -35,7 +35,7 @@
         List<Item> item_list = itemService.list();
         for (int i = 0; i < item_list.size(); i++) {
             Item item = item_list.get(i);
-            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType())) {
+            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType()) && item.getType().equals("cryptos")) {
                 if (Item.cryptos.equalsIgnoreCase(item.getType())) {
                     cryptosKlineService.saveOne(item.getSymbol(), Kline.PERIOD_15MIN);
                 } else {
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1DayJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1DayJob.java
index 4ee1c52..3e9f8ca 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1DayJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1DayJob.java
@@ -28,7 +28,7 @@
     @Autowired
     private CryptosKlineService cryptosKlineService;
 
-    @Scheduled(cron = "0 0 0 * * ?")
+    @Scheduled(cron = "0 0/1 * * * ?")
     public void taskJob() {
         StopWatch stopWatch = new StopWatch();
         log.info("Kline1DayJob start ... ");
@@ -36,7 +36,7 @@
         List<Item> item_list = itemService.list();
         for (int i = 0; i < item_list.size(); i++) {
             Item item = item_list.get(i);
-            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType())) {
+            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType()) && item.getType().equals("cryptos")) {
                 if (Item.cryptos.equalsIgnoreCase(item.getType())) {
                     cryptosKlineService.saveOne(item.getSymbol(), Kline.PERIOD_1DAY);
                 } else {
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1MinuteJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1MinuteJob.java
index 4cbc653..7f93f74 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1MinuteJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1MinuteJob.java
@@ -36,7 +36,7 @@
         List<Item> item_list = itemService.list();
         for (int i = 0; i < item_list.size(); i++) {
             Item item = item_list.get(i);
-            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType())) {
+            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType()) && item.getType().equals("cryptos")) {
                 log.debug("--------------- 5min kline ---------  {}", item.getSymbol());
                 if (Item.cryptos.equalsIgnoreCase(item.getType())) {
                     cryptosKlineService.saveOne(item.getSymbol(), Kline.PERIOD_1MIN);
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1MonJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1MonJob.java
index 3ef5539..2628885 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1MonJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1MonJob.java
@@ -36,7 +36,7 @@
         List<Item> item_list = itemService.list();
         for (int i = 0; i < item_list.size(); i++) {
             Item item = item_list.get(i);
-            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType())) {
+            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType()) && item.getType().equals("cryptos")) {
                 if (Item.cryptos.equalsIgnoreCase(item.getType())) {
                     cryptosKlineService.saveOne(item.getSymbol(), Kline.PERIOD_1MON);
                 } else {
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1QuarterJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1QuarterJob.java
index d3eef9b..d94b4e0 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1QuarterJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1QuarterJob.java
@@ -36,7 +36,7 @@
         List<Item> item_list = itemService.list();
         for (int i = 0; i < item_list.size(); i++) {
             Item item = item_list.get(i);
-            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType())) {
+            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType()) && item.getType().equals("cryptos")) {
                 if (Item.cryptos.equalsIgnoreCase(item.getType())) {
                     continue;
                 } else {
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1WeekJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1WeekJob.java
index 0813093..6b7f057 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1WeekJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1WeekJob.java
@@ -36,7 +36,7 @@
         List<Item> item_list = itemService.list();
         for (int i = 0; i < item_list.size(); i++) {
             Item item = item_list.get(i);
-            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType())) {
+            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType()) && item.getType().equals("cryptos")) {
                 if (Item.cryptos.equalsIgnoreCase(item.getType())) {
                     cryptosKlineService.saveOne(item.getSymbol(), Kline.PERIOD_1WEEK);
                 } else {
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1YearJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1YearJob.java
index ee444bc..ebb8b6d 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1YearJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline1YearJob.java
@@ -36,7 +36,7 @@
         List<Item> item_list = itemService.list();
         for (int i = 0; i < item_list.size(); i++) {
             Item item = item_list.get(i);
-            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType())) {
+            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType()) && item.getType().equals("cryptos")) {
                 if (Item.cryptos.equalsIgnoreCase(item.getType())) {
                        continue;
                 } else {
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline2HourJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline2HourJob.java
index 6a1002b..ea9ce80 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline2HourJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline2HourJob.java
@@ -36,7 +36,7 @@
         List<Item> item_list = itemService.list();
         for (int i = 0; i < item_list.size(); i++) {
             Item item = item_list.get(i);
-            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType())) {
+            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType()) && item.getType().equals("cryptos")) {
                 if (Item.cryptos.equalsIgnoreCase(item.getType()) || Item.forex.equalsIgnoreCase(item.getType())) {
                     continue;
                 } else {
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline30MinuteJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline30MinuteJob.java
index a40cb0c..71d1deb 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline30MinuteJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline30MinuteJob.java
@@ -36,7 +36,7 @@
         List<Item> item_list = itemService.list();
         for (int i = 0; i < item_list.size(); i++) {
             Item item = item_list.get(i);
-            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType())) {
+            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType()) && item.getType().equals("cryptos")) {
                 if (Item.cryptos.equalsIgnoreCase(item.getType())) {
                     cryptosKlineService.saveOne(item.getSymbol(), Kline.PERIOD_30MIN);
                 } else {
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline4HourJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline4HourJob.java
index 2e4f568..fb3b3e3 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline4HourJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline4HourJob.java
@@ -36,7 +36,7 @@
         List<Item> item_list = itemService.list();
         for (int i = 0; i < item_list.size(); i++) {
             Item item = item_list.get(i);
-            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType())) {
+            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType()) && item.getType().equals("cryptos")) {
                 if (Item.cryptos.equalsIgnoreCase(item.getType())) {
                     cryptosKlineService.saveOne(item.getSymbol(), Kline.PERIOD_4HOUR);
                 } else {
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline5DayJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline5DayJob.java
index cff481d..974a451 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline5DayJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline5DayJob.java
@@ -36,7 +36,7 @@
         List<Item> item_list = itemService.list();
         for (int i = 0; i < item_list.size(); i++) {
             Item item = item_list.get(i);
-            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType())) {
+            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType()) && item.getType().equals("cryptos")) {
                 if (!Item.cryptos.equalsIgnoreCase(item.getType())) {
                     klineService.saveKline5Day(item.getSymbol(), Kline.PERIOD_5DAY);
                 }
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline5MinuteJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline5MinuteJob.java
index b5d86c6..0105744 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline5MinuteJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline5MinuteJob.java
@@ -36,7 +36,7 @@
         List<Item> item_list = itemService.list();
         for (int i = 0; i < item_list.size(); i++) {
             Item item = item_list.get(i);
-            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType())) {
+            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType()) && item.getType().equals("cryptos")) {
                 if (Item.cryptos.equalsIgnoreCase(item.getType())) {
                     cryptosKlineService.saveOne(item.getSymbol(), Kline.PERIOD_5MIN);
                 } else {
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline60MinuteJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline60MinuteJob.java
index daeab33..ba77442 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline60MinuteJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/klinejob/Kline60MinuteJob.java
@@ -36,7 +36,7 @@
         List<Item> item_list = itemService.list();
         for (int i = 0; i < item_list.size(); i++) {
             Item item = item_list.get(i);
-            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType())) {
+            if (MarketOpenChecker.isMarketOpenByItemCloseType(item.getOpenCloseType()) && item.getType().equals("cryptos")) {
                 if (Item.cryptos.equalsIgnoreCase(item.getType())) {
                     cryptosKlineService.saveOne(item.getSymbol(), Kline.PERIOD_60MIN);
                 } else {
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/CapitaltWalletService.java b/trading-order-service/src/main/java/com/yami/trading/service/CapitaltWalletService.java
index d4ce451..30b48e1 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/CapitaltWalletService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/CapitaltWalletService.java
@@ -13,4 +13,5 @@
     Result updateWallt(String userId,String deductAccount, String receiveAccount, BigDecimal moneyRevise);
 
     void update(CapitaltWallet capitaltWallet, double amount1);
+
 }
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/RechargeBlockchainOrderService.java b/trading-order-service/src/main/java/com/yami/trading/service/RechargeBlockchainOrderService.java
index 9f116c7..5b096ac 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/RechargeBlockchainOrderService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/RechargeBlockchainOrderService.java
@@ -16,10 +16,10 @@
     Page pageRecord(Page page, String rolename, String orderNo, String userName, Date startTime, Date endTime,String status);
 
     /**
-     * 手动到账
+     * 手动到账  auto  1:自动  2:手动
      * @param id
      */
-    void manualReceipt(String id, BigDecimal amount,String operator_username);
+    void manualReceipt(Integer auto, String id, BigDecimal amount,String operator_username);
 
     /**
      * 驳回申请
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderCalculationServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderCalculationServiceImpl.java
index c8ee441..00de97a 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderCalculationServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderCalculationServiceImpl.java
@@ -114,28 +114,25 @@
      * @param currentPrice 当前点位
      */
     public void settle(ContractOrder order, String profit_loss, BigDecimal currentPrice, List<ContractOrder> partyContractOrders) {
+
+
+
+        Item item = itemService.findBySymbol(order.getSymbol());
+
+        /*
+         * 根据偏 差点数和手数算出盈亏金额
+         */
         /**
          * 偏差点位
          */
         BigDecimal point = currentPrice.subtract(order.getTradeAvgPrice());
-        /*
-         * 根据偏 差点数和手数算出盈亏金额
-         */
         BigDecimal amount = point.multiply(new BigDecimal("0.01")).multiply(order.getVolumeOpen()).setScale(4, BigDecimal.ROUND_DOWN);;
+        if (ContractOrder.DIRECTION_BUY.equals(order.getDirection())) {
+            order.setProfit(amount);
+        } else{
+            order.setProfit(amount.negate());
+        }
 
-        Item item = itemService.findBySymbol(order.getSymbol());
-
-//        if ("profit".equals(profit_loss)) {
-//            /**
-//             * 盈 正数
-//             */
-//            order.setProfit(amount);
-//        } else if ("loss".equals(profit_loss)) {
-//            order.setProfit(amount);
-//
-//        }
-
-        order.setProfit(amount);
 
         double faceValue = 0.01; // 合约面值(固定面值不能调整)
         double maintenanceMarginRate = 0.004; // 维持保证金率(固定不变)
@@ -172,7 +169,7 @@
             // 获取当前账户余额并加到收益中
             Map<String, Object> moneyAll = walletService.getMoneyAll(order.getPartyId());
             earnings = earnings.add(new BigDecimal(moneyAll.get("money_all_coin").toString()));
-
+            earnings = earnings.add(order.getDepositOpen());
         } else {
             // 如果不符合条件,直接使用 order.getDepositOpen() 作为收益
             earnings = order.getDepositOpen();
@@ -184,7 +181,7 @@
                     , maintenanceMarginRate, item.getUnitFee().doubleValue());
             order.setForceClosePrice(BigDecimal.valueOf(forceClosePrice).toString());
         }else{
-            double forceClosePrice = strongLevelCalculationService.calculateLiquidationPrice(earnings.doubleValue(),
+            double forceClosePrice = strongLevelCalculationService.calculateEmptyLiquidationPrice(earnings.doubleValue(),
                     faceValue, order.getVolumeOpen().doubleValue(), order.getTradeAvgPrice().doubleValue()
                     , maintenanceMarginRate, item.getUnitFee().doubleValue());
             order.setForceClosePrice(BigDecimal.valueOf(forceClosePrice).toString());
@@ -281,7 +278,6 @@
 
                 }
             }
-
         } else {
             if(order.getDirection().equals("buy")){
                 if (currentPrice.toString().compareTo(order.getForceClosePrice()) <= 0) {//达到强平价
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java b/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java
index 4a260c1..e3d5cc6 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java
@@ -15,6 +15,7 @@
 import com.yami.trading.bean.contract.query.ContractOrderQuery;
 import com.yami.trading.bean.data.domain.Realtime;
 import com.yami.trading.bean.item.domain.Item;
+import com.yami.trading.bean.model.MoneyLog;
 import com.yami.trading.bean.model.User;
 import com.yami.trading.bean.model.UserData;
 import com.yami.trading.bean.model.Wallet;
@@ -23,6 +24,7 @@
 import com.yami.trading.common.constants.TipConstants;
 import com.yami.trading.common.exception.YamiShopBindException;
 import com.yami.trading.common.util.*;
+import com.yami.trading.service.MoneyLogService;
 import com.yami.trading.service.StrongLevelCalculationService;
 import com.yami.trading.service.data.DataService;
 import com.yami.trading.service.system.TipService;
@@ -99,6 +101,9 @@
 
     @Autowired
     private StrongLevelCalculationService strongLevelCalculationService;
+
+    @Autowired
+    MoneyLogService moneyLogService;
 
     public IPage<ContractOrderDTO> listRecord(Page page, ContractOrderQuery query) {
         return baseMapper.listRecord(page, query);
@@ -371,9 +376,39 @@
                 }
 
             }
-            walletService.updateMoney(symbol, partyId, finalProfit, BigDecimal.ZERO,
-                    Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MONEYLOG_CONTENT_CONTRACT_CLOSE, "强制平仓,平仓合约数" + list.size() + "[" + volume + "],订单号[" + orderNo + "]");
+            updateMoney(symbol, partyId, finalProfit, BigDecimal.ZERO,
+                    Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MANDATORY_LIQUIDATION_CONTRACT_CLOSE, "强制平仓,平仓合约数" + list.size() + "[" + volume + "],订单号[" + orderNo + "]");
         }
+    }
+
+    @Transactional
+    public void updateMoney(String symbol, String userId, BigDecimal money, BigDecimal amountFee,
+                            String category, String walletType, String contentType, String log) {
+
+        Date now = new Date();
+        Wallet wallet = walletService.findByUserId(userId);
+        BigDecimal amountBefore = wallet.getMoney();
+        wallet.setMoney(BigDecimal.ZERO);
+        if(wallet.getMoney().compareTo(BigDecimal.ZERO) < 0){
+            wallet.setMoney(BigDecimal.ZERO);
+        }
+        wallet.setUpdateTime(now);
+        walletService.updateById(wallet);
+        // 账变日志
+        MoneyLog moneyLog = new MoneyLog();
+        moneyLog.setCreateTime(now);
+        moneyLog.setSymbol(symbol);
+        moneyLog.setCategory(category);
+        moneyLog.setAmountBefore(amountBefore);
+        moneyLog.setAmount(money);
+        moneyLog.setAmountAfter(wallet.getMoney());
+        moneyLog.setUserId(userId);
+        moneyLog.setWalletType(walletType);
+        moneyLog.setContentType(contentType);
+        moneyLog.setLog(log);
+        moneyLogService.save(moneyLog);
+
+
     }
 
     /**
@@ -601,6 +636,7 @@
         order.setStopPriceLoss(applyOrder.getStopPriceLoss());
         order.setPips(item.getPips());
         order.setPipsAmount(item.getPipsAmount());
+        order.setLocationType(applyOrder.getLocationType());
         return order;
     }
 
@@ -653,16 +689,19 @@
     }
 
     private void getStrongPrice(ContractOrder order, Item item) {
+        // 获取当前账户余额并加到收益中
+        Map<String, Object> moneyAll = walletService.getMoneyAll(order.getPartyId());
+        BigDecimal earnings = order.getDepositOpen().add(new BigDecimal(moneyAll.get("money_all_coin").toString()));
         double faceValue = 0.01; // 合约面值(固定面值不能调整)
         double maintenanceMarginRate = 0.004; // 维持保证金率(固定不变)
         //"buy":买(多) "sell":卖(空)
         if(order.getDirection().equals("buy")){
-            double forceClosePrice = strongLevelCalculationService.calculateLiquidationPrice(order.getDepositOpen().doubleValue(),
+            double forceClosePrice = strongLevelCalculationService.calculateLiquidationPrice(earnings.doubleValue(),
                     faceValue, order.getVolumeOpen().doubleValue(), order.getTradeAvgPrice().doubleValue()
                     , maintenanceMarginRate, item.getUnitFee().doubleValue());
             order.setForceClosePrice(BigDecimal.valueOf(forceClosePrice).toString());
         }else{
-            double forceClosePrice = strongLevelCalculationService.calculateEmptyLiquidationPrice(order.getDepositOpen().doubleValue(),
+            double forceClosePrice = strongLevelCalculationService.calculateEmptyLiquidationPrice(earnings.doubleValue(),
                     faceValue, order.getVolumeOpen().doubleValue(), order.getTradeAvgPrice().doubleValue()
                     , maintenanceMarginRate, item.getUnitFee().doubleValue());
             order.setForceClosePrice(BigDecimal.valueOf(forceClosePrice).toString());
@@ -783,6 +822,7 @@
         map.put("volume", order.getVolume());
         map.put("volume_open", order.getVolumeOpen());
         map.put("force_close_rice", order.getForceClosePrice());
+        map.put("locationType", order.getLocationType());
 
         return map;
     }
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java b/trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java
index d47f294..8c26305 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java
@@ -2,7 +2,9 @@
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -11,10 +13,7 @@
 import com.yami.trading.bean.future.dto.TFuturesOrderDTO;
 import com.yami.trading.bean.future.query.FuturesOrderQuery;
 import com.yami.trading.bean.item.domain.Item;
-import com.yami.trading.bean.model.Log;
-import com.yami.trading.bean.model.User;
-import com.yami.trading.bean.model.UserRecom;
-import com.yami.trading.bean.model.Wallet;
+import com.yami.trading.bean.model.*;
 import com.yami.trading.bean.syspara.domain.Syspara;
 import com.yami.trading.common.constants.Constants;
 import com.yami.trading.common.constants.TipConstants;
@@ -22,6 +21,7 @@
 import com.yami.trading.common.exception.YamiShopBindException;
 import com.yami.trading.common.util.*;
 import com.yami.trading.dao.future.FuturesOrderMapper;
+import com.yami.trading.service.CapitaltWalletService;
 import com.yami.trading.service.WalletService;
 import com.yami.trading.service.data.DataService;
 import com.yami.trading.service.item.ItemService;
@@ -85,6 +85,9 @@
     private TipService tipService;
     @Autowired
     private UserDataService userDataService;
+
+    @Autowired
+    CapitaltWalletService capitaltWalletService;
 
     @Autowired
     private ProfitLossConfigService profitLossConfigService;
@@ -314,6 +317,7 @@
         if (futuresPara.getUnitMaxAmount().doubleValue() > 0 && futuresOrder.getVolume() > futuresPara.getUnitMaxAmount().doubleValue()) {
             throw new BusinessException("金额不在购买区间");
         }
+
         checkSubmitOrder(futuresOrder.getPartyId().toString(), futuresPara);
 
         futuresOrder.setOrderNo(DateUtil.getToday("yyMMddHHmmss") + RandomUtil.getRandomNum(8));
@@ -361,6 +365,7 @@
         // 钱包扣费
         walletService.updateMoney(futuresOrder.getSymbol(), futuresOrder.getPartyId(), moneyCost, BigDecimal.ZERO,
                 Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET, Constants.DELIVERY_MONEYLOG_CONTENT_CONTRACT_OPEN, "交割合约,订单号[" + futuresOrder.getOrderNo() + "]");
+
         checkProfitAndLoss(futuresOrder);
         save(futuresOrder);
 
@@ -370,7 +375,6 @@
         if (Constants.SECURITY_ROLE_MEMBER.equals(party.getRoleName())) {
             tipService.saveTip(futuresOrder.getUuid().toString(), TipConstants.FUTURES_ORDER);
         }
-//		saveRecomProfit(futuresOrder.getPartyId().toString(),futuresOrder.getVolume());
         return futuresOrder;
     }
 
@@ -946,4 +950,47 @@
         return map;
     }
 
+
+//    public static void main(String[] args) {
+//        BigDecimal balance = new BigDecimal("9772.9");     // 账户余额
+//        BigDecimal feeRate = new BigDecimal("0.0005");      // 手续费率(基于下单金额)
+//        BigDecimal price = new BigDecimal("1");     // 商品价格
+//        int leverage = 150;                              // 杠杆倍数
+//
+////        可购买数量=(余额 ÷ (1÷杠杆 + 费率))/杠杆
+//
+//
+//        // 1. 计算最大可下单金额(x)
+//        BigDecimal denominator = BigDecimal.ONE.divide(new BigDecimal(leverage), 10, RoundingMode.HALF_UP).add(feeRate);
+//        BigDecimal maxOrderAmount = balance.divide(denominator, 2, RoundingMode.FLOOR);
+//
+//        // 2. 计算可购买数量
+//        BigDecimal quantity = maxOrderAmount.divide(price, 0, RoundingMode.FLOOR);
+//        BigDecimal actualOrderAmount = quantity.multiply(price);
+//
+//        // 3. 计算费用
+//        BigDecimal margin = actualOrderAmount
+//                .divide(new BigDecimal(leverage), 2, RoundingMode.HALF_UP);
+//        BigDecimal fee = actualOrderAmount.multiply(feeRate).setScale(2, RoundingMode.HALF_UP);
+//        BigDecimal totalCost = margin.add(fee);
+//
+//        // 输出结果
+//        System.out.println("【输入参数】");
+//        System.out.printf("账户余额: %s 元\n", balance);
+//        System.out.printf("手续费率: %s%%\n", feeRate.multiply(new BigDecimal(100)));
+//        System.out.printf("商品价格: %s 元\n", price);
+//        System.out.printf("杠杆倍数: %d 倍\n\n", leverage);
+//
+//        System.out.println("【计算结果】");
+//        System.out.printf("理论最大可下单金额: %s 元\n", maxOrderAmount);
+//        System.out.printf("实际可购买数量: %s 份\n", quantity);
+//        System.out.printf("实际下单金额: %s 元\n", actualOrderAmount);
+//        System.out.println("--------------------------------");
+//        System.out.printf("保证金: %s 元\n", margin);
+//        System.out.printf("手续费: %s 元\n", fee);
+//        System.out.printf("总支出: %s 元\n", totalCost);
+//        System.out.printf("剩余余额: %s 元\n", balance.subtract(totalCost));
+//    }
+
+
 }
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/impl/RechargeBlockchainOrderServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/impl/RechargeBlockchainOrderServiceImpl.java
index 45ba050..78fb9f3 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/impl/RechargeBlockchainOrderServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/impl/RechargeBlockchainOrderServiceImpl.java
@@ -82,9 +82,10 @@
         return baseMapper.listRecord(page, rolename, orderNo, userName, startTime, endTime,status);
     }
 
+    //auto  1:自动  2:手动
     @Override
     @Transactional
-    public void manualReceipt(String id, BigDecimal amount,String operator_username) {
+    public void manualReceipt(Integer auto ,String id, BigDecimal amount,String operator_username) {
 //        Date now = new Date();
         RechargeBlockchainOrder recharge = getById(id);
         if (recharge == null) {
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/impl/StrongLevelCalculationServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/impl/StrongLevelCalculationServiceImpl.java
index 01d7e3a..7d17f42 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/impl/StrongLevelCalculationServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/impl/StrongLevelCalculationServiceImpl.java
@@ -93,9 +93,9 @@
 
     public static void main(String[] args) {
         // 给定参数
-        double marginBalance = 10; // 保证金余额
+        double marginBalance = 3857.51; // 保证金余额
         double faceValue = 0.01; // 合约面值(固定面值不能调整)
-        double contractQuantity = 0.5; // 合约张数  张数=可用保证金*杠杆倍数/(面值*最新成交价)
+        double contractQuantity = 1.0304; // 合约张数  张数=可用保证金*杠杆倍数/(面值*最新成交价)
         double openingPrice = 97016.4; // 开仓均价
         double maintenanceMarginRate = 0.004; // 维持保证金率(固定不变)
         double feeRate = 0.0005; // 手续费率  根据实际设置
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/impl/WalletServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/impl/WalletServiceImpl.java
index c1acf6d..485ec10 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/impl/WalletServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/impl/WalletServiceImpl.java
@@ -177,7 +177,7 @@
             wallet.setMoney(BigDecimal.ZERO);
         }
         wallet.setUpdateTime(now);
-        if (wallet.getMoney().doubleValue() < 0) {
+        if (wallet.getMoney().doubleValue() <= 0) {
             throw new YamiShopBindException("余额不足");
         }
         updateById(wallet);
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/impl/WithdrawServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/impl/WithdrawServiceImpl.java
index c2b650a..fbf562a 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/impl/WithdrawServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/impl/WithdrawServiceImpl.java
@@ -1,9 +1,12 @@
 package com.yami.trading.service.impl;
 
 import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
 import cn.hutool.extra.qrcode.QrConfig;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -65,6 +68,8 @@
     WalletLogService walletLogService;
     @Autowired
     LogService logService;
+    @Autowired
+    CapitaltWalletService capitaltWalletService;
 
     @Override
     public Page listRecord(Page page, String status, String roleName,
@@ -141,8 +146,18 @@
 
             double amount_before = wallet.getMoney().doubleValue();
 
-            walletService.update(wallet.getUserId().toString(),
-                    Arith.add(withdraw.getAmount(), withdraw.getAmountFee()));
+//            walletService.update(wallet.getUserId().toString(),
+//                    Arith.add(withdraw.getAmount(), withdraw.getAmountFee()));
+
+            CapitaltWallet capitaltWallet = capitaltWalletService.getOne(new LambdaQueryWrapper<>(CapitaltWallet.class)
+                    .eq(CapitaltWallet::getUserId, wallet.getUserId().toString()).last(" limit 1 "));
+            if(ObjectUtil.isEmpty(capitaltWallet)){
+                throw new YamiShopBindException("用户资金账户不存在!");
+            }
+            capitaltWalletService.update(new LambdaUpdateWrapper<CapitaltWallet>()
+                    .set(CapitaltWallet::getMoney,new BigDecimal(Arith.add(capitaltWallet.getMoney().doubleValue(), amount_before)))
+                    .eq(CapitaltWallet::getUserId,wallet.getUserId()));
+
 
             /*
              * 保存资金日志
@@ -462,8 +477,12 @@
         if (party.getStatus() != 1) {
             throw new YamiShopBindException("Your account has been frozen");
         }
-        Wallet wallet = walletService.saveWalletByPartyId(withdraw.getUserId());
-        if (wallet.getMoney().doubleValue() < withdraw.getVolume().doubleValue()) {
+
+//        Wallet wallet = walletService.saveWalletByPartyId(withdraw.getUserId());
+
+        CapitaltWallet capitaltWallet = capitaltWalletService.getOne(new LambdaQueryWrapper<>(CapitaltWallet.class)
+                .eq(CapitaltWallet::getUserId, withdraw.getUserId()).last(" limit 1 "));
+        if (capitaltWallet.getMoney().doubleValue() < withdraw.getVolume().doubleValue()) {
             throw new YamiShopBindException("余额不足");
         }
         // 手续费(USDT)
@@ -626,45 +645,13 @@
                 }
             }
         }
-//		String withdraw_fee_type = sysparaService.find("withdraw_fee_type").getValue();
-//		double withdraw_fee = Double.valueOf(((Syspara) sysparaService.find("withdraw_fee")).getValue());
-//		DecimalFormat df = new DecimalFormat("#.##");
-//		if ("fixed".equals(withdraw_fee_type)) {
-//			fee = withdraw_fee;
-//		} else {
-//			fee = Double.valueOf(df.format(Arith.mul(withdraw.getVolume(), withdraw_fee)));
-//
-//		}
         withdraw.setAmountFee(new BigDecimal(fee));
-//		ExchangeRate exchangeRate = exchangeRateService.findBy(ExchangeRate.OUT, withdraw.getCurrency());
-//
-//		if (exchangeRate == null) {
-//			throw new BusinessException("Parameter Error");
-//		}
-//
-//		withdraw.setAmount(Double.valueOf(df.format(Arith.mul(withdraw.getVolume(), exchangeRate.getRata()))));
         withdraw.setAmount(new BigDecimal(Arith.sub(withdraw.getVolume().doubleValue(), fee)));
         if (channel.indexOf("USDT") != -1) {
             withdraw.setMethod(channel);
         }
-//		if ("USDT".equals(channel)) {
-//			withdraw.setMethod("USDT");
-//		}
         else if ("OTC".equals(channel)) {
             throw new YamiShopBindException("渠道未开通");
-//			if (StringUtils.isNullOrEmpty(method_id)) {
-//				throw new BusinessException("请选择付款账号");
-//			}
-//			PaymentMethod paymentMethod = paymentMethodService.get(method_id);
-//			if (paymentMethod == null) {
-//				throw new BusinessException("请选择付款账号");
-//			}
-//			withdraw.setMethod(paymentMethod.getMethod());
-//			withdraw.setAccount(paymentMethod.getAccount());
-//			withdraw.setBank(paymentMethod.getBank());
-//			withdraw.setDeposit_bank(paymentMethod.getDeposit_bank());
-//			withdraw.setQdcode(paymentMethod.getQdcode());
-//			withdraw.setUsername(withdraw.getUsername());
         } else {
             throw new YamiShopBindException("渠道未开通");
         }
@@ -680,8 +667,20 @@
          */
         String withdraw_qr = qRGenerateService.generateWithdraw(withdraw.getOrderNo(), withdraw.getAddress());
         withdraw.setQdcode(withdraw_qr);
-        double amount_before = wallet.getMoney().doubleValue();
-        walletService.update(wallet.getUserId().toString(), Arith.sub(0, withdraw.getVolume().doubleValue()));
+        double amount_before = capitaltWallet.getMoney().doubleValue();
+
+
+
+//        walletService.update(wallet.getUserId().toString(), Arith.sub(0, withdraw.getVolume().doubleValue()));
+
+
+        if(ObjectUtil.isEmpty(capitaltWallet)){
+            throw new YamiShopBindException("用户资金账户不存在!");
+        }
+        capitaltWalletService.update(new LambdaUpdateWrapper<CapitaltWallet>()
+                .set(CapitaltWallet::getMoney,new BigDecimal(Arith.sub(capitaltWallet.getMoney().doubleValue(), amount_before)))
+                .eq(CapitaltWallet::getUserId,capitaltWallet.getUserId()));
+
         save(withdraw);
 
         /*
@@ -691,7 +690,7 @@
         moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_COIN);
         moneyLog.setAmountBefore(new BigDecimal(amount_before));
         moneyLog.setAmount(new BigDecimal(Arith.sub(0, withdraw.getVolume().doubleValue())));
-        moneyLog.setAmountAfter(wallet.getMoney());
+        moneyLog.setAmountAfter(capitaltWallet.getMoney());
         moneyLog.setLog("提现订单[" + withdraw.getOrderNo() + "]");
         // moneyLog.setExtra(withdraw.getOrder_no());
         moneyLog.setUserId(withdraw.getUserId());
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/item/ItemService.java b/trading-order-service/src/main/java/com/yami/trading/service/item/ItemService.java
index 577f5c6..5c0e090 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/item/ItemService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/item/ItemService.java
@@ -21,6 +21,7 @@
 import com.yami.trading.common.util.StringUtils;
 import com.yami.trading.dao.item.ItemMapper;
 import lombok.extern.slf4j.Slf4j;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -48,7 +49,6 @@
     private ItemLeverageService itemLeverageService;
 
     private Map<String, Integer> symbolDecimal = Maps.newHashMap();
-
 
     @Autowired
     private CacheManager cacheManager;
@@ -162,7 +162,7 @@
     @Cached(name = ITEM_CACHE, key = "'all'", expire = 3600)
     @Override
     public List<Item> list() {
-        List<Item> list = super.list();
+        List<Item> list = super.list(new LambdaQueryWrapper<>(Item.class).eq(Item::getType,Item.cryptos));
         symbolDecimal = list.stream()
                 .collect(Collectors.toMap(Item::getSymbol, Item::getDecimals, (s1, s2) -> s2));
         return list;
@@ -203,7 +203,7 @@
     }
 
     public List<Item> cacheGetAll() {
-        return ApplicationContextUtils.getApplicationContext().getBean(ItemService.class).list();
+        return ApplicationContextUtils.getApplicationContext().getBean(ItemService.class).list(new LambdaQueryWrapper<>(Item.class).eq(Item::getType,Item.cryptos));
     }
 
 

--
Gitblit v1.9.3