public async Task <IActionResult> SyncOrders([FromBody] SyncOrdersViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            await _tradingOrderService.SyncOrders(model);

            return(Ok(model));
        }
示例#2
0
        public async Task SyncOrders(SyncOrdersViewModel model)
        {
            var orderTickets = model.Orders.Select(x => x.OrderTicket);
            var orderSource  = model.Orders.Select(x => x.Source);

            var orders = await _repo
                         .All()
                         .Where(x => orderTickets.Contains(x.OrderTicket) && orderSource.Contains(x.Source))
                         .ToListAsync();

            foreach (var reqeustOrder in model.Orders)
            {
                var currOrder = orders.FirstOrDefault(x => x.OrderTicket == reqeustOrder.OrderTicket);

                if (currOrder != null)
                {
                    currOrder.OrderTicket = reqeustOrder.OrderTicket;
                    //currOrder.Status = reqeustOrder.Status;
                    currOrder.OrderSymbol     = reqeustOrder.OrderSymbol;
                    currOrder.OrderOpenPrice  = reqeustOrder.OrderOpenPrice;
                    currOrder.OrderTakeProfit = reqeustOrder.OrderTakeProfit;
                    currOrder.OrderStopLoss   = reqeustOrder.OrderStopLoss;
                    currOrder.OrderOpenTime   = reqeustOrder.OrderOpenTime;
                    currOrder.OrderCloseTime  = reqeustOrder.OrderCloseTime;
                    currOrder.OrderExpiration = reqeustOrder.OrderExpiration;
                    currOrder.OrderProfit     = reqeustOrder.OrderProfit;
                    currOrder.OrderLots       = reqeustOrder.OrderLots;
                    currOrder.OrderType       = reqeustOrder.OrderType;
                    currOrder.OrderCommission = reqeustOrder.OrderCommission;
                    currOrder.OrderSwap       = reqeustOrder.OrderSwap;
                    currOrder.Source          = reqeustOrder.Source;
                }
                else
                {
                    var newOrder = new TradingOrder()
                    {
                        OrderTicket     = reqeustOrder.OrderTicket,
                        Status          = "active",//reqeustOrder.Status,
                        OrderSymbol     = reqeustOrder.OrderSymbol,
                        OrderOpenPrice  = reqeustOrder.OrderOpenPrice,
                        OrderTakeProfit = reqeustOrder.OrderTakeProfit,
                        OrderStopLoss   = reqeustOrder.OrderStopLoss,
                        OrderOpenTime   = reqeustOrder.OrderOpenTime,
                        OrderCloseTime  = reqeustOrder.OrderCloseTime,
                        OrderExpiration = reqeustOrder.OrderExpiration,
                        OrderProfit     = reqeustOrder.OrderProfit,
                        OrderLots       = reqeustOrder.OrderLots,
                        OrderType       = reqeustOrder.OrderType,
                        OrderCommission = reqeustOrder.OrderCommission,
                        OrderSwap       = reqeustOrder.OrderSwap,
                        Source          = reqeustOrder.Source,
                    };

                    _repo.Add(newOrder);
                }
            }

            // update missing as deleted
            var missingOrders = await _repo
                                .All()
                                .Where(x => orderSource.Contains(x.Source) && !orderTickets.Contains(x.OrderTicket) && x.Status == "active")
                                .ToListAsync();

            missingOrders.ForEach(x => x.Status = "closed");

            await _repo.SaveChangesAsync();
        }