新版仿ok交易所-后端
1
zj
yesterday f31fc9f42f78de0808e7f4bdc797c5e622df09e3
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;
@@ -50,10 +51,24 @@
    @Autowired
    ItemService itemService;
    @Autowired
    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;
        }
    }
    /**
@@ -126,18 +141,20 @@
    @Transactional
    public Result updateCapitaltWallt(String userId, BigDecimal moneyRevise,  int accountType, String coinType) {
        if (accountType == 1 && moneyRevise.compareTo(BigDecimal.ZERO) <= 0) { //充值
            throw new YamiShopBindException("请输入大于0的数量");
            throw new YamiShopBindException("Please enter a quantity greater than 0");
        }
        if (accountType == 2) {
            moneyRevise = moneyRevise.negate();
        }
        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) {
                throw new YamiShopBindException("Account is missing fund data");
            }
            double amount_before = capitaltWallet.getMoney().doubleValue();
            if (accountType == 2 && capitaltWallet.getMoney().subtract(moneyRevise).compareTo(BigDecimal.ZERO) < 0) {
                throw new YamiShopBindException("账号资金不足");
                throw new YamiShopBindException("Insufficient account funds");
            }
            update(capitaltWallet, amount1);
@@ -154,9 +171,55 @@
            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("Invalid parameters");
                }
                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("Insufficient position quantity");
                        }
                        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("暂不支持的币种");
                throw new YamiShopBindException("Unsupported currency");
            }
            WalletExtend walletExtend = new WalletExtend();
            walletExtend = walletService.saveExtendByPara(userId, coinType);
@@ -166,7 +229,7 @@
            double amount_before = walletExtend.getAmount();
            if (accountType == 2 && Arith.sub(amount_before, volume) < 0) {
                throw new YamiShopBindException("账号资金不足");
                throw new YamiShopBindException("Insufficient account funds");
            }
            // walletExtend = walletService.saveWalletExtendByParaAndUpdate(String.valueOf(recharge.getPartyId()), recharge.getSymbol(), volume);
@@ -189,11 +252,18 @@
        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)));
        if (!updateById(capitaltWallet)) {
            throw new YamiShopBindException("操作钱包失败!");
            throw new YamiShopBindException("Wallet operation failed!");
        }
    }
}