新版仿ok交易所-后端
zyy
2026-02-06 bdb57962dba08b4177d500639ec56fbd74306c67
trading-order-service/src/main/java/com/yami/trading/service/impl/CapitaltWalletServiceImpl.java
@@ -1,14 +1,13 @@
package com.yami.trading.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yami.trading.bean.contract.domain.ContractOrder;
import com.yami.trading.bean.data.domain.Realtime;
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;
import com.yami.trading.bean.model.*;
import com.yami.trading.common.constants.Constants;
import com.yami.trading.common.domain.Result;
import com.yami.trading.common.exception.YamiShopBindException;
@@ -18,14 +17,16 @@
import com.yami.trading.service.MoneyLogService;
import com.yami.trading.service.WalletService;
import com.yami.trading.service.contract.ContractOrderService;
import com.yami.trading.service.data.DataService;
import com.yami.trading.service.item.ItemService;
import com.yami.trading.service.user.PurchaseRecordService;
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;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.List;
@@ -51,12 +52,23 @@
    ItemService itemService;
    @Autowired
    CapitaltWalletMapper capitaltWalletMapper;
    PurchaseRecordService purchaseRecordService;
    @Autowired
    DataService dataService;
    @Override
    public CapitaltWallet getUserIdWallet(String userId) {
        return getOne(new LambdaQueryWrapper<>(CapitaltWallet.class)
        CapitaltWallet capitaltWallet = getOne(new LambdaQueryWrapper<>(CapitaltWallet.class)
                .eq(CapitaltWallet::getUserId,userId).last(" limit 1"));
        if (capitaltWallet != null) {
            return capitaltWallet;
        } else {
            capitaltWallet = new CapitaltWallet();
            capitaltWallet.setUserId(userId);
            save(capitaltWallet);
            return capitaltWallet;
        }
    }
    /**
@@ -136,13 +148,9 @@
        }
        if ("usdt".equals(coinType)) {
            double amount1 = moneyRevise.doubleValue();
            CapitaltWallet capitaltWallet = getOne(new LambdaQueryWrapper<>(CapitaltWallet.class)
                    .eq(CapitaltWallet::getUserId, userId).last(" limit 1 "));
            CapitaltWallet capitaltWallet = getUserIdWallet(userId);
            if (capitaltWallet == null) {
                capitaltWallet = new CapitaltWallet();
                capitaltWallet.setUserId(userId);
                capitaltWalletMapper.insert(capitaltWallet);
                throw new YamiShopBindException("请重试");
                throw new YamiShopBindException("账号缺少资金数据");
            }
            double amount_before = capitaltWallet.getMoney().doubleValue();
            if (accountType == 2 && capitaltWallet.getMoney().subtract(moneyRevise).compareTo(BigDecimal.ZERO) < 0) {
@@ -163,7 +171,53 @@
            moneyLog.setCreateTime(new Date());
            moneyLogService.save(moneyLog);
        } else {
            Item item = itemService.findBySymbol(coinType);
            Item item;
            if (coinType.equalsIgnoreCase("clkusdt")) {
                item = itemService.getOne(new LambdaQueryWrapper<Item>().eq(Item::getName, "CLK/USDT"));
                coinType = item.getSymbol();
                //充值入ico持仓
                String volume = moneyRevise.toString();
                List<Realtime> realtimes = this.dataService.realtime(coinType);
                double close;
                if (realtimes != null) {
                    close = realtimes.get(0).getClose().doubleValue();
                } else {
                    throw new YamiShopBindException("参数错误");
                }
                PurchaseRecord purchaseRecord = purchaseRecordService.getOne(new LambdaQueryWrapper<>(PurchaseRecord.class)
                        .eq(PurchaseRecord::getUserId, userId));
                BigDecimal amount = new BigDecimal(volume).multiply(new BigDecimal(close));
                if(ObjectUtil.isEmpty(purchaseRecord)){
                    if (accountType == 1) {
                        PurchaseRecord record = new PurchaseRecord();
                        record.setUserId(userId);
                        record.setPurchaseQuantity(new BigDecimal(volume));
                        record.setPurchasePrice(new BigDecimal(close));
                        record.setTotalAmount(amount);
                        purchaseRecordService.save(record);
                    }
                } else {
                    if (accountType == 1) {
                        purchaseRecord.setPurchaseQuantity(purchaseRecord.getPurchaseQuantity().add(new BigDecimal(volume)));
                        purchaseRecord.setTotalAmount(purchaseRecord.getTotalAmount().add(amount));
                        purchaseRecord.setPurchasePrice(purchaseRecord.getTotalAmount().divide(purchaseRecord.getPurchaseQuantity(), 4,RoundingMode.HALF_UP));
                        purchaseRecordService.updateById(purchaseRecord);
                    } else {
                        purchaseRecord.setPurchaseQuantity(purchaseRecord.getPurchaseQuantity().add(new BigDecimal(volume)));
                        if (purchaseRecord.getPurchaseQuantity().compareTo(BigDecimal.ZERO) < 0) {
                            throw new YamiShopBindException("持仓数量不足");
                        }
                        purchaseRecord.setTotalAmount(purchaseRecord.getTotalAmount().add(amount));
                        //purchaseRecord.setTotalAmount(purchaseRecord.getPurchaseQuantity().multiply(purchaseRecord.getPurchasePrice()));
                        purchaseRecord.setPurchasePrice(purchaseRecord.getTotalAmount().divide(purchaseRecord.getPurchaseQuantity(), 4,RoundingMode.HALF_UP));
                        purchaseRecordService.updateById(purchaseRecord);
                    }
                }
            } else {
                item = itemService.findBySymbol(coinType);
            }
            if (item == null) {
                throw new YamiShopBindException("暂不支持的币种");
            }
@@ -198,6 +252,13 @@
        return Result.succeed();
    }
    //赠送ico
    @Override
    public Result giveIco(String partyId, BigDecimal moneyRevise) {
        return Result.succeed();
    }
    @Override
    public void update(CapitaltWallet capitaltWallet, double amount1) {
        capitaltWallet.setMoney(new BigDecimal(Arith.add(capitaltWallet.getMoney().doubleValue(), amount1)));