private void BackgroundProcess(bool testMode) { const string autoProcessSellordersQuery = @" SELECT sellorders.marketitemid so_id, sellorders.marketeid so_market,sellorders.price so_price,sellorders.quantity so_qty, buyorders.marketitemid bo_id, buyorders.quantity bo_qty, buyorders.price bo_price, buyorders.submitted bo_submit FROM marketitems sellorders JOIN marketitems buyorders ON sellorders.itemdefinition=buyorders.itemdefinition AND sellorders.marketeid=buyorders.marketeid WHERE sellorders.isvendoritem=0 AND sellorders.isSell=1 AND buyorders.isvendoritem=0 AND buyorders.isSell=0 AND sellorders.submittereid != buyorders.submittereid AND buyorders.price >= sellorders.price AND COALESCE(sellorders.formembersof,0) = COALESCE(buyorders.formembersof,0) ORDER BY bo_price DESC, so_price ASC, bo_submit ASC "; //this one buys from the same character const string autoProcessSellordersQueryTest = @" SELECT sellorders.marketitemid so_id, sellorders.marketeid so_market,sellorders.price so_price,sellorders.quantity so_qty, buyorders.marketitemid bo_id, buyorders.quantity bo_qty, buyorders.price bo_price, buyorders.submitted bo_submit FROM marketitems sellorders JOIN marketitems buyorders ON sellorders.itemdefinition=buyorders.itemdefinition AND sellorders.marketeid=buyorders.marketeid WHERE sellorders.isvendoritem=0 AND sellorders.isSell=1 AND buyorders.isvendoritem=0 AND buyorders.isSell=0 AND buyorders.price >= sellorders.price AND COALESCE(sellorders.formembersof,0) = COALESCE(buyorders.formembersof,0) ORDER BY bo_price DESC, so_price ASC, bo_submit ASC "; try { var q = testMode ? autoProcessSellordersQueryTest : autoProcessSellordersQuery; var records = Db.Query().CommandText(q).Execute(); Logger.Info("found " + records.Count + " market orders to process for price matching."); var count = 0; foreach (var record in records) { var sellOrderId = record.GetValue <int>("so_id"); var buyOrderId = record.GetValue <int>("bo_id"); var sellOrder = _marketOrderRepository.Get(sellOrderId); var buyOrder = _marketOrderRepository.Get(buyOrderId); if (sellOrder == null || buyOrder == null) { continue; } using (var scope = Db.CreateTransaction()) { try { Market.AutoProcessSellorders(sellOrder, buyOrder); scope.Complete(); count++; } catch (Exception ex) { Logger.Error("error in AutoProcessSellorders"); Logger.Exception(ex); } } } Logger.Info(count + " market orders were affected in price matching."); } catch (Exception ex) { Logger.Info("error occured in LoadMatchingOrders"); Logger.Exception(ex); } }