From 5fe125b2b4dff77fbfe6a377d4730cc005fc668a Mon Sep 17 00:00:00 2001
From: zainali5120 <512061637@qq.com>
Date: Fri, 30 Oct 2020 23:42:27 +0800
Subject: [PATCH] 修复交易不玩问题 修复撤单问题

---
 src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java |   13 +++++++++++--
 src/main/java/com/xcong/excoin/trade/CoinTrader.java                               |   34 +++++++++++++++++-----------------
 2 files changed, 28 insertions(+), 19 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 d5ce636..b025574 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
@@ -357,6 +357,8 @@
         String phone = memberEntity.getPhone();
         if (!"13632989240".equals(phone) && !"15158130575".equals(phone)) {
             if (OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) {
+                // 禁止挂卖
+
                 // 不能超过800个
 
 //                if (amount != null && amount.compareTo(new BigDecimal("800")) > 0) {
@@ -382,8 +384,9 @@
 //                }
             } else {
                 // 判断redis开关
-                String string = redisUtils.getString("SELL_LIMIT_KEY");
-                if (StringUtils.isNotBlank(string)) {
+                //String string = redisUtils.getString("SELL_LIMIT_KEY");
+                String string = redisUtils.getString("SELL_LIMIT_KEY_PHONE");
+                if (StringUtils.isNotBlank(string) && string.contains(memberEntity.getPhone())) {
                     return Result.fail("卖出受限");
                 }
             }
@@ -658,6 +661,12 @@
         OrderCoinsEntity coinsEntityCancel = trader.cancelOrder(orderCoinsEntity);
         if (coinsEntityCancel == null) {
             // 此时说明撮合系统已经没这个单了 不需要继续处理
+            // 直接更新状态先
+            OrderCoinsEntity update = new OrderCoinsEntity();
+            update.setId(Long.valueOf(orderId));
+            update.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_CANCEL);
+            //orderCoinsEntity.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_CANCEL);
+            orderCoinsDao.updateById(update);
             return null;
         }
 
diff --git a/src/main/java/com/xcong/excoin/trade/CoinTrader.java b/src/main/java/com/xcong/excoin/trade/CoinTrader.java
index 8ab6f28..186ef55 100644
--- a/src/main/java/com/xcong/excoin/trade/CoinTrader.java
+++ b/src/main/java/com/xcong/excoin/trade/CoinTrader.java
@@ -376,7 +376,7 @@
             BigDecimal leftTurnover = order.getEntrustAmount().subtract(order.getDealAmount());
             if(leftTurnover.divide(dealPrice,coinScale,BigDecimal.ROUND_DOWN)
                     .compareTo(BigDecimal.ZERO)==0){
-                //order.setDealAmount(order.getEntrustAmount());
+                order.setDealAmount(order.getEntrustAmount());
                 return leftTurnover;
             }
         }
@@ -425,20 +425,6 @@
         // 用户单成交金额
         focusedOrder.setDealAmount(focusedOrder.getDealAmount().add(turnover));
 
-        // 判断两个单是否完成
-        if(matchOrder.getEntrustAmount()!=null &&matchOrder.getEntrustAmount().compareTo(BigDecimal.ZERO)>0 && matchOrder.getEntrustAmount().compareTo(matchOrder.getDealAmount())<=0){
-            matchOrder.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE);
-        }
-        if(matchOrder.getEntrustCnt()!=null &&matchOrder.getEntrustCnt().compareTo(BigDecimal.ZERO)>0 && matchOrder.getEntrustCnt().compareTo(matchOrder.getDealCnt())<=0){
-            matchOrder.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE);
-        }
-
-        if(focusedOrder.getEntrustAmount()!=null &&  focusedOrder.getEntrustAmount().compareTo(BigDecimal.ZERO)>0 && focusedOrder.getEntrustAmount().compareTo(focusedOrder.getDealAmount())<=0){
-            focusedOrder.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE);
-        }
-        if(focusedOrder.getEntrustCnt()!=null &&focusedOrder.getEntrustCnt().compareTo(BigDecimal.ZERO)>0 && focusedOrder.getEntrustCnt().compareTo(focusedOrder.getDealCnt())<=0){
-            focusedOrder.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE);
-        }
 
         //创建成交记录
         ExchangeTrade exchangeTrade = new ExchangeTrade();
@@ -454,10 +440,24 @@
         //校正市价单剩余成交额
         if (OrderCoinsEntity.TRADETYPE_MARKETPRICE == focusedOrder.getTradeType() && focusedOrder.getOrderType() == OrderCoinsEntity.ORDERTYPE_BUY) {
             BigDecimal adjustTurnover = adjustMarketOrderTurnover(focusedOrder, dealPrice);
-            exchangeTrade.setBuyTurnover(turnover.add(adjustTurnover));
+            //exchangeTrade.setBuyTurnover(turnover.add(adjustTurnover));
         } else if (OrderCoinsEntity.TRADETYPE_MARKETPRICE == matchOrder.getTradeType() && matchOrder.getOrderType() == OrderCoinsEntity.ORDERTYPE_BUY) {
             BigDecimal adjustTurnover = adjustMarketOrderTurnover(matchOrder, dealPrice);
-            exchangeTrade.setBuyTurnover(turnover.add(adjustTurnover));
+            //exchangeTrade.setBuyTurnover(turnover.add(adjustTurnover));
+        }
+        // 判断两个单是否完成
+        if(matchOrder.getEntrustAmount()!=null &&matchOrder.getEntrustAmount().compareTo(BigDecimal.ZERO)>0 && matchOrder.getEntrustAmount().compareTo(matchOrder.getDealAmount())<=0){
+            matchOrder.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE);
+        }
+        if(matchOrder.getEntrustCnt()!=null &&matchOrder.getEntrustCnt().compareTo(BigDecimal.ZERO)>0 && matchOrder.getEntrustCnt().compareTo(matchOrder.getDealCnt())<=0){
+            matchOrder.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE);
+        }
+
+        if(focusedOrder.getEntrustAmount()!=null &&  focusedOrder.getEntrustAmount().compareTo(BigDecimal.ZERO)>0 && focusedOrder.getEntrustAmount().compareTo(focusedOrder.getDealAmount())<=0){
+            focusedOrder.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE);
+        }
+        if(focusedOrder.getEntrustCnt()!=null &&focusedOrder.getEntrustCnt().compareTo(BigDecimal.ZERO)>0 && focusedOrder.getEntrustCnt().compareTo(focusedOrder.getDealCnt())<=0){
+            focusedOrder.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE);
         }
 
         if (focusedOrder.getOrderType() == OrderCoinsEntity.ORDERTYPE_BUY) {

--
Gitblit v1.9.1