From bdb57962dba08b4177d500639ec56fbd74306c67 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Fri, 06 Feb 2026 17:39:04 +0800
Subject: [PATCH] 提现
---
trading-order-service/src/main/java/com/yami/trading/service/impl/CapitaltWalletServiceImpl.java | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 164 insertions(+), 10 deletions(-)
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/impl/CapitaltWalletServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/impl/CapitaltWalletServiceImpl.java
index 46c11a7..4b08d2a 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/impl/CapitaltWalletServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/impl/CapitaltWalletServiceImpl.java
@@ -1,25 +1,33 @@
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.model.CapitaltWallet;
-import com.yami.trading.bean.model.Wallet;
+import com.yami.trading.bean.data.domain.Realtime;
+import com.yami.trading.bean.item.domain.Item;
+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;
import com.yami.trading.common.util.Arith;
import com.yami.trading.dao.CapitaltWalletMapper;
import com.yami.trading.service.CapitaltWalletService;
+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;
/**
@@ -37,10 +45,30 @@
@Autowired
private ContractOrderService contractOrderService;
+ @Autowired
+ MoneyLogService moneyLogService;
+
+ @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;
+ }
}
/**
@@ -68,13 +96,14 @@
if (capitaltWallet != null && capitaltWallet.getMoney().compareTo(moneyRevise) >= 0) {
// 执行从资金账户到合约账户的划转操作
capitaltWallet.setMoney(capitaltWallet.getMoney().subtract(moneyRevise)); // 减少资金账户余额
- wallet.setMoney(wallet.getMoney().add(moneyRevise)); // 增加合约账户余额
+ //wallet.setMoney(wallet.getMoney().add(moneyRevise)); // 增加合约账户余额
// 更新账户余额
- walletService.updateById(wallet); // 保存合约账户的更新
+ //walletService.updateById(wallet); // 保存合约账户的更新
+ walletService.updateToBeCovered(wallet, moneyRevise, 1);
updateById(capitaltWallet); // 保存资金账户的更新
return Result.succeed();
} else {
- throw new YamiShopBindException("资金账户余额不足");
+ throw new YamiShopBindException("Insufficient balance in the fund account");
}
} else if (deductAccount.equals("contract") && receiveAccount.equals("capital")) {
@@ -84,7 +113,7 @@
wrapper.eq(ContractOrder::getState,"submitted");
List<ContractOrder> list = contractOrderService.list(wrapper);
if(CollectionUtil.isNotEmpty(list)){
- throw new YamiShopBindException("当前持有全仓仓位,不支持划转!");
+ throw new YamiShopBindException("Currently holding the full position. Transfer is not supported!");
}
// 从合约账户(contract)到资金账户(capital)的划转
@@ -97,14 +126,139 @@
updateById(capitaltWallet); // 保存资金账户的更新
return Result.succeed();
} else {
- throw new YamiShopBindException("合约账户余额不足");
+ throw new YamiShopBindException("Insufficient balance in the contract account");
}
} else {
// 如果划转账户和接收账户不符合预期,返回错误信息
- throw new YamiShopBindException("不支持的账户划转类型");
+ throw new YamiShopBindException("Unsupported account transfer types");
}
}
+ /**
+ * @return
+ */
+ @Override
+ @Transactional
+ public Result updateCapitaltWallt(String userId, BigDecimal moneyRevise, int accountType, String coinType) {
+ if (accountType == 1 && moneyRevise.compareTo(BigDecimal.ZERO) <= 0) { //充值
+ throw new YamiShopBindException("请输入大于0的数量");
+ }
+ if (accountType == 2) {
+ moneyRevise = moneyRevise.negate();
+ }
+ if ("usdt".equals(coinType)) {
+ double amount1 = moneyRevise.doubleValue();
+ CapitaltWallet capitaltWallet = getUserIdWallet(userId);
+ if (capitaltWallet == null) {
+ throw new YamiShopBindException("账号缺少资金数据");
+ }
+ double amount_before = capitaltWallet.getMoney().doubleValue();
+ if (accountType == 2 && capitaltWallet.getMoney().subtract(moneyRevise).compareTo(BigDecimal.ZERO) < 0) {
+ throw new YamiShopBindException("账号资金不足");
+ }
+ update(capitaltWallet, amount1);
+
+ // 保存资金日志
+ MoneyLog moneyLog = new MoneyLog();
+ moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_COIN);
+ moneyLog.setAmountBefore(new BigDecimal(amount_before));
+ moneyLog.setAmount(new BigDecimal(amount1));
+ moneyLog.setAmountAfter(BigDecimal.valueOf(Arith.add(amount_before, amount1)));
+ moneyLog.setLog("后台手动充值/扣款");
+ moneyLog.setUserId(userId);
+ moneyLog.setWalletType(Constants.WALLET);
+ moneyLog.setContentType(Constants.MONEYLOG_CONTENT_RECHARGE);
+ moneyLog.setCreateTime(new Date());
+ moneyLogService.save(moneyLog);
+ } else {
+ 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("暂不支持的币种");
+ }
+ WalletExtend walletExtend = new WalletExtend();
+ walletExtend = walletService.saveExtendByPara(userId, coinType);
+
+ double volume = moneyRevise.doubleValue();
+
+ double amount_before = walletExtend.getAmount();
+
+ if (accountType == 2 && Arith.sub(amount_before, volume) < 0) {
+ throw new YamiShopBindException("账号资金不足");
+ }
+
+ // walletExtend = walletService.saveWalletExtendByParaAndUpdate(String.valueOf(recharge.getPartyId()), recharge.getSymbol(), volume);
+ walletService.updateExtend(walletExtend.getPartyId().toString(), walletExtend.getWallettype(), volume);
+
+ // 保存资金日志
+ MoneyLog moneyLog = new MoneyLog();
+ moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_COIN);
+ moneyLog.setAmountBefore(new BigDecimal(amount_before));
+ moneyLog.setAmount(new BigDecimal(volume));
+ moneyLog.setAmountAfter(new BigDecimal(Arith.add(amount_before, volume)));
+
+ moneyLog.setLog("后台手动充值/扣款");
+ moneyLog.setUserId(userId);
+ moneyLog.setWalletType(coinType);
+ moneyLog.setContentType(Constants.MONEYLOG_CONTENT_RECHARGE);
+ moneyLog.setCreateTime(new Date());
+ moneyLogService.save(moneyLog);
+ }
+ 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)));
--
Gitblit v1.9.3