Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
顺序匹配序列与Java+;弹簧&x2B;蒙戈_Java_Spring_Mongodb_Spring Mvc_Trading - Fatal编程技术网

顺序匹配序列与Java+;弹簧&x2B;蒙戈

顺序匹配序列与Java+;弹簧&x2B;蒙戈,java,spring,mongodb,spring-mvc,trading,Java,Spring,Mongodb,Spring Mvc,Trading,我已经开发了一个订单匹配服务,它是功能性的(暂存服务器)。执行命令的逻辑实现工作正常 但有一个小问题困扰了我和我的同事将近一个月。要更详细地解释它,请参见下面的订单簿示例: Buy Side Qty 1 Price 3 Qty 1 Price 2 Qty 1 Price 1 这些是买方的现有订单。现在,如果一个卖家来下了3 Qty@Price 1/的销售订单-所有三个采购订单都应该执行 这个功能运行得非常好。问题在于执行顺序。理想情况下,代码应该首先将订单与价格

我已经开发了一个订单匹配服务,它是功能性的(暂存服务器)。执行命令的逻辑实现工作正常

但有一个小问题困扰了我和我的同事将近一个月。要更详细地解释它,请参见下面的订单簿示例:

    Buy Side
    Qty 1 Price 3
    Qty 1 Price 2
    Qty 1 Price 1
这些是买方的现有订单。现在,如果一个卖家来下了3 Qty@Price 1/的销售订单-所有三个采购订单都应该执行

这个功能运行得非常好。问题在于执行顺序。理想情况下,代码应该首先将订单与价格3、2、1匹配

但它是以相反的顺序执行的。正因为如此,最新价格也出现了错误,净变化和净增长率也出现了错误。这个序列在很多地方都有影响

不可能发布整个代码,因此我将发布我认为有问题的部分代码

    if (matchOrderRequest.getOrderType() == OrderType.BUY) {
    optionalMatchOrder=orderRepository.findTopByMarketAndOrderTypeAndPriceLessThanEqualOrderByPriceAscTimestampAsc(request.getMarket(), OrderType.SELL, request.getPrice());
    } 

    else {

    optionalMatchOrder = 
    orderRepository.findTopByMarketAndOrderTypeAndPriceGreaterThanEqualOrderByPriceDescTimestampAsc(request.getMarket(),OrderType.BUY,request.getPrice());

    }

    if (optionalMatchOrder.isPresent()) {

    executedOrder.setOrderId(request.getOrderId());
订单存储库(Mongo查询):

import org.springframework.data.domain.Sort;
导入org.springframework.data.repository.crudepository;
导入org.springframework.stereotype.Repository;
导入org.springframework.transaction.annotation.Transactional;
导入java.math.BigDecimal;
导入java.util.Optional;
@存储库
公共接口OrderRepository扩展了Crudepository{
可选FindTopByMarkets和DerTypes,价格高于EqualOrderByPriceAsctimesTampasc(市场、订单类型、订单类型、大十进制);
可选的FindTopByMarketandDerTypeandPrice大于EqualOrderByPriceDescTimestamasc(市场,订单类型OrderType,BigDecimal-BigDecimal);

也发布您的mongo查询。使用存储库代码更新问题。有人需要我的帮助吗???也发布您的mongo查询。使用存储库代码更新问题。有人需要我的帮助吗???
    import org.springframework.data.domain.Sort;
    import org.springframework.data.repository.CrudRepository;
    import org.springframework.stereotype.Repository;
    import org.springframework.transaction.annotation.Transactional;

    import java.math.BigDecimal;
    import java.util.Optional;

    @Repository
    public interface OrderRepository extends CrudRepository<MatchOrder, Long> {


Optional<MatchOrder> findTopByMarketAndOrderTypeAndPriceGreaterThanEqualOrderByPriceAscTimestampAsc(Market market, OrderType orderType, BigDecimal bigDecimal);


Optional<MatchOrder> findTopByMarketAndOrderTypeAndPriceGreaterThanEqualOrderByPriceDescTimestampAsc(Market market, OrderType orderType, BigDecimal bigDecimal);