From c119feb821bdb1e6ef407f55056173f752c01c32 Mon Sep 17 00:00:00 2001
From: zainali5120 <512061637@qq.com>
Date: Thu, 16 Jul 2020 17:11:20 +0800
Subject: [PATCH] 订单止盈止损类提交
---
src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java | 996 +++++++++++++++++++++++++++++++++------------------------
1 files changed, 576 insertions(+), 420 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java b/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java
index 6d4af30..c96299f 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java
@@ -12,10 +12,15 @@
import javax.annotation.Resource;
+import com.xcong.excoin.modules.coin.mapper.OrderCoinsDealMapper;
import com.xcong.excoin.modules.platform.entity.PlatformCnyUsdtExchangeEntity;
+import com.xcong.excoin.modules.platform.entity.PlatformSymbolsCoinEntity;
+
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xcong.excoin.common.LoginUserUtils;
import com.xcong.excoin.common.enumerates.MemberWalletCoinEnum;
@@ -29,9 +34,9 @@
import com.xcong.excoin.modules.coin.entity.OrderCoinsEntity;
import com.xcong.excoin.modules.coin.mapper.OrderWalletCoinDealMapper;
import com.xcong.excoin.modules.coin.mapper.OrderWalletCoinMapper;
+import com.xcong.excoin.modules.coin.parameter.dto.FindAllWalletCoinOrderDto;
import com.xcong.excoin.modules.coin.parameter.vo.FindCollectListVo;
import com.xcong.excoin.modules.coin.parameter.vo.MemberSelectSymbolsVo;
-import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinDealListVo;
import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinDealVo;
import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinListVo;
import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinVo;
@@ -41,9 +46,12 @@
import com.xcong.excoin.modules.member.entity.MemberSelectSymbolsEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
import com.xcong.excoin.modules.platform.dao.PlatformCnyUsdtExchangeDao;
+import com.xcong.excoin.modules.platform.dao.PlatformSymbolsCoinDao;
import com.xcong.excoin.modules.platform.dao.TradeSettingDao;
import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity;
+import com.xcong.excoin.utils.CoinTypeConvert;
import com.xcong.excoin.utils.MessageSourceUtils;
+import com.xcong.excoin.utils.RedisUtils;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -51,435 +59,583 @@
import cn.hutool.core.util.StrUtil;
@Service
-public class OrderCoinServiceImpl extends ServiceImpl<OrderCoinsDao, OrderCoinsEntity> implements OrderCoinService{
-
- @Resource
- TradeSettingDao platformTradeSettingDao;
- @Resource
- MemberWalletCoinDao memberWalletCoinDao;
- @Resource
- MemberSelectSymbolsDao memberSelectSymbolsDao;
- @Resource
+public class OrderCoinServiceImpl extends ServiceImpl<OrderCoinsDao, OrderCoinsEntity> implements OrderCoinService {
+
+ @Resource
+ TradeSettingDao platformTradeSettingDao;
+ @Resource
+ MemberWalletCoinDao memberWalletCoinDao;
+ @Resource
+ MemberSelectSymbolsDao memberSelectSymbolsDao;
+ @Resource
PlatformCnyUsdtExchangeDao cnyUsdtExchangeDao;
- @Resource
- OrderCoinsDao orderCoinsDao;
- @Resource
- OrderCoinDealDao orderCoinDealDao;
- @Resource
- MemberAccountFlowEntityDao memberAccountFlowEntityDao;
-
- @Override
- public String generateSimpleSerialno(String userId) {
- StringBuilder sb = new StringBuilder();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- SimpleDateFormat sd = new SimpleDateFormat("yyyyMMdd");
- Date now = new Date();
- sb.append(sd.format(now));
- Calendar calendar = new GregorianCalendar();
- calendar.setTime(now);
- calendar.add(calendar.DATE, 1);
- Date nextDate = calendar.getTime();
- if (StrUtil.isNotEmpty(userId)) {
- sb.append(userId);
- }
- sb.append(RandomUtil.randomInt(2));
- long count = orderCoinsDao.getOrderCountByToday(sdf.format(now), sdf.format(nextDate));
- count++;
- int size = 4;
- for (int i = 0; i < size - String.valueOf(count).length(); i++) {
- sb.append("0");
- }
- sb.append(count);
- return sb.toString();
- }
+ @Resource
+ OrderCoinsDao orderCoinsDao;
+ @Resource
+ OrderCoinDealDao orderCoinDealDao;
+ @Resource
+ MemberAccountFlowEntityDao memberAccountFlowEntityDao;
+ @Resource
+ RedisUtils redisUtils;
+ @Resource
+ PlatformSymbolsCoinDao platformSymbolsCoinDao;
- @Override
- public Result enterTransactionPageOfWalletCoin(String symbol, String type) {
- if (StrUtil.isBlank(symbol)) {
- return Result.fail(MessageSourceUtils.getString("order_service_0001"));
- }
- //获取用户ID
- Long memberId = LoginUserUtils.getAppLoginUser().getId();
- //获取该币种的币币账户信息
- MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, symbol);
-
- PlatformTradeSettingEntity tradeSetting = platformTradeSettingDao.findTradeSetting();
- if (ObjectUtil.isEmpty(tradeSetting)) {
- return Result.fail(MessageSourceUtils.getString("order_service_0003"));
- }
- //获取USDT的币币账户信息
- MemberWalletCoinEntity walletCoinUsdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId,
- MemberWalletCoinEnum.WALLETCOINCODE.getValue());
- /**
- * todo
- */
- //获取某个币种的收盘价
- //Double closePrice = symbolsService.getCloseSymbolsBySymbolsName(symbol+"/USDT");
- BigDecimal closePrice = new BigDecimal("100.0000");
-
- List<MemberSelectSymbolsEntity> memSymbols = memberSelectSymbolsDao.selectSymbolByMemIdAndSymbol(memberId, symbol);
+ @Override
+ public String generateSimpleSerialno(String userId) {
+ StringBuilder sb = new StringBuilder();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat sd = new SimpleDateFormat("yyyyMMdd");
+ Date now = new Date();
+ sb.append(sd.format(now));
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(now);
+ calendar.add(calendar.DATE, 1);
+ Date nextDate = calendar.getTime();
+ if (StrUtil.isNotEmpty(userId)) {
+ sb.append(userId);
+ }
+ sb.append(RandomUtil.randomInt(2));
+ long count = orderCoinsDao.getOrderCountByToday(sdf.format(now), sdf.format(nextDate));
+ count++;
+ int size = 4;
+ for (int i = 0; i < size - String.valueOf(count).length(); i++) {
+ sb.append("0");
+ }
+ sb.append(count);
+ return sb.toString();
+ }
- PlatformCnyUsdtExchangeEntity cnyUsdtExchange = cnyUsdtExchangeDao.getCNYAndUSDTOne();
- BigDecimal cnyUsdt = cnyUsdtExchange.getValue();
- TransactionPageOfWalletCoinVo transactionPageOfWalletCoinVo = new TransactionPageOfWalletCoinVo();
- //是否自选
- if(CollUtil.isEmpty(memSymbols)) {
- transactionPageOfWalletCoinVo.setIsCollect(TransactionPageOfWalletCoinVo.ISCOLLECT_NO);
- }else {
- transactionPageOfWalletCoinVo.setIsCollect(TransactionPageOfWalletCoinVo.ISCOLLECT_YES);
- }
- if (ObjectUtil.isEmpty(walletCoin))
- return Result.fail(MessageSourceUtils.getString("order_service_0003"));
- // 点差
- transactionPageOfWalletCoinVo.setSpread(tradeSetting.getSpread().setScale(4, BigDecimal.ROUND_DOWN));
- // 手续费用率
- transactionPageOfWalletCoinVo.setFeeRatio(tradeSetting.getFeeRatio().setScale(4, BigDecimal.ROUND_DOWN));
- // 用户可用金额
- if(MemberWalletCoinEnum.ENTERTRANSACTIONPAGEOFWALLETCOIN_BUY.getValue().equals(type)) {//买入
- transactionPageOfWalletCoinVo.setAvailableBalance(walletCoinUsdt.getAvailableBalance().setScale(4, BigDecimal.ROUND_DOWN));
- }else {
- transactionPageOfWalletCoinVo.setAvailableBalance(walletCoin.getAvailableBalance().setScale(4, BigDecimal.ROUND_DOWN));
- }
- //当前价
- transactionPageOfWalletCoinVo.setCurrentPrice(closePrice.setScale(4, BigDecimal.ROUND_DOWN));
- //比例
- transactionPageOfWalletCoinVo.setCnyUsdt(cnyUsdt.setScale(4, BigDecimal.ROUND_DOWN));
- //换算成人民币的币种价格
- transactionPageOfWalletCoinVo.setCurrentPriceCny(cnyUsdt.multiply(closePrice).setScale(4, BigDecimal.ROUND_DOWN));
-
- transactionPageOfWalletCoinVo.setSymbol(symbol);
- transactionPageOfWalletCoinVo.setType(type);
- return Result.ok(transactionPageOfWalletCoinVo);
- }
+ @Override
+ public Result enterTransactionPageOfWalletCoin(String symbol) {
+ if (StrUtil.isBlank(symbol)) {
+ return Result.fail(MessageSourceUtils.getString("order_service_0001"));
+ }
+ //获取用户ID
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+ //获取该币种的币币账户信息
+ MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, symbol);
- @Override
- @Transactional
- public Result submitSalesWalletCoinOrder(String symbol, Integer type, Integer tradeType, BigDecimal price,
- BigDecimal amount) {
- //获取用户ID
- Long memberId = LoginUserUtils.getAppLoginUser().getId();
-
- /**
- * todo
- */
- //查询当前价
- //BigDecimal nowPrice = new BigDecimal(redisUtil.getString(CoinTypeConConvert.convertToKey(symbol+"/USDT")));
-
- BigDecimal nowPrice = new BigDecimal("10.0000");
- // 获取交易管理的杠杠倍率,手续费率等信息,由平台进行设置
- symbol = symbol.toUpperCase();
- MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, symbol);
- if (ObjectUtil.isEmpty(walletCoin)) {
- return Result.fail(MessageSourceUtils.getString("order_service_0003"));
- }
- // 查询交易设置
- PlatformTradeSettingEntity tradeSetting = platformTradeSettingDao.findTradeSetting();
- if(ObjectUtil.isEmpty(tradeSetting)) {
- return Result.fail(MessageSourceUtils.getString("order_service_0009"));
- }
- // 手续费用(手续费=建仓价X数量X手续费率)
- BigDecimal closingPrice = price.multiply(amount).multiply(new BigDecimal(MemberWalletCoinEnum.SUBMITSALESWALLETCOINORDER_SERVICERATE.getValue()));
- //总费用 = 成交价*数量+手续费
- BigDecimal totalPayPrice = price.multiply(amount).add(closingPrice);
-
- String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue();
- MemberWalletCoinEntity walletCoinUsdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId,walletCode);
- if(OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) {
- //买入,所需总费用跟用户USDT金额进行比较
- BigDecimal availableBalance = walletCoinUsdt.getAvailableBalance();
- if (totalPayPrice.compareTo(availableBalance) > 0) {
- return Result.fail(MessageSourceUtils.getString("order_service_0010"));
- }
- }else {
- //卖出,所需总费用跟用户所对应的币种金额进行比较
- BigDecimal availableBalance = walletCoin.getAvailableBalance();
- if (amount.compareTo(availableBalance) > 0) {
- return Result.fail(MessageSourceUtils.getString("order_service_0010"));
- }
- }
-
- // 创建订单
- OrderCoinsEntity order = new OrderCoinsEntity();
- if (OrderCoinsEntity.TRADETYPE_FIXEDPRICE.equals(tradeType)) {
- // 如果是限价交易直接插入主表数据
- order.setMemberId(memberId);
- order.setOrderNo(generateSimpleSerialno(memberId.toString()));
- order.setOrderType(type);
- order.setSymbol(symbol);
- order.setMarkPrice(nowPrice.setScale(4, BigDecimal.ROUND_DOWN));
- order.setEntrustCnt(amount.setScale(4, BigDecimal.ROUND_DOWN));
- order.setEntrustPrice(price.setScale(4, BigDecimal.ROUND_DOWN));
- order.setDealCnt(amount.setScale(4, BigDecimal.ROUND_DOWN));
- order.setDealPrice(price.setScale(4, BigDecimal.ROUND_DOWN));
- order.setDealAmount(totalPayPrice.setScale(4, BigDecimal.ROUND_DOWN));
- order.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DODING);
- order.setTradeType(tradeType);
- order.setFeeAmount(closingPrice.setScale(4, BigDecimal.ROUND_DOWN));
- orderCoinsDao.insert(order);
-
- //更新用户钱包信息
- //冻结相应的资产
- if(OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) {
- //如果是买入,所对应的币种增加,USDT账户减少金额
- BigDecimal availableBalance = walletCoinUsdt.getAvailableBalance().subtract(totalPayPrice);
- BigDecimal frozenBalance = walletCoinUsdt.getFrozenBalance().add(totalPayPrice);
- walletCoinUsdt.setAvailableBalance(availableBalance.setScale(4, BigDecimal.ROUND_DOWN));
- walletCoinUsdt.setFrozenBalance(frozenBalance.setScale(4, BigDecimal.ROUND_DOWN));
- memberWalletCoinDao.updateById(walletCoinUsdt);
- }else {
- //如果是卖出,币种减少,USDT增加
- BigDecimal availableBalance = walletCoin.getAvailableBalance().subtract(amount);
- BigDecimal frozenBalance = walletCoin.getFrozenBalance().add(amount);
- walletCoin.setAvailableBalance(availableBalance.setScale(4, BigDecimal.ROUND_DOWN));
- walletCoin.setFrozenBalance(frozenBalance.setScale(4, BigDecimal.ROUND_DOWN));
- memberWalletCoinDao.updateById(walletCoin);
- }
- } else {
- //如果是市价交易,主表和附表都需要插入数据
- order.setMemberId(memberId);
- order.setOrderNo(generateSimpleSerialno(memberId.toString()));
- order.setOrderType(type);
- order.setSymbol(symbol);
- order.setMarkPrice(nowPrice.setScale(4, BigDecimal.ROUND_DOWN));
- order.setEntrustCnt(amount.setScale(4, BigDecimal.ROUND_DOWN));
- order.setEntrustPrice(price.setScale(4, BigDecimal.ROUND_DOWN));
- order.setDealCnt(amount.setScale(4, BigDecimal.ROUND_DOWN));
- order.setDealPrice(price.setScale(4, BigDecimal.ROUND_DOWN));
- order.setDealAmount(totalPayPrice.setScale(4, BigDecimal.ROUND_DOWN));
- order.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE);
- order.setTradeType(tradeType);
- order.setFeeAmount(closingPrice.setScale(4, BigDecimal.ROUND_DOWN));
- orderCoinsDao.insert(order);
-
- OrderCoinsDealEntity detail = new OrderCoinsDealEntity();
- detail.setMemberId(memberId);
- detail.setOrderId(order.getId());
- detail.setOrderNo(order.getOrderNo());
- detail.setOrderType(type);
- detail.setTradeType(tradeType);
- detail.setSymbol(symbol);
- detail.setSymbolCnt(amount.setScale(4, BigDecimal.ROUND_DOWN));
- detail.setEntrustPrice(price.setScale(4, BigDecimal.ROUND_DOWN));
- detail.setDealPrice(price.setScale(4, BigDecimal.ROUND_DOWN));
- detail.setDealAmount(totalPayPrice.setScale(4, BigDecimal.ROUND_DOWN));
- detail.setFeeAmount(closingPrice.setScale(4, BigDecimal.ROUND_DOWN));
- orderCoinDealDao.insert(detail);
-
- if(OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) {
- //如果是买入,所对应的币种增加,USDT账户减少金额
- // 更新用户的可用金额
- walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(amount).setScale(4, BigDecimal.ROUND_DOWN));
- memberWalletCoinDao.updateById(walletCoin);
-
- walletCoinUsdt.setAvailableBalance(walletCoinUsdt.getAvailableBalance().subtract(totalPayPrice).setScale(4, BigDecimal.ROUND_DOWN));
- memberWalletCoinDao.updateById(walletCoinUsdt);
- }else {
- //如果是卖出,币种减少,USDT增加
- walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().subtract(amount).setScale(4, BigDecimal.ROUND_DOWN));
- memberWalletCoinDao.updateById(walletCoin);
-
- walletCoinUsdt.setAvailableBalance(walletCoinUsdt.getAvailableBalance().add(totalPayPrice).setScale(4, BigDecimal.ROUND_DOWN));
- memberWalletCoinDao.updateById(walletCoinUsdt);
- }
- }
- // 流水记录
- MemberAccountFlowEntity record = new MemberAccountFlowEntity();
- record.setMemberId(memberId);
- if (OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) {
- record.setPrice(totalPayPrice.setScale(4, BigDecimal.ROUND_DOWN));
- record.setSource(MemberAccountFlowEntity.SOURCE_BUY+symbol);
- record.setRemark(MemberAccountFlowEntity.REMARK_BUY+symbol+":"+amount.setScale(4, BigDecimal.ROUND_DOWN));
- } else {
- record.setPrice(totalPayPrice.negate().setScale(4, BigDecimal.ROUND_DOWN));
- record.setSource(MemberAccountFlowEntity.SOURCE_SALE+symbol);
- record.setRemark(MemberAccountFlowEntity.REMARK_SALE+symbol+":"+amount.setScale(4, BigDecimal.ROUND_DOWN));
- }
- record.setSymbol(symbol);
- record.setBalance(walletCoinUsdt.getAvailableBalance().setScale(4, BigDecimal.ROUND_DOWN));
-
- memberAccountFlowEntityDao.insert(record);
-
- return Result.ok(MessageSourceUtils.getString("order_service_0011"));
- }
+ PlatformTradeSettingEntity tradeSetting = platformTradeSettingDao.findTradeSetting();
+ if (ObjectUtil.isEmpty(tradeSetting)) {
+ return Result.fail(MessageSourceUtils.getString("order_service_0003"));
+ }
+ //获取USDT的币币账户信息
+ MemberWalletCoinEntity walletCoinUsdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId,
+ MemberWalletCoinEnum.WALLETCOINCODE.getValue());
- @Override
- public Result getEntrustWalletCoinOrder(String symbol, Integer status) {
- //获取用户ID
- Long memberId = LoginUserUtils.getAppLoginUser().getId();
- OrderWalletCoinListVo orderWalletCoinListVo = new OrderWalletCoinListVo();
-
- List<OrderWalletCoinVo> arrayList = new ArrayList<>();
- List<OrderCoinsEntity> findCoinOrderListByMemberIdAndSysmbol = orderCoinsDao.findCoinOrderListByMemberIdAndSysmbol(memberId, symbol, status);
- if(CollUtil.isNotEmpty(findCoinOrderListByMemberIdAndSysmbol)) {
- for(OrderCoinsEntity orderCoinsEntity : findCoinOrderListByMemberIdAndSysmbol) {
- OrderWalletCoinVo entityToVo = OrderWalletCoinMapper.INSTANCE.entityToVo(orderCoinsEntity);
- arrayList.add(entityToVo);
- }
- }
- orderWalletCoinListVo.setOrderWalletCoinVo(arrayList);
- return Result.ok(arrayList);
- }
+ BigDecimal closePrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol + "/USDT")));
- @Override
- @Transactional
- public Result cancelEntrustWalletCoinOrder(String orderId) {
- //获取用户ID
- Long memberId = LoginUserUtils.getAppLoginUser().getId();
- OrderCoinsEntity orderCoinsEntity = orderCoinsDao.selectById(orderId);
- if(ObjectUtil.isNotEmpty(orderCoinsEntity) && orderCoinsEntity.getMemberId() == memberId) {
- if(orderCoinsEntity.getOrderStatus() == OrderCoinsEntity.ORDERSTATUS_CANCEL){
- return Result.fail(MessageSourceUtils.getString("order_service_0012"));
- }
- orderCoinsEntity.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_CANCEL);
- orderCoinsDao.updateById(orderCoinsEntity);
-
- String symbol = orderCoinsEntity.getSymbol();
-
- if(orderCoinsEntity.getOrderType() == OrderCoinsEntity.TRADETYPE_FIXEDPRICE) {
- //如果是限价买入,撤单将USDT账户冻结金额返回
- String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue();
- MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, walletCode);
-
- if (ObjectUtil.isNotEmpty(walletCoin)) {
- //手续费 = 开仓价*数量*手续费率
- //返还金额=开仓价*未成交数量+手续费
- BigDecimal returnBalance = orderCoinsEntity.getDealAmount().add(orderCoinsEntity.getFeeAmount());
-
- walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(returnBalance).setScale(4, BigDecimal.ROUND_DOWN));
- walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(returnBalance).setScale(4, BigDecimal.ROUND_DOWN));
- memberWalletCoinDao.updateById(walletCoin);
- // 流水记录
- MemberAccountFlowEntity record = new MemberAccountFlowEntity();
- record.setSource(MemberAccountFlowEntity.SOURCE_CANCEL);
- record.setRemark(MemberAccountFlowEntity.REMARK_CANCEL+symbol+MemberAccountFlowEntity.REMARK_RETURNBALANCE+returnBalance);
- record.setBalance(walletCoin.getAvailableBalance().setScale(4, BigDecimal.ROUND_DOWN));
- record.setMemberId(memberId);
- record.setSymbol(symbol);
- record.setPrice(returnBalance);
- memberAccountFlowEntityDao.insert(record);
- return Result.ok(MessageSourceUtils.getString("order_service_0013"));
- }
- }else {
- //如果是限价卖出,撤单将对应的钱包冻结金额返回
- MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, symbol);
- if (ObjectUtil.isNotEmpty(walletCoin)) {
- //返还金额=开仓价*未成交数量
- BigDecimal returnBalance = walletCoin.getAvailableBalance().add(walletCoin.getFrozenBalance());
- walletCoin.setAvailableBalance(returnBalance.setScale(4, BigDecimal.ROUND_DOWN));
- walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(returnBalance).setScale(4, BigDecimal.ROUND_DOWN));
- memberWalletCoinDao.updateById(walletCoin);
- // 流水记录
- MemberAccountFlowEntity record = new MemberAccountFlowEntity();
- record.setSource(MemberAccountFlowEntity.SOURCE_CANCEL);
- record.setRemark(MemberAccountFlowEntity.REMARK_CANCEL+symbol+MemberAccountFlowEntity.REMARK_RETURNBALANCE+returnBalance);
- record.setBalance(walletCoin.getAvailableBalance().setScale(4, BigDecimal.ROUND_DOWN));
- record.setMemberId(memberId);
- record.setSymbol(symbol);
- record.setPrice(walletCoin.getFrozenBalance().setScale(4, BigDecimal.ROUND_DOWN));
- memberAccountFlowEntityDao.insert(record);
- return Result.ok(MessageSourceUtils.getString("order_service_0013"));
- }
- }
- OrderCoinsDealEntity detail = new OrderCoinsDealEntity();
- detail.setMemberId(memberId);
- detail.setOrderId(orderCoinsEntity.getId());
- detail.setOrderNo(generateSimpleSerialno(memberId.toString()));
- detail.setOrderType(orderCoinsEntity.getOrderType());
- detail.setTradeType(orderCoinsEntity.getTradeType());
- detail.setSymbol(symbol);
- detail.setOrderStatus(OrderCoinsDealEntity.ORDERSTATUS_CANCEL);
- detail.setSymbolCnt(orderCoinsEntity.getEntrustCnt());
- detail.setEntrustPrice(orderCoinsEntity.getEntrustPrice().setScale(4, BigDecimal.ROUND_DOWN));
- detail.setDealPrice(orderCoinsEntity.getDealPrice().setScale(4, BigDecimal.ROUND_DOWN));
- detail.setDealAmount(orderCoinsEntity.getDealAmount().setScale(4, BigDecimal.ROUND_DOWN));
- detail.setFeeAmount(orderCoinsEntity.getFeeAmount().setScale(4, BigDecimal.ROUND_DOWN));
- orderCoinDealDao.insert(detail);
- }
- return Result.fail(MessageSourceUtils.getString("order_service_0043"));
- }
+ List<MemberSelectSymbolsEntity> memSymbols = memberSelectSymbolsDao.selectSymbolByMemIdAndSymbol(memberId, symbol);
- @Override
- public Result findAllWalletCoinOrder() {
- //获取用户ID
- Long memberId = LoginUserUtils.getAppLoginUser().getId();
-
- OrderWalletCoinDealListVo orderWalletCoinDealListVo = new OrderWalletCoinDealListVo();
- List<OrderWalletCoinDealVo> arrayList = new ArrayList<OrderWalletCoinDealVo>();
-
- List<OrderCoinsDealEntity> selectAllWalletCoinOrder = orderCoinDealDao.selectAllWalletCoinOrder(memberId);
- if(CollUtil.isNotEmpty(selectAllWalletCoinOrder)) {
- for(OrderCoinsDealEntity orderCoinsDealEntity: selectAllWalletCoinOrder) {
- OrderWalletCoinDealVo entityToVo = OrderWalletCoinDealMapper.INSTANCE.entityToVoOrder(orderCoinsDealEntity);
- arrayList.add(entityToVo);
- }
- }
- orderWalletCoinDealListVo.setOrderWalletCoinDealVo(arrayList);
- return Result.ok(orderWalletCoinDealListVo);
- }
+ PlatformCnyUsdtExchangeEntity cnyUsdtExchange = cnyUsdtExchangeDao.getCNYAndUSDTOne();
+ BigDecimal cnyUsdt = cnyUsdtExchange.getValue();
+ TransactionPageOfWalletCoinVo transactionPageOfWalletCoinVo = new TransactionPageOfWalletCoinVo();
+ //是否自选
+ if (CollUtil.isEmpty(memSymbols)) {
+ transactionPageOfWalletCoinVo.setIsCollect(TransactionPageOfWalletCoinVo.ISCOLLECT_NO);
+ } else {
+ transactionPageOfWalletCoinVo.setIsCollect(TransactionPageOfWalletCoinVo.ISCOLLECT_YES);
+ }
+ if (ObjectUtil.isEmpty(walletCoin))
+ return Result.fail(MessageSourceUtils.getString("order_service_0003"));
+ // 点差
+ transactionPageOfWalletCoinVo.setSpread(tradeSetting.getSpread().setScale(4, BigDecimal.ROUND_DOWN));
+ // 手续费用率
+ transactionPageOfWalletCoinVo.setFeeRatio(tradeSetting.getCoinFeeRatio().setScale(4, BigDecimal.ROUND_DOWN));
+ // 用户可用金额
+ transactionPageOfWalletCoinVo.setAvailableBalanceBuy(walletCoinUsdt.getAvailableBalance().setScale(4, BigDecimal.ROUND_DOWN));
+ transactionPageOfWalletCoinVo.setAvailableBalanceSell(walletCoin.getAvailableBalance().setScale(4, BigDecimal.ROUND_DOWN));
+ //当前价
+ transactionPageOfWalletCoinVo.setCurrentPrice(closePrice.setScale(4, BigDecimal.ROUND_DOWN));
+ //比例
+ transactionPageOfWalletCoinVo.setCnyUsdt(cnyUsdt.setScale(4, BigDecimal.ROUND_DOWN));
+ //换算成人民币的币种价格
+ transactionPageOfWalletCoinVo.setCurrentPriceCny(cnyUsdt.multiply(closePrice).setScale(4, BigDecimal.ROUND_DOWN));
- @Override
- public Result findWalletCoinOrder(Long orderId) {
- //获取用户ID
- Long memberId = LoginUserUtils.getAppLoginUser().getId();
- OrderCoinsDealEntity selectWalletCoinOrder = orderCoinDealDao.selectWalletCoinOrder(orderId,memberId);
- OrderWalletCoinDealVo entityToVo = OrderWalletCoinDealMapper.INSTANCE.entityToVoOrder(selectWalletCoinOrder);
- return Result.ok(entityToVo);
- }
+ transactionPageOfWalletCoinVo.setSymbol(symbol);
+ return Result.ok(transactionPageOfWalletCoinVo);
+ }
- @Override
- public Result findCollect(String symbol, Integer type) {
- //获取用户ID
- Long memberId = LoginUserUtils.getAppLoginUser().getId();
- if(type==1) {
- //添加自选
- MemberSelectSymbolsEntity symbols = new MemberSelectSymbolsEntity();
- symbols.setMemberId(memberId);
- symbols.setSymbol(symbol);
- memberSelectSymbolsDao.insert(symbols);
- return Result.ok(MessageSourceUtils.getString("order_service_0015"));
- }else {
- Map<String, Object> columnMap = new HashMap<>();
- columnMap.put("symbol", symbol);
- columnMap.put("member_id", memberId);
- memberSelectSymbolsDao.deleteByMap(columnMap);;
- return Result.ok(MessageSourceUtils.getString("order_service_0016"));
- }
- }
+ @Override
+ @Transactional
+ public Result submitSalesWalletCoinOrder(String symbol, Integer type, Integer tradeType, BigDecimal price, BigDecimal amount) {
+ //获取用户ID
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+ BigDecimal nowPriceinBigDecimal = price;
+ //查询当前价
+ BigDecimal nowPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol + "/USDT")));
- @Override
- public Result checkIsCollect(String symbol) {
- //获取用户ID
- Long memberId = LoginUserUtils.getAppLoginUser().getId();
- MemberSelectSymbolsVo memberSelectSymbolsVo = new MemberSelectSymbolsVo();
- List<MemberSelectSymbolsEntity> selectSymbolByMemIdAndSymbol = memberSelectSymbolsDao.selectSymbolByMemIdAndSymbol(memberId, symbol);
-
- if(CollUtil.isNotEmpty(selectSymbolByMemIdAndSymbol)) {
- memberSelectSymbolsVo.setIsCollect(MemberSelectSymbolsVo.ISCOLLECT_YES);
- }else {
- memberSelectSymbolsVo.setIsCollect(MemberSelectSymbolsVo.ISCOLLECT_NO);
- }
- memberSelectSymbolsVo.setSymbol(symbol);
- return Result.ok(memberSelectSymbolsVo);
- }
+ // 获取交易管理的杠杠倍率,手续费率等信息,由平台进行设置
+ symbol = symbol.toUpperCase();
+ MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, symbol);
+ if (ObjectUtil.isEmpty(walletCoin)) {
+ return Result.fail(MessageSourceUtils.getString("order_service_0003"));
+ }
+ // 查询交易设置
+ PlatformTradeSettingEntity tradeSetting = platformTradeSettingDao.findTradeSetting();
+ if (ObjectUtil.isEmpty(tradeSetting)) {
+ return Result.fail(MessageSourceUtils.getString("order_service_0009"));
+ }
+ // 手续费用(手续费=建仓价X数量X手续费率)
+ BigDecimal closingPrice = price.multiply(amount).multiply(tradeSetting.getCoinFeeRatio());
+ //总费用 = 成交价*数量+手续费
+ BigDecimal totalPayPrice = price.multiply(amount).add(closingPrice);
+ BigDecimal totalPayPricCoin = nowPrice.multiply(amount).add(closingPrice);
- @Override
- public Result findCollectList() {
- //获取用户ID
- Long memberId = LoginUserUtils.getAppLoginUser().getId();
- List<MemberSelectSymbolsEntity> selectByMap = memberSelectSymbolsDao.selectSymbolByMemId(memberId);
-
- FindCollectListVo findCollectListVo = new FindCollectListVo();
- List<MemberSelectSymbolsVo> arrayList = new ArrayList<>();
- if(CollUtil.isNotEmpty(selectByMap)) {
- for(MemberSelectSymbolsEntity memberSelectSymbolsEntity : selectByMap) {
- MemberSelectSymbolsVo memberSelectSymbolsVo = new MemberSelectSymbolsVo();
- memberSelectSymbolsVo.setSymbol(memberSelectSymbolsEntity.getSymbol());
- arrayList.add(memberSelectSymbolsVo);
- }
- }
- findCollectListVo.setMemberSelectSymbolsVo(arrayList);
-
- return Result.ok(findCollectListVo);
- }
+ String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue();
+ MemberWalletCoinEntity walletCoinUsdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, walletCode);
+ if (OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) {
+ //买入,所需总费用跟用户USDT金额进行比较
+ BigDecimal availableBalance = walletCoinUsdt.getAvailableBalance();
+ if (totalPayPrice.compareTo(availableBalance) > 0 || totalPayPricCoin.compareTo(availableBalance) > 0) {
+ return Result.fail(MessageSourceUtils.getString("order_service_0010"));
+ }
+ } else {
+ //卖出,所需总费用跟用户所对应的币种金额进行比较
+ BigDecimal availableBalance = walletCoin.getAvailableBalance();
+ if (amount.compareTo(availableBalance) > 0) {
+ return Result.fail(MessageSourceUtils.getString("order_service_0010"));
+ }
+ }
+ // 创建订单
+ OrderCoinsEntity order = new OrderCoinsEntity();
+ if ((OrderCoinsEntity.TRADETYPE_FIXEDPRICE.equals(tradeType) && type.equals(1) && price.compareTo(nowPrice) < 0)
+ || (OrderCoinsEntity.TRADETYPE_FIXEDPRICE.equals(tradeType) && type.equals(2) && price.compareTo(nowPrice) > 0)) {
+ // 如果是限价交易直接插入主表数据
+ order.setMemberId(memberId);
+ order.setOrderNo(generateSimpleSerialno(memberId.toString()));
+ order.setOrderType(type);
+ order.setSymbol(symbol);
+ order.setMarkPrice(nowPrice);
+ order.setEntrustCnt(amount);
+ order.setEntrustPrice(price);
+ order.setDealCnt(amount);
+ order.setDealPrice(price);
+ order.setDealAmount(totalPayPrice);
+ order.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DODING);
+ order.setTradeType(tradeType);
+ order.setFeeAmount(closingPrice);
+ orderCoinsDao.insert(order);
+
+ //更新用户钱包信息
+ //冻结相应的资产
+ if (OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) {
+ //如果是买入,所对应的币种增加,USDT账户减少金额
+ BigDecimal availableBalance = walletCoinUsdt.getAvailableBalance().subtract(totalPayPrice);
+ BigDecimal frozenBalance = walletCoinUsdt.getFrozenBalance().add(totalPayPrice);
+ walletCoinUsdt.setAvailableBalance(availableBalance);
+ walletCoinUsdt.setFrozenBalance(frozenBalance);
+ memberWalletCoinDao.updateById(walletCoinUsdt);
+ } else {
+ //如果是卖出,币种减少,USDT增加
+ BigDecimal availableBalance = walletCoin.getAvailableBalance().subtract(amount);
+ BigDecimal frozenBalance = walletCoin.getFrozenBalance().add(amount);
+ walletCoin.setAvailableBalance(availableBalance);
+ walletCoin.setFrozenBalance(frozenBalance);
+ memberWalletCoinDao.updateById(walletCoin);
+ }
+ } else {
+ //如果是市价交易,主表和附表都需要插入数据
+ order.setMemberId(memberId);
+ order.setOrderNo(generateSimpleSerialno(memberId.toString()));
+ order.setOrderType(type);
+ order.setSymbol(symbol);
+ order.setMarkPrice(nowPrice);
+ order.setEntrustCnt(amount);
+ order.setEntrustPrice(price);
+ order.setDealCnt(amount);
+ if ((OrderCoinsEntity.TRADETYPE_FIXEDPRICE.equals(tradeType) && type.equals(1) && price.compareTo(nowPrice) >= 0)
+ || (OrderCoinsEntity.TRADETYPE_FIXEDPRICE.equals(tradeType) && type.equals(2) && price.compareTo(nowPrice) <= 0)) {
+ // 手续费用(手续费=建仓价X数量X手续费率)
+ closingPrice = nowPrice.multiply(amount).multiply(tradeSetting.getCoinFeeRatio());
+ //总费用 = 成交价*数量+手续费
+ totalPayPrice = nowPrice.multiply(amount).add(closingPrice);
+ price = nowPrice;
+ }
+ order.setDealPrice(nowPrice);
+ order.setDealAmount(totalPayPrice);
+ order.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE);
+ order.setTradeType(tradeType);
+ order.setFeeAmount(closingPrice);
+ orderCoinsDao.insert(order);
+
+ OrderCoinsDealEntity detail = new OrderCoinsDealEntity();
+ detail.setMemberId(memberId);
+ detail.setOrderId(order.getId());
+ detail.setOrderNo(order.getOrderNo());
+ detail.setOrderType(type);
+ detail.setTradeType(tradeType);
+ detail.setSymbol(symbol);
+ detail.setSymbolCnt(amount);
+ detail.setEntrustPrice(nowPriceinBigDecimal);
+ detail.setDealPrice(nowPrice);
+ detail.setDealAmount(totalPayPrice);
+ detail.setFeeAmount(closingPrice);
+ detail.setOrderStatus(OrderCoinsDealEntity.ORDERSTATUS_DONE);
+ orderCoinDealDao.insert(detail);
+
+ if (OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) {
+ //如果是买入,所对应的币种增加,USDT账户减少金额
+ // 更新用户的可用金额
+ walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(amount));
+ memberWalletCoinDao.updateById(walletCoin);
+
+ walletCoinUsdt.setAvailableBalance(walletCoinUsdt.getAvailableBalance().subtract(totalPayPrice));
+ memberWalletCoinDao.updateById(walletCoinUsdt);
+ } else {
+ //如果是卖出,币种减少,USDT增加
+ walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().subtract(amount));
+ memberWalletCoinDao.updateById(walletCoin);
+
+ BigDecimal subtract = totalPayPrice.subtract(closingPrice).subtract(closingPrice);
+ walletCoinUsdt.setAvailableBalance(walletCoinUsdt.getAvailableBalance().add(subtract));
+ memberWalletCoinDao.updateById(walletCoinUsdt);
+ }
+ }
+ // 流水记录
+ MemberAccountFlowEntity record = new MemberAccountFlowEntity();
+ record.setMemberId(memberId);
+ if (OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) {
+ record.setPrice(totalPayPrice.setScale(4, BigDecimal.ROUND_DOWN));
+ record.setSource(MemberAccountFlowEntity.SOURCE_BUY + symbol);
+ record.setRemark(MemberAccountFlowEntity.REMARK_BUY + symbol + ":" + amount);
+ } else {
+ record.setPrice(totalPayPrice.negate().setScale(4, BigDecimal.ROUND_DOWN));
+ record.setSource(MemberAccountFlowEntity.SOURCE_SALE + symbol);
+ record.setRemark(MemberAccountFlowEntity.REMARK_SALE + symbol + ":" + amount);
+ }
+ record.setSymbol(symbol);
+ record.setBalance(walletCoinUsdt.getAvailableBalance());
+
+ memberAccountFlowEntityDao.insert(record);
+
+ return Result.ok(MessageSourceUtils.getString("order_service_0011"));
+ }
+
+ @Override
+ public Result getEntrustWalletCoinOrder(String symbol, Integer status) {
+ //获取用户ID
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+ OrderWalletCoinListVo orderWalletCoinListVo = new OrderWalletCoinListVo();
+
+ List<OrderWalletCoinVo> arrayList = new ArrayList<>();
+ List<OrderCoinsEntity> findCoinOrderListByMemberIdAndSysmbol = orderCoinsDao.findCoinOrderListByMemberIdAndSysmbol(memberId, symbol, status);
+ if (CollUtil.isNotEmpty(findCoinOrderListByMemberIdAndSysmbol)) {
+ for (OrderCoinsEntity orderCoinsEntity : findCoinOrderListByMemberIdAndSysmbol) {
+ OrderWalletCoinVo entityToVo = OrderWalletCoinMapper.INSTANCE.entityToVo(orderCoinsEntity);
+ entityToVo.setFeeAmount(entityToVo.getFeeAmount()== null
+ ? BigDecimal.ZERO : entityToVo.getFeeAmount().setScale(4, BigDecimal.ROUND_DOWN));
+ entityToVo.setMarkPrice(entityToVo.getMarkPrice()== null
+ ? BigDecimal.ZERO : entityToVo.getMarkPrice().setScale(4, BigDecimal.ROUND_DOWN));
+ entityToVo.setEntrustCnt(entityToVo.getEntrustCnt()== null
+ ? BigDecimal.ZERO : entityToVo.getEntrustCnt().setScale(4, BigDecimal.ROUND_DOWN));
+ entityToVo.setEntrustPrice(entityToVo.getEntrustPrice()== null
+ ? BigDecimal.ZERO : entityToVo.getEntrustPrice().setScale(4, BigDecimal.ROUND_DOWN));
+ entityToVo.setDealCnt(entityToVo.getDealCnt()== null
+ ? BigDecimal.ZERO : entityToVo.getDealCnt().setScale(4, BigDecimal.ROUND_DOWN));
+ entityToVo.setDealPrice(entityToVo.getDealPrice()== null
+ ? BigDecimal.ZERO : entityToVo.getDealPrice().setScale(4, BigDecimal.ROUND_DOWN));
+ entityToVo.setDealAmount(entityToVo.getDealAmount()== null
+ ? BigDecimal.ZERO : entityToVo.getDealAmount().setScale(4, BigDecimal.ROUND_DOWN));
+ arrayList.add(entityToVo);
+ }
+ }
+ orderWalletCoinListVo.setOrderWalletCoinVo(arrayList);
+ return Result.ok(arrayList);
+ }
+
+ @Override
+ @Transactional
+ public Result cancelEntrustWalletCoinOrder(String orderId) {
+ //获取用户ID
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+ OrderCoinsEntity orderCoinsEntity = orderCoinsDao.selectById(orderId);
+ if (ObjectUtil.isNotEmpty(orderCoinsEntity) && orderCoinsEntity.getMemberId() == memberId) {
+ if (orderCoinsEntity.getOrderStatus() == OrderCoinsEntity.ORDERSTATUS_CANCEL) {
+ return Result.fail(MessageSourceUtils.getString("order_service_0012"));
+ }
+ orderCoinsEntity.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_CANCEL);
+ orderCoinsDao.updateById(orderCoinsEntity);
+
+ String symbol = orderCoinsEntity.getSymbol();
+
+ OrderCoinsDealEntity detail = new OrderCoinsDealEntity();
+ detail.setMemberId(memberId);
+ detail.setOrderId(orderCoinsEntity.getId());
+ detail.setOrderNo(generateSimpleSerialno(memberId.toString()));
+ detail.setOrderType(orderCoinsEntity.getOrderType());
+ detail.setTradeType(orderCoinsEntity.getTradeType());
+ detail.setSymbol(symbol);
+ detail.setOrderStatus(OrderCoinsDealEntity.ORDERSTATUS_CANCEL);
+ detail.setSymbolCnt(orderCoinsEntity.getEntrustCnt());
+ detail.setEntrustPrice(orderCoinsEntity.getEntrustPrice());
+ detail.setDealPrice(orderCoinsEntity.getDealPrice());
+ detail.setDealAmount(orderCoinsEntity.getDealAmount());
+ detail.setFeeAmount(orderCoinsEntity.getFeeAmount());
+ orderCoinDealDao.insert(detail);
+
+ if (OrderCoinsEntity.ORDERTYPE_BUY.equals(orderCoinsEntity.getOrderType())) {
+ //如果是限价买入,撤单将USDT账户冻结金额返回
+ String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue();
+ MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, walletCode);
+
+ if (ObjectUtil.isNotEmpty(walletCoin)) {
+ //手续费 = 开仓价*数量*手续费率
+ //返还金额=开仓价*未成交数量+手续费
+ BigDecimal returnBalance = orderCoinsEntity.getDealAmount();
+
+ walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(returnBalance));
+ walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(returnBalance));
+ memberWalletCoinDao.updateById(walletCoin);
+ // 流水记录
+ MemberAccountFlowEntity record = new MemberAccountFlowEntity();
+ record.setSource(MemberAccountFlowEntity.SOURCE_CANCEL);
+ record.setRemark(MemberAccountFlowEntity.REMARK_CANCEL + symbol + MemberAccountFlowEntity.REMARK_RETURNBALANCE + returnBalance);
+ record.setBalance(walletCoin.getAvailableBalance());
+ record.setMemberId(memberId);
+ record.setSymbol(symbol);
+ record.setPrice(returnBalance);
+ memberAccountFlowEntityDao.insert(record);
+ return Result.ok(MessageSourceUtils.getString("order_service_0013"));
+ }
+ } else {
+ //如果是限价卖出,撤单将对应的钱包冻结金额返回
+ MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, symbol);
+ if (ObjectUtil.isNotEmpty(walletCoin)) {
+
+ BigDecimal returnBalance = orderCoinsEntity.getEntrustCnt();
+ walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(returnBalance));
+ walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(returnBalance));
+ memberWalletCoinDao.updateById(walletCoin);
+ // 流水记录
+ MemberAccountFlowEntity record = new MemberAccountFlowEntity();
+ record.setSource(MemberAccountFlowEntity.SOURCE_CANCEL);
+ record.setRemark(MemberAccountFlowEntity.REMARK_CANCEL + symbol + MemberAccountFlowEntity.REMARK_RETURNBALANCE + returnBalance);
+ record.setBalance(walletCoin.getAvailableBalance());
+ record.setMemberId(memberId);
+ record.setSymbol(symbol);
+ record.setPrice(walletCoin.getFrozenBalance());
+ memberAccountFlowEntityDao.insert(record);
+ return Result.ok(MessageSourceUtils.getString("order_service_0013"));
+ }
+ }
+ }
+ return Result.fail(MessageSourceUtils.getString("order_service_0043"));
+ }
+
+ @Override
+ public Result findAllWalletCoinOrder(FindAllWalletCoinOrderDto findAllWalletCoinOrderDto) {
+ //获取用户ID
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+
+ Page<OrderCoinsDealEntity> page = new Page<>(findAllWalletCoinOrderDto.getPageNum(), findAllWalletCoinOrderDto.getPageSize());
+ OrderCoinsDealEntity orderCoinsDealEntity = new OrderCoinsDealEntity();
+ orderCoinsDealEntity.setMemberId(memberId);
+ orderCoinsDealEntity.setSymbol(findAllWalletCoinOrderDto.getSymbol());
+ IPage<OrderCoinsDealEntity> list = orderCoinDealDao.findAllWalletCoinOrderInPage(page, orderCoinsDealEntity);
+ Page<OrderWalletCoinDealVo> pageEntityToPageVo = OrderWalletCoinDealMapper.INSTANCE.pageEntityToPageVo(list);
+ List<OrderWalletCoinDealVo> records = pageEntityToPageVo.getRecords();
+ if(CollUtil.isNotEmpty(records)) {
+ for(OrderWalletCoinDealVo orderWalletCoinDealVo : records) {
+ orderWalletCoinDealVo.setFeeAmount(orderWalletCoinDealVo.getFeeAmount() == null
+ ? BigDecimal.ZERO : orderWalletCoinDealVo.getFeeAmount().setScale(4, BigDecimal.ROUND_DOWN));
+
+ orderWalletCoinDealVo.setDealAmount(orderWalletCoinDealVo.getDealAmount() == null
+ ? BigDecimal.ZERO : orderWalletCoinDealVo.getDealAmount().setScale(4, BigDecimal.ROUND_DOWN));
+
+ orderWalletCoinDealVo.setSymbolCnt(orderWalletCoinDealVo.getSymbolCnt() == null
+ ? BigDecimal.ZERO : orderWalletCoinDealVo.getSymbolCnt().setScale(4, BigDecimal.ROUND_DOWN));
+
+ orderWalletCoinDealVo.setEntrustPrice(orderWalletCoinDealVo.getEntrustPrice() == null
+ ? BigDecimal.ZERO : orderWalletCoinDealVo.getEntrustPrice().setScale(4, BigDecimal.ROUND_DOWN));
+
+ orderWalletCoinDealVo.setDealPrice(orderWalletCoinDealVo.getDealPrice() == null
+ ? BigDecimal.ZERO : orderWalletCoinDealVo.getDealPrice().setScale(4, BigDecimal.ROUND_DOWN));
+ }
+ }
+
+
+ return Result.ok(pageEntityToPageVo);
+ }
+
+ @Override
+ public Result findWalletCoinOrder(Long orderId) {
+ //获取用户ID
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+ OrderCoinsDealEntity selectWalletCoinOrder = orderCoinDealDao.selectWalletCoinOrder(orderId, memberId);
+ OrderWalletCoinDealVo entityToVo = OrderWalletCoinDealMapper.INSTANCE.entityToVoOrder(selectWalletCoinOrder);
+ if(ObjectUtil.isNotEmpty(entityToVo)) {
+ entityToVo.setFeeAmount(entityToVo.getFeeAmount() == null
+ ? BigDecimal.ZERO : entityToVo.getFeeAmount().setScale(4, BigDecimal.ROUND_DOWN));
+
+ entityToVo.setDealAmount(entityToVo.getDealAmount() == null
+ ? BigDecimal.ZERO : entityToVo.getDealAmount().setScale(4, BigDecimal.ROUND_DOWN));
+
+ entityToVo.setSymbolCnt(entityToVo.getSymbolCnt() == null
+ ? BigDecimal.ZERO : entityToVo.getSymbolCnt().setScale(4, BigDecimal.ROUND_DOWN));
+
+ entityToVo.setEntrustPrice(entityToVo.getEntrustPrice() == null
+ ? BigDecimal.ZERO : entityToVo.getEntrustPrice().setScale(4, BigDecimal.ROUND_DOWN));
+
+ entityToVo.setDealPrice(entityToVo.getDealPrice() == null
+ ? BigDecimal.ZERO : entityToVo.getDealPrice().setScale(4, BigDecimal.ROUND_DOWN));
+ }
+ return Result.ok(entityToVo);
+ }
+
+ @Override
+ public Result findCollect(String symbol, Integer type) {
+ //获取用户ID
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+ if (type == 1) {
+ //添加自选
+ MemberSelectSymbolsEntity symbols = new MemberSelectSymbolsEntity();
+ symbols.setMemberId(memberId);
+ symbols.setSymbol(symbol);
+ memberSelectSymbolsDao.insert(symbols);
+ return Result.ok(MessageSourceUtils.getString("order_service_0015"));
+ } else {
+ Map<String, Object> columnMap = new HashMap<>();
+ columnMap.put("symbol", symbol);
+ columnMap.put("member_id", memberId);
+ memberSelectSymbolsDao.deleteByMap(columnMap);
+ ;
+ return Result.ok(MessageSourceUtils.getString("order_service_0016"));
+ }
+ }
+
+ @Override
+ public Result checkIsCollect(String symbol) {
+ //获取用户ID
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+ MemberSelectSymbolsVo memberSelectSymbolsVo = new MemberSelectSymbolsVo();
+ List<MemberSelectSymbolsEntity> selectSymbolByMemIdAndSymbol = memberSelectSymbolsDao.selectSymbolByMemIdAndSymbol(memberId, symbol);
+
+ if (CollUtil.isNotEmpty(selectSymbolByMemIdAndSymbol)) {
+ memberSelectSymbolsVo.setIsCollect(MemberSelectSymbolsVo.ISCOLLECT_YES);
+ } else {
+ memberSelectSymbolsVo.setIsCollect(MemberSelectSymbolsVo.ISCOLLECT_NO);
+ }
+ memberSelectSymbolsVo.setSymbol(symbol);
+ return Result.ok(memberSelectSymbolsVo);
+ }
+
+ @Override
+ public Result findCollectList() {
+ //获取用户ID
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+ List<MemberSelectSymbolsEntity> selectByMap = memberSelectSymbolsDao.selectSymbolByMemId(memberId);
+
+ FindCollectListVo findCollectListVo = new FindCollectListVo();
+ List<MemberSelectSymbolsVo> arrayList = new ArrayList<>();
+ if (CollUtil.isNotEmpty(selectByMap)) {
+ for (MemberSelectSymbolsEntity memberSelectSymbolsEntity : selectByMap) {
+ MemberSelectSymbolsVo memberSelectSymbolsVo = new MemberSelectSymbolsVo();
+ memberSelectSymbolsVo.setSymbol(memberSelectSymbolsEntity.getSymbol());
+ arrayList.add(memberSelectSymbolsVo);
+ }
+ }
+ findCollectListVo.setMemberSelectSymbolsVo(arrayList);
+
+ return Result.ok(findCollectListVo);
+ }
+
+ @Override
+ public Result searchSymbolResultList() {
+ //获取用户ID
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+ FindCollectListVo findCollectListVo = new FindCollectListVo();
+ List<MemberSelectSymbolsVo> list = new ArrayList<>();
+
+ Map<String, Object> columnMap = new HashMap<>();
+ List<PlatformSymbolsCoinEntity> selectByMap = platformSymbolsCoinDao.selectByMap(columnMap);
+
+ List<MemberSelectSymbolsEntity> selectSymbolByMemIdAndSymbol = memberSelectSymbolsDao.selectSymbolByMemId(memberId);
+ for (PlatformSymbolsCoinEntity platformSymbolsCoinEntity : selectByMap) {
+ MemberSelectSymbolsVo memberSelectSymbolsVo = new MemberSelectSymbolsVo();
+ memberSelectSymbolsVo.setSymbol(platformSymbolsCoinEntity.getName());
+ if (CollUtil.isNotEmpty(selectSymbolByMemIdAndSymbol)) {
+ for (MemberSelectSymbolsEntity memberSelectSymbolsEntity : selectSymbolByMemIdAndSymbol) {
+ if (platformSymbolsCoinEntity.getName().equals(memberSelectSymbolsEntity.getSymbol())) {
+ memberSelectSymbolsVo.setIsCollect(MemberSelectSymbolsVo.ISCOLLECT_YES);
+ }
+ }
+ } else {
+ memberSelectSymbolsVo.setIsCollect(MemberSelectSymbolsVo.ISCOLLECT_NO);
+ }
+ list.add(memberSelectSymbolsVo);
+ }
+ findCollectListVo.setMemberSelectSymbolsVo(list);
+ return Result.ok(findCollectListVo);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void dealEntrustCoinOrder() {
+ List<OrderCoinsEntity> list = orderCoinsDao.selectAllEntrustingCoinOrderList();
+ if (CollUtil.isNotEmpty(list)) {
+ for (OrderCoinsEntity orderCoinsEntity : list) {
+ BigDecimal nowPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(orderCoinsEntity.getSymbol() + "/USDT")));
+ // 下单时市场价
+ BigDecimal markPrice = orderCoinsEntity.getMarkPrice();
+ // 委托价
+ BigDecimal entrustPrice = orderCoinsEntity.getEntrustPrice();
+
+ //如果当时委托价小于市价
+ if (entrustPrice.compareTo(markPrice) < 0) {
+ if (nowPrice.compareTo(entrustPrice) > 0) {
+ continue;
+ }
+ } else {
+ //委托价大于市价
+ if (nowPrice.compareTo(entrustPrice) < 0) {
+ continue;
+ }
+ }
+
+ BigDecimal fee = entrustPrice.multiply(orderCoinsEntity.getEntrustCnt()).multiply(new BigDecimal("0.002")).setScale(8, BigDecimal.ROUND_HALF_UP);
+
+ BigDecimal dealAmount = entrustPrice.multiply(orderCoinsEntity.getEntrustCnt());
+
+ OrderCoinsDealEntity orderCoinsDealEntity = OrderCoinsDealMapper.INSTANCE.orderToOrderDeal(orderCoinsEntity);
+ orderCoinsDealEntity.setDealAmount(dealAmount);
+ orderCoinsDealEntity.setDealPrice(entrustPrice);
+ orderCoinsDealEntity.setFeeAmount(fee);
+ orderCoinsDealEntity.setOrderStatus(OrderCoinsDealEntity.ORDERSTATUS_DONE);
+ orderCoinsDealEntity.setId(null);
+ orderCoinDealDao.insert(orderCoinsDealEntity);
+
+ orderCoinsDao.deleteById(orderCoinsEntity.getId());
+
+ MemberWalletCoinEntity walletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(orderCoinsEntity.getMemberId(), orderCoinsEntity.getSymbol());
+ MemberWalletCoinEntity usdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(orderCoinsEntity.getMemberId(), "USDT");
+
+ BigDecimal frozen = BigDecimal.ZERO;
+ BigDecimal total = BigDecimal.ZERO;
+ // 买入
+ if (OrderCoinsEntity.ORDERTYPE_BUY.equals(orderCoinsEntity.getOrderType())) {
+ BigDecimal newCoins = walletCoinEntity.getAvailableBalance().add(orderCoinsEntity.getEntrustCnt());
+ BigDecimal newCoinTotal = walletCoinEntity.getTotalBalance().add(orderCoinsEntity.getEntrustCnt());
+ walletCoinEntity.setAvailableBalance(newCoins);
+ walletCoinEntity.setTotalBalance(newCoinTotal);
+ memberWalletCoinDao.updateById(walletCoinEntity);
+
+ frozen = usdt.getFrozenBalance().subtract(dealAmount.add(fee));
+ total = usdt.getTotalBalance().subtract(dealAmount.add(fee));
+ usdt.setFrozenBalance(frozen);
+ usdt.setTotalBalance(total);
+ memberWalletCoinDao.updateById(usdt);
+ } else {
+ walletCoinEntity.setFrozenBalance(walletCoinEntity.getFrozenBalance().subtract(orderCoinsEntity.getEntrustCnt()));
+ walletCoinEntity.setTotalBalance(walletCoinEntity.getTotalBalance().subtract(orderCoinsEntity.getEntrustCnt()));
+ memberWalletCoinDao.updateById(walletCoinEntity);
+
+ usdt.setAvailableBalance(usdt.getAvailableBalance().add(dealAmount.add(fee)));
+ usdt.setTotalBalance(usdt.getTotalBalance().add(dealAmount.add(fee)));
+ memberWalletCoinDao.updateById(usdt);
+ }
+ }
+ }
+ }
}
--
Gitblit v1.9.1