zainali5120
2020-09-21 82dfeaa3fcf871cb604e82abcc8a6db7581e83a2
src/main/java/com/xcong/excoin/trade/CoinTrader.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xcong.excoin.modules.coin.entity.OrderCoinsEntity;
import com.xcong.excoin.modules.coin.service.OrderCoinService;
import com.xcong.excoin.rabbit.producer.ExchangeProducer;
@@ -37,8 +38,7 @@
    //是否暂停交易
    private boolean tradingHalt = false;
    private boolean ready = false;
    //交易对信息
    //private ExchangeCoinPublishType publishType;
    private String clearTime;
    private SimpleDateFormat dateTimeFormat;
@@ -140,9 +140,16 @@
            return;
        }
        // 如果
        if (exchangeOrder.getEntrustAmount().compareTo(BigDecimal.ZERO) <= 0 || exchangeOrder.getEntrustAmount().subtract(exchangeOrder.getDealAmount()).compareTo(BigDecimal.ZERO) <= 0) {
            return;
        if(OrderCoinsEntity.ORDERTYPE_BUY==exchangeOrder.getOrderType()){
            if (exchangeOrder.getEntrustAmount().compareTo(BigDecimal.ZERO) <= 0 || exchangeOrder.getEntrustAmount().subtract(exchangeOrder.getDealAmount()).compareTo(BigDecimal.ZERO) <= 0) {
                return;
            }
        }else{
            if (exchangeOrder.getEntrustCnt().compareTo(BigDecimal.ZERO) <= 0 || exchangeOrder.getEntrustCnt().subtract(exchangeOrder.getDealCnt()).compareTo(BigDecimal.ZERO) <= 0) {
                return;
            }
        }
        TreeMap<BigDecimal, MergeOrder> limitPriceOrderList;
        LinkedList<OrderCoinsEntity> marketPriceOrderList;
@@ -403,6 +410,7 @@
        availAmount = calculateTradedAmount(matchOrder, dealPrice);
        //计算成交量 取少的
        BigDecimal tradedAmount = (availAmount.compareTo(needAmount) >= 0 ? needAmount : availAmount);
        System.out.println("成交量:"+tradedAmount);
        //logger.info("dealPrice={},amount={}", dealPrice, tradedAmount);
        //如果成交额为0说明剩余额度无法成交,退出
        if (tradedAmount.compareTo(BigDecimal.ZERO) == 0) {
@@ -493,7 +501,6 @@
                //orderCoinService.handleOrder(trades);
                // kafkaTemplate.send("exchange-trade", JSON.toJSONString(trades));
            }
            // 更新最新K线 TODO
        }
    }
@@ -527,7 +534,7 @@
     * @param buyTradePlate sellTradePlate
     */
    public void sendTradePlateMessage(TradePlate buyTradePlate, TradePlate sellTradePlate) {
        //防止并发引起数组越界,造成盘口倒挂 TODO
        //防止并发引起数组越界,造成盘口倒挂
        List<List<BigDecimal>> plate;
        List<BigDecimal> plateItem;
        TradePlateModel tradePlateModel = new TradePlateModel();
@@ -535,10 +542,10 @@
        if (buyTradePlate != null && buyTradePlate.getItems() != null) {
            plate = new ArrayList<>();
            LinkedList<TradePlateItem> items = buyTradePlate.getItems();
            for (TradePlateItem item : items) {
            for (int i = items.size() - 1; i >= 0; i--) {
                plateItem = new ArrayList<>(2);
                BigDecimal price = item.getPrice();
                BigDecimal amount = item.getAmount();
                BigDecimal price = items.get(i).getPrice();
                BigDecimal amount = items.get(i).getAmount();
                plateItem.add(price);
                plateItem.add(amount);
                plate.add(plateItem);
@@ -549,10 +556,10 @@
        if (sellTradePlate != null && sellTradePlate.getItems() != null) {
            plate = new ArrayList<>();
            LinkedList<TradePlateItem> items = sellTradePlate.getItems();
            for (TradePlateItem item : items) {
            for (int i = items.size() - 1; i >= 0; i--) {
                plateItem = new ArrayList<>(2);
                BigDecimal price = item.getPrice();
                BigDecimal amount = item.getAmount();
                BigDecimal price = items.get(i).getPrice();
                BigDecimal amount = items.get(i).getAmount();
                plateItem.add(price);
                plateItem.add(amount);
                plate.add(plateItem);
@@ -560,8 +567,7 @@
            tradePlateModel.setSell(plate);
        }
        // 盘口发生变化通知TODO
        // 盘口发生变化通知
        exchangeProducer.sendPlateMsg(JSON.toJSONString(tradePlateModel));
    }
@@ -571,7 +577,7 @@
     * @param
     */
    public String sendTradePlateMessage() {
        //防止并发引起数组越界,造成盘口倒挂 TODO
        //防止并发引起数组越界,造成盘口倒挂
        List<List<BigDecimal>> plate;
        List<BigDecimal> plateItem;
        TradePlateModel tradePlateModel = new TradePlateModel();
@@ -579,10 +585,10 @@
        if (buyTradePlate != null && buyTradePlate.getItems() != null) {
            plate = new ArrayList<>();
            LinkedList<TradePlateItem> items = buyTradePlate.getItems();
            for (TradePlateItem item : items) {
            for (int i = items.size() - 1; i >= 0; i--) {
                plateItem = new ArrayList<>(2);
                BigDecimal price = item.getPrice();
                BigDecimal amount = item.getAmount();
                BigDecimal price = items.get(i).getPrice();
                BigDecimal amount = items.get(i).getAmount();
                plateItem.add(price);
                plateItem.add(amount);
                plate.add(plateItem);
@@ -593,10 +599,10 @@
        if (sellTradePlate != null && sellTradePlate.getItems() != null) {
            plate = new ArrayList<>();
            LinkedList<TradePlateItem> items = sellTradePlate.getItems();
            for (TradePlateItem item : items) {
            for (int i = items.size() - 1; i >= 0; i--) {
                plateItem = new ArrayList<>(2);
                BigDecimal price = item.getPrice();
                BigDecimal amount = item.getAmount();
                BigDecimal price = items.get(i).getPrice();
                BigDecimal amount = items.get(i).getAmount();
                plateItem.add(price);
                plateItem.add(amount);
                plate.add(plateItem);
@@ -604,9 +610,7 @@
            tradePlateModel.setSell(plate);
        }
        // 盘口发生变化通知TODO
        return JSON.toJSONString(tradePlateModel);
        //exchangeProducer.sendPlateMsg(JSON.toJSONString(tradePlateModel));
    }
    /**