From 6dbdd5b82a5361d90c08246664252e50ac626cbf Mon Sep 17 00:00:00 2001
From: zainali5120 <512061637@qq.com>
Date: Wed, 16 Sep 2020 17:40:24 +0800
Subject: [PATCH] 撮合交易代码提交
---
src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java | 112 +++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 82 insertions(+), 30 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 2ddead0..37caea9 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
@@ -437,37 +437,7 @@
}
// 加入到撮合
CoinTrader trader = factory.getTrader(symbol);
-// if(trader==null){
-//
-// trader = new CoinTrader("NEKK");
-// //newTrader.setKafkaTemplate(kafkaTemplate);
-// //newTrader.setBaseCoinScale(coin.getBaseCoinScale());
-// //newTrader.setCoinScale(coin.getCoinScale());
-// // newTrader.setPublishType(coin.getPublishType());
-// //newTrader.setClearTime(coin.getClearTime());
-//
-// // 创建成功以后需要对未处理订单预处理
-// //log.info("======CoinTrader Process: " + symbol + "======");
-// List<OrderCoinsEntity> orders = orderCoinsDao.selectAllEntrustingCoinOrderList();
-// if(CollectionUtils.isNotEmpty(orders)){
-// List<OrderCoinsEntity> tradingOrders = new ArrayList<>();
-// List<OrderCoinsEntity> completedOrders = new ArrayList<>();
-// orders.forEach(order1 -> {
-// tradingOrders.add(order1);
-// });
-// try {
-// trader.trade(tradingOrders);
-// } catch (ParseException e) {
-// e.printStackTrace();
-// // log.info("异常:trader.trade(tradingOrders);");
-// }
-// }
-//
-// trader.setReady(true);
-// factory.addTrader(symbol, trader);
-// }
trader.trade(order);
-
// // 流水记录 TODO
// MemberAccountFlowEntity record = new MemberAccountFlowEntity();
@@ -601,6 +571,88 @@
}
@Override
+ @Transactional
+ public Result cancelEntrustWalletCoinOrderForMatch(String orderId) {
+ //获取用户ID
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+ OrderCoinsEntity orderCoinsEntity = orderCoinsDao.selectById(orderId);
+ // 取消撮合订单的单
+ CoinTrader trader = factory.getTrader(orderCoinsEntity.getSymbol());
+ trader.cancelOrder(orderCoinsEntity);
+ 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();
--
Gitblit v1.9.1