示例#1
0
        public void ExecuteTask()
        {
            try
            {
                if ((ConfigurationManager.AppSettings["StockDataAllowance"] ?? "") != "TRUE") return;
                //log.WriteEntry("Start Stock 1 : " + index, EventLogEntryType.Information);
                var bfirstTime = true;
                Thread.Sleep((index - 1) * 1000);
                var sql = new SqlDb();
                while (ServiceStarted)
                {
                    try
                    {
                        //log.WriteEntry(index + "-start-", EventLogEntryType.Information);
                        if (!bfirstTime) Thread.Sleep(interval);
                        bfirstTime = false;
                        //log.WriteEntry("Start Stock 2 : " + index, EventLogEntryType.Information);
                        var sdt = sql.GetStockUpdate();
                        //log.WriteEntry("Start Stock 2 : " + index + " : " + sdt.Rows.Count, EventLogEntryType.Information);
                        if (sdt.Rows.Count == 0) continue;
                        var symbols = new List<string>();
                        foreach (DataRow sdr in sdt.Rows)
                        {
                            var ts = sdr["Symbol"].ToString().ToUpper();
                            if (symbols.Contains(ts)) continue;
                            symbols.Add(ts);
                        }
                        foreach (var symbol in symbols)
                        {
                            //var symbol = sdt.Rows[0]["Symbol"].ToString().ToUpper();
                            var relobj = new List<string>();
                            var rellst = new List<string>();
                            var relutp = new List<string>();

                            var ids = "";
                            var success = true;
                            //log.WriteEntry(symbol + Environment.NewLine, EventLogEntryType.Information);
                            foreach (DataRow sdr in sdt.Rows)
                            {
                                if (symbol != sdr["Symbol"].ToString().ToUpper()) continue;
                                var related = sdr["RelatedObject"].ToString().ToUpper().Split(',');
                                var updateType = sdr["UpdateType"].ToString().ToUpper();
                                foreach (var s in related)
                                {
                                    if (!relobj.Contains(s)) relobj.Add(s);
                                    if (!s.StartsWith("S"))  //nếu là danh sách
                                    {
                                        if (!rellst.Contains(s)) { rellst.Add(s); relutp.Add(updateType); }
                                        //if (!UpdateList(symbol, s, updateType)) success = false;
                                    }
                                }
                                ids += sdr["UpdateId"].ToString() + ",";
                            }
                            //log.WriteEntry(ids + "-" + success + "-" + relobj.Count, EventLogEntryType.Information);
                            sql.OpenDb();
                            if (relobj.Count > 0)  //update mã
                            {
                                //log.WriteEntry("Update stock - " + symbol + "-" + relobj[0], EventLogEntryType.Information);
                                if (!UpdateStock(symbol, relobj, ref sql)) success = false;
                            }
                            for (var i = 0; i < rellst.Count; i++)
                            {
                                if (!UpdateList(symbol, rellst[i], relutp[i], ref sql)) success = false;
                            }
                            //log.WriteEntry("Start Stock 3 : " + index + " : " + symbol + " : " + ids, EventLogEntryType.Information);
                            if (success && !string.IsNullOrEmpty(ids))
                            {
                                sql.UpdateStockMonitor(ids);
                            }
                            sql.CloseDb();
                        }

                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(ex.ToString(), EventLogEntryType.Error);
                    }

                }
            }
            catch (Exception ex)
            {
                log.WriteEntry(ex.ToString(), EventLogEntryType.Error);
            }
            finally
            {
                Thread.CurrentThread.Abort();
            }
        }