public void ManuallyFetchTopTenShareholder(IProgress <double> progress, string stockCode, string rawTopTenShareHolder) { lock (lockObject) { try { TopTenShareholderJsonPackage package = TopTenShareholderJsonParser.FromJson(DataCollector.JsonEscape(rawTopTenShareHolder)); int dataCount = 0; foreach (Sdltgd sdltgdItem in package.Sdltgd) { dataCount += sdltgdItem.SdltgdSdltgd.Length; } int i = 0; foreach (Sdltgd sdltgdItem in package.Sdltgd) { foreach (Dictionary <String, string> sdltgd in sdltgdItem.SdltgdSdltgd) { DatabaseHelper.UpdateTopTenStockholder(stockCode, sdltgd); i++; progress.Report(100.0 * i / dataCount); } } } catch (Exception ex) { SystemSetting.LogAndDisplayError(ex, "MainForm.cs, line 102"); } } }
public static string ToJson(this TopTenShareholderJsonParser self) => JsonConvert.SerializeObject(self, Converter.Settings);
public void FetchTopTenShareholder(IProgress <double> progress) { lock (lockObject) { try { var fileDir = SystemSetting.downloadJsonDir + "topten.tmp"; int dataCount = DatabaseHelper.Get006030StockRecordCount("stockList"); var topTenShareholderList = new Dictionary <string, TopTenShareholderJsonPackage>(); var jsonCollection = new StringBuilder(dataCount); var stockCodeTemp = ""; int i = 0; if (File.Exists(fileDir)) { var rawJsonList = File.ReadAllLines(fileDir); foreach (var record in rawJsonList) { i++; var line = record.Split(new string[] { "|||" }, StringSplitOptions.None); var stockCode = line[0]; var rawTopTenShareHolder = line[1]; var package = TopTenShareholderJsonParser.FromJson(rawTopTenShareHolder); topTenShareholderList.Add(stockCode, package); progress.Report(50.0 * i / dataCount); Console.WriteLine($"{i}:{stockCode} --- {rawTopTenShareHolder}"); } } else { try { var reader = DatabaseHelper.GetAll006030StockRecords("stockList"); var stockCodeList = new List <string>(); while (reader.Read()) { stockCodeList.Add(reader[1].ToString()); } if (stockCodeList.Any()) { foreach (var stockCode in stockCodeList) { i++; stockCodeTemp = stockCode; //var dataCollector = new DataCollector(); //var rawTopTenShareHolder // = JsonEscape(dataCollector.GetHttpResponse(SystemSetting.rootUrlOfTopTenShareHolder + stockCode, false).Result); var rawTopTenShareHolder = HttpRequestWithRetryTimes(SystemSetting.rootUrlOfTopTenShareHolder + stockCode, 3); if (rawTopTenShareHolder != "!!error!!") { var package = TopTenShareholderJsonParser.FromJson(rawTopTenShareHolder); topTenShareholderList.Add(stockCode, package); jsonCollection.AppendLine($"{stockCode}|||{rawTopTenShareHolder}"); } else { } progress.Report(50.0 * i / dataCount); Console.WriteLine($"{i}:{stockCode} --- {rawTopTenShareHolder}"); Thread.Sleep(200); } } } catch (Exception ex) { SystemSetting.LogAndDisplayError(ex, $"{stockCodeTemp} MainForm.cs, line 96"); return; } if (jsonCollection.Length > 0) { File.WriteAllText(fileDir, jsonCollection.ToString()); } } try { i = 0; if (topTenShareholderList.Any()) { //DatabaseHelper.CreateIndexOnTable("topTenStockholder", "IdxTenShareHolder", new string[] { "stockCode", "shareholderName" }); DatabaseHelper.OptimizationBegin(); foreach (var dicPackage in topTenShareholderList) { i++; var stockCode = dicPackage.Key; var package = dicPackage.Value; if (package == null) { } stockCodeTemp = stockCode; var sdltgdList = package.Sdltgd.SelectMany(p => p.SdltgdSdltgd).ToArray(); foreach (var sdltgd in sdltgdList /*sdltgdItem.SdltgdSdltgd*/) { try { DatabaseHelper.UpdateTopTenStockholder(stockCode, sdltgd); Console.WriteLine($"{i}/{dataCount} - {sdltgd["rq"]}:{stockCode} --- {sdltgd["gdmc"]}"); } catch (Exception ex) { SystemSetting.LogAndDisplayError(ex, $"{stockCodeTemp} MainForm.cs, line 460"); } } progress.Report(50.0 * i / dataCount + 50); } DatabaseHelper.OptimizationEnd(); } } catch (Exception ex) { SystemSetting.LogAndDisplayError(ex, $"{stockCodeTemp} MainForm.cs, line 464"); return; } if (File.Exists(fileDir)) { File.Delete(fileDir); } } catch (Exception ex) { SystemSetting.LogAndDisplayError(ex, "MainForm.cs, line 102"); } } }