Files
StockInfoCoreApp/StockDAL/StockMarketRepository.cs
2022-02-22 20:46:02 +01:00

282 lines
10 KiB
C#

using Newtonsoft.Json;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using StockDal.Interface;
using DataDomain;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Diagnostics;
using StockDAL.Interface;
using BrowserHelper.Driver;
using BrowserHelper.Settings;
using Helpers;
namespace StockDal
{
public class StockMarketRepository : IStockMarketRepository
{
public Dictionary<string, DiTraderStockRow> StockMarketList { get; set; }
public List<DiTraderStockRow> DumpObjects { get; set; } = new List<DiTraderStockRow>();
public DiTraderStockRow SaveRow { get; set; }
public StringBuilder TextResults { get; set; }
//public bool ViewBrowser { get; set; }
// public IWebDriver driver;
private readonly IStockPersonConnect _stockPersonConnect;
private readonly IStockRepository _stockRepository;
private readonly TestSettings _testSettings;
private readonly IStockScrapePage _scrapePage;
public StockMarketRepository(
IStockPersonConnect stockPersonConnect,
IStockRepository stockRepository,
TestSettings testSettings,
IStockScrapePage scrapePage)
{
// ViewBrowser = false;
_stockPersonConnect = stockPersonConnect;
_stockRepository = stockRepository;
_testSettings = testSettings;
_scrapePage = scrapePage;
}
private void SaveLogging()
{
var output = JsonConvert.SerializeObject(DumpObjects, Formatting.Indented);
Assembly assem = typeof(StockMarketRepository).Assembly;
var programPath = assem.Location.Substring(0, assem.Location.LastIndexOf("\\"));
var logPath = new DirectoryInfo(programPath + "\\Loggings");
if (!logPath.Exists)
{
logPath.Create();
}
File.WriteAllText($"{programPath}\\Loggings\\Log{DateTime.Now.ToShortDateString()}.txt", output);
}
private void saveStockData(List<DiTraderStockRow> saveRow)
{
foreach (var row in saveRow)
{
try
{
StockMarketList.Add(row.StockName, row);
}
catch (ArgumentException)
{
try
{
StockMarketList.Add(row.StockName + "-2", row);
}
catch (Exception)
{
DumpObjects.Add(row);
}
}
//break;
}
}
public void LoadStockMarketList(int persId)
{
StockMarketList = new Dictionary<string, DiTraderStockRow>();
DumpObjects = new List<DiTraderStockRow>();
var groupedStocks = persId == 0 ? _stockRepository.GetStocksGroupedAllPersons()
: _stockRepository.GetStocksGroupedPerPerson(persId);
var lastGroup = string.Empty;
var stockList = new List<string>();
foreach (var groupedStock in groupedStocks)
{
if (groupedStock.StockGroup != lastGroup)
{
if (lastGroup != string.Empty)
{
_testSettings.StockWishes = stockList.ToArray();
if (lastGroup == "ZNotFound")
foreach (var stk in stockList)
{
saveStockData(new List<DiTraderStockRow>(_scrapePage.SearchStockAndCollect(stk.Substring(0, 4))));
}
else
saveStockData(_scrapePage.GetMyStockStatus(lastGroup));
stockList.Clear();
lastGroup = groupedStock.StockGroup;
}
else
{
lastGroup = groupedStock.StockGroup;
}
stockList.Add(groupedStock.StockId);
}
else
{
stockList.Add(groupedStock.StockId);
}
}
if (stockList.Count > 0)
{
_testSettings.StockWishes = stockList.ToArray();
if (lastGroup == "ZNotFound")
foreach (var stk in stockList)
{
saveStockData(new List<DiTraderStockRow>(_scrapePage.SearchStockAndCollect(stk.Substring(0, 4))));
}
else
saveStockData(_scrapePage.GetMyStockStatus(lastGroup));
stockList.Clear();
}
if (DumpObjects.Any())
{
SaveLogging();
}
}
public async Task LoadStockMarketListAsync(int persId)
{
StockMarketList = new Dictionary<string, DiTraderStockRow>();
DumpObjects = new List<DiTraderStockRow>();
var groupedStocks = persId == 0 ? _stockRepository.GetStocksGroupedAllPersons()
: _stockRepository.GetStocksGroupedPerPerson(persId);
//var tasks = new List<Task<List<DiTraderStockRow>>>();
var lastGroup = string.Empty;
var stockList = new List<string>();
foreach (var groupedStock in groupedStocks)
{
if (groupedStock.StockGroup != lastGroup)
{
if (lastGroup != string.Empty)
{
_testSettings.StockWishes = stockList.ToArray();
if (lastGroup == "ZNotFound")
foreach (var stk in stockList)
{
//saveStockData(new List<DiTraderStockRow>(_scrapePage.SearchStockAndCollect(stk.Substring(0, 4))));
//tasks.Add( Task.Run(() => new List<DiTraderStockRow>(_scrapePage.SearchStockAndCollect(stk.Substring(0, 4)))));
saveStockData(await Task.Run(() => new List<DiTraderStockRow>(_scrapePage.SearchStockAndCollect(stk.Substring(0, 4)))));
}
else
{
//saveStockData(_scrapePage.GetMyStockStatus(lastGroup));
//tasks.Add(Task.Run(() => _scrapePage.GetMyStockStatus(lastGroup)));
saveStockData(await Task.Run(() => _scrapePage.GetMyStockStatus(lastGroup)));
}
stockList.Clear();
lastGroup = groupedStock.StockGroup;
}
else
{
lastGroup = groupedStock.StockGroup;
}
stockList.Add(groupedStock.StockId);
}
else
{
stockList.Add(groupedStock.StockId);
}
}
if (stockList.Count > 0)
{
_testSettings.StockWishes = stockList.ToArray();
if (lastGroup == "ZNotFound")
foreach (var stk in stockList)
{
//saveStockData(new List<DiTraderStockRow>(_scrapePage.SearchStockAndCollect(stk.Substring(0, 4))));
//tasks.Add(Task.Run(() => new List<DiTraderStockRow>(_scrapePage.SearchStockAndCollect(stk.Substring(0, 4)))));
saveStockData(await Task.Run(() => new List<DiTraderStockRow>(_scrapePage.SearchStockAndCollect(stk.Substring(0, 4)))));
}
else
//saveStockData(_scrapePage.GetMyStockStatus(lastGroup));
//tasks.Add(Task.Run(() => _scrapePage.GetMyStockStatus(lastGroup)));
saveStockData(await Task.Run(() => _scrapePage.GetMyStockStatus(lastGroup)));
stockList.Clear();
}
//var results = await Task.WhenAll(tasks);
//foreach(var result in results)
//{
// saveStockData(result);
//}
if (DumpObjects.Any())
{
SaveLogging();
}
}
public DiTraderStockRow LoadStockMarketStockData(string searchedStock)
{
var groupedStocks = _stockRepository.GetGroupedStock(searchedStock);
var lastGroup = string.Empty;
var stockList = new List<string>();
var output = new List<DiTraderStockRow>();
foreach (var groupedStock in groupedStocks)
{
if (groupedStock.StockGroup != lastGroup)
{
if (lastGroup != string.Empty)
{
_testSettings.StockWishes = stockList.ToArray();
if (lastGroup == "ZNotFound")
foreach (var stk in stockList)
{
output = _scrapePage.SearchStockAndCollect(stk.Substring(0, 4));
}
else
output = _scrapePage.GetMyStockStatus(lastGroup);
stockList.Clear();
lastGroup = groupedStock.StockGroup;
}
else
{
lastGroup = groupedStock.StockGroup;
}
stockList.Add(groupedStock.StockId);
}
else
{
stockList.Add(groupedStock.StockId);
}
}
if (stockList.Count > 0)
{
_testSettings.StockWishes = stockList.ToArray();
if (lastGroup == "ZNotFound")
foreach (var stk in stockList)
{
output = _scrapePage.SearchStockAndCollect(stk.Substring(0, 4));
}
else
output = _scrapePage.GetMyStockStatus(lastGroup);
stockList.Clear();
}
return output[0];
}
}
}