| | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.huobi.client.model.Candlestick; |
| | | import com.xcong.excoin.configurations.RabbitMqConfig; |
| | | import com.xcong.excoin.modules.coin.entity.OrderCoinsEntity; |
| | | import com.xcong.excoin.modules.coin.service.OrderCoinService; |
| | | import com.xcong.excoin.modules.exchange.service.HandleKlineService; |
| | | import com.xcong.excoin.trade.ExchangeTrade; |
| | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections.CollectionUtils; |
| | | import org.springframework.amqp.rabbit.annotation.RabbitListener; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * @author wzy |
| | | * @date 2020-05-25 |
| | | **/ |
| | | * websocket 只能后台撮合交易那台开启 |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | @ConditionalOnProperty(prefix = "app", name = "exchange-trade", havingValue = "true") |
| | | public class ExchangeConsumer { |
| | | |
| | | @Resource |
| | |
| | | */ |
| | | @RabbitListener(queues = RabbitMqConfig.QUEUE_TRADE_PLATE) |
| | | public void tradePlate(String content) { |
| | | tradePlateSendWebSocket.sendMessagePlate("NEKK/USDT",content,null); |
| | | tradePlateSendWebSocket.sendMessagePlate("ROC/USDT",content,null); |
| | | } |
| | | |
| | | /** |
| | |
| | | if(CollectionUtils.isEmpty(exchangeTrades)){ |
| | | return; |
| | | } |
| | | // 先处理处理用户订单 |
| | | orderCoinService.handleOrder(exchangeTrades); |
| | | // 处理K线 并更新最新价 |
| | | handleKlineService.handleExchangeOrderToKline(exchangeTrades); |
| | | // 推送最新K线 |
| | |
| | | newCandlestick.setTick(model); |
| | | tradePlateSendWebSocket.sendMessageKline(symbolUsdt,key1,JSONObject.toJSONString(newCandlestick),null); |
| | | } |
| | | // 处理用户订单 |
| | | orderCoinService.handleOrder(exchangeTrades); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 更新最新K线 |
| | | * 撮合交易订单全部完成 |
| | | * @param content |
| | | */ |
| | | // @RabbitListener(queues = RabbitMqConfig.QUEUE_TRADE_PLATE) |
| | | // public void newKling(String content) { |
| | | // log.info("#---->{}#", content); |
| | | // // 最新K线的币种 |
| | | // String key = "NEW_KINE_{}"; |
| | | // key = StrUtil.format(key, content); |
| | | // Object o = redisUtils.get(key); |
| | | // Map<String, Candlestick> currentKlineMap = (Map<String, Candlestick>)o; |
| | | // // 推送最新K线 |
| | | // Set<Map.Entry<String, Candlestick>> entries = currentKlineMap.entrySet(); |
| | | // for(Map.Entry<String, Candlestick> map : entries){ |
| | | // tradePlateSendWebSocket.sendMessageKline(content,map.getKey(),JSONObject.toJSONString(map.getValue()),null); |
| | | // } |
| | | // |
| | | // } |
| | | @RabbitListener(queues = RabbitMqConfig.QUEUE_ROC_ORDER_COMPLETE) |
| | | public void doComplete(String content) { |
| | | log.debug("#完成的订单---->{}#", content); |
| | | List<OrderCoinsEntity> exchangeTrades = JSONObject.parseArray(content, OrderCoinsEntity.class); |
| | | if(CollectionUtils.isEmpty(exchangeTrades)){ |
| | | return; |
| | | } |
| | | orderCoinService.completeOrder(exchangeTrades); |
| | | } |
| | | |
| | | } |