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