From 53bc6ea0abbeb39146502a40292e6562c5a736d7 Mon Sep 17 00:00:00 2001 From: zainali5120 <512061637@qq.com> Date: Sat, 17 Oct 2020 16:27:32 +0800 Subject: [PATCH] 修复交易问题 --- src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java | 4 ++++ src/main/java/com/xcong/excoin/rabbit/producer/OrderSubmitProducer.java | 4 ++-- src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java | 6 +++--- src/main/java/com/xcong/excoin/trade/CoinTrader.java | 10 ++++++---- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java b/src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java index 65dc2a0..61d617f 100644 --- a/src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java @@ -582,16 +582,16 @@ // 这里需要加锁 保证同一个时间只有一个线程操作一个钱包 String key = "UPDATE_WALLET_COIN_"+id; while (true){ - boolean b = redisUtils.setNotExist(key, 1, 5); + boolean b = redisUtils.setNotExist(key, 1, 2); if(b){ - System.out.println("我拿到了锁"); + //System.out.println("我拿到了锁"); // 拿到了锁才能扣 memberWalletCoinDao.updateWalletBalance(id,availableBalance,totalBalance,frozenBalance); // 扣完释放锁 redisUtils.del(key); break; }else { - System.out.println("我没有拿到锁"); + } } } 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 b52f93c..b59e970 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 @@ -7,6 +7,7 @@ import javax.annotation.Resource; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.common.contants.AppContants; import com.xcong.excoin.common.enumerates.CoinTypeEnum; @@ -1094,6 +1095,9 @@ if (CollectionUtils.isNotEmpty(trades)) { for (OrderCoinsEntity trade : trades) { if (trade != null) { + if (trade.getOrderType()==2 && trade.getEntrustCnt().compareTo(trade.getDealCnt())!=0){ + System.out.println("问题卖单:"+ JSON.toJSONString(trade)); + } //orderCoinsDao.updateStatus(trade.getId(),OrderCoinsEntity.ORDERSTATUS_DONE); ids.add(trade.getId()); // 买单 实际成交金额小于委托的 这一部分从冻结扣除 diff --git a/src/main/java/com/xcong/excoin/rabbit/producer/OrderSubmitProducer.java b/src/main/java/com/xcong/excoin/rabbit/producer/OrderSubmitProducer.java index 1cc749f..6dac18e 100644 --- a/src/main/java/com/xcong/excoin/rabbit/producer/OrderSubmitProducer.java +++ b/src/main/java/com/xcong/excoin/rabbit/producer/OrderSubmitProducer.java @@ -38,9 +38,9 @@ @Override public void confirm(CorrelationData correlationData, boolean ack, String cause) { - log.info("#----->{}#", correlationData); + //log.info("#----->{}#", correlationData); if (ack) { - log.info("success"); + // log.info("success"); } else { log.info("--->{}", cause); } diff --git a/src/main/java/com/xcong/excoin/trade/CoinTrader.java b/src/main/java/com/xcong/excoin/trade/CoinTrader.java index 4c08fb4..8ab6f28 100644 --- a/src/main/java/com/xcong/excoin/trade/CoinTrader.java +++ b/src/main/java/com/xcong/excoin/trade/CoinTrader.java @@ -333,6 +333,8 @@ if ((focusedOrder.getOrderType() == OrderCoinsEntity.ORDERTYPE_SELL && focusedOrder.getDealCnt().compareTo(focusedOrder.getEntrustCnt()) < 0) || (focusedOrder.getOrderType() == OrderCoinsEntity.ORDERTYPE_BUY && focusedOrder.getDealAmount().compareTo(focusedOrder.getEntrustAmount()) < 0)) { logger.info("市价单未交易完成:#{}"+JSON.toJSONString(focusedOrder)); + // 打印此时的限价买单 + logger.info("此时的买单:#{}"+JSON.toJSONString(lpList)); addMarketPriceOrder(focusedOrder); } //每个订单的匹配批量推送 @@ -424,17 +426,17 @@ focusedOrder.setDealAmount(focusedOrder.getDealAmount().add(turnover)); // 判断两个单是否完成 - if(matchOrder.getEntrustAmount()!=null && matchOrder.getEntrustAmount().compareTo(matchOrder.getDealAmount())<=0){ + 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(matchOrder.getDealCnt())<=0){ + 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(focusedOrder.getDealAmount())<=0){ + 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(focusedOrder.getDealCnt())<=0){ + if(focusedOrder.getEntrustCnt()!=null &&focusedOrder.getEntrustCnt().compareTo(BigDecimal.ZERO)>0 && focusedOrder.getEntrustCnt().compareTo(focusedOrder.getDealCnt())<=0){ focusedOrder.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE); } -- Gitblit v1.9.1