From da4961ad26c598fc2415940a7d3139d0e8d98fe6 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Fri, 12 Sep 2025 18:33:21 +0800
Subject: [PATCH] 1

---
 trading-order-service/src/main/java/com/yami/trading/service/impl/WalletServiceImpl.java |   81 ++++++++++++++++++----------------------
 1 files changed, 36 insertions(+), 45 deletions(-)

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 485ec10..8a47e84 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
@@ -2,6 +2,7 @@
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -14,6 +15,7 @@
 import com.yami.trading.bean.future.domain.FuturesOrder;
 import com.yami.trading.bean.future.domain.FuturesRedisKeys;
 import com.yami.trading.bean.item.domain.Item;
+import com.yami.trading.bean.model.CapitaltWallet;
 import com.yami.trading.bean.model.MoneyLog;
 import com.yami.trading.bean.model.Wallet;
 import com.yami.trading.bean.model.WalletExtend;
@@ -25,7 +27,9 @@
 import com.yami.trading.common.util.Arith;
 import com.yami.trading.common.util.RedisUtil;
 import com.yami.trading.common.util.StringUtils;
+import com.yami.trading.dao.CapitaltWalletMapper;
 import com.yami.trading.dao.user.WalletMapper;
+import com.yami.trading.service.CapitaltWalletService;
 import com.yami.trading.service.MoneyLogService;
 import com.yami.trading.service.WalletService;
 import com.yami.trading.service.contract.ContractApplyOrderService;
@@ -53,6 +57,7 @@
 import java.time.LocalTime;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -70,13 +75,13 @@
     @Autowired
     MoneyLogService moneyLogService;
 
-
+    @Autowired
+    CapitaltWalletMapper capitaltWalletMapper;
     @Autowired
     RedisTemplate redisTemplate;
 
     @Autowired
     WalletExtendService walletExtendService;
-
 
 
     @Override
@@ -211,45 +216,6 @@
         List<ContractOrder> contractOrders = getContractOrders(partyId);
 
         if (contractOrders != null) {
-//            for (ContractOrder order : contractOrders) {
-//                String symbol = order.getSymbol();
-//                Item bySymbol = itemService.findBySymbol(symbol);
-//                if (bySymbol == null) {
-//                    continue;
-//                }
-//                // 类型不对直接continue
-//                if (StringUtils.isNotEmpty(symbolType)) {
-//                    if (!bySymbol.getType().equalsIgnoreCase(symbolType)) {
-//                        continue;
-//                    }
-//
-//                }
-//                // 真正下单里
-//                double order_volume = 1;
-//
-//                if (order.getLeverRate() != null && order.getLeverRate().compareTo(BigDecimal.ZERO) != 0) {
-//                    order_volume = order.getVolumeOpen().divide(order.getLeverRate()).doubleValue();
-//                } else {
-//                    order_volume = order.getVolumeOpen().doubleValue();
-//                }
-//
-//                double amount = Arith.add(Arith.mul(order_volume, order.getUnitAmount().doubleValue()), order.getProfit().doubleValue());
-//                money_contract = Arith.add(amount, money_contract);
-//                money_contract_deposit = Arith.add(order.getDeposit().doubleValue(), money_contract_deposit);
-//                money_contract_profit = Arith.add(order.getProfit().doubleValue(), money_contract_profit);
-//                // 只需要计算当日盈亏比例*金额就是当日盈亏
-//
-//                List<Realtime> realtimes = dataService.realtime(symbol);
-//                if (CollectionUtils.isNotEmpty(realtimes)) {
-//                    Realtime realtime = realtimes.get(0);
-//                    // 当前每张金额*加杠杆后多少金额
-//                    // 今天总体涨跌幅
-//                    BigDecimal changeRatio = realtime.getClose().subtract(realtime.getOpen()).divide(realtime.getOpen(), 10, RoundingMode.HALF_UP);
-//                    Double todayProfit = order.getUnitAmount().multiply(order.getVolumeOpen()).multiply(changeRatio).setScale(10, RoundingMode.HALF_UP).doubleValue();
-//                    money_contract_profit_today += todayProfit;
-//                }
-//            }
-
 
             Map<String, List<ContractOrder>> groupedOrders = contractOrders.stream()
                     .collect(Collectors.groupingBy(ContractOrder::getState));
@@ -305,11 +271,34 @@
         if (!"".equals(partyId) && partyId != null) {
             wallet = findByUserId(partyId.toString());
         }
+        List<WalletExtend> walletExtends = walletExtendService.findByUserId(partyId);
+        AtomicReference<BigDecimal> walletExtendMoneyRef = new AtomicReference<>(BigDecimal.ZERO);
+        walletExtends.forEach(f -> {
+            double closePrice = getRealtimePrice(f.getWallettype());
+            BigDecimal amount = new BigDecimal(String.valueOf(f.getAmount()));
+            BigDecimal price = new BigDecimal(String.valueOf(closePrice));
+            BigDecimal money = amount.multiply(price);
+            walletExtendMoneyRef.updateAndGet(current -> current.add(money));
+        });
+        BigDecimal walletExtendMoney = walletExtendMoneyRef.get();
+        CapitaltWallet userIdWallet = capitaltWalletMapper.selectOne(new LambdaQueryWrapper<CapitaltWallet>()
+                .eq(CapitaltWallet::getUserId,partyId.toString()));
         moneys_contract.put("money_wallet", wallet.getMoney().doubleValue());//可用余额
-        moneys_contract.put("money_contract", wallet.getMoney().doubleValue()+money_contract);
+        moneys_contract.put("money_contract", userIdWallet.getMoney().doubleValue()+wallet.getMoney().doubleValue()+money_contract+walletExtendMoney.doubleValue());
         return moneys_contract;
     }
 
+    @Override
+    public double getRealtimePrice(String symbol) {
+        List<Realtime> realtimes = dataService.realtime(symbol);
+        double close = 1;
+        if (realtimes != null && realtimes.size() > 0) {
+            close = realtimes.get(0).getClose().doubleValue();
+        } else {
+            throw new YamiShopBindException("参数错误");
+        }
+        return close;
+    }
     private static LocalDateTime toLocalDateTime(Date date) {
         return LocalDateTime.ofInstant(date.toInstant(), java.time.ZoneId.systemDefault());
     }
@@ -382,12 +371,14 @@
         if (!"".equals(partyId) && partyId != null) {
             wallet = saveWalletByPartyId(partyId.toString());
         }
-
+        //资金账户
+        CapitaltWallet capitaltWallet = capitaltWalletMapper.selectOne(new LambdaQueryWrapper<>(CapitaltWallet.class)
+                .eq(CapitaltWallet::getUserId, partyId).last(" limit 1 "));
         money = wallet.getMoney().doubleValue();
         // 钱包USDT
         money_wallet = wallet.getMoney().doubleValue();
         // 币余额
-        money_coin = this.getMoneyCoin(partyId, realtime_all, list_symbol);
+        money_coin = this.getMoneyCoin(partyId, realtime_all, list_symbol)+capitaltWallet.getMoney().doubleValue();
         money = money + money_coin;
         // 钱包USDT+币余额
         money_all_coin = money;
@@ -466,7 +457,7 @@
         data.put("money_all_coin", df2.format(money_all_coin));
         data.put("money_miner", df2.format(money_miner));
         data.put("money_finance", df2.format(money_finance));
-        data.put("money_contract", df2.format(Arith.add(money_contract, money_contractApply)));
+        data.put("money_contract", df2.format(Arith.add(money_contract_deposit, money_contractApply)));
         data.put("money_contract_deposit", df2.format(money_contract_deposit));
         data.put("money_contract_profit", df2.format(money_contract_profit));
         data.put("money_futures", df2.format(money_futures));

--
Gitblit v1.9.3