282 lines
10 KiB
C#
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];
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|