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 { 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"; 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("委托成功"); 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)); 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)); } // 扣除手续费 src/main/java/com/xcong/excoin/quartz/job/NewestPriceUpdateJob.java
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 { @@ -32,8 +34,10 @@ 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()); log.info("--->>>>{}", queue.peek().getValue()); while (queue.peek() != null && queue.peek().compareTo(now) <= 0) { // 可以发送消息操作 list.add(queue.remove()); @@ -57,12 +61,15 @@ // 找到比当前价格还大的就是需要操作的 开多止损 // 即最大的币当前价大 那么需要开多止损 if (b != null && b.compareTo(now) <= 0) { log.info("--->{}", b.getValue()); // 可以操作 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)){ @@ -79,16 +86,20 @@ 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(); log.info("------>>>>>{}", key); assert orderMap != null; log.info("======={}", orderMap.containsKey(key)); if(orderMap.containsKey(key)){ orderModelList.addAll(orderMap.get(key)); orderMap.remove(key); } } log.info("{}", orderModelList); if(CollectionUtils.isEmpty(orderModelList)){ return; } @@ -98,34 +109,29 @@ // 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; } @@ -143,7 +149,6 @@ } if(CollectionUtils.isNotEmpty(wtkkList)){ orderProducer.sendLimit(JSONObject.toJSONString(wtkkList)); } } } @@ -156,9 +161,13 @@ // 根据不同类型发送不同消息 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(); log.info("------>>>>>{}", key); assert orderMap != null; log.info("======={}", orderMap.containsKey(key)); if(orderMap.containsKey(key)){ orderModelList.addAll(orderMap.get(key)); orderMap.remove(key); @@ -166,6 +175,7 @@ } log.info("{}", orderModelList); if(CollectionUtils.isEmpty(orderModelList)){ return; } @@ -175,35 +185,29 @@ // 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; } // 发送消息 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: 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"/>--> <!-- 彩色日志 -->