Beispiel #1
0
 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");
         }
     }
 }
Beispiel #2
0
 public static string ToJson(this TopTenShareholderJsonParser self) => JsonConvert.SerializeObject(self, Converter.Settings);
Beispiel #3
0
        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");
                }
            }
        }