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 | 79 ++++++++++++++++++++++++++++++++++++++- 1 files changed, 76 insertions(+), 3 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 07a9886..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"))); @@ -818,11 +823,16 @@ 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(); // 买卖单都需要处理 // 买单 @@ -918,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