From d174d6963d62b3bd176f9e7ba3cf0d7f75a91b69 Mon Sep 17 00:00:00 2001
From: zainali5120 <512061637@qq.com>
Date: Wed, 16 Sep 2020 16:03:22 +0800
Subject: [PATCH] 撮合交易代码提交
---
src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java | 87 +++++++++++++++++++++++++++++++++++++++++--
1 files changed, 82 insertions(+), 5 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 200f4a7..2ddead0 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
@@ -161,13 +161,18 @@
@Override
@Transactional
- public Result submitSalesWalletCoinOrder(String symbol, Integer type, Integer tradeType, BigDecimal price, BigDecimal amount) {
+ public Result submitSalesWalletCoinOrder(String symbol, Integer type, Integer tradeType, BigDecimal price, BigDecimal amount,BigDecimal entrustAmount) {
+
+
//获取用户ID
Long memberId = LoginUserUtils.getAppLoginUser().getId();
BigDecimal nowPriceinBigDecimal = price;
//查询当前价
BigDecimal nowPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol + "/USDT")));
-
+ if(OrderCoinsEntity.ORDERTYPE_BUY.equals(type) && OrderCoinsEntity.TRADETYPE_MARKETPRICE.equals(tradeType)){
+ amount = entrustAmount.divide(nowPrice,BigDecimal.ROUND_DOWN);
+ }
+ // 处理市价
// 获取交易管理的杠杠倍率,手续费率等信息,由平台进行设置
symbol = symbol.toUpperCase();
MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, symbol);
@@ -319,7 +324,7 @@
@Override
public Result submitSalesWalletCoinOrderWithMatch(String symbol, Integer type, Integer tradeType, BigDecimal price, BigDecimal amount, BigDecimal entrustAmount) {
//获取用户ID
- Long memberId = 13L;
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
BigDecimal nowPriceinBigDecimal = price;
//查询当前价
//BigDecimal nowPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol + "/USDT")));
@@ -744,7 +749,9 @@
@Override
@Transactional(rollbackFor = Exception.class)
public void dealEntrustCoinOrder() {
- List<OrderCoinsEntity> list = orderCoinsDao.selectAllEntrustingCoinOrderList();
+ List<String> ignoreTypes = new ArrayList<>();
+ ignoreTypes.add("NEKK");
+ List<OrderCoinsEntity> list = orderCoinsDao.selectAllEntrustingCoinOrderList(ignoreTypes);
if (CollUtil.isNotEmpty(list)) {
for (OrderCoinsEntity orderCoinsEntity : list) {
BigDecimal nowPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(orderCoinsEntity.getSymbol() + "/USDT")));
@@ -813,12 +820,19 @@
public void handleOrder(List<ExchangeTrade> trades){
// 处理撮合交易的订单
for(ExchangeTrade exchangeTrade : trades){
-
+ if(exchangeTrade==null){
+ continue;
+ }
+ // 量
BigDecimal amount = exchangeTrade.getAmount();
+ // 买单ID
Long buyOrderId = exchangeTrade.getBuyOrderId();
+ // 成交金额(usdt)
BigDecimal buyTurnover = exchangeTrade.getBuyTurnover();
int direction = exchangeTrade.getDirection();
+ // 成交价
BigDecimal price = exchangeTrade.getPrice();
+ // 卖单
Long sellOrderId = exchangeTrade.getSellOrderId();
// 买卖单都需要处理
// 买单
@@ -914,4 +928,67 @@
}
}
}
+
+ @Override
+ public void initOrders(String symbol, Integer type, Integer tradeType, BigDecimal price,
+ BigDecimal amount,BigDecimal entrustAmount) {
+ //获取用户ID
+ Long memberId = 10L;
+ BigDecimal nowPriceinBigDecimal = price;
+ //查询当前价
+ //BigDecimal nowPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol + "/USDT")));
+
+ // 获取交易管理的杠杠倍率,手续费率等信息,由平台进行设置
+ symbol = symbol.toUpperCase();
+
+ // 手续费用(手续费=建仓价X数量X手续费率)
+ BigDecimal closingPrice = BigDecimal.ZERO ;
+
+ // BigDecimal totalPayPricCoin = nowPrice.multiply(amount).add(closingPrice);
+ // 首先将单插入到数据库主表(委托表)
+ // 创建订单
+ OrderCoinsEntity order = new OrderCoinsEntity();
+ //根据委托类型生成不同数据
+ // 如果是限价交易直接插入主表数据
+ order.setMemberId(memberId);
+ order.setOrderNo(generateSimpleSerialno(memberId.toString()));
+ order.setOrderType(type);
+ order.setSymbol(symbol);
+ //order.setMarkPrice(nowPrice);
+
+ // 成交量 先设置为0
+ order.setDealCnt(BigDecimal.ZERO);
+ // 成交价
+ //order.setDealPrice(price);
+ // 成交金额
+ order.setDealAmount(BigDecimal.ZERO);
+ order.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DODING);
+ order.setTradeType(tradeType);
+ // 手续费
+ order.setFeeAmount(closingPrice);
+ if(OrderCoinsEntity.TRADETYPE_FIXEDPRICE.equals(tradeType)){
+ // 限价 是需要价格和数量 可以得到成交金额
+ // 下单量
+ order.setEntrustCnt(amount);
+ // 下单价格
+ order.setEntrustPrice(price);
+ order.setEntrustAmount(amount.multiply(price));
+ }else{
+ if(OrderCoinsEntity.ORDERTYPE_BUY.equals(type)){
+ // 市价 只有金额
+ order.setEntrustAmount(entrustAmount);
+ }else{
+ // 下单量
+ order.setEntrustCnt(amount);
+ // 下单价格
+ order.setEntrustPrice(price);
+ order.setEntrustAmount(amount.multiply(price));
+ }
+
+ }
+ orderCoinsDao.insert(order);
+ // 加入到撮合
+ CoinTrader trader = factory.getTrader(symbol);
+ trader.trade(order);
+ }
}
--
Gitblit v1.9.1