From be6979a915b64b831526baf9052726b5bb5cf152 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Tue, 02 Jun 2020 21:32:22 +0800 Subject: [PATCH] modify rabbit something --- src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java | 8 +- src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java | 4 src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java | 4 src/main/resources/logback-spring.xml | 2 src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java | 2 src/main/java/com/xcong/excoin/quartz/job/NewestPriceUpdateJob.java | 4 src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java | 122 +++++++++++++++++++++------------------- src/main/java/com/xcong/excoin/common/LoginUserUtils.java | 4 + src/main/resources/application.yml | 4 9 files changed, 81 insertions(+), 73 deletions(-) diff --git a/src/main/java/com/xcong/excoin/common/LoginUserUtils.java b/src/main/java/com/xcong/excoin/common/LoginUserUtils.java index 64c0aa2..0c24019 100644 --- a/src/main/java/com/xcong/excoin/common/LoginUserUtils.java +++ b/src/main/java/com/xcong/excoin/common/LoginUserUtils.java @@ -34,6 +34,10 @@ * @return MemberEntity */ public static MemberEntity getUser() { + if (SecurityContextHolder.getContext().getAuthentication() == null) { + return null; + } + if (SecurityContextHolder.getContext().getAuthentication().getPrincipal().equals(ANON)) { return null; } else { diff --git a/src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java b/src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java index 29cae2e..7be7a45 100644 --- a/src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java +++ b/src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java @@ -40,7 +40,7 @@ public static final String QUEUE_LESSLOSS = "QUEUE_LESSLOSS"; // 限价委托 - public static final String QUEUE_LIMIT = "QUEUE_LIMIT"; + public static final String QUEUE_LIMIT = "QUEUE_LIMIT_NEW"; // 爆仓队列 public static final String QUEUE_COINOUT = "QUEUE_COINOUT"; diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java index 3b30010..0cc3d15 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java @@ -128,10 +128,10 @@ // 发送委托单队列消息 if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE) { - OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue(), submitEntrustDto.getEntrustPrice().toPlainString(), submitEntrustDto.getSymbol()); + OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue(), submitEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), submitEntrustDto.getSymbol()); producer.sendPriceOperate(JSONObject.toJSONString(model)); } else { - OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_LESS.getValue(), submitEntrustDto.getEntrustPrice().toPlainString(), submitEntrustDto.getSymbol()); + OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_LESS.getValue(), submitEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), submitEntrustDto.getSymbol()); producer.sendPriceOperate(JSONObject.toJSONString(model)); } return Result.ok("委托成功"); diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java index 10e2f85..a984afb 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java @@ -367,10 +367,10 @@ } else { // 开空止盈 if (ProfitOrLessDto.TYPE_PROFIT == profitOrLessDto.getType()) { - model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_PROFIT.getValue(), price.toPlainString(), holdOrderEntity.getSymbol()); + model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_PROFIT.getValue(), price.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol()); // 开空止损 } else { - model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_LESS.getValue(), price.toPlainString(), holdOrderEntity.getSymbol()); + model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_LESS.getValue(), price.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol()); } } producer.sendPriceOperate(JSONObject.toJSONString(model)); @@ -419,10 +419,10 @@ OrderModel model = null; // 开多 if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) { - model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.toPlainString(), holdOrderEntity.getSymbol()); + model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol()); // 开空 } else { - model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.toPlainString(), holdOrderEntity.getSymbol()); + model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol()); } producer.sendPriceOperate(JSONObject.toJSONString(model)); diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java index 050f2e4..367a0bd 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java @@ -544,11 +544,11 @@ // 市价 if (coinsCoinsOrder.getEntrustType() == 1) { // 开多 - OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 6, contractHoldOrderEntity.getForceClosingPrice().toPlainString(), coinsCoinsOrder.getSymbol(), 1); + OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 6, contractHoldOrderEntity.getForceClosingPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), coinsCoinsOrder.getSymbol(), 1); producer.sendPriceOperate(JSONObject.toJSONString(model)); } else { // 开空 - OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 7, contractHoldOrderEntity.getForceClosingPrice().toPlainString(), coinsCoinsOrder.getSymbol(), 1); + OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 7, contractHoldOrderEntity.getForceClosingPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), coinsCoinsOrder.getSymbol(), 1); producer.sendPriceOperate(JSONObject.toJSONString(model)); } // 扣除手续费 diff --git a/src/main/java/com/xcong/excoin/quartz/job/NewestPriceUpdateJob.java b/src/main/java/com/xcong/excoin/quartz/job/NewestPriceUpdateJob.java index d78830b..39ddc25 100644 --- a/src/main/java/com/xcong/excoin/quartz/job/NewestPriceUpdateJob.java +++ b/src/main/java/com/xcong/excoin/quartz/job/NewestPriceUpdateJob.java @@ -52,8 +52,8 @@ // TODO 测试环境关闭这个插入redis redisUtils.set(CoinTypeConvert.convertToKey(symbol), price); // 比较 - websocketPriceService.comparePriceAsc(symbol, price); - websocketPriceService.comparePriceDesc(symbol, price); + websocketPriceService.comparePriceAsc(symbol, price); + websocketPriceService.comparePriceDesc(symbol, price); //System.out.println("比较完毕:"+symbol+"-"+price); } diff --git a/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java b/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java index 7282d61..a81854c 100644 --- a/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java +++ b/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java @@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.rabbit.producer.OrderProducer; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -12,6 +13,7 @@ import java.util.Map; import java.util.concurrent.PriorityBlockingQueue; +@Slf4j @Component public class WebsocketPriceService { @@ -22,7 +24,7 @@ * @param symbol * @param price */ - public void comparePriceAsc(String symbol, String price) { + public void comparePriceAsc(String symbol, String price) { // 比较价格 正序的 最小元素在头部 开多止盈 开空止损等 PriorityBlockingQueue<AscBigDecimal> queue = PricePriorityQueue.getQueueAsc(symbol); // 最小的 @@ -32,21 +34,23 @@ List<AscBigDecimal> list = new ArrayList<AscBigDecimal>(); // 找到所有比当前价格大的 是需要操作的 if (b != null && b.compareTo(now) <= 0) { + log.info("--->{}", b.getValue()); // 可以操作 - System.out.println("当前价格:" + price + "---正序---" + "队列价格:" + b.getValue().toPlainString()+" time:"+new Date()); + System.out.println("当前价格:" + price + "---正序---" + "队列价格:" + b.getValue().toPlainString() + " time:" + new Date()); + log.info("--->>>>{}", queue.peek().getValue()); while (queue.peek() != null && queue.peek().compareTo(now) <= 0) { // 可以发送消息操作 list.add(queue.remove()); } } - if(CollectionUtils.isNotEmpty(list)){ - dealAscPriceOrderAndSenMq(list,symbol); + if (CollectionUtils.isNotEmpty(list)) { + dealAscPriceOrderAndSenMq(list, symbol); } - + } - public void comparePriceDesc(String symbol, String price) { + public void comparePriceDesc(String symbol, String price) { // 比较价格 倒叙的 开多止损 开空止盈 PriorityBlockingQueue<DescBigDecimal> queue = PricePriorityQueue.getQueueDesc(symbol); // 最大价格 @@ -57,16 +61,19 @@ // 找到比当前价格还大的就是需要操作的 开多止损 // 即最大的币当前价大 那么需要开多止损 if (b != null && b.compareTo(now) <= 0) { + log.info("--->{}", b.getValue()); // 可以操作 - System.out.println("当前价格:" + price + "---倒序操作---" + "队列:" + b.getValue().toPlainString()+" time:"+new Date()); + System.out.println("当前价格:" + price + "---倒序操作---" + "队列:" + b.getValue().toPlainString() + " time:" + new Date()); + log.info("--->>>>{}", queue.peek().getValue()); while (queue.peek() != null && queue.peek().compareTo(now) <= 0) { // 可以发送消息操作 list.add(queue.remove()); + log.info("#{}#", JSONObject.toJSONString(list)); } } - if(CollectionUtils.isNotEmpty(list)){ - dealDescPriceOrderAndSenMq(list,symbol); + if (CollectionUtils.isNotEmpty(list)) { + dealDescPriceOrderAndSenMq(list, symbol); } } @@ -79,17 +86,21 @@ List<OrderModel> orderModelList = new ArrayList<OrderModel>(); // 3 正序 Map<String, List<OrderModel>> orderMap = PricePriorityQueue.getOrderMap(symbol, 3); + log.info("--->{}", JSONObject.toJSONString(orderMap)); // 根据价格查询到对应的订单 for (AscBigDecimal asc : list) { String key = asc.getValue().toPlainString(); - if(orderMap.containsKey(key)){ + log.info("------>>>>>{}", key); + assert orderMap != null; + log.info("======={}", orderMap.containsKey(key)); + if (orderMap.containsKey(key)) { orderModelList.addAll(orderMap.get(key)); orderMap.remove(key); } } - - if(CollectionUtils.isEmpty(orderModelList)){ + log.info("{}", orderModelList); + if (CollectionUtils.isEmpty(orderModelList)) { return; } System.out.println("本次执行的列表ASC"); @@ -98,52 +109,46 @@ // 3:开空 7:爆仓平空 // 9:止盈平多 12:止损平空 for (OrderModel model : orderModelList) { - List<OrderModel> kkzsList = null; - List<OrderModel> kdzyList = null; - List<OrderModel> bcList = null; - List<OrderModel> wtkkList = null; + // 止损平空 + List<OrderModel> kkzsList = new ArrayList<OrderModel>(); + // 止盈平多 + List<OrderModel> kdzyList = new ArrayList<OrderModel>(); + // 爆仓平空 + List<OrderModel> bcList = new ArrayList<OrderModel>(); + // 开空 + List<OrderModel> wtkkList = new ArrayList<OrderModel>(); switch (model.getType()) { case 3: - if (wtkkList == null) { - wtkkList = new ArrayList<OrderModel>(); - } wtkkList.add(model); break; case 7: - if (bcList == null) { - bcList = new ArrayList<OrderModel>(); - } bcList.add(model); break; case 9: - if (kdzyList == null) { - kdzyList = new ArrayList<OrderModel>(); - } kdzyList.add(model); break; case 12: - if (kkzsList == null) { - kkzsList = new ArrayList<OrderModel>(); - } kkzsList.add(model); + break; + default: + log.info("#price-service unknow type#"); break; } // 发送消息 - if(CollectionUtils.isNotEmpty(kkzsList)){ - String kkzs= JSONObject.toJSONString(kkzsList); + if (CollectionUtils.isNotEmpty(kkzsList)) { + String kkzs = JSONObject.toJSONString(kkzsList); orderProducer.sendLessLoss(kkzs); } - if(CollectionUtils.isNotEmpty(kdzyList)){ - String kdzy = JSONObject.toJSONString(kdzyList); + if (CollectionUtils.isNotEmpty(kdzyList)) { + String kdzy = JSONObject.toJSONString(kdzyList); orderProducer.sendMorePro(kdzy); } - if(CollectionUtils.isNotEmpty(bcList)){ + if (CollectionUtils.isNotEmpty(bcList)) { orderProducer.sendCoinout(JSONObject.toJSONString(bcList)); } - if(CollectionUtils.isNotEmpty(wtkkList)){ + if (CollectionUtils.isNotEmpty(wtkkList)) { orderProducer.sendLimit(JSONObject.toJSONString(wtkkList)); - } } } @@ -156,17 +161,22 @@ // 根据不同类型发送不同消息 1 倒序 2 正序 List<OrderModel> orderModelList = new ArrayList<OrderModel>(); Map<String, List<OrderModel>> orderMap = PricePriorityQueue.getOrderMap(symbol, 2); + log.info("--->{}", JSONObject.toJSONString(orderMap)); // 根据价格查询到对应的订单 for (DescBigDecimal desc : list) { String key = desc.getValue().toPlainString(); - if(orderMap.containsKey(key)){ + log.info("------>>>>>{}", key); + assert orderMap != null; + log.info("======={}", orderMap.containsKey(key)); + if (orderMap.containsKey(key)) { orderModelList.addAll(orderMap.get(key)); orderMap.remove(key); } } - if(CollectionUtils.isEmpty(orderModelList)){ + log.info("{}", orderModelList); + if (CollectionUtils.isEmpty(orderModelList)) { return; } System.out.println("本次执行的列表Desc"); @@ -175,50 +185,44 @@ // 2:开多6:爆仓平多 // 10:止盈平空11:止损平多 for (OrderModel model : orderModelList) { - List<OrderModel> kkzyList = null; - List<OrderModel> kdzsList = null; - List<OrderModel> bcList = null; - List<OrderModel> wtkdList = null; + // 开空止盈 + List<OrderModel> kkzyList = new ArrayList<OrderModel>(); + // 开多止损 + List<OrderModel> kdzsList = new ArrayList<OrderModel>(); + // 爆仓 + List<OrderModel> bcList = new ArrayList<OrderModel>(); + // 开多委托 + List<OrderModel> wtkdList = new ArrayList<OrderModel>(); switch (model.getType()) { case 2: - if (wtkdList == null) { - wtkdList = new ArrayList<OrderModel>(); - } wtkdList.add(model); break; case 6: - if (bcList == null) { - bcList = new ArrayList<OrderModel>(); - } bcList.add(model); break; case 10: - if (kkzyList == null) { - kkzyList = new ArrayList<OrderModel>(); - } kkzyList.add(model); break; case 11: - if (kdzsList == null) { - kdzsList = new ArrayList<OrderModel>(); - } kdzsList.add(model); + break; + default: break; } // 发送消息 - if(CollectionUtils.isNotEmpty(kkzyList)){ - String kkzy= JSONObject.toJSONString(kkzyList); + if (CollectionUtils.isNotEmpty(kkzyList)) { + String kkzy = JSONObject.toJSONString(kkzyList); orderProducer.sendLessPro(kkzy); } - if(CollectionUtils.isNotEmpty(kdzsList)){ - String kdzs = JSONObject.toJSONString(kdzsList); + if (CollectionUtils.isNotEmpty(kdzsList)) { + String kdzs = JSONObject.toJSONString(kdzsList); orderProducer.sendMoreLoss(kdzs); } - if(CollectionUtils.isNotEmpty(bcList)){ + if (CollectionUtils.isNotEmpty(bcList)) { orderProducer.sendCoinout(JSONObject.toJSONString(bcList)); } - if(CollectionUtils.isNotEmpty(wtkdList)){ + if (CollectionUtils.isNotEmpty(wtkdList)) { orderProducer.sendLimit(JSONObject.toJSONString(wtkdList)); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index cf1a6f1..b28cd2d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -96,10 +96,10 @@ # k线更新任务控制 kline-update-job: false #最新价任务控制 - newest-price-update-job: false + newest-price-update-job: true #其他任务控制 other-job: false - rabbit-consumer: false + rabbit-consumer: true aliyun: oss: diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index f8d251e..4389c64 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -2,7 +2,7 @@ <configuration> <contextName>logback</contextName> <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --> - <property name="log.path" value="/home/javaweb/log/new-excoin" /> + <property name="log.path" value="logs" /> <!-- <springProperty scope="context" name="log.path" source="logging.file.path"/>--> <!-- 彩色日志 --> -- Gitblit v1.9.1