Exemplo n.º 1
0
        public void ProcessRequest(HttpContext context)
        {

            var land = (context.Request["land"] ?? "").ToLower() == "true";
            var image = context.Request["image"] ?? "";
            var width = context.Request["width"] ?? "0";
            var height = context.Request["height"] ?? "0";
            var redis = new RedisClient(ConfigurationManager.AppSettings["ServerRedisMaster"] ?? "", int.Parse(ConfigurationManager.AppSettings["PortRedisMaster"] ?? "0"));
            
            var key = string.Format("storage:imagehandler:{0}", image);
            var done = (redis.ContainsKey(key) && !string.IsNullOrEmpty(redis.Get<string>(key) ?? ""));
            var noimage = ConfigurationManager.AppSettings["StorageNoImage"] ?? "Common/CEO/noimage.jpg";
            //var file = ConfigurationManager.AppSettings["StorageNoImage"] ?? "Common/CEO/noimage.jpg";
            var imgPath = ConfigurationManager.AppSettings["imgPath"] ?? "http://images1.cafef.vn/";
            var storageServer = ConfigurationManager.AppSettings["StorageServer"] ?? "http://testcafef.vcmedia.vn/";
            string imageSrc = storageServer + noimage;
            if (!done)
            {

                if (!string.IsNullOrEmpty(image))
                {
                    imgPath += (land ? "batdongsan/" : "");
                    if (image.StartsWith(imgPath) && StorageUtils.Utils.checkImageExtension(image))
                    {
                        if (StorageUtils.Utils.UploadSiteImage(image, imgPath, (land ? "Common/BDS/" : "")) == "Storage : OK")
                        {
                            //file = image.Replace(imgPath, "");

                        }
                    }
                }

                int iw, ih;
                if (!int.TryParse(width, out iw)) iw = 0;
                if (!int.TryParse(height, out ih)) ih = 0;

                imageSrc = image.Contains(imgPath) ? image : (imgPath + image); //GetStorageImage(file, iw, ih, land);

                if (!CheckFileExist(imageSrc))
                {
                    imageSrc = storageServer + noimage;
                }
                if (redis.ContainsKey(key))
                    redis.Set(key, imageSrc, new TimeSpan(0, 5, 0));
                else
                    redis.Add(key, imageSrc, new TimeSpan(0, 5, 0));
            }
            else
            {
                imageSrc = redis.Get<string>(key) ?? (storageServer + noimage);
            }

            context.Response.ContentType = StorageUtils.Utils.MimeType(imageSrc);
            context.Response.Redirect(imageSrc);
            //context.Response.BinaryWrite(StorageUtils.Utils.GetFileBinary("", imageSrc));
        }
Exemplo n.º 2
0
 private void button2_Click(object sender, EventArgs e)
 {
     var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
     var id = "58231";
     var compactkey = string.Format(RedisKey.KeyCompanyNewsCompact, id);
     if (redis.ContainsKey(compactkey))
         redis.Remove(compactkey);
     var detailkey = string.Format(RedisKey.KeyCompanyNewsDetail, id);
     if (redis.ContainsKey(detailkey))
         redis.Remove(detailkey);
 }
Exemplo n.º 3
0
        private void button1_Click(object sender, EventArgs e)
        {
            //var ls = GetTopBCTC("SSI", "BSheet", 2011, 1, 4);
            var log = new LogUtils(LogType.TextLog, true, AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"log\");
            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);

            var symbols = SqlDb.GetBCTCSymbols();
            textBox1.Text = "Begin : " + DateTime.Now.ToString() + Environment.NewLine;
            var types = new List<string>() {"IncSta", "BSheet", "CashFlow", "CashFlowDirect"};
            foreach (DataRow dr in symbols.Rows)
            {
                var symbol = dr["Symbol"].ToString();
                //if(symbol!="SSI") continue;
                textBox1.Text += symbol + ",";
               log.WriteEntry(symbol + ",", EventLogEntryType.Warning);
                for(var year = 2005; year <= 2011; year++)
                {
                    for(var quarter = 0; quarter<=4; quarter++)
                    {
                        if(year==2011 && quarter!= 1) continue;
                        foreach (var type in types)
                        {
                            var o = GetBCTC(symbol, type, year, quarter);
                            if(o==null) continue;
                            var key = string.Format(RedisKey.BCTCKey, symbol.ToUpper(), type.ToUpper(), quarter == 0 ? 0 : 1, year, quarter);
                            if (redis.ContainsKey(key))
                                redis.Set(key, o);
                            else
                                redis.Add(key, o);
                            Thread.Sleep(1000);
                        }
                    }
                }
            }
            textBox1.Text += "End : " + DateTime.Now.ToString() + Environment.NewLine;
            
        }
Exemplo n.º 4
0
        private void button6_Click(object sender, EventArgs e)
        {
            var symbol = "PTC";

            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
            var keylist = string.Format(RedisKey.InternalHistoryKeys, symbol);
            //var ls = redis.ContainsKey(keylist) ? redis.Get<List<String>>(keylist) : new List<string>();
            var ls = new List<string>();

            var pdt = SqlDb.GetInternalHistory(symbol, -1);
            foreach (DataRow pdr in pdt.Rows)
            {
                var key = string.Format(RedisKey.InternalHistory, symbol, (((DateTime?)pdr["NgayThongBao"]) ?? DateTime.Now).ToString("yyyyMMdd"), pdr["ID"], pdr["ShareHolder_ID"]);

                var order = new InternalHistory() { Stock = symbol, TransactionMan = pdr["FullName"].ToString(), TransactionManPosition = pdr["ChucVu"].ToString(), RelatedMan = pdr["NguoiLienQuan"].ToString(), RelatedManPosition = pdr["ChucVuNguoiLienQuan"].ToString(), VolumeBeforeTransaction = double.Parse(pdr["SLCPTruocGD"].ToString()), PlanBuyVolume = double.Parse(pdr["DangKy_Mua"].ToString()), PlanSellVolume = double.Parse(pdr["DangKy_Ban"].ToString()), PlanBeginDate = pdr["DangKy_TuNgay"].Equals(DBNull.Value) ? null : (DateTime?)pdr["DangKy_TuNgay"], PlanEndDate = pdr["DangKy_DenNgay"].Equals(DBNull.Value) ? null : (DateTime?)pdr["DangKy_DenNgay"], RealBuyVolume = double.Parse(pdr["ThucHien_Mua"].ToString()), RealSellVolume = double.Parse(pdr["ThucHien_Ban"].ToString()), RealEndDate = pdr["ThucHien_NgayKetThuc"].Equals(DBNull.Value) ? null : (DateTime?)pdr["ThucHien_NgayKetThuc"], PublishedDate = pdr["NgayThongBao"].Equals(DBNull.Value) ? null : (DateTime?)pdr["NgayThongBao"], VolumeAfterTransaction = double.Parse(pdr["SLCPSauGD"].ToString()), TransactionNote = pdr["GhiChu"].ToString() };
                if (redis.ContainsKey(key))
                    redis.Set<InternalHistory>(key, order);
                else
                    redis.Add<InternalHistory>(key, order);

                if (!ls.Contains(key)) ls.Add(key);
            }
            ls.Sort();
            ls.Reverse();
            if (redis.ContainsKey(keylist))
                redis.Set<List<string>>(keylist, ls);
            else
                redis.Add<List<string>>(keylist, ls);

            var test = redis.Get<List<string>>(keylist);
        }
Exemplo n.º 5
0
        private void button7_Click(object sender, EventArgs e)
        {
            var symbol = "SSI";

            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
            var keylist = string.Format(RedisKey.FundHistoryKeys, "SSI");
            var ls = redis.ContainsKey(keylist) ? redis.Get<List<String>>(keylist) : new List<string>();

            var pdt = SqlDb.GetFundHistory(symbol, -1);
            foreach (DataRow pdr in pdt.Rows)
            {
                var key = string.Format(RedisKey.FundHistory, "SSI", ((DateTime)pdr["TradingDate"]).ToString("yyyyMMdd"));

                var order = new FundHistory() { Symbol = symbol, TradeDate = (DateTime)pdr["TradingDate"], TransactionType = pdr["Buy_Sale"].ToString() == "s" ? "Bán" : "Mua", PlanVolume = double.Parse(pdr["RegisteredVol"].ToString()), TodayVolume = double.Parse(pdr["TodayTradingVol"].ToString()), AccumulateVolume = double.Parse(pdr["AccumVol"].ToString()), ExpiredDate = (DateTime)pdr["ExpireDate"] };
                if (redis.ContainsKey(key))
                    redis.Set<FundHistory>(key, order);
                else
                    redis.Add<FundHistory>(key, order);

                if (!ls.Contains(key)) ls.Add(key);
            }
            ls.Sort();
            ls.Reverse();
            if (redis.ContainsKey(keylist))
                redis.Set<List<string>>(keylist, ls);
            else
                redis.Add<List<string>>(keylist, ls);

            var test = redis.Get<List<string>>(keylist);
        }
Exemplo n.º 6
0
        public void UpdateBoxHangHoa()
        {
            try
            {
                if ((ConfigurationManager.AppSettings["ProductBoxAllowance"] ?? "") != "TRUE")
                {
                    return;
                }
                var tabVN = new List<string>() { ChiTieuCrawler.TabVietnam.VangTheGioi, ChiTieuCrawler.TabVietnam.VangSJC, ChiTieuCrawler.TabVietnam.USDSIN, ChiTieuCrawler.TabVietnam.USDHKD, ChiTieuCrawler.TabVietnam.CNY, ChiTieuCrawler.TabVietnam.BangAnh, ChiTieuCrawler.TabVietnam.USDVCB, ChiTieuCrawler.TabVietnam.EURVCB }; /*, ChiTieuCrawler.TabVietnam.USDtudo, ChiTieuCrawler.TabVietnam.EURtudo*/
                var tabTG = new List<string>() { ChiTieuCrawler.TabTheGioi.USDIndex, ChiTieuCrawler.TabTheGioi.DowJones, ChiTieuCrawler.TabTheGioi.Nasdaq, ChiTieuCrawler.TabTheGioi.SP500, ChiTieuCrawler.TabTheGioi.FTSE100, ChiTieuCrawler.TabTheGioi.DAX, ChiTieuCrawler.TabTheGioi.Nikkei225, ChiTieuCrawler.TabTheGioi.HangSeng, ChiTieuCrawler.TabTheGioi.StraitTimes };
                var tabHH = new List<string>() { ChiTieuCrawler.TabHangHoa.CrudeOil, ChiTieuCrawler.TabHangHoa.NaturalGas, ChiTieuCrawler.TabHangHoa.Gold, ChiTieuCrawler.TabHangHoa.Copper, ChiTieuCrawler.TabHangHoa.Silver, ChiTieuCrawler.TabHangHoa.Corn, ChiTieuCrawler.TabHangHoa.Sugar, ChiTieuCrawler.TabHangHoa.Coffee, ChiTieuCrawler.TabHangHoa.Cotton, ChiTieuCrawler.TabHangHoa.RoughRice, ChiTieuCrawler.TabHangHoa.Wheat, ChiTieuCrawler.TabHangHoa.Soybean, ChiTieuCrawler.TabHangHoa.Ethanol };
                var tabMobile = new List<string>() { ChiTieuCrawler.TabMobile.VangSJC, ChiTieuCrawler.TabMobile.USDVCB, ChiTieuCrawler.TabMobile.VangTD, ChiTieuCrawler.TabMobile.USDTD };
                var bFirstTime = true;
                while (ServiceStarted)
                {
                    try
                    {
                        var dt = SqlDb.GetCrawlerData();
                        var manual = SqlDb.GetManualProductData();
                        var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);

                        #region Tab Viet Nam
                        //tab vietnam
                        var key = string.Format(RedisKey.KeyProductBox, 1);
                        var ls = redis.ContainsKey(key) ? redis.Get<List<ProductBox>>(key) : new List<ProductBox>();
                        var data = new List<ProductBox>();
                        ProductBox box, newbox, otherbox;
                        foreach (var item in tabVN)
                        {
                            if (int.Parse(item) < 0)
                            {
                                newbox = otherbox = null;
                                box = FindBox(item, ls);
                                otherbox = null;
                                if (manual.Rows.Count > 0)
                                {
                                    switch (item)
                                    {
                                        case ChiTieuCrawler.TabVietnam.EURtudo:
                                            if (double.Parse(manual.Rows[0]["Price_EURO"].ToString()) == 0) continue;
                                            otherbox = new ProductBox() { ProductName = "EUR (tự do)", CurrentPrice = double.Parse(manual.Rows[0]["Price_EURO"].ToString()), OtherPrice = double.Parse(manual.Rows[0]["Price_Euro_Sale"].ToString()), PrevPrice = 0, UpdateDate = DateTime.Now, DbId = "-2" };
                                            break;
                                        case ChiTieuCrawler.TabVietnam.USDtudo:
                                            if (double.Parse(manual.Rows[0]["Price_USD"].ToString()) == 0) continue;
                                            otherbox = new ProductBox() { ProductName = "USD (tự do)", CurrentPrice = double.Parse(manual.Rows[0]["Price_USD"].ToString()), OtherPrice = double.Parse(manual.Rows[0]["Price_USD_Sale"].ToString()), PrevPrice = 0, UpdateDate = DateTime.Now, DbId = "-1" };
                                            break;
                                    }
                                }
                                if (otherbox != null)
                                {
                                    otherbox.UpdatePrevPrice(bFirstTime ? null : box);
                                    data.Add(otherbox);
                                }
                                continue;
                            }
                            var drs = dt.Select("ID=" + item);
                            if (drs.Length == 0) continue;
                            var dr = drs[0];
                            try
                            {
                                newbox = otherbox = null;
                                box = FindBox(dr["ID"].ToString(), ls);
                                switch (dr["ID"].ToString())
                                {
                                    case ChiTieuCrawler.TabVietnam.VangTheGioi:
                                        newbox = new ProductBox() { ProductName = "Vàng TG(USD)", CurrentPrice = double.Parse(dr["MuaVao"].ToString()), OtherPrice = 0, PrevPrice = double.Parse(dr["MuaVao"].ToString()) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabVietnam.VangSJC:
                                        newbox = new ProductBox() { ProductName = "Vàng SJC", CurrentPrice = double.Parse(dr["MuaVao"].ToString().Replace(",", "")), OtherPrice = double.Parse(dr["BanRa"].ToString().Replace(",", "")), PrevPrice = 0, UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabVietnam.USDVCB:
                                        newbox = new ProductBox() { ProductName = "USD (VCB)", CurrentPrice = double.Parse(dr["MuaVao"].ToString().Replace(",", "")), OtherPrice = double.Parse(dr["BanRa"].ToString().Replace(",", "")), PrevPrice = 0, UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabVietnam.EURVCB:
                                        newbox = new ProductBox() { ProductName = "EUR (VCB)", CurrentPrice = double.Parse(dr["MuaVao"].ToString().Replace(",", "")), OtherPrice = double.Parse(dr["BanRa"].ToString().Replace(",", "")), PrevPrice = 0, UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabVietnam.CNY:
                                        newbox = new ProductBox() { ProductName = "CNY", CurrentPrice = double.Parse(dr["MuaVao"].ToString().Replace(",", "")), OtherPrice = double.Parse(dr["BanRa"].ToString().Replace(",", "")), PrevPrice = 0, UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabVietnam.USDSIN:
                                        newbox = new ProductBox() { ProductName = "SGD", CurrentPrice = double.Parse(dr["MuaVao"].ToString().Replace(",", "")), OtherPrice = double.Parse(dr["BanRa"].ToString().Replace(",", "")), PrevPrice = 0, UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabVietnam.USDHKD:
                                        newbox = new ProductBox() { ProductName = "HKD", CurrentPrice = double.Parse(dr["MuaVao"].ToString().Replace(",", "")), OtherPrice = double.Parse(dr["BanRa"].ToString().Replace(",", "")), PrevPrice = 0, UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabVietnam.BangAnh:
                                        newbox = new ProductBox() { ProductName = "Bảng Anh", CurrentPrice = double.Parse(dr["MuaVao"].ToString().Replace(",", "")), OtherPrice = double.Parse(dr["BanRa"].ToString().Replace(",", "")), PrevPrice = 0, UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    default:
                                        newbox = null;
                                        break;
                                }
                                if (newbox != null)
                                {
                                    if (newbox.DbId != ChiTieuCrawler.TabVietnam.VangTheGioi) newbox.UpdatePrevPrice(bFirstTime ? null : box);
                                    data.Add(newbox);
                                }

                            }
                            catch (Exception ex) { log.WriteEntry("GetBox : " + dr["ID"] + ":" + ex.ToString(), EventLogEntryType.Error); }
                        }
                        if (data.Count > 0)
                        {
                            if (redis.ContainsKey(key))
                                redis.Set(key, data);
                            else
                                redis.Add(key, data);
                        }
                        #endregion

                        #region Tab The gioi
                        key = string.Format(RedisKey.KeyProductBox, 2);
                        data = new List<ProductBox>();
                        double d;
                        foreach (var item in tabTG)
                        {
                            var drs = dt.Select("ID=" + item);
                            if (drs.Length == 0) continue;
                            var dr = drs[0];
                            try
                            {
                                box = FindBox(dr["ID"].ToString(), ls);
                                switch (dr["ID"].ToString())
                                {
                                    case ChiTieuCrawler.TabTheGioi.USDIndex:
                                        newbox = new ProductBox() { ProductName = "US Dollar Index", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString().Replace(",", "")), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabTheGioi.DowJones:
                                        newbox = new ProductBox() { ProductName = "DowJones", CurrentPrice = double.Parse(dr["Index"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        if (newbox.CurrentPrice == newbox.PrevPrice)
                                        {
                                            newbox.PrevPrice = double.Parse(dr["ThayDoi"].ToString());
                                        }
                                        break;
                                    case ChiTieuCrawler.TabTheGioi.Nasdaq:
                                        newbox = new ProductBox() { ProductName = "Nasdaq", CurrentPrice = double.Parse(dr["Index"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        if (newbox.CurrentPrice == newbox.PrevPrice && double.TryParse(dr["ThayDoi"].ToString(), out d))
                                        {
                                            newbox.PrevPrice = double.Parse(dr["ThayDoi"].ToString());
                                        }
                                        break;
                                    case ChiTieuCrawler.TabTheGioi.SP500:
                                        newbox = new ProductBox() { ProductName = "S&P 500", CurrentPrice = double.Parse(dr["Index"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        if (newbox.CurrentPrice == newbox.PrevPrice)
                                        {
                                            newbox.PrevPrice = double.Parse(dr["ThayDoi"].ToString());
                                        }
                                        break;
                                    case ChiTieuCrawler.TabTheGioi.FTSE100:
                                        newbox = new ProductBox() { ProductName = "FTSE 100", CurrentPrice = double.Parse(dr["Index"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        if (newbox.CurrentPrice == newbox.PrevPrice)
                                        {
                                            newbox.PrevPrice = double.Parse(dr["ThayDoi"].ToString());
                                        }
                                        break;
                                    case ChiTieuCrawler.TabTheGioi.DAX:
                                        newbox = new ProductBox() { ProductName = "DAX", CurrentPrice = double.Parse(dr["Index"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        if (newbox.CurrentPrice == newbox.PrevPrice)
                                        {
                                            newbox.PrevPrice = double.Parse(dr["ThayDoi"].ToString());
                                        }
                                        break;
                                    case ChiTieuCrawler.TabTheGioi.Nikkei225:
                                        newbox = new ProductBox() { ProductName = "Nikkei 225", CurrentPrice = double.Parse(dr["Index"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        if (newbox.CurrentPrice == newbox.PrevPrice)
                                        {
                                            newbox.PrevPrice = double.Parse(dr["ThayDoi"].ToString());
                                        }
                                        break;
                                    case ChiTieuCrawler.TabTheGioi.HangSeng:
                                        newbox = new ProductBox() { ProductName = "Hang Seng", CurrentPrice = double.Parse(dr["Index"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        if (newbox.CurrentPrice == newbox.PrevPrice)
                                        {
                                            newbox.PrevPrice = double.Parse(dr["ThayDoi"].ToString());
                                        }
                                        break;
                                    case ChiTieuCrawler.TabTheGioi.StraitTimes:
                                        newbox = new ProductBox() { ProductName = "Strait Times", CurrentPrice = double.Parse(dr["Index"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        if (newbox.CurrentPrice == newbox.PrevPrice)
                                        {
                                            newbox.PrevPrice = double.Parse(dr["ThayDoi"].ToString());
                                        }
                                        break;
                                    default:
                                        newbox = null;
                                        break;
                                }
                                if (newbox != null)
                                {
                                    data.Add(newbox);
                                }
                            }
                            catch (Exception ex) { log.WriteEntry("GetBox : " + dr["ID"] + ":" + ex.ToString(), EventLogEntryType.Error); }
                        }
                        if (data.Count > 0)
                        {
                            if (redis.ContainsKey(key))
                                redis.Set(key, data);
                            else
                                redis.Add(key, data);
                        }
                        #endregion

                        #region Tab Hàng hóa
                        key = string.Format(RedisKey.KeyProductBox, 3);
                        data = new List<ProductBox>();
                        foreach (var item in tabHH)
                        {
                            if (item == "-1")
                            {
                                switch (item)
                                {

                                }
                                continue;
                            }
                            var drs = dt.Select("ID=" + item);
                            if (drs.Length == 0) continue;
                            var dr = drs[0];
                            try
                            {
                                box = FindBox(dr["ID"].ToString(), ls);
                                switch (dr["ID"].ToString())
                                {
                                    case ChiTieuCrawler.TabHangHoa.CrudeOil:
                                        newbox = new ProductBox() { ProductName = "Crude Oil", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabHangHoa.NaturalGas:
                                        newbox = new ProductBox() { ProductName = "Natural Gas", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabHangHoa.Gold:
                                        newbox = new ProductBox() { ProductName = "Gold", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabHangHoa.Copper:
                                        newbox = new ProductBox() { ProductName = "Copper", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabHangHoa.Silver:
                                        newbox = new ProductBox() { ProductName = "Silver", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabHangHoa.Corn:
                                        newbox = new ProductBox() { ProductName = "Corn", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabHangHoa.Sugar:
                                        newbox = new ProductBox() { ProductName = "Sugar", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabHangHoa.Coffee:
                                        newbox = new ProductBox() { ProductName = "Coffee", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabHangHoa.Cotton:
                                        newbox = new ProductBox() { ProductName = "Cotton", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabHangHoa.RoughRice:
                                        newbox = new ProductBox() { ProductName = "Rough rice", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabHangHoa.Wheat:
                                        newbox = new ProductBox() { ProductName = "Wheat", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabHangHoa.Soybean:
                                        newbox = new ProductBox() { ProductName = "Soybean", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabHangHoa.Ethanol:
                                        newbox = new ProductBox() { ProductName = "Ethanol", CurrentPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")), OtherPrice = 0, PrevPrice = double.Parse(dr["Gia"].ToString().Replace(",", "")) - double.Parse(dr["ThayDoi"].ToString()), UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    default:
                                        newbox = null;
                                        break;
                                }
                                if (newbox != null)
                                {
                                    data.Add(newbox);
                                }
                            }
                            catch (Exception ex) { log.WriteEntry("GetBox : " + dr["ID"] + ":" + ex.ToString(), EventLogEntryType.Error); }
                        }
                        if (data.Count > 0)
                        {
                            if (redis.ContainsKey(key))
                                redis.Set(key, data);
                            else
                                redis.Add(key, data);
                        }
                        #endregion

                        #region Tab Mobile
                        key = string.Format(RedisKey.KeyProductBox, 4);
                        data = new List<ProductBox>();
                        foreach (var item in tabMobile)
                        {
                            newbox = null;
                            if (double.Parse(item) < 0)
                            {
                                double price;
                                //manual
                                switch (item)
                                {
                                    case ChiTieuCrawler.TabMobile.USDTD:
                                        price = manual.Rows.Count > 0 ? double.Parse(manual.Rows[0]["Price_USD"].ToString()) : 0;
                                        newbox = new ProductBox() { ProductName = "USDTD", CurrentPrice = price };
                                        break;
                                    case ChiTieuCrawler.TabMobile.VangTD:
                                        price = manual.Rows.Count > 0 ? double.Parse(manual.Rows[0]["Price_Gold"].ToString()) : 0;
                                        newbox = new ProductBox() { ProductName = "VangTD", CurrentPrice = price };
                                        break;
                                }
                                if (newbox != null)
                                {
                                    data.Add(newbox);
                                }
                                continue;
                            }
                            var drs = dt.Select("ID=" + item);
                            if (drs.Length == 0) continue;
                            var dr = drs[0];
                            try
                            {
                                box = FindBox(dr["ID"].ToString(), ls);
                                switch (dr["ID"].ToString())
                                {
                                    case ChiTieuCrawler.TabMobile.VangSJC:
                                        newbox = new ProductBox() { ProductName = "Vàng SJC", CurrentPrice = double.Parse(dr["MuaVao"].ToString().Replace(",", "")), OtherPrice = double.Parse(dr["BanRa"].ToString().Replace(",", "")), PrevPrice = 0, UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                    case ChiTieuCrawler.TabMobile.USDVCB:
                                        newbox = new ProductBox() { ProductName = "USD (VCB)", CurrentPrice = double.Parse(dr["MuaVao"].ToString().Replace(",", "")), OtherPrice = double.Parse(dr["BanRa"].ToString().Replace(",", "")), PrevPrice = 0, UpdateDate = DateTime.Now, DbId = box.DbId };
                                        break;
                                }
                                if (newbox != null)
                                {
                                    data.Add(newbox);
                                }
                            }
                            catch (Exception ex) { log.WriteEntry("GetBox : " + dr["ID"] + ":" + ex.ToString(), EventLogEntryType.Error); }
                        }
                        if (data.Count > 0)
                        {
                            if (redis.ContainsKey(key))
                                redis.Set(key, data);
                            else
                                redis.Add(key, data);
                        }
                        #endregion

                        bFirstTime = false;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(ex.ToString(), EventLogEntryType.Error);
                    }
                    Thread.Sleep(crawlerInterval);
                }
            }
            catch (Exception ex)
            {
                log.WriteEntry(ex.ToString(), EventLogEntryType.Error);
            }
        }
Exemplo n.º 7
0
        private void button2_Click(object sender, EventArgs e)
        {
            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
            var sql = new SqlDb();
            #region FN
            try
            {
                var keylist = string.Format(RedisKey.KeyCompanyNewsByCate, 0); //Tất cả
                var ls = new List<string>();

                var pdt = sql.GetCompanyNews("A", 1000);

                var key1 = string.Format(RedisKey.KeyCompanyNewsByCate, 1); //Tình hình SXKD & Phân tích khác
                var key2 = string.Format(RedisKey.KeyCompanyNewsByCate, 2); // Cổ tức - Chốt quyền
                var key3 = string.Format(RedisKey.KeyCompanyNewsByCate, 3); // Thay đổi nhân sự
                var key4 = string.Format(RedisKey.KeyCompanyNewsByCate, 4); // Tăng vốn - Cổ phiếu quỹ
                var key5 = string.Format(RedisKey.KeyCompanyNewsByCate, 5); // GD cđ lớn & cđ nội bộ
                var cate1 = (redis.ContainsKey(key1)) ? redis.Get<List<string>>(key1) : new List<string>();

                var cate2 = (redis.ContainsKey(key2)) ? redis.Get<List<string>>(key2) : new List<string>();
                var cate3 = (redis.ContainsKey(key3)) ? redis.Get<List<string>>(key3) : new List<string>();

                var cate4 = (redis.ContainsKey(key4)) ? redis.Get<List<string>>(key4) : new List<string>();
                var cate5 = (redis.ContainsKey(key5)) ? redis.Get<List<string>>(key5) : new List<string>();

                foreach (DataRow rdr in pdt.Rows)
                {
                    var compact = new StockNews() { ID = int.Parse(rdr["ID"].ToString()), Body = "", DateDeploy = (DateTime)rdr["PostTime"], Image = "", Title = rdr["title"].ToString(), Sapo = "", TypeID = rdr["ConfigId"].ToString(), Symbol = rdr["StockSymbols"].ToString() };
                    var obj = new StockNews() { ID = int.Parse(rdr["ID"].ToString()), Body = rdr["Content"].ToString(), DateDeploy = (DateTime)rdr["PostTime"], Image = rdr["ImagePath"].ToString(), Title = rdr["title"].ToString(), Sapo = rdr["SubContent"].ToString(), TypeID = rdr["ConfigId"].ToString(), Symbol = rdr["StockSymbols"].ToString() };
                    var key = obj.DateDeploy.ToString("yyyyMMddHHmm") + obj.ID;
                    var compactkey = string.Format(RedisKey.KeyCompanyNewsCompact, obj.ID);
                    if (redis.ContainsKey(compactkey))
                        redis.Set(compactkey, compact);
                    else
                        redis.Add(compactkey, compact);
                    var detailkey = string.Format(RedisKey.KeyCompanyNewsDetail, obj.ID);
                    if (redis.ContainsKey(detailkey))
                        redis.Set(detailkey, obj);
                    else
                        redis.Add(detailkey, obj);

                    if (!ls.Contains(key)) ls.Add(key);
                    #region Update category list
                    if (obj.TypeID.Contains("1"))
                    {
                        if (!cate1.Contains(key)) cate1.Add(key);
                    }
                    else
                    {
                        if (cate1.Contains(key)) cate1.Remove(key);
                    }
                    if (obj.TypeID.Contains("2"))
                    {
                        if (!cate2.Contains(key)) cate2.Add(key);
                    }
                    else
                    {
                        if (cate2.Contains(key)) cate2.Remove(key);
                    }
                    if (obj.TypeID.Contains("3"))
                    {
                        if (!cate3.Contains(key)) cate3.Add(key);
                    }
                    else
                    {
                        if (cate3.Contains(key)) cate3.Remove(key);
                    }
                    if (obj.TypeID.Contains("4"))
                    {
                        if (!cate4.Contains(key)) cate4.Add(key);
                    }
                    else
                    {
                        if (cate4.Contains(key)) cate4.Remove(key);
                    }
                    if (obj.TypeID.Contains("5"))
                    {
                        if (!cate5.Contains(key)) cate5.Add(key);
                    }
                    else
                    {
                        if (cate5.Contains(key)) cate5.Remove(key);
                    }
                    #endregion
                }
                ls.Sort();
                ls.Reverse();
                if (redis.ContainsKey(keylist))
                    redis.Set(keylist, ls);
                else
                    redis.Add(keylist, ls);
                #region Update category list
                cate1.Sort();
                cate1.Reverse();
                if (redis.ContainsKey(key1))
                    redis.Set(key1, cate1);
                else
                    redis.Add(key1, cate1);
                cate2.Sort();
                cate2.Reverse();
                if (redis.ContainsKey(key2))
                    redis.Set(key2, cate2);
                else
                    redis.Add(key2, cate2);
                cate3.Sort();
                cate3.Reverse();
                if (redis.ContainsKey(key3))
                    redis.Set(key3, cate3);
                else
                    redis.Add(key3, cate3);
                cate4.Sort();
                cate4.Reverse();
                if (redis.ContainsKey(key4))
                    redis.Set(key4, cate4);
                else
                    redis.Add(key4, cate4);
                cate5.Sort();
                cate5.Reverse();
                if (redis.ContainsKey(key5))
                    redis.Set(key5, cate5);
                else
                    redis.Add(key5, cate5);
                #endregion
            }
            catch (Exception ex)
            {
                //log.WriteEntry(symbol + " : FN : " + ex.ToString(), EventLogEntryType.Error);
                //ret = false;
            }
            #endregion

            var topkey = RedisKey.KeyTop20News;
            var ndt = sql.GetCompanyNews("A", 100);
            var topls = new List<StockNews>();
            foreach (DataRow ndr in ndt.Rows)
            {
                var da = (DateTime)ndr["PostTime"];
                //if (double.Parse(da.ToString("yyyyMMddHHmm")) > double.Parse(DateTime.Now.ToString("yyyyMMddHHmm"))) continue;
                topls.Add(new StockNews() { ID = int.Parse(ndr["ID"].ToString()), Body = "", DateDeploy = (DateTime)ndr["PostTime"], Image = "", Title = ndr["title"].ToString(), Sapo = "", TypeID = ndr["ConfigId"].ToString(), Symbol = ndr["StockSymbols"].ToString() });
                // if (topls.Count >= 20) break;
            }
            if (redis.ContainsKey(topkey))
                redis.Set(topkey, topls);
            else
                redis.Add(topkey, topls);
        }
Exemplo n.º 8
0
 private void button15_Click(object sender, EventArgs e)
 {
     //Việt Nam
     var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
     var key = string.Format(RedisKey.KeyProductBox, 1);
     var data = new List<ProductBox>();
     data.Add(new ProductBox() { ProductName = "Vàng SJC", CurrentPrice = 37.330, OtherPrice = 37.420, PrevPrice = 36.95 });
     data.Add(new ProductBox() { ProductName = "USD (VCB)", CurrentPrice = 20785, OtherPrice = 20885, PrevPrice = 20885 });
     data.Add(new ProductBox() { ProductName = "USD (tự do)", CurrentPrice = 20785, OtherPrice = 20885, PrevPrice = 20885 });
     data.Add(new ProductBox() { ProductName = "EUR (VCB)", CurrentPrice = 28494.07, OtherPrice = 29140.67, PrevPrice = 20885 });
     data.Add(new ProductBox() { ProductName = "EUR (tự do)", CurrentPrice = 28494.07, OtherPrice = 29140.67, PrevPrice = 20885 });
     data.Add(new ProductBox() { ProductName = "CNY", CurrentPrice = 3290, OtherPrice = 3310, PrevPrice = 3310 });
     data.Add(new ProductBox() { ProductName = "USD Singapo", CurrentPrice = 16610, OtherPrice = 16839, PrevPrice = 16739 });
     data.Add(new ProductBox() { ProductName = "USD Singapo", CurrentPrice = 16610, OtherPrice = 16839, PrevPrice = 16739 });
     data.Add(new ProductBox() { ProductName = "USD Singapo", CurrentPrice = 16610, OtherPrice = 16839, PrevPrice = 16739 });
     if (redis.ContainsKey(key))
         redis.Set(key, data);
     else
         redis.Add(key, data);
 }
Exemplo n.º 9
0
 private void UpdateKby()
 {
     try
     {
         var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
         //var pdt = bFirst ? sql.GetAllPrice(centerId) : sql.GetChangedPriceSymbols(centerId);
         var sql = new SqlDb();
         var dt = sql.GetKbyFolder();
         if (redis.ContainsKey(RedisKey.KeyKby))
             redis.Set(RedisKey.KeyKby, dt);
         else
             redis.Add(RedisKey.KeyKby, dt);
     }
     catch (Exception ex)
     {
         log.WriteEntry("UpdateKby : " + ex.ToString(), EventLogEntryType.Error);
     }
 }
Exemplo n.º 10
0
        private void button10_Click(object sender, EventArgs e)
        {
            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);

            var keylist = RedisKey.KeyAnalysisReport;
            var ls = new List<string>();
            var rdt = SqlDb.GetAnalysisReports("A", -1);
            foreach (DataRow rdr in rdt.Rows)
            {
                var key = string.Format(RedisKey.KeyAnalysisReportDetail, rdr["ID"]);
                var obj = new Reports() { ID = int.Parse(rdr["ID"].ToString()), Body = rdr["Des"].ToString(), DateDeploy = (DateTime)rdr["PublishDate"], file = new FileObject() { FileName = rdr["FileName"].ToString(), FileUrl = "http://images1.cafef.vn/Images/Uploaded/DuLieuDownload/PhanTichBaoCao/" + rdr["FileName"] }, IsHot = (rdr["IsHot"].ToString() == "1"), ResourceCode = rdr["Source"].ToString(), Symbol = rdr["Symbol"].ToString(), Title = rdr["title"].ToString(), SourceID = int.Parse(rdr["SourceId"].ToString()), ResourceName = rdr["SourceFullName"].ToString(), ResourceLink = rdr["SourceUrl"].ToString() };
                var cateId = 0;
                if (!string.IsNullOrEmpty(obj.Symbol) && !obj.Symbol.Contains(","))
                {
                    var stock = redis.Get<Stock>(string.Format(RedisKey.Key, obj.Symbol));
                    cateId = stock == null ? 0 : stock.CompanyProfile.basicInfos.category.ID;
                }
                obj.CategoryID = cateId;
                if (redis.ContainsKey(key))
                    redis.Set(key, obj);
                else
                    redis.Add(key, obj);
                if (!ls.Contains(key)) ls.Add(key);
            }
            if (redis.ContainsKey(keylist))
                redis.Set(keylist, ls);
            else
                redis.Add(keylist, ls);
        }
Exemplo n.º 11
0
        private bool UpdateList(string updateKey, string related, string updateType, ref SqlDb sql)
        {
            var ret = true;
            try
            {

                var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);

                var symbol = updateKey;
                var date = "";
                if (updateKey.Contains("."))
                {
                    symbol = updateKey.Substring(0, updateKey.IndexOf("."));
                    date = updateKey.Substring(updateKey.IndexOf(".") + 1);
                }
                switch (related)
                {
                    case "FP":
                        #region FP
                        try
                        {
                            var keylist = string.Format(RedisKey.PriceHistoryKeys, symbol);
                            var ls = redis.ContainsKey(keylist) ? redis.Get<List<String>>(keylist) : new List<string>();
                            //log.WriteEntry(symbol + "-price-" + DateTime.Now, EventLogEntryType.Information);
                            var pdt = (date == "" || ls.Count == 0) ? sql.GetPriceHistory(symbol, -1) : sql.GetPriceHistory(symbol, date);
                            //log.WriteEntry(symbol + "-price-" + DateTime.Now, EventLogEntryType.Information);
                            foreach (DataRow pdr in pdt.Rows)
                            {
                                var key = string.Format(RedisKey.PriceHistory, symbol, ((DateTime)pdr["TradeDate"]).ToString("yyyyMMdd"));

                                var price = new StockHistory() { TradeDate = (DateTime)pdr["TradeDate"], ClosePrice = double.Parse(pdr["ClosePrice"].ToString()), AveragePrice = double.Parse(pdr["AveragePrice"].ToString()), BasicPrice = double.Parse(pdr["BasicPrice"].ToString()), Ceiling = double.Parse(pdr["Ceiling"].ToString()), Floor = double.Parse(pdr["Floor"].ToString()), Volume = double.Parse(pdr["Volume"].ToString()), TotalValue = double.Parse(pdr["TotalValue"].ToString()), AgreedValue = double.Parse(pdr["AgreedValue"].ToString()), AgreedVolume = double.Parse(pdr["AgreedVolume"].ToString()), Symbol = symbol, KLGDDot1 = double.Parse(pdr["VolumePhase1"].ToString()), KLGDDot2 = double.Parse(pdr["VolumePhase2"].ToString()), KLGDDot3 = double.Parse(pdr["VolumePhase3"].ToString()), OpenPrice = double.Parse(pdr["OpenPrice"].ToString()), HighPrice = double.Parse(pdr["HighPrice"].ToString()), LowPrice = double.Parse(pdr["LowPrice"].ToString()) };
                                if (redis.ContainsKey(key))
                                    redis.Set<StockHistory>(key, price);
                                else
                                    redis.Add<StockHistory>(key, price);

                                if (!ls.Contains(key)) ls.Add(key);
                            }
                            ls.Sort();
                            ls.Reverse();
                            if (redis.ContainsKey(keylist))
                                redis.Set<List<string>>(keylist, ls);
                            else
                                redis.Add<List<string>>(keylist, ls);
                        }
                        catch (Exception ex)
                        {
                            log.WriteEntry(symbol + " : FP : " + ex.ToString(), EventLogEntryType.Error);
                            ret = false;
                        }
                        //var test = redis.Get<List<string>>(keylist);
                        #endregion
                        break;
                    case "FO":
                        #region FO
                        try
                        {
                            var keylist = string.Format(RedisKey.OrderHistoryKeys, symbol);
                            var ls = redis.ContainsKey(keylist) ? redis.Get<List<String>>(keylist) : new List<string>();

                            var pdt = (date == "" || ls.Count == 0) ? sql.GetOrderHistory(symbol, 1000) : sql.GetOrderHistory(symbol, date);
                            foreach (DataRow pdr in pdt.Rows)
                            {
                                var key = string.Format(RedisKey.OrderHistory, symbol, ((DateTime)pdr["Trading_Date"]).ToString("yyyyMMdd"));

                                var order = new OrderHistory() { TradeDate = (DateTime)pdr["Trading_Date"], BuyOrderCount = double.Parse(pdr["Bid_Order"].ToString()), BuyVolume = double.Parse(pdr["Bid_Volume"].ToString()), SellOrderCount = double.Parse(pdr["Offer_Order"].ToString()), SellVolume = double.Parse(pdr["Offer_Volume"].ToString()), Symbol = symbol }; //Volume = double.Parse(pdr["Volume"].ToString()), Price = double.Parse(pdr["Price"].ToString()), BasicPrice = double.Parse(pdr["BasicPrice"].ToString()), Ceiling = double.Parse(pdr["Ceiling"].ToString()), Floor = double.Parse(pdr["Floor"].ToString()), 
                                if (redis.ContainsKey(key))
                                    redis.Set<OrderHistory>(key, order);
                                else
                                    redis.Add<OrderHistory>(key, order);

                                if (!ls.Contains(key)) ls.Add(key);
                            }
                            ls.Sort();
                            ls.Reverse();
                            if (redis.ContainsKey(keylist))
                                redis.Set<List<string>>(keylist, ls);
                            else
                                redis.Add<List<string>>(keylist, ls);
                        }
                        catch (Exception ex)
                        {
                            log.WriteEntry(symbol + " : FO : " + ex.ToString(), EventLogEntryType.Error);
                            ret = false;
                        }
                        #endregion
                        break;
                    case "FIT":
                        #region FIT
                        try
                        {
                            var keylist = string.Format(RedisKey.InternalHistoryKeys, symbol);
                            var ls = new List<string>(); //redis.ContainsKey(keylist) ? redis.Get<List<String>>(keylist) : new List<string>();
                            
                            var pdt = sql.GetInternalHistory(symbol, -1);
                            
                            foreach (DataRow pdr in pdt.Rows)
                            {
                                var key = string.Format(RedisKey.InternalHistory, symbol, (((DateTime?)pdr["NgayThongBao"]) ?? DateTime.Now).ToString("yyyyMMdd"), pdr["ID"], pdr["ShareHolder_ID"] + ":" + pdr["ShareHolderCode"]);
                                var order = new InternalHistory() { Stock = symbol, RelatedMan = pdr["NguoiLienQuan"].ToString(), RelatedManPosition = pdr["ChucVuNguoiLienQuan"].ToString(), VolumeBeforeTransaction = double.Parse(pdr["SLCPTruocGD"].ToString()), PlanBuyVolume = double.Parse(pdr["DangKy_Mua"].ToString()), PlanSellVolume = double.Parse(pdr["DangKy_Ban"].ToString()), PlanBeginDate = pdr["DangKy_TuNgay"].Equals(DBNull.Value) ? null : (DateTime?)pdr["DangKy_TuNgay"], PlanEndDate = pdr["DangKy_DenNgay"].Equals(DBNull.Value) ? null : (DateTime?)pdr["DangKy_DenNgay"], RealBuyVolume = double.Parse(pdr["ThucHien_Mua"].ToString()), RealSellVolume = double.Parse(pdr["ThucHien_Ban"].ToString()), RealEndDate = pdr["ThucHien_NgayKetThuc"].Equals(DBNull.Value) ? null : (DateTime?)pdr["ThucHien_NgayKetThuc"], PublishedDate = pdr["NgayThongBao"].Equals(DBNull.Value) ? null : (DateTime?)pdr["NgayThongBao"], VolumeAfterTransaction = double.Parse(pdr["SLCPSauGD"].ToString()), TransactionNote = pdr["GhiChu"].ToString(), HolderID = pdr["ShareHolder_ID"].ToString(), ShareHolderCode = pdr["ShareHolderCode"].ToString() }; //TransactionMan = pdr["FullName"].ToString(), TransactionManPosition = pdr["ChucVu"].ToString(), 
                                var tochuc = pdr["ToChuc"].ToString();
                                order.TransactionMan = tochuc.IndexOf("--") > 0 ? tochuc.Substring(0, tochuc.IndexOf("--")) : tochuc;
                                order.TransactionManPosition = tochuc.IndexOf("--") > 0 && tochuc.IndexOf("--") < tochuc.Length - 2 ? tochuc.Substring(tochuc.IndexOf("--") + 2) : "";

                                if (redis.ContainsKey(key))
                                    redis.Set<InternalHistory>(key, order);
                                else
                                    redis.Add<InternalHistory>(key, order);

                                if (!ls.Contains(key)) ls.Add(key);
                            }
                            ls.Sort();
                            ls.Reverse();
                            if (redis.ContainsKey(keylist))
                                redis.Set<List<string>>(keylist, ls);
                            else
                                redis.Add<List<string>>(keylist, ls);
                            var internalkeys = redis.SearchKeys(string.Format(RedisKey.InternalHistory, symbol, "*", "*", "*")) ?? new List<string>();
                            foreach (var internalkey in internalkeys)
                            {
                                if(!ls.Contains(internalkey)) redis.Remove(internalkey);
                            }
                        }
                        catch (Exception ex)
                        {
                            log.WriteEntry(symbol + " : FIT : " + ex.ToString(), EventLogEntryType.Error);
                            ret = false;
                        }
                        #endregion
                        break;
                    case "FFT":
                        #region FFT
                        try
                        {
                            var keylist = string.Format(RedisKey.ForeignHistoryKeys, symbol);
                            var ls = redis.ContainsKey(keylist) ? redis.Get<List<String>>(keylist) : new List<string>();

                            var pdt = (date == "" || ls.Count == 0) ? sql.GetForeignHistory(symbol, -1) : sql.GetForeignHistory(symbol, date);
                            foreach (DataRow pdr in pdt.Rows)
                            {
                                var key = string.Format(RedisKey.ForeignHistory, symbol, ((DateTime)pdr["Trading_Date"]).ToString("yyyyMMdd"));

                                var order = new ForeignHistory() { TradeDate = (DateTime)pdr["Trading_Date"], BuyVolume = double.Parse(pdr["Buying_Volume"].ToString()), BuyValue = double.Parse(pdr["Buying_Value"].ToString()), SellVolume = double.Parse(pdr["Selling_Volume"].ToString()), SellValue = double.Parse(pdr["Selling_Value"].ToString()), Room = double.Parse(pdr["CurrentRoom"].ToString()), TotalRoom = double.Parse(pdr["TotalRoom"].ToString()), Percent = double.Parse(pdr["SoHuu"].ToString()), Symbol = symbol }; //, BasicPrice = double.Parse(pdr["BasicPrice"].ToString()), ClosePrice = double.Parse(pdr["ClosePrice"].ToString()), AveragePrice = double.Parse(pdr["AveragePrice"].ToString()) 
                                if (redis.ContainsKey(key))
                                    redis.Set<ForeignHistory>(key, order);
                                else
                                    redis.Add<ForeignHistory>(key, order);

                                if (!ls.Contains(key)) ls.Add(key);
                            }
                            ls.Sort();
                            ls.Reverse();
                            if (redis.ContainsKey(keylist))
                                redis.Set<List<string>>(keylist, ls);
                            else
                                redis.Add<List<string>>(keylist, ls);
                        }
                        catch (Exception ex)
                        {
                            log.WriteEntry(symbol + " : FFT : " + ex.ToString(), EventLogEntryType.Error);
                            ret = false;
                        }
                        #endregion
                        break;
                    case "FS":
                        #region FS
                        try
                        {
                            var skey = RedisKey.KeyStockList;
                            var sdt = sql.GetSymbolList(-1);
                            var sls = new List<StockCompact>();
                            var hnx = new List<StockCompact>();
                            var hsx = new List<StockCompact>();
                            var upc = new List<StockCompact>();
                            foreach (DataRow sdr in sdt.Rows)
                            {
                                var stock = new StockCompact() { Symbol = sdr["Symbol"].ToString(), CategoryId = int.Parse(sdr["StockIndustryId"].ToString()), TradeCenterId = int.Parse(sdr["TradeCenterId"].ToString()) };
                                sls.Add(stock);
                                switch (stock.TradeCenterId)
                                {
                                    case 1: hsx.Add(stock); break;
                                    case 2: hnx.Add(stock); break;
                                    case 9: upc.Add(stock); break;
                                }
                            }
                            if (redis.ContainsKey(skey))
                                redis.Set(skey, sls);
                            else
                                redis.Add(skey, sls);
                            skey = string.Format(RedisKey.KeyStockListByCenter, "1");
                            if (redis.ContainsKey(skey))
                                redis.Set(skey, hsx);
                            else
                                redis.Add(skey, hsx);
                            skey = string.Format(RedisKey.KeyStockListByCenter, "2");
                            if (redis.ContainsKey(skey))
                                redis.Set(skey, hnx);
                            else
                                redis.Add(skey, hnx);
                            skey = string.Format(RedisKey.KeyStockListByCenter, "9");
                            if (redis.ContainsKey(skey))
                                redis.Set(skey, upc);
                            else
                                redis.Add(skey, upc);
                        }
                        catch (Exception ex)
                        {
                            log.WriteEntry(symbol + " : FS : " + ex.ToString(), EventLogEntryType.Error);
                            ret = false;
                        }
                        #endregion
                        break;
                    case "FA":
                        #region FA
                        try
                        {
                            var keylist = RedisKey.KeyAnalysisReport;
                            var ls = (redis.ContainsKey(keylist)) ? redis.Get<List<string>>(keylist) : new List<string>();
                            var pdt = (date == "" || ls.Count == 0) ? sql.GetAnalysisReports("A", 2000) : sql.GetAnalysisReports("A", date);
                            var rs = new List<string>();
                            if (ls.Count > 0 && date != "")
                            {
                                //remove reports by date
                                var d = date.Replace(".", "");
                                rs = ls.FindAll(s => s.Substring(0, 8) == d);
                                foreach (var r in rs)
                                {
                                    ls.Remove(r);

                                }
                            }
                            foreach (DataRow rdr in pdt.Rows)
                            {

                                var key = string.Format(RedisKey.KeyAnalysisReportDetail, rdr["ID"]);
                                var obj = new Reports() { ID = int.Parse(rdr["ID"].ToString()), Body = rdr["Des"].ToString(), DateDeploy = (DateTime)rdr["PublishDate"], file = new FileObject() { FileName = rdr["FileName"].ToString(), FileUrl = "http://images1.cafef.vn/Images/Uploaded/DuLieuDownload/PhanTichBaoCao/" + rdr["FileName"] }, IsHot = (rdr["IsHot"].ToString().ToLower() == "true"), ResourceCode = rdr["Source"].ToString(), Symbol = rdr["Symbol"].ToString(), Title = rdr["title"].ToString(), SourceID = int.Parse(rdr["SourceId"].ToString()), ResourceName = rdr["SourceFullName"].ToString(), ResourceLink = rdr["SourceUrl"].ToString() };
                                var id = obj.DateDeploy.ToString("yyyyMMdd") + obj.ID;
                                if (redis.ContainsKey(key))
                                    redis.Set(key, obj);
                                else
                                    redis.Add(key, obj);
                                if (!ls.Contains(id)) ls.Add(id);
                            }
                            foreach (var r in rs)
                            {
                                if (ls.Contains(r)) continue;
                                var id = r.Substring(8);
                                var key = string.Format(RedisKey.KeyAnalysisReportDetail, id);
                                if (redis.ContainsKey(key))
                                    redis.Remove(key);
                            }
                            ls.Sort();
                            ls.Reverse();
                            if (redis.ContainsKey(keylist))
                                redis.Set(keylist, ls);
                            else
                                redis.Add(keylist, ls);

                        }
                        catch (Exception ex)
                        {
                            log.WriteEntry(symbol + " : FA : " + ex.ToString(), EventLogEntryType.Error);
                            ret = false;
                        }
                        #endregion
                        break;
                    case "FT":
                        #region FT
                        try
                        {
                            var fdt = sql.GetTopStock();

                            UpdateTopStock(RedisKey.KeyTopStockCenter.All, RedisKey.KeyTopStockType.EPS, ref redis, ref fdt);
                            UpdateTopStock(RedisKey.KeyTopStockCenter.Ho, RedisKey.KeyTopStockType.EPS, ref redis, ref fdt);
                            UpdateTopStock(RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.EPS, ref redis, ref fdt);
                            UpdateTopStock(RedisKey.KeyTopStockCenter.All, RedisKey.KeyTopStockType.MarketCap, ref redis, ref fdt);
                            UpdateTopStock(RedisKey.KeyTopStockCenter.Ho, RedisKey.KeyTopStockType.MarketCap, ref redis, ref fdt);
                            UpdateTopStock(RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.MarketCap, ref redis, ref fdt);
                            UpdateTopStock(RedisKey.KeyTopStockCenter.All, RedisKey.KeyTopStockType.PE, ref redis, ref fdt);
                            UpdateTopStock(RedisKey.KeyTopStockCenter.Ho, RedisKey.KeyTopStockType.PE, ref redis, ref fdt);
                            UpdateTopStock(RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.PE, ref redis, ref fdt);
                        }
                        catch (Exception ex)
                        {
                            log.WriteEntry(symbol + " : FT : " + ex.ToString(), EventLogEntryType.Error);
                            ret = false;
                        }
                        #endregion
                        break;
                    case "FN":
                        #region FN
                        try
                        {
                            var keylist = string.Format(RedisKey.KeyCompanyNewsByCate, 0); //Tất cả
                            var ls = (redis.ContainsKey(keylist)) ? redis.Get<List<string>>(keylist) : new List<string>();
                            var pdt = (date == "" || ls.Count == 0) ? sql.GetCompanyNews("A", 1000) : sql.GetCompanyNews("A", date);

                            var key1 = string.Format(RedisKey.KeyCompanyNewsByCate, 1); //Tình hình SXKD & Phân tích khác
                            var key2 = string.Format(RedisKey.KeyCompanyNewsByCate, 2); // Cổ tức - Chốt quyền
                            var key3 = string.Format(RedisKey.KeyCompanyNewsByCate, 3); // Thay đổi nhân sự
                            var key4 = string.Format(RedisKey.KeyCompanyNewsByCate, 4); // Tăng vốn - Cổ phiếu quỹ
                            var key5 = string.Format(RedisKey.KeyCompanyNewsByCate, 5); // GD cđ lớn & cđ nội bộ
                            var cate1 = (redis.ContainsKey(key1)) ? redis.Get<List<string>>(key1) : new List<string>();

                            var cate2 = (redis.ContainsKey(key2)) ? redis.Get<List<string>>(key2) : new List<string>();
                            var cate3 = (redis.ContainsKey(key3)) ? redis.Get<List<string>>(key3) : new List<string>();

                            var cate4 = (redis.ContainsKey(key4)) ? redis.Get<List<string>>(key4) : new List<string>();
                            var cate5 = (redis.ContainsKey(key5)) ? redis.Get<List<string>>(key5) : new List<string>();

                            //remove bài trong ngày (dùng để xóa các tin thừa)
                            var rm = (date != "") ? ls.FindAll(key => key.StartsWith((date.Replace(".", "")))) : new List<string>();
                            foreach (var item in rm)
                            {
                                if (ls.Contains(item)) ls.Remove(item);
                                if (cate1.Contains(item)) cate1.Remove(item);
                                if (cate2.Contains(item)) cate2.Remove(item);
                                if (cate3.Contains(item)) cate3.Remove(item);
                                if (cate4.Contains(item)) cate4.Remove(item);
                                if (cate5.Contains(item)) cate5.Remove(item);
                            }

                            foreach (DataRow rdr in pdt.Rows)
                            {
                                var compact = new StockNews() { ID = int.Parse(rdr["ID"].ToString()), Body = "", DateDeploy = (DateTime)rdr["PostTime"], Image = "", Title = rdr["title"].ToString(), Sapo = "", TypeID = rdr["ConfigId"].ToString(), Symbol = rdr["StockSymbols"].ToString() };
                                var obj = new StockNews() { ID = int.Parse(rdr["ID"].ToString()), Body = rdr["Content"].ToString(), DateDeploy = (DateTime)rdr["PostTime"], Image = rdr["ImagePath"].ToString(), Title = rdr["title"].ToString(), Sapo = rdr["SubContent"].ToString(), TypeID = rdr["ConfigId"].ToString(), Symbol = rdr["StockSymbols"].ToString() };
                                for (int i = 0xD800; i <= 0xDFFF; i++)
                                {
                                    obj.Body = obj.Body.Replace((char)i, ' ');
                                }
                                var key = obj.DateDeploy.ToString("yyyyMMddHHmm") + obj.ID;
                                var compactkey = string.Format(RedisKey.KeyCompanyNewsCompact, obj.ID);
                                if (redis.ContainsKey(compactkey))
                                    redis.Set(compactkey, compact);
                                else
                                    redis.Add(compactkey, compact);
                                var detailkey = string.Format(RedisKey.KeyCompanyNewsDetail, obj.ID);
                                if (redis.ContainsKey(detailkey))
                                    redis.Set(detailkey, obj);
                                else
                                    redis.Add(detailkey, obj);

                                if (!ls.Contains(key)) ls.Add(key);
                                #region Update category list
                                if (obj.TypeID.Contains("1"))
                                {
                                    if (!cate1.Contains(key)) cate1.Add(key);
                                }
                                else
                                {
                                    if (cate1.Contains(key)) cate1.Remove(key);
                                }
                                if (obj.TypeID.Contains("2"))
                                {
                                    if (!cate2.Contains(key)) cate2.Add(key);
                                }
                                else
                                {
                                    if (cate2.Contains(key)) cate2.Remove(key);
                                }
                                if (obj.TypeID.Contains("3"))
                                {
                                    if (!cate3.Contains(key)) cate3.Add(key);
                                }
                                else
                                {
                                    if (cate3.Contains(key)) cate3.Remove(key);
                                }
                                if (obj.TypeID.Contains("4"))
                                {
                                    if (!cate4.Contains(key)) cate4.Add(key);
                                }
                                else
                                {
                                    if (cate4.Contains(key)) cate4.Remove(key);
                                }
                                if (obj.TypeID.Contains("5"))
                                {
                                    if (!cate5.Contains(key)) cate5.Add(key);
                                }
                                else
                                {
                                    if (cate5.Contains(key)) cate5.Remove(key);
                                }
                                #endregion
                            }

                            //if (date != "")
                            //{
                            //remove bài trong ngày (dùng để xóa các tin thừa)
                            foreach (var item in rm)
                            {
                                if (ls.Contains(item)) continue;
                                var id = item.Substring(12);
                                var compactkey = string.Format(RedisKey.KeyCompanyNewsCompact, id);
                                if (redis.ContainsKey(compactkey))
                                    redis.Remove(compactkey);
                                var detailkey = string.Format(RedisKey.KeyCompanyNewsDetail, id);
                                if (redis.ContainsKey(detailkey))
                                    redis.Remove(detailkey);
                            }
                            //}

                            ls.Sort();
                            ls.Reverse();
                            if (redis.ContainsKey(keylist))
                                redis.Set(keylist, ls);
                            else
                                redis.Add(keylist, ls);
                            #region Update category list
                            cate1.Sort();
                            cate1.Reverse();
                            if (redis.ContainsKey(key1))
                                redis.Set(key1, cate1);
                            else
                                redis.Add(key1, cate1);
                            cate2.Sort();
                            cate2.Reverse();
                            if (redis.ContainsKey(key2))
                                redis.Set(key2, cate2);
                            else
                                redis.Add(key2, cate2);
                            cate3.Sort();
                            cate3.Reverse();
                            if (redis.ContainsKey(key3))
                                redis.Set(key3, cate3);
                            else
                                redis.Add(key3, cate3);
                            cate4.Sort();
                            cate4.Reverse();
                            if (redis.ContainsKey(key4))
                                redis.Set(key4, cate4);
                            else
                                redis.Add(key4, cate4);
                            cate5.Sort();
                            cate5.Reverse();
                            if (redis.ContainsKey(key5))
                                redis.Set(key5, cate5);
                            else
                                redis.Add(key5, cate5);
                            #endregion
                        }
                        catch (Exception ex)
                        {
                            log.WriteEntry(symbol + " : FN : " + ex.ToString(), EventLogEntryType.Error);
                            ret = false;
                        }
                        #endregion
                        #region Update top 100 news
                        var topkey = RedisKey.KeyTop20News;
                        var ndt = sql.GetCompanyNews("A", 100);
                        var topls = new List<StockNews>();
                        foreach (DataRow ndr in ndt.Rows)
                        {
                            var da = (DateTime)ndr["PostTime"];
                            topls.Add(new StockNews() { ID = int.Parse(ndr["ID"].ToString()), Body = "", DateDeploy = (DateTime)ndr["PostTime"], Image = "", Title = ndr["title"].ToString(), Sapo = "", TypeID = ndr["ConfigId"].ToString(), Symbol = ndr["StockSymbols"].ToString() });
                        }
                        if (redis.ContainsKey(topkey))
                            redis.Set(topkey, topls);
                        else
                            redis.Add(topkey, topls);
                        #endregion
                        break;
                    case "FND":
                        #region "Fund Transaction"
                        var fndkeylist = string.Format(RedisKey.FundHistoryKeys, symbol);
                        //var fndls = redis.ContainsKey(fndkeylist) ? redis.Get<List<String>>(fndkeylist) : new List<string>();
                        var fndls = new List<string>();
                        var fndt = sql.GetFundHistory(symbol, -1);
                        foreach (DataRow fndr in fndt.Rows)
                        {
                            var key = string.Format(RedisKey.FundHistory, symbol, ((DateTime)fndr["TradingDate"]).ToString("yyyyMMdd"));

                            var order = new FundHistory() { Symbol = symbol, TradeDate = (DateTime)fndr["TradingDate"], TransactionType = fndr["Buy_Sale"].ToString() == "s" ? "Bán" : "Mua", PlanVolume = double.Parse(fndr["RegisteredVol"].ToString()), TodayVolume = double.Parse(fndr["TodayTradingVol"].ToString()), AccumulateVolume = double.Parse(fndr["AccumVol"].ToString()), ExpiredDate = (DateTime)fndr["ExpireDate"] };
                            if (redis.ContainsKey(key))
                                redis.Set<FundHistory>(key, order);
                            else
                                redis.Add<FundHistory>(key, order);

                            if (!fndls.Contains(key)) fndls.Add(key);
                        }
                        fndls.Sort();
                        fndls.Reverse();
                        if (redis.ContainsKey(fndkeylist))
                            redis.Set<List<string>>(fndkeylist, fndls);
                        else
                            redis.Add<List<string>>(fndkeylist, fndls);
                        break;
                        #endregion
                    case "CI":

                        break;
                    case "CN":
                        #region CEO

                        var ceokey = string.Format(RedisKey.CeoKey, symbol);
                        var cdt = sql.GetCeosNew_Profile(symbol);
                        if (cdt.Rows.Count == 0)
                        {
                            if (redis.ContainsKey(ceokey)) redis.Remove(ceokey);
                        }
                        else
                        {
                            var ceo = new Ceo();
                            if (redis.ContainsKey(ceokey))
                            {
                                ceo = redis.Get<Ceo>(ceokey) ?? new Ceo();
                            }
                            ceo.CeoName = cdt.Rows[0]["CeoName"].ToString(); ceo.CeoBirthday = cdt.Rows[0]["CeoBirthday"].ToString(); ceo.CeoIdNo = cdt.Rows[0]["CeoIdNo"].ToString(); ceo.CeoAchievements = cdt.Rows[0]["CeoAchievements"].ToString(); ceo.CeoHomeTown = cdt.Rows[0]["CeoHomeTown"].ToString(); ceo.CeoSchoolDegree = cdt.Rows[0]["CeoLevel"].ToString();
                            ceo.CeoCode = cdt.Rows[0]["CeoCode"].ToString();

                            if (ceo.CeoBirthday.Contains("/"))
                            {
                                ceo.CeoBirthday = ceo.CeoBirthday.Substring(ceo.CeoBirthday.LastIndexOf("/") + 1);
                            }

                            try
                            {
                                //school title
                                var css = new List<CeoSchool>();
                                var sdt = sql.GetCeosNew_School(symbol);
                                foreach (DataRow sdr in sdt.Rows)
                                {
                                    css.Add(new CeoSchool() { CeoTitle = sdr["CeoTitle"].ToString(), SchoolTitle = sdr["SchoolTitle"].ToString(), SchoolYear = sdr["SchoolYear"].ToString() });
                                }
                                ceo.CeoSchool = css;
                            }
                            catch (Exception ex)
                            {
                                log.WriteEntry(symbol + " : CEO School : " + ex.ToString(), EventLogEntryType.Error);
                                ret = false;
                            }
                            try
                            {
                                //ceo position
                                var cps = new List<CeoPosition>();
                                var pdt = sql.GetCeosNew_Position(symbol);
                                foreach (DataRow pdr in pdt.Rows)
                                {
                                    var cp = new CeoPosition() { PositionTitle = pdr["PositionTitle"].ToString(), PositionCompany = pdr["PositionCompany"].ToString(), CeoSymbol = pdr["Symbol"].ToString(), CeoSymbolCenterId = int.Parse(pdr["TradeCenterId"].ToString()) };
                                    if (string.IsNullOrEmpty(cp.PositionTitle)) cp.PositionTitle = pdr["PositionName"].ToString();
                                    if (string.IsNullOrEmpty(cp.PositionCompany)) cp.PositionCompany = pdr["FullName"].ToString();

                                    //__/01/2007
                                    string cpd = pdr["CeoPosDate"].ToString();
                                    if (cpd.Contains("/"))
                                    {
                                        int day, month, year;
                                        if (!int.TryParse(cpd.Substring(0, cpd.IndexOf("/")), out day)) day = 0;
                                        cpd = cpd.Substring(cpd.IndexOf("/") + 1);
                                        if (!int.TryParse(cpd.Substring(0, cpd.IndexOf("/")), out month)) month = 0;
                                        cpd = cpd.Substring(cpd.IndexOf("/") + 1);
                                        if (!int.TryParse(cpd, out year)) year = 0;
                                        if (year == 0)
                                        {
                                            cp.CeoPosDate = "";
                                        }
                                        else if (day == 0 && month == 0)
                                        {
                                            cp.CeoPosDate = "" + year;
                                        }
                                        else if (month > 0 && day == 0)
                                        {
                                            cp.CeoPosDate = month + "/" + year;
                                        }
                                        else if (day > 0 && month > 0)
                                        {
                                            cp.CeoPosDate = day + "/" + month + "/" + year;
                                        }
                                        else
                                        {
                                            cp.CeoPosDate = "";
                                        }
                                    }

                                    cps.Add(cp);
                                }
                                ceo.CeoPosition = cps;
                            }
                            catch (Exception ex)
                            {
                                log.WriteEntry(symbol + " : CEO Position : " + ex.ToString(), EventLogEntryType.Error);
                                ret = false;
                            }
                            try
                            {
                                //asset
                                var cas = new List<CeoAsset>();
                                var adt = sql.GetCeosNew_Asset(symbol);
                                foreach (DataRow adr in adt.Rows)
                                {
                                    cas.Add(new CeoAsset() { Symbol = adr["Symbol"].ToString(), AssetVolume = double.Parse(adr["AssetVolume"].ToString()).ToString("#,##0"), UpdatedDate = ((DateTime)adr["UpdatedDate"]).ToString("dd/MM/yyyy") });
                                }
                                ceo.CeoAsset = cas;
                            }
                            catch (Exception ex)
                            {
                                log.WriteEntry(symbol + " : CEO Asset : " + ex.ToString(), EventLogEntryType.Error);
                                ret = false;
                            }
                            try
                            {
                                //relation
                                var crs = new List<CeoRelation>();
                                var rdt = sql.GetCeosNew_Relation(symbol);
                                foreach (DataRow rdr in rdt.Rows)
                                {
                                    crs.Add(new CeoRelation() { Symbol = rdr["Symbol"].ToString(), AssetVolume = double.Parse(rdr["AssetVolume"].ToString()).ToString("#,##0"), UpdatedDate = ((DateTime)rdr["UpdatedDate"]).ToString("dd/MM/yyyy"), Name = rdr["CeoName"].ToString(), CeoCode = rdr["CeoCode"].ToString(), RelationTitle = rdr["RelationTitle"].ToString() });
                                }
                                ceo.CeoRelation = crs;
                            }
                            catch (Exception ex)
                            {
                                log.WriteEntry(symbol + " : CEO Relation : " + ex.ToString(), EventLogEntryType.Error);
                                ret = false;
                            }
                            try
                            {
                                //process
                                var cos = new List<CeoProcess>();
                                var odt = sql.GetCeosNew_Process(symbol);
                                foreach (DataRow odr in odt.Rows)
                                {
                                    var begin = GetCeoDate(odr["ProcessBegin"].ToString());
                                    var end = GetCeoDate(odr["ProcessEnd"].ToString());
                                    var process = (begin != "" ? ("Từ " + begin + " ") : "") + (end != "" ? ((begin != "" ? "đến" : "Đến") + " " + end + "") : "");
                                    cos.Add(new CeoProcess() { ProcessBegin = odr["ProcessBegin"].ToString(), ProcessEnd = odr["ProcessEnd"].ToString(), ProcessDesc = process + (process == "" ? "" : " : ") + odr["ProcessDesc"].ToString(), Symbol = odr["Symbol"].ToString()});
                                }
                                ceo.CeoProcess = cos;
                            }
                            catch (Exception ex)
                            {
                                log.WriteEntry(symbol + " : CEO Process : " + ex.ToString(), EventLogEntryType.Error);
                                ret = false;
                            }
                            try
                            {
                                //news
                                var cns = new List<CeoNews>();
                                var wdt = sql.GetCeosNew_News(symbol);
                                var ids = "";
                                foreach (DataRow ndr in wdt.Rows)
                                {
                                    ids += "," + ndr["NewsId"];
                                }
                                if (ids != "")
                                {
                                    var wdt2 = sql.GetCeosNew_NewsDetail(ids);
                                    foreach (DataRow ndr in wdt2.Rows)
                                    {
                                        cns.Add(new CeoNews() { Title = ndr["News_Title"].ToString(), PublishDate = (DateTime)ndr["News_PublishDate"], NewsLink = string.Format("/{0}CA{1}/{2}.chn", ndr["News_Id"], ndr["Cat_ID"], CafeF.Redis.BL.Utils.UnicodeToKoDauAndGach(ndr["News_Title"].ToString())) });
                                    }
                                }
                                ceo.CeoNews = cns;
                            }
                            catch (Exception ex)
                            {
                                log.WriteEntry(symbol + " : CEO News : " + ex.ToString(), EventLogEntryType.Error);
                                ret = false;
                            }
                            if (redis.ContainsKey(ceokey))
                            {
                                redis.Set(ceokey, ceo);
                            }
                            else
                            {
                                redis.Add(ceokey, ceo);
                            }
                        }
                        #endregion
                        break;
                    case "FC":
                        #region Lịch sự kiện 
                        var lskdt = sql.GetLichSuKien(date);
                        var keys = redis.ContainsKey(RedisKey.KeyLichSuKien) ? redis.Get<List<string>>(RedisKey.KeyLichSuKien) : new List<string>();
                        var removals = keys.FindAll(s => s.Substring(0,8) == date.Replace(".", ""));
                        foreach(var removal in removals)
                        {
                            var key = string.Format(RedisKey.KeyLichSuKienObject, removal.Substring(removal.LastIndexOf(":") + 1));
                            if (redis.ContainsKey(key)) redis.Remove(key);
                            keys.Remove(removal);
                        }
                        foreach (DataRow ldr in lskdt.Rows)
                        {
                            var o = new LichSuKien() { ID = int.Parse(ldr["ID"].ToString()), LoaiSuKien = ldr["EventType_List"].ToString(), MaCK = ldr["StockSymbols"].ToString(), MaSan = 0, News_ID = ldr["News_ID"].ToString(), Title = ldr["EventTitle"].ToString(), NgayBatDau = ldr["NgayBatDau"].ToString(), NgayKetThuc = ldr["NgayKetThuc"].ToString(), NgayThucHien = ldr["NgayThucHien"].ToString(), TenCty = "", TomTat = "", PostDate = (DateTime)ldr["PostDate"] };
                            try
                            {
                                o.EventDate = (DateTime)ldr["EventDate"];
                            }
                            catch (Exception)
                            {
                                o.EventDate = DateTime.Parse("2000-01-01");
                            }
                            var key = string.Format(RedisKey.KeyLichSuKienObject, o.ID);
                            if (redis.ContainsKey(key))
                                redis.Set(key, o);
                            else
                                redis.Add(key, o);
                            key = string.Format(RedisKey.KeyLichSuKienObjectInList, o.EventDate.ToString("yyyyMMdd"), string.IsNullOrEmpty(o.LoaiSuKien.Trim()) ? "_" : o.LoaiSuKien, o.ID);
                            if (!keys.Contains(key)) keys.Add(key);
                        }
                        if (redis.ContainsKey(RedisKey.KeyLichSuKien))
                            redis.Set(RedisKey.KeyLichSuKien, keys);
                        else
                            redis.Add(RedisKey.KeyLichSuKien, keys);
                        #endregion
                        #region Lịch sự kiện tóm tắt
                        lskdt = sql.GetLichSuKienTomTat();
                        var lls = new List<LichSuKien>();
                        foreach (DataRow ldr in lskdt.Rows)
                        {
                            var o = new LichSuKien() { ID = int.Parse(ldr["ID"].ToString()), LoaiSuKien = ldr["EventType_List"].ToString(), MaCK = ldr["StockSymbols"].ToString(), MaSan = 0, News_ID = ldr["News_ID"].ToString(), Title = ldr["EventTitle"].ToString(), NgayBatDau = ldr["NgayBatDau"].ToString(), NgayKetThuc = ldr["NgayKetThuc"].ToString(), NgayThucHien = ldr["NgayThucHien"].ToString(), TenCty = "", TomTat = "", PostDate = (DateTime)ldr["PostDate"] };
                            try
                            {
                                o.EventDate = (DateTime)ldr["EventDate"];
                            }
                            catch (Exception)
                            {
                                o.EventDate = DateTime.Parse("2000-01-01");
                            }
                            lls.Add(o);
                        }
                        if (redis.ContainsKey(RedisKey.KeyLichSuKienTomTat))
                            redis.Set(RedisKey.KeyLichSuKienTomTat, lls);
                        else
                            redis.Add(RedisKey.KeyLichSuKienTomTat, lls);
                        #endregion
                        break;
                    case "FB":
                        #region Bond
                        var countries = SqlDb.GetBondCountry(symbol);
                        var types = new List<string>() { "1", "3", "5", "10" };
                        var bondkeys = new List<string>();
                        var cs = new List<string>();
                        foreach (DataRow dr in countries.Rows)
                        {
                            var country = dr["CountryName"].ToString();
                            if (!cs.Contains(country)) cs.Add(country);
                            foreach (var type in types)
                            {
                                var dt = SqlDb.GetBondValue(country, type);
                                if (dt.Rows.Count == 0) continue;
                                var o = new Bond() { BondCode = dt.Rows[0]["BondCode"].ToString(), BondCountry = dt.Rows[0]["CountryName"].ToString(), BondType = dt.Rows[0]["BondType"].ToString(), BondEnName = dt.Rows[0]["ENName"].ToString(), BondVnName = dt.Rows[0]["VNName"].ToString() };
                                var values = new List<BondValue>();
                                foreach (DataRow value in dt.Rows)
                                {
                                    values.Add(new BondValue() { TradeDate = (DateTime)value["TradeDate"], ClosePrice = double.Parse(value["ClosePrice"].ToString()) });
                                }
                                o.BondValues = values;
                                var key = string.Format(RedisKey.BondKey, country, type);
                                if (!bondkeys.Contains(key)) bondkeys.Add(key);
                                if (redis.ContainsKey(key))
                                    redis.Set(key, o);
                                else
                                    redis.Add(key, o);
                            }
                        }
                        foreach(var c in cs)
                        {
                            var existed = redis.SearchKeys(string.Format(RedisKey.BondKey, c, "*"));
                            foreach(var key in existed)
                            {
                                if (bondkeys.Contains(key)) continue;
                                if (redis.ContainsKey(key)) redis.Remove(key);
                            }
                        }
                        

                        #endregion
                        break;
                    default:
                        break;
                }
            }
            catch (Exception ex)
            {
                log.WriteEntry(updateKey + " : UpdateList : " + ex.ToString(), EventLogEntryType.Error);
                ret = false;
            }
            return ret;
        }
Exemplo n.º 12
0
        private void button3_Click(object sender, EventArgs e)
        {
            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
            var keylist = RedisKey.KeyAnalysisReport;
            var ls = (redis.ContainsKey(keylist)) ? redis.Get<List<string>>(keylist) : new List<string>();

            ls.Sort();
            ls.Reverse();
            if (redis.ContainsKey(keylist))
                redis.Set(keylist, ls);
            else
                redis.Add(keylist, ls);
        }
Exemplo n.º 13
0
        private void button2_Click(object sender, EventArgs e)
        {
            
            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);

            var test = redis.Get<Bond>(string.Format(RedisKey.BondKey, "Bồ Đào Nha", "3"));

            var countries = SqlDb.GetBondCountry("A");
            var types = new List<string>() {"1", "3", "5", "10"};
            foreach (DataRow dr in countries.Rows)
            {
                var country = dr["CountryName"].ToString();
                foreach (var type in types)
                {
                    var dt = SqlDb.GetBondValue(country, type);
                    if (dt.Rows.Count == 0) continue;
                    var o = new Bond() {BondCode = dt.Rows[0]["BondCode"].ToString(), BondCountry = dt.Rows[0]["CountryName"].ToString(), BondType = dt.Rows[0]["BondType"].ToString(), BondEnName = dt.Rows[0]["ENName"].ToString(), BondVnName = dt.Rows[0]["VNName"].ToString()};
                    var values = new List<BondValue>();
                    foreach (DataRow value in dt.Rows)
                    {
                        values.Add(new BondValue(){TradeDate = (DateTime)value["TradeDate"], ClosePrice = double.Parse(value["ClosePrice"].ToString())});
                    }
                    o.BondValues = values;
                    var key = string.Format(RedisKey.BondKey, country, type);
                    if (redis.ContainsKey(key))
                        redis.Set(key, o);
                    else
                        redis.Add(key, o);
                }
            }
        }
Exemplo n.º 14
0
        private bool UpdateStock(string symbol, List<string> related, ref SqlDb sql)
        {
            var ret = true;
            //log.WriteEntry(symbol + "-1-" + ret, EventLogEntryType.Information);
            try
            {
                var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
                var key = string.Format(RedisKey.Key, symbol.ToUpper());
                var bExisted = (redis.ContainsKey(key));
                var stock = bExisted ? redis.Get<Stock>(key) : new Stock() { Symbol = symbol };
                #region Update stock from sql
                //stock.Symbol = "AAA";
                //load stock data 

                //profile
                var profile = bExisted ? stock.CompanyProfile : new CompanyProfile { Symbol = stock.Symbol };
                var basicInfo = bExisted ? profile.basicInfos : new BasicInfo() { Symbol = stock.Symbol };
                var basicCommon = bExisted ? profile.basicInfos.basicCommon : new BasicCommon() { Symbol = stock.Symbol };
                var category = bExisted ? profile.basicInfos.category : new CategoryObject();
                var firstInfo = bExisted ? profile.basicInfos.firstInfo : new FirstInfo() { Symbol = stock.Symbol };
                var commonInfo = bExisted ? profile.commonInfos : new CommonInfo() { Symbol = stock.Symbol };
                //basic information
                #region SB
                if (!bExisted || related.Contains("SB"))
                {
                    try
                    {
                        var dt = sql.GetSymbolData(symbol);
                        if (dt.Rows.Count <= 0) return true;

                        var row = dt.Rows[0];

                        #region StockCompactInfo

                        var compactkey = string.Format(RedisKey.KeyCompactStock, symbol.ToUpper());
                        var compact = new StockCompactInfo() { Symbol = symbol.ToUpper(), TradeCenterId = int.Parse(row["TradeCenterId"].ToString()), CompanyName = row["CompanyName"].ToString(), EPS = double.Parse(row["EPS"].ToString()), FolderChart = row["FolderChart"].ToString(), ShowTradeCenter = row["ShowTradeCenter"].ToString().ToUpper() == "TRUE", IsBank = row["IsBank"].ToString().ToUpper() == "TRUE", IsCCQ = row["IsCCQ"].ToString().ToUpper() == "TRUE" };
                        if (redis.ContainsKey(compactkey))
                            redis.Set(compactkey, compact);
                        else
                            redis.Add(compactkey, compact);
                        #endregion

                        stock.Symbol = row["Symbol"].ToString();
                        stock.TradeCenterId = int.Parse(row["TradeCenterId"].ToString());
                        stock.IsDisabled = row["IsDisabled"].ToString() == "TRUE";
                        stock.StatusText = row["StatusText"].ToString();
                        stock.ShowTradeCenter = row["ShowTradeCenter"].ToString().ToUpper() == "TRUE";
                        stock.FolderImage = row["FolderChart"].ToString();
                        stock.IsBank = row["IsBank"].ToString() == "TRUE";
                        stock.IsCCQ = row["IsCCQ"].ToString().ToUpper() == "TRUE";

                        //profile - basicInfo
                        basicInfo.Name = row["CompanyName"].ToString();
                        basicInfo.TradeCenter = stock.TradeCenterId.ToString();

                        //profile - basicInfo - basicCommon
                        /*PE = double.Parse(row["PE"].ToString()),*/
                        basicCommon.AverageVolume = double.Parse(row["AVG10SS"].ToString());
                        basicCommon.Beta = double.Parse(row["Beta"].ToString());
                        basicCommon.EPS = double.Parse(row["EPS"].ToString());
                        basicCommon.TotalValue = double.Parse(row["MarketCap"].ToString());
                        basicCommon.ValuePerStock = double.Parse(row["BookValue"].ToString());
                        basicCommon.VolumeTotal = double.Parse(row["SLCPNY"].ToString());
                        basicCommon.OutstandingVolume = double.Parse(row["TotalShare"].ToString());
                        basicCommon.PE = basicCommon.EPS != 0 ? (double.Parse(row["LastPrice"].ToString()) / basicCommon.EPS) : 0;
                        basicCommon.EPSDate = row["EPSDate"].ToString();
                        basicCommon.CCQv3 = double.Parse(row["CCQv3"].ToString());
                        basicCommon.CCQv6 = double.Parse(row["CCQv6"].ToString());
                        basicCommon.CCQdate = DateTime.ParseExact(row["CCQdate"].ToString(), "yyyy.MM.dd", CultureInfo.InvariantCulture, DateTimeStyles.None);
                        basicInfo.basicCommon = basicCommon;

                        //profile - basicInfo - category
                        category.ID = int.Parse(row["CategoryId"].ToString());
                        category.Name = row["CategoryName"].ToString();
                        basicInfo.category = category;

                        //profile - basicInfo - firstInfo
                        firstInfo.FirstPrice = double.Parse(row["FirstPrice"].ToString());
                        firstInfo.FirstTrade = row["FirstTrade"].Equals(DBNull.Value) ? null : ((DateTime?)row["FirstTrade"]);
                        firstInfo.FirstVolume = double.Parse(row["FirstVolume"].ToString());
                        basicInfo.firstInfo = firstInfo;

                        profile.basicInfos = basicInfo;

                        //profile - commonInfo
                        commonInfo.Capital = double.Parse(row["VonDieuLe"].ToString());
                        commonInfo.Category = row["CategoryName"].ToString();
                        commonInfo.Content = row["About"].ToString();
                        commonInfo.OutstandingVolume = double.Parse(row["TotalShare"].ToString());
                        commonInfo.TotalVolume = double.Parse(row["SLCPNY"].ToString());
                        commonInfo.Content += "<p><b>Địa chỉ:</b> " + row["Address"].ToString() + "</p>";
                        commonInfo.Content += "<p><b>Điện thoại:</b> " + row["Phone"].ToString() + "</p>";
                        commonInfo.Content += "<p><b>Người phát ngôn:</b> " + row["Spokenman"].ToString() + "</p>";
                        if (!string.IsNullOrEmpty(row["Email"].ToString())) commonInfo.Content += "<p><b>Email:</b> <a href='mailto:" + row["Email"] + "'>" + row["Email"] + "</a></p>";
                        if (!string.IsNullOrEmpty(row["Website"].ToString())) commonInfo.Content += "<p><b>Website:</b> <a href='" + row["Website"] + "' target='_blank'>" + row["Website"] + "</a></p>";
                        commonInfo.AuditFirmName = row["AuditName"].ToString();
                        commonInfo.AuditFirmSite = row["AuditSite"].ToString().Trim();
                        commonInfo.ConsultantName = row["ConsultantName"].ToString();
                        commonInfo.ConsultantSite = row["ConsultantSite"].ToString();
                        commonInfo.BusinessLicense = row["BusinessLicense"].ToString();
                        commonInfo.ConsultantSymbol = row["ConsultantSymbol"].ToString().Trim().ToUpper();

                        profile.commonInfos = commonInfo;

                        //business plans
                        var plans = new List<BusinessPlan>();
                        if (row["HasPlan"].ToString() == "1")
                        {
                            plans.Add(new BusinessPlan() { Body = row["PlanNote"].ToString(), Date = (DateTime)row["PlanDate"], DividendsMoney = double.Parse(row["Dividend"].ToString()), DividendsStock = double.Parse(row["DivStock"].ToString()), ID = int.Parse(row["PlanId"].ToString()), IncreaseExpected = double.Parse(row["CapitalRaising"].ToString()), ProfitATax = double.Parse(row["NetIncome"].ToString()), ProfitBTax = double.Parse(row["TotalProfit"].ToString()), Revenue = double.Parse(row["TotalIncome"].ToString()), Symbol = stock.Symbol, Year = int.Parse(row["KYear"].ToString()) });
                        }
                        stock.BusinessPlans1 = plans;

                        var fdt = sql.GetPrevTradeInfo(symbol);
                        if (fdt.Rows.Count == 0)
                        {
                            stock.PrevTradeInfo = new List<StockFirstInfo>();
                        }
                        else
                        {
                            var tret = new List<StockFirstInfo>();
                            foreach (DataRow fdr in fdt.Rows)
                            {
                                tret.Add(new StockFirstInfo() { Floor = fdr["Floor"].ToString().ToUpper() == "HASTC" ? "HNX" : fdr["Floor"].ToString(), FirstDate = ((DateTime)fdr["FirstDate"]), FirstVolume = double.Parse(fdr["FirstVolume"].ToString()), FirstPrice = double.Parse(fdr["FirstPrice"].ToString()), EndDate = ((DateTime)fdr["EndDate"]) });
                            }
                            stock.PrevTradeInfo = tret;
                            //log.WriteEntry(symbol + " : BasicInfo : " + fdt.Rows.Count, EventLogEntryType.Error);

                        }
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : BasicInfo : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                #region SS
                //profile - subsidiaries
                if (!bExisted || related.Contains("SS"))
                {
                    try
                    {


                        var subsidiaries = new List<OtherCompany>();
                        var associates = new List<OtherCompany>();
                        var cdt = sql.GetChildrenCompany(stock.Symbol);
                        var i = 0;
                        foreach (DataRow cdr in cdt.Rows)
                        {
                            i++;
                            var child = new OtherCompany() { Name = cdr["CompanyName"].ToString(), Note = cdr["NoteInfo"].ToString(), OwnershipRate = double.Parse(cdr["Rate"].ToString()), Order = i, SharedCapital = double.Parse(cdr["TotalShareValue"].ToString()), Symbol = stock.Symbol, TotalCapital = double.Parse(cdr["CharterCapital"].ToString()) };
                            if (cdr["isCongTyCon"].ToString() == "1") subsidiaries.Add(child);
                            else associates.Add(child);
                        }
                        profile.Subsidiaries = subsidiaries;
                        profile.AssociatedCompanies = associates;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : Cty con : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                #region SF
                //profile - financePeriod
                if (!bExisted || related.Contains("SF"))
                {
                    try
                    {
                        var periods = new List<FinancePeriod>();
                        var financeInfo = new List<FinanceInfo>();

                        var fyt = sql.GetFinancePeriod(stock.Symbol);
                        FinancePeriod period = null;
                        var tmp = 0;
                        foreach (DataRow fyr in fyt.Rows)
                        {
                            if (period == null || tmp != int.Parse(fyr["Year"].ToString()) * 10 + int.Parse(fyr["QuarterType"].ToString()))
                            {
                                if (period != null) { period.UpdateTitle(); periods.Add(period); }
                                period = new FinancePeriod() { Quarter = int.Parse(fyr["QuarterType"].ToString()), Year = int.Parse(fyr["Year"].ToString()) };
                            }
                            tmp = int.Parse(fyr["Year"].ToString()) * 10 + int.Parse(fyr["QuarterType"].ToString());
                            switch (fyr["MaChiTieu"].ToString())
                            {
                                case "Audited":
                                    period.SubTitle = fyr["TieuDeNhom"].ToString();
                                    break;
                                case "QuarterModify":
                                    var qrt = fyr["TieuDeNhom"].ToString();
                                    var qrti = 0;
                                    if (qrt.EndsWith("T")) { period.QuarterTitle = qrt.Remove(qrt.Length - 1) + " tháng"; }
                                    else if (int.TryParse(qrt, out qrti) && qrti >= 1 && qrti < 5)
                                    {
                                        period.QuarterTitle = "Quý " + qrti;
                                    }
                                    else period.QuarterTitle = "";
                                    break;
                                case "YearModify":
                                    if (int.TryParse(fyr["TieuDeNhom"].ToString(), out qrti))
                                    {
                                        period.YearTitle = "Năm " + qrti;
                                    }
                                    else period.YearTitle = "";
                                    break;
                                case "FromDate":
                                    qrt = fyr["TieuDeNhom"].ToString();
                                    if (qrt.Contains("/"))
                                    {
                                        var begin = qrt.Substring(0, qrt.LastIndexOf("/"));
                                        if (begin.Contains("/"))
                                        {
                                            begin = begin.Substring(begin.IndexOf("/") + 1) + "/" + begin.Substring(0, begin.IndexOf("/"));
                                        }
                                        period.BeginTitle = begin;
                                    }
                                    break;
                                case "ToDate":
                                    qrt = fyr["TieuDeNhom"].ToString();
                                    if (qrt.Contains("/"))
                                    {
                                        var end = qrt.Substring(0, qrt.LastIndexOf("/"));
                                        if (end.Contains("/"))
                                        {
                                            end = end.Substring(end.IndexOf("/") + 1) + "/" + end.Substring(0, end.IndexOf("/"));
                                        }
                                        period.EndTitle = end;
                                    }

                                    break;
                                default:
                                    break;
                            }
                        }
                        if (period != null) { period.UpdateTitle(); periods.Add(period); }
                        profile.FinancePeriods = periods;

                        //profile - financeInfo

                        var fit = sql.GetChiTieuFinance(stock.Symbol);
                        var fvt = sql.GetFinanceData(stock.Symbol);
                        var groupId = 0;
                        FinanceInfo info = null;
                        foreach (DataRow fir in fit.Rows)
                        {
                            if (info == null || groupId != int.Parse(fir["LoaiChiTieu"].ToString()))
                            {
                                if (info != null) financeInfo.Add(info);
                                info = new FinanceInfo() { NhomChiTieuId = groupId, Symbol = stock.Symbol, TenNhomChiTieu = fir["TenLoaiChiTieu"].ToString() };
                            }
                            groupId = int.Parse(fir["LoaiChiTieu"].ToString());
                            var chiTieu = new FinanceChiTieu() { ChiTieuId = fir["MaChiTieu"].ToString(), TenChiTieu = fir["TieuDeKhac"].ToString() };
                            if (fir["MaChiTieu"].ToString() == "ROA")
                            {
                                int b = 0;
                            }
                            foreach (var financePeriod in periods)
                            {
                                var fvrs = fvt.Select("MaChiTieu = '" + fir["MaChiTieu"] + "' AND Year = " + financePeriod.Year + " AND QuarterType = " + financePeriod.Quarter);
                                if (fvrs.Length > 0)
                                {
                                    chiTieu.Values.Add(new FinanceValue() { Quarter = financePeriod.Quarter, Year = financePeriod.Year, Value = double.Parse(fvrs[0]["FinanceValue"].ToString()) });
                                }
                                else
                                {
                                    chiTieu.Values.Add(new FinanceValue() { Quarter = financePeriod.Quarter, Year = financePeriod.Year, Value = 0 });
                                }
                            }

                            info.ChiTieus.Add(chiTieu);
                        }
                        if (info != null) financeInfo.Add(info);
                        profile.financeInfos = financeInfo;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : FinanceInfo : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                #region SC
                //profile - leader
                if (!bExisted || related.Contains("SC"))
                {
                    try
                    {
                        var leaders = new List<Leader>();
                        var ldt = sql.GetCeos(stock.Symbol);
                        foreach (DataRow ldr in ldt.Rows)
                        {
                            leaders.Add(new Leader() { GroupID = ldr["ParentId"].ToString(), Name = ldr["FullName"].ToString(), Positions = ldr["TenNhom"].ToString() });
                        }
                        profile.Leaders = leaders;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : Leaders : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                #region SH
                //profile - owner
                if (!bExisted || related.Contains("SH"))
                {
                    try
                    {
                        var owners = new List<MajorOwner>();
                        var odt = sql.GetShareHolders(stock.Symbol);
                        foreach (DataRow odr in odt.Rows)
                        {
                            owners.Add(new MajorOwner() { Name = odr["FullName"].ToString(), Rate = double.Parse(odr["ShareHoldPct"].ToString()), ToDate = (DateTime)odr["DenNgay"], Volume = double.Parse(odr["SoCoPhieu"].ToString()) });
                        }
                        profile.MajorOwners = owners;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : Owners : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                #region SCN
                //profile - CEO
                if (!bExisted || related.Contains("SCN"))
                {
                    try
                    {
                        var ceos = new List<StockCeo>();
                        var cdt = sql.GetCeosNew(stock.Symbol);
                        foreach (DataRow cdr in cdt.Rows)
                        {
                            var ceo = new StockCeo() { CeoId = int.Parse(cdr["CeoId"].ToString()), CeoCode = cdr["CeoCode"].ToString(), GroupID = int.Parse(cdr["PositionType"].ToString()), Name = (cdr["CeoGender"].ToString().ToUpper() == "M" ? "Ông " : (cdr["CeoGender"].ToString().ToUpper() == "F" ? "Bà " : "")) + cdr["CeoName"].ToString(), Positions = cdr["PositionName"].ToString() };
                            ceo.Process = "";
                            //process
                            var process = cdr["CeoProfileShort"].ToString();
                            if (process != "")
                            {
                                var begin = GetCeoDate(process.Substring(0, process.IndexOf("---")));
                                process = process.Substring(process.IndexOf("---") + 3);
                                var end = GetCeoDate(process.Substring(0, process.IndexOf("---")));
                                process = process.Substring(process.IndexOf("---") + 3);
                                var desc = process;
                                process = (begin != "" ? ("Từ " + begin + " ") : "") + (end != "" ? ((begin != "" ? "đến" : "Đến") + " " + end + "") : "");
                                ceo.Process = process + (process == "" ? "" : " : ") + desc;
                                if (ceo.Process.Length > 80)
                                {
                                    ceo.Process = ceo.Process.Substring(0, 80) + "...";
                                }
                            }


                            var birthday = cdr["CeoBirthday"].ToString();
                            if (birthday.Contains("/"))
                            {
                                int year;
                                if (!int.TryParse(birthday.Substring(birthday.LastIndexOf("/") + 1), out year)) year = 0;
                                if (year > 0)
                                {
                                    if (year < 100) year = 1900 + year;
                                    ceo.Age = year;
                                }
                            }
                            ceos.Add(ceo);
                        }
                        profile.AssociatedCeo = ceos;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : CEO New : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                stock.CompanyProfile = profile;
                /*================================*/

                #region SD
                //dividend histories
                if (!bExisted || related.Contains("SD"))
                {
                    try
                    {
                        var divs = new List<DividendHistory>();
                        var ddt = sql.GetDividendHistory(stock.Symbol);
                        foreach (DataRow ddr in ddt.Rows)
                        {
                            divs.Add(new DividendHistory() { DonViDoiTuong = ddr["DonViDoiTuong"].ToString(), NgayGDKHQ = (DateTime)ddr["NgayGDKHQ"], GhiChu = ddr["GhiChu"].ToString(), SuKien = ddr["SuKien"].ToString(), Symbol = stock.Symbol, TiLe = ddr["TiLe"].ToString() });
                        }
                        stock.DividendHistorys = divs;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : Dividend : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                #region SA
                //báo cáo phân tích
                if (!bExisted || related.Contains("SA"))
                {
                    try
                    {
                        var reports = new List<Reports>();
                        var rdt = sql.GetAnalysisReports(stock.Symbol);
                        foreach (DataRow rdr in rdt.Rows)
                        {
                            reports.Add(new Reports() { ID = int.Parse(rdr["ID"].ToString()), Title = rdr["title"].ToString(), DateDeploy = (DateTime)rdr["PublishDate"], ResourceCode = rdr["Source"].ToString(), IsHot = rdr["IsHot"].ToString().ToLower() == "true" });
                        }
                        stock.Reports3 = reports;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : AnalyseReport : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                #region SCA
                //công ty cùng ngành
                if (!bExisted || related.Contains("SCA"))
                {
                    try
                    {
                        var samecateCompanies = new List<StockShortInfo>();
                        var scdt = sql.GetSameCateCompanies(stock.Symbol);
                        foreach (DataRow scdr in scdt.Rows)
                        {
                            samecateCompanies.Add(new StockShortInfo() { Symbol = scdr["StockSymbol"].ToString(), TradeCenterId = int.Parse(scdr["TradeCenterId"].ToString()), Name = scdr["FullName"].ToString(), EPS = double.Parse(scdr["EPS"].ToString()) });
                        }
                        stock.SameCategory = samecateCompanies;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : SameCate : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                #region SEPS
                //eps tương đương
                if (!bExisted || related.Contains("SEPS"))
                {
                    try
                    {
                        var sameEPSCompanies = new List<StockShortInfo>();
                        var sedt = sql.GetSameEPSCompanies(stock.Symbol);
                        foreach (DataRow sedr in sedt.Rows)
                        {
                            sameEPSCompanies.Add(new StockShortInfo() { Symbol = sedr["StockSymbol"].ToString(), TradeCenterId = int.Parse(sedr["TradeCenterId"].ToString()), Name = sedr["FullName"].ToString(), EPS = double.Parse(sedr["EPS"].ToString()), MarketValue = double.Parse(sedr["MarketCap"].ToString()) });
                        }
                        stock.SameEPS = sameEPSCompanies;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : SameEPS : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                #region SPE
                //pe tương đương
                if (!bExisted || related.Contains("SPE"))
                {
                    try
                    {
                        var samePECompanies = new List<StockShortInfo>();
                        var spdt = sql.GetSamePECompanies(stock.Symbol);
                        foreach (DataRow spdr in spdt.Rows)
                        {
                            samePECompanies.Add(new StockShortInfo() { Symbol = spdr["StockSymbol"].ToString(), TradeCenterId = int.Parse(spdr["TradeCenterId"].ToString()), Name = spdr["FullName"].ToString(), EPS = double.Parse(spdr["EPS"].ToString()), MarketValue = double.Parse(spdr["MarketCap"].ToString()) });
                        }
                        stock.SamePE = samePECompanies;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : SamePE : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                //stock history
                var history = bExisted ? stock.StockPriceHistory : new StockCompactHistory();

                #region SP
                //stock history - price
                if (!bExisted || related.Contains("SP"))
                {
                    try
                    {
                        var price = new List<PriceCompactHistory>();
                        var pdt = sql.GetPriceHistory(stock.Symbol, 11);
                        foreach (DataRow pdr in pdt.Rows)
                        {
                            price.Add(new PriceCompactHistory() { ClosePrice = double.Parse(pdr["Price"].ToString()), BasicPrice = double.Parse(pdr["BasicPrice"].ToString()), Ceiling = double.Parse(pdr["Ceiling"].ToString()), Floor = double.Parse(pdr["Floor"].ToString()), Volume = double.Parse(pdr["Volume"].ToString()), TotalValue = double.Parse(pdr["TotalValue"].ToString()), TradeDate = (DateTime)pdr["TradeDate"], AgreedVolume = double.Parse(pdr["AgreedVolume"].ToString()), AgreedValue = double.Parse(pdr["AgreedValue"].ToString()) });
                        }
                        history.Price = price;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : Price : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                #region SO
                //stock history - order
                if (!bExisted || related.Contains("SO"))
                {
                    try
                    {
                        var order = new List<OrderCompactHistory>();
                        var hodt = sql.GetOrderHistory(stock.Symbol, 11);
                        foreach (DataRow hodr in hodt.Rows)
                        {
                            order.Add(new OrderCompactHistory() { AskAverageVolume = double.Parse(hodr["AskAverage"].ToString()), AskVolume = double.Parse(hodr["Offer_Volume"].ToString()), BidAverageVolume = double.Parse(hodr["BidAverage"].ToString()), BidVolume = double.Parse(hodr["Bid_Volume"].ToString()), TradeDate = (DateTime)hodr["Trading_Date"] });
                        }
                        history.Orders = order;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : Order : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                #region SFT
                //stock history - foreign
                if (!bExisted || related.Contains("SFT"))
                {
                    try
                    {
                        var foreign = new List<ForeignCompactHistory>();
                        var fdt = sql.GetForeignHistory(stock.Symbol, 11);
                        foreach (DataRow fdr in fdt.Rows)
                        {
                            foreign.Add(new ForeignCompactHistory() { BuyValue = double.Parse(fdr["Buying_Value"].ToString()), SellValue = double.Parse(fdr["Selling_Value"].ToString()), NetVolume = double.Parse(fdr["FNetVolume"].ToString()), NetValue = double.Parse(fdr["FNetValue"].ToString()), TradeDate = (DateTime)fdr["Trading_Date"] });
                        }
                        history.Foreign = foreign;
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : Foreign : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                stock.StockPriceHistory = history;
                /*====================*/

                #region SN
                //tin tức và sự kiện
                if (!bExisted || related.Contains("SN"))
                {
                    try
                    {
                        //var news = new List<StockNews>();
                        //var ndt = sql.GetCompanyNews(stock.Symbol, -1);
                        //foreach (DataRow ndr in ndt.Rows)
                        //{
                        //    news.Add(new StockNews() { DateDeploy = (DateTime)ndr["PostTime"], ID = int.Parse(ndr["Id"].ToString()), Title = ndr["Title"].ToString(), TypeID = ndr["ConfigId"].ToString() });
                        //}
                        //stock.StockNews = news;
                        var keylist = string.Format(RedisKey.KeyCompanyNewsByStock, stock.Symbol, 0); //Tất cả
                        var ls = new List<string>();
                        var pdt = sql.GetCompanyNews(stock.Symbol, -1);

                        var key1 = string.Format(RedisKey.KeyCompanyNewsByStock, stock.Symbol, 1); //Tình hình SXKD & Phân tích khác
                        var key2 = string.Format(RedisKey.KeyCompanyNewsByStock, stock.Symbol, 2); // Cổ tức - Chốt quyền
                        var key3 = string.Format(RedisKey.KeyCompanyNewsByStock, stock.Symbol, 3); // Thay đổi nhân sự
                        var key4 = string.Format(RedisKey.KeyCompanyNewsByStock, stock.Symbol, 4); // Tăng vốn - Cổ phiếu quỹ
                        var key5 = string.Format(RedisKey.KeyCompanyNewsByStock, stock.Symbol, 5); // GD cđ lớn & cđ nội bộ
                        var cate1 = new List<string>();
                        var cate2 = new List<string>();
                        var cate3 = new List<string>();

                        var cate4 = new List<string>();
                        var cate5 = new List<string>();
                        var stocknews = new List<StockNews>();
                        foreach (DataRow rdr in pdt.Rows)
                        {
                            var compact = new StockNews() { ID = int.Parse(rdr["ID"].ToString()), Body = "", DateDeploy = (DateTime)rdr["PostTime"], Image = "", Title = rdr["title"].ToString(), Sapo = "", TypeID = rdr["ConfigId"].ToString(), Symbol = rdr["StockSymbols"].ToString() };
                            var obj = new StockNews() { ID = int.Parse(rdr["ID"].ToString()), Body = rdr["Content"].ToString(), DateDeploy = (DateTime)rdr["PostTime"], Image = rdr["ImagePath"].ToString(), Title = rdr["title"].ToString(), Sapo = rdr["SubContent"].ToString(), TypeID = rdr["ConfigId"].ToString(), Symbol = rdr["StockSymbols"].ToString() };
                            for (int i = 0xD800; i <= 0xDFFF; i++)
                            {
                                obj.Body = obj.Body.Replace((char)i, ' ');
                            }

                            if (stocknews.Count < 6) { stocknews.Add(compact); }
                            var newskey = obj.DateDeploy.ToString("yyyyMMddHHmm") + obj.ID;
                            var compactkey = string.Format(RedisKey.KeyCompanyNewsCompact, obj.ID);
                            var detailkey = string.Format(RedisKey.KeyCompanyNewsDetail, obj.ID);
                            if (redis.ContainsKey(compactkey))
                                redis.Set(compactkey, compact);
                            else
                                redis.Add(compactkey, compact);
                            if (redis.ContainsKey(detailkey))
                                redis.Set(detailkey, obj);
                            else
                                redis.Add(detailkey, obj);

                            if (!ls.Contains(newskey)) ls.Add(newskey);
                            #region Update category list
                            if (obj.TypeID.Contains("1"))
                            {
                                if (!cate1.Contains(newskey)) cate1.Add(newskey);
                            }
                            else
                            {
                                if (cate1.Contains(newskey)) cate1.Remove(newskey);
                            }
                            if (obj.TypeID.Contains("2"))
                            {
                                if (!cate2.Contains(newskey)) cate2.Add(newskey);
                            }
                            else
                            {
                                if (cate2.Contains(newskey)) cate2.Remove(newskey);
                            }
                            if (obj.TypeID.Contains("3"))
                            {
                                if (!cate3.Contains(newskey)) cate3.Add(newskey);
                            }
                            else
                            {
                                if (cate3.Contains(newskey)) cate3.Remove(newskey);
                            }
                            if (obj.TypeID.Contains("4"))
                            {
                                if (!cate4.Contains(newskey)) cate4.Add(newskey);
                            }
                            else
                            {
                                if (cate4.Contains(newskey)) cate4.Remove(newskey);
                            }
                            if (obj.TypeID.Contains("5"))
                            {
                                if (!cate5.Contains(newskey)) cate5.Add(newskey);
                            }
                            else
                            {
                                if (cate5.Contains(newskey)) cate5.Remove(newskey);
                            }
                            #endregion
                        }
                        stock.StockNews = stocknews;

                        ls.Sort();
                        ls.Reverse();
                        if (redis.ContainsKey(keylist))
                            redis.Set(keylist, ls);
                        else
                            redis.Add(keylist, ls);
                        #region Update category list
                        cate1.Sort();
                        cate1.Reverse();
                        if (redis.ContainsKey(key1))
                            redis.Set(key1, cate1);
                        else
                            redis.Add(key1, cate1);
                        cate2.Sort();
                        cate2.Reverse();
                        if (redis.ContainsKey(key2))
                            redis.Set(key2, cate2);
                        else
                            redis.Add(key2, cate2);
                        cate3.Sort();
                        cate3.Reverse();
                        if (redis.ContainsKey(key3))
                            redis.Set(key3, cate3);
                        else
                            redis.Add(key3, cate3);
                        cate4.Sort();
                        cate4.Reverse();
                        if (redis.ContainsKey(key4))
                            redis.Set(key4, cate4);
                        else
                            redis.Add(key4, cate4);
                        cate5.Sort();
                        cate5.Reverse();
                        if (redis.ContainsKey(key5))
                            redis.Set(key5, cate5);
                        else
                            redis.Add(key5, cate5);
                        #endregion
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : News : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                #region SL
                //if (false)
                if (!bExisted || related.Contains("SL"))
                {
                    try
                    {
                        var lldt = sql.GetLandProject(symbol);
                        var adt = sql.GetLandProject_Area(symbol);
                        var pdt = sql.GetLandProject_Profit(symbol);
                        foreach (DataRow ldr in lldt.Rows)
                        {
                            var bdskey = string.Format(RedisKey.BDSKey, ldr["MaCK"].ToString(),  ldr["MaTienDo"].ToString());
                            TienDoBDS o;
                            try
                            {
                                o = redis.Get<TienDoBDS>(bdskey) ?? new TienDoBDS();
                            }
                            catch (Exception) { o = new TienDoBDS(); }
                            o.MaCK = ldr["MaCK"].ToString(); o.MaTienDo = ldr["MaTienDo"].ToString(); o.TenDuAn = ldr["TenDuAn"].ToString(); o.HinhThucKinhDoanh = ldr["HinhThucKinhDoanh"].ToString(); o.DiaDiem = ldr["DiaDiem"].ToString(); o.ThanhPho = ldr["ThanhPho"].ToString(); o.TongVon = decimal.Parse(ldr["TongVon"].ToString()); o.Donvi = ldr["Donvi"].ToString(); o.TyLeGhopVon = ldr["TyLeGhopVon"].ToString(); o.TyLeDenBu = ldr["TyLeDenBu"].ToString(); o.GhiChu = ldr["GhiChu"].ToString(); o.MoTa = ldr["Mota"].ToString(); o.URL = ldr["URL"].ToString();
                            o.ID = int.Parse(ldr["ID"].ToString());
                            DateTime d;
                            if (DateTime.TryParse(ldr["ViewDate"].ToString(), out d))
                            {
                                o.ViewDate = d;
                            }
                            var adrs = adt.Select("MaTienDo='" + o.MaTienDo + "'");
                            var als = new List<TienDoBDSDienTich>();
                            foreach (var adr in adrs)
                            {
                                als.Add(new TienDoBDSDienTich() { MaTienDo = o.MaTienDo, DienTich = decimal.Parse(adr["DienTich"].ToString()), LoaiDienTich = adr["LoaiDienTich"].ToString() });
                            }
                            o.DienTichs = als;

                            var pdrs = pdt.Select("MaTienDo='" + o.MaTienDo + "'");
                            var pls = new List<TienDoBDSLoiNhuan>();
                            foreach (var pdr in pdrs)
                            {
                                pls.Add(new TienDoBDSLoiNhuan() { MaTienDo = o.MaTienDo, LoiNhuanDoanhThu = decimal.Parse(pdr["LoiNhuanDoanhThu"].ToString()), LoaiLoiNhuan = pdr["LoaiLoiNhuan"].ToString() });
                            }
                            o.LoiNhuans = pls;

                            if (redis.ContainsKey(bdskey))
                                redis.Set(bdskey, o);
                            else
                                redis.Add(bdskey, o);
                        }
                     
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(symbol + " : TienDoBDS : " + ex.ToString(), EventLogEntryType.Error);
                        ret = false;
                    }
                }
                #endregion

                #endregion

                if (redis.ContainsKey(key))
                    redis.Set<Stock>(key, stock);
                else
                    redis.Add<Stock>(key, stock);
            }
            catch (Exception ex)
            {
                log.WriteEntry(symbol + ": " + ex.ToString(), EventLogEntryType.Error);
                ret = false;
            }

            return ret;
        }
Exemplo n.º 15
0
        public void UpdateCeoImage()
        {
            try
            {
                if ((ConfigurationManager.AppSettings["CeoImageAllowance"] ?? "") != "TRUE") return;

                var bfirstTime = true;
                //Thread.Sleep(index * 1000);
                var sql = new SqlDb();
                var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
                while (ServiceStarted)
                {
                    try
                    {
                        if (!bfirstTime) Thread.Sleep(reportInterval);
                        bfirstTime = false;

                        sql.OpenDb();
                        var ldt = sql.GetAllLandProjects();
                        //var cdt = sql.GetAllCeos();
                        sql.CloseDb();

                        landImages = GetAllLandImages();
                        var keys = redis.SearchKeys(string.Format(RedisKey.BDSKey, "*", "*"));
                        foreach(var key in keys)
                        {
                            var t = key.Substring(key.IndexOf(":tiendocode:"), key.IndexOf(":Object") - key.IndexOf(":tiendocode:")).Replace(":tiendocode:", "");
                            if (ldt.Select("MaTienDo = '" + t + "'").Length == 0)
                            {
                                redis.Remove(key);
                                continue;
                            }
                            var o = redis.Get<TienDoBDS>(key);
                            if(o==null) continue;
                            var s = o.MaTienDo;
                            if (string.IsNullOrEmpty(s)) continue;
                            o.BDSImages = landImages.FindAll(i => i.ToUpper().StartsWith(s));
                            redis.Set(key, o);
                        }

                        ceoPhotos = GetCeoPhotos();
                        foreach (var photo in ceoPhotos)
                        {
                            if (!photo.Contains(".")) continue;
                            var code = photo.Substring(0, photo.IndexOf("."));
                            if (redis.ContainsKey(string.Format(RedisKey.CeoImage, code)))
                            {
                                redis.Set(string.Format(RedisKey.CeoImage, code), photo);
                            }
                            else
                            {
                                redis.Add(string.Format(RedisKey.CeoImage, code), photo);
                            }
                            //var o = redis.Get<Ceo>(string.Format(RedisKey.CeoKey, code));
                            //if (o == null) continue;
                            //o.CeoImage = photo;
                            //redis.Set(string.Format(RedisKey.CeoKey, code), o);
                        }
                        var keywords = SqlDb.GetGoogleTag(-1);
                        var ls = new List<string>();
                        foreach (DataRow keyword in keywords.Rows)
                        {
                            if(!ls.Contains(keyword["keyword"].ToString())) ls.Add(keyword["keyword"].ToString());
                        }
                        //if (redis.ContainsKey(RedisKey.GoogleTag))
                        //    redis.Set(RedisKey.GoogleTag, ls);
                        //else
                        //    redis.Add(RedisKey.GoogleTag, ls);
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry("UpdateCeoImage - " + ex.ToString(), EventLogEntryType.Error);
                    }
                }
            }
            catch (Exception ex)
            {
                log.WriteEntry("UpdateCeoImage - " + ex.ToString(), EventLogEntryType.Error);
            }
        }
Exemplo n.º 16
0
        public void GetBCTC()
        {
            try
            {
                if ((ConfigurationManager.AppSettings["BCTCAllowance"] ?? "") != "TRUE") return;

                var bfirstTime = true;
                Thread.Sleep(index * 1000);
                var sql = new SqlDb();
                while (ServiceStarted)
                {
                    try
                    {
                        if (!bfirstTime) Thread.Sleep(reportInterval);
                        bfirstTime = false;
                        //log.WriteEntry("BCTC : Started", EventLogEntryType.Information);
                        //string user = ConfigurationManager.AppSettings["user"]??"";
                        //string pass = ConfigurationManager.AppSettings["pass"]??"";
                        //string domain = ConfigurationManager.AppSettings["domain"]??"";
                        //log.WriteEntry("BCTC : " + user + "-" + pass + "-" + domain + "-" + (Update_DanhSach_BCTC.impersonateValidUser(user, domain, pass)), EventLogEntryType.Information);
                        var full = Update_DanhSach_BCTC.GetAllData();

                        if (full.Rows.Count == 0) continue;
                        //log.WriteEntry("BCTC : " + full.Rows[0]["Symbol"], EventLogEntryType.Information);
                        //sql.OpenDb();
                        //var sdt = sql.GetSymbolList(-1);
                        //sql.CloseDb();
                        var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
                        var sls = redis.Get<List<StockCompact>>(RedisKey.KeyStockList) ?? new List<StockCompact>();
                        foreach (var stock in sls)
                        {
                            var symbol = stock.Symbol;
                            //var obj = new FinanceReport() { Symbol = symbol, HtmlContent = Update_DanhSach_BCTC.ReturnHTML_BCTC(full.Select("Symbol = '" + symbol + "'")) };
                            var obj = Update_DanhSach_BCTC.ReturnHTML_BCTC(full.Select("Symbol = '" + symbol + "'"));
                            var key = String.Format(RedisKey.KeyFinanceReport, symbol);
                            if (redis.ContainsKey(key))
                                redis.Set(key, obj);
                            else
                                redis.Add(key, obj);
                        }
                        //log.WriteEntry("BCTC : Done", EventLogEntryType.Information);
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(ex.ToString(), EventLogEntryType.Error);
                    }
                }
            }
            catch (Exception ex)
            {
                log.WriteEntry(ex.ToString(), EventLogEntryType.Error);
            }
            finally
            {
                //Thread.CurrentThread.Abort();
            }
        }
Exemplo n.º 17
0
        private void button8_Click(object sender, EventArgs e)
        {
            var symbol = "VIC";

            var key = String.Format(RedisKey.KeyFinanceReport, symbol);

            var obj = new FinanceReport() { HtmlContent = FinanceReportData.ReturnHTML_BCTC("VIC"), Symbol = symbol };

            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
            if (redis.ContainsKey(key))
                redis.Set(key, obj);
            else
                redis.Add(key, obj);
        }
Exemplo n.º 18
0
 private void UpdateTopStock(string center, string type, ref RedisClient redis, ref DataTable pdt)
 {
     var key = string.Format(RedisKey.KeyTopStock, center, type);
     var pdrs = pdt.Select("Center='" + center + "' AND SType = '" + type + "'");
     var ls = new List<TopStock>();
     foreach (var pdr in pdrs)
     {
         ls.Add(new TopStock() { Symbol = pdr["Symbol"].ToString(), Price = double.Parse(pdr["Price"].ToString()), BasicPrice = double.Parse(pdr["BasicPrice"].ToString()), EPS = double.Parse(pdr["EPS"].ToString()), MarketCap = double.Parse(pdr["MarketCap"].ToString()), PE = double.Parse(pdr["PE"].ToString()), Volume = double.Parse(pdr["Volume"].ToString()) });
     }
     if (redis.ContainsKey(key))
         redis.Set(key, ls);
     else
         redis.Add(key, ls);
 }
Exemplo n.º 19
0
 private void button9_Click(object sender, EventArgs e)
 {
     var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
     var skey = RedisKey.KeyStockList;
     var sdt = SqlDb.GetSymbolList(-1);
     var sls = new List<StockCompact>();
     var hnx = new List<StockCompact>();
     var hsx = new List<StockCompact>();
     var upc = new List<StockCompact>();
     foreach (DataRow sdr in sdt.Rows)
     {
         var stock = new StockCompact() { Symbol = sdr["Symbol"].ToString(), CategoryId = int.Parse(sdr["StockIndustryId"].ToString()), TradeCenterId = int.Parse(sdr["TradeCenterId"].ToString()) };
         sls.Add(stock);
         switch (stock.TradeCenterId)
         {
             case 1: hsx.Add(stock); break;
             case 2: hnx.Add(stock); break;
             case 9: upc.Add(stock); break;
         }
     }
     if (redis.ContainsKey(skey))
         redis.Set(skey, sls);
     else
         redis.Add(skey, sls);
     skey = string.Format(RedisKey.KeyStockListByCenter, "1");
     if (redis.ContainsKey(skey))
         redis.Set(skey, hsx);
     else
         redis.Add(skey, hsx);
     skey = string.Format(RedisKey.KeyStockListByCenter, "2");
     if (redis.ContainsKey(skey))
         redis.Set(skey, hnx);
     else
         redis.Add(skey, hnx);
     skey = string.Format(RedisKey.KeyStockListByCenter, "9");
     if (redis.ContainsKey(skey))
         redis.Set(skey, upc);
     else
         redis.Add(skey, upc);
 }
Exemplo n.º 20
0
        public void ExecuteTask()
        {
            try
            {
                var isTrading = false;
                var bfirstTime = true;
                var isBeginTrading = false;
                var isEndTrading = false;
                var ss = new List<StockCompact>();
                var keys = new List<string>();
                var priceKeys = new List<string>();
                var syms = new List<string>();
                var objs = new Dictionary<string, SessionPriceData>();
                var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
                var redisPrice = new RedisClient(ConfigRedis.PriceHost, ConfigRedis.PricePort);
                while (ServiceStarted)
                {
                    try
                    {
                        var b = Utils.InTradingTime(TradeCenterId);
                        isBeginTrading = (!isTrading && b);
                        isEndTrading = (isTrading && !b);
                        isTrading = b;
                        if (!bfirstTime) Thread.Sleep(isTrading ? tradeInterval : noTradeInterval);
                        if (bfirstTime || isBeginTrading)
                        {
                            var key = string.Format(RedisKey.KeyStockListByCenter, TradeCenterId);
                            ss = redis.Get<List<StockCompact>>(key);
                            keys = new List<string>();
                            syms = new List<string>();
                            objs = new Dictionary<string, SessionPriceData>();
                            foreach (var s in ss)
                            {
                                keys.Add(string.Format(RedisKey.RealtimeSessionPrice, s.Symbol));
                                priceKeys.Add(string.Format(RedisKey.PriceKey, s.Symbol));
                                syms.Add(s.Symbol);
                                objs.Add(string.Format(RedisKey.RealtimeSessionPrice, s.Symbol), new SessionPriceData() { Symbol = s.Symbol, Price = -1, TotalValue = 0, TotalVolume = 0, TradeDate = DateTime.Now, Volume = 0 });
                            }
                            //init objects
                            if (isBeginTrading)
                            {
                                redis.SetAll(objs);
                            }
                            else
                            {
                                objs = (Dictionary<string, SessionPriceData>)redis.GetAll<SessionPriceData>(keys);
                            }
                        }
                        bfirstTime = false;
                        if (isTrading)
                        {
                            //detect change
                            var prices = redisPrice.GetAll<StockPrice>(priceKeys);
                            foreach (var sym in syms)
                            {
                                var price = prices[string.Format(RedisKey.PriceKey, sym)];
                                var obj = objs[string.Format(RedisKey.RealtimeSessionPrice, sym)];
                                if (price == null || obj == null) continue;
                                if (obj.Price != price.Price || obj.TotalVolume != price.Volume)
                                {
                                    var vol = price.Volume - obj.TotalVolume;
                                    //trade time --> save
                                    if (obj.Price > -1) //don't save the initial value
                                    {
                                        var key = string.Format(RedisKey.SessionPrice, obj.Symbol, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"));
                                        var o = new SessionPriceData() { Symbol = obj.Symbol, Price = price.Price, TotalValue = price.Value, TotalVolume = price.Volume, TradeDate = DateTime.Now, Volume = vol };
                                        if (redis.ContainsKey(key))
                                            redis.Set(key, o);
                                        else
                                            redis.Add(key, o);
                                    }
                                    //save realtime object
                                    obj.Price = price.Price;
                                    obj.Volume = vol;
                                    obj.TotalVolume = price.Volume;
                                    obj.TotalValue = price.Value;
                                    objs[string.Format(RedisKey.RealtimeSessionPrice, sym)] = obj;
                                }
                            }
                            redis.SetAll(objs);
                        }
                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(ex.ToString(), EventLogEntryType.Error);
                    }

                }
            }
            catch (Exception ex)
            {
                log.WriteEntry(ex.ToString(), EventLogEntryType.Error);
            }
        }
Exemplo n.º 21
0
        private void button11_Click(object sender, EventArgs e)
        {


            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);

            var hnxkey = string.Format(RedisKey.KeyRealTimePrice, 2);
            var hnx = Lib.Deserialize(redis.Get<string>(hnxkey)) ?? new DataTable();
            var tmp = hnx.Clone();
            tmp.Columns["AverageChange"].DataType = typeof(double);
            tmp.Columns["PriceChange"].DataType = typeof(double);
            foreach (DataRow dr in hnx.Rows)
            {
                tmp.ImportRow(dr);
            }
            var bAvg = !Lib.InTradingTime(2);
            var hrs = tmp.Select((bAvg ? "AverageChange" : "PriceChange") + " > 0", "" + (bAvg ? "AverageChange" : "PriceChange") + " DESC, Symbol");
            var key = string.Format(RedisKey.KeyTopStock, RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.PriceUp);
            var hnxpu = new List<TopStock>();
            for (var i = 0; i < 10; i++)
            {
                if (hrs.Length <= i) break;
                hnxpu.Add(new TopStock() { Symbol = hrs[i]["Symbol"].ToString(), BasicPrice = double.Parse(hrs[i]["Ref"].ToString()), Price = double.Parse(hrs[i][(bAvg ? "AveragePrice" : "TradingPrice")].ToString()), Volume = double.Parse(hrs[i]["TradingVol"].ToString()) });
            }
            if (redis.ContainsKey(key))
                redis.Set(key, hnxpu);
            else
                redis.Add(key, hnxpu);


            //var key1 = string.Format(RedisKey.KeyTopStock, RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.PriceUp);
            var a = redis.Get<List<TopStock>>(key);


            var pdt = SqlDb.GetTopStock();

            UpdateTopStock(RedisKey.KeyTopStockCenter.All, RedisKey.KeyTopStockType.EPS, ref redis, ref pdt);
            UpdateTopStock(RedisKey.KeyTopStockCenter.Ho, RedisKey.KeyTopStockType.EPS, ref redis, ref pdt);
            UpdateTopStock(RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.EPS, ref redis, ref pdt);
            UpdateTopStock(RedisKey.KeyTopStockCenter.All, RedisKey.KeyTopStockType.MarketCap, ref redis, ref pdt);
            UpdateTopStock(RedisKey.KeyTopStockCenter.Ho, RedisKey.KeyTopStockType.MarketCap, ref redis, ref pdt);
            UpdateTopStock(RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.MarketCap, ref redis, ref pdt);
            UpdateTopStock(RedisKey.KeyTopStockCenter.All, RedisKey.KeyTopStockType.PE, ref redis, ref pdt);
            UpdateTopStock(RedisKey.KeyTopStockCenter.Ho, RedisKey.KeyTopStockType.PE, ref redis, ref pdt);
            UpdateTopStock(RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.PE, ref redis, ref pdt);

            /*==============================*/

            //top stock price
            //pdt = SqlDb.GetTopStockPrice();
            //UpdateTopStock(RedisKey.KeyTopStockCenter.All, RedisKey.KeyTopStockType.PriceDown, ref redis, ref pdt);
            //UpdateTopStock(RedisKey.KeyTopStockCenter.Ho, RedisKey.KeyTopStockType.PriceDown, ref redis, ref pdt);
            //UpdateTopStock(RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.PriceDown, ref redis, ref pdt);
            //UpdateTopStock(RedisKey.KeyTopStockCenter.All, RedisKey.KeyTopStockType.PriceUp, ref redis, ref pdt);
            //UpdateTopStock(RedisKey.KeyTopStockCenter.Ho, RedisKey.KeyTopStockType.PriceUp, ref redis, ref pdt);
            //UpdateTopStock(RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.PriceUp, ref redis, ref pdt);
            //UpdateTopStock(RedisKey.KeyTopStockCenter.All, RedisKey.KeyTopStockType.VolumeDown, ref redis, ref pdt);
            //UpdateTopStock(RedisKey.KeyTopStockCenter.Ho, RedisKey.KeyTopStockType.VolumeDown, ref redis, ref pdt);
            //UpdateTopStock(RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.VolumeDown, ref redis, ref pdt);
        }
Exemplo n.º 22
0
        private void button1_Click(object sender, EventArgs e)
        {


            var start = DateTime.Now;
            textBox1.Text = start.ToString();

            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
            var sdt = SqlDb.GetSymbolList(-1);
            foreach (DataRow dr in sdt.Rows)
            {


                Thread.Sleep(1000);
                var start2 = DateTime.Now;

                string symbol = dr["Symbol"].ToString().ToUpper();
                symbol = "SSI";
                try
                {
                    #region Update stock from sql
                    //stock.Symbol = "AAA";
                    //load stock data 
                    var dt = SqlDb.GetSymbolData(symbol);
                    if (dt.Rows.Count <= 0) return;

                    var row = dt.Rows[0];
                    var stock = new Stock() { Symbol = row["Symbol"].ToString(), TradeCenterId = int.Parse(row["TradeCenterId"].ToString()), IsDisabled = row["IsDisabled"].ToString() == "1", StatusText = row["StatusText"].ToString(), ShowTradeCenter = row["ShowTradeCenter"].ToString() == "1", FolderImage = row["FolderChart"].ToString() };

                    //profile
                    var profile = new CompanyProfile { Symbol = stock.Symbol };
                    //profile - basicInfo
                    var basicInfo = new BasicInfo() { Symbol = stock.Symbol, Name = row["CompanyName"].ToString(), TradeCenter = stock.TradeCenterId.ToString() };
                    //profile - basicInfo - basicCommon
                    /*PE = double.Parse(row["PE"].ToString()),*/
                    var basicCommon = new BasicCommon() { AverageVolume = double.Parse(row["AVG10SS"].ToString()), Beta = double.Parse(row["Beta"].ToString()), EPS = double.Parse(row["EPS"].ToString()), Symbol = stock.Symbol, TotalValue = double.Parse(row["MarketCap"].ToString()), ValuePerStock = double.Parse(row["BookValue"].ToString()), VolumeTotal = double.Parse(row["SLCPNY"].ToString()) };
                    basicCommon.PE = basicCommon.EPS != 0 ? (double.Parse(row["LastPrice"].ToString()) / basicCommon.EPS) : 0;

                    basicInfo.basicCommon = basicCommon;
                    //profile - basicInfo - category
                    var category = new CategoryObject() { ID = int.Parse(row["CategoryId"].ToString()), Name = row["CategoryName"].ToString() };
                    basicInfo.category = category;
                    //profile - basicInfo - firstInfo
                    var firstInfo = new FirstInfo() { FirstPrice = double.Parse(row["FirstPrice"].ToString()), FirstTrade = row["FirstTrade"].Equals(DBNull.Value) ? null : ((DateTime?)row["FirstTrade"]), FirstVolume = double.Parse(row["FirstVolume"].ToString()), Symbol = stock.Symbol };
                    basicInfo.firstInfo = firstInfo;

                    profile.basicInfos = basicInfo;

                    //profile - subsidiaries
                    var subsidiaries = new List<OtherCompany>();
                    var associates = new List<OtherCompany>();
                    var cdt = SqlDb.GetChildrenCompany(stock.Symbol);
                    var i = 0;
                    foreach (DataRow cdr in cdt.Rows)
                    {
                        i++;
                        var child = new OtherCompany() { Name = cdr["CompanyName"].ToString(), Note = cdr["NoteInfo"].ToString(), OwnershipRate = double.Parse(cdr["Rate"].ToString()), Order = i, SharedCapital = double.Parse(cdr["TotalShareValue"].ToString()), Symbol = stock.Symbol, TotalCapital = double.Parse(cdr["CharterCapital"].ToString()) };
                        if (cdr["isCongTyCon"].ToString() == "1") subsidiaries.Add(child);
                        else associates.Add(child);
                    }
                    profile.Subsidiaries = subsidiaries;
                    profile.AssociatedCompanies = associates;

                    //profile - commonInfo
                    var commonInfo = new CommonInfo() { Symbol = stock.Symbol, Capital = double.Parse(row["VonDieuLe"].ToString()), Category = row["CategoryName"].ToString(), Content = row["About"].ToString(), OutstandingVolume = double.Parse(row["TotalShare"].ToString()), TotalVolume = double.Parse(row["SLCPNY"].ToString()) };
                    commonInfo.Content += "<p><b>Địa chỉ:</b> " + row["Address"].ToString() + "</p>";
                    commonInfo.Content += "<p><b>Điện thoại:</b> " + row["Phone"].ToString() + "</p>";
                    commonInfo.Content += "<p><b>Người phát ngôn:</b> " + row["Spokenman"].ToString() + "</p>";
                    if (string.IsNullOrEmpty(row["Email"].ToString())) commonInfo.Content += "<p><b>Email:</b> <a href='mailto:" + row["Email"] + "'>" + row["Email"] + "</a></p>";
                    if (string.IsNullOrEmpty(row["Website"].ToString())) commonInfo.Content += "<p><b>Website:</b> <a href='" + row["Website"] + "'>" + row["Website"] + "</a></p>";

                    profile.commonInfos = commonInfo;


                    //profile - financePeriod
                    var fyt = SqlDb.GetFinancePeriod(stock.Symbol);
                    var periods = new List<FinancePeriod>();
                    FinancePeriod period = null;
                    var tmp = 0;
                    foreach (DataRow fyr in fyt.Rows)
                    {
                        if (period == null || tmp != int.Parse(fyr["Year"].ToString()) * 10 + int.Parse(fyr["QuarterType"].ToString()))
                        {
                            if (period != null) { period.UpdateTitle(); periods.Add(period); }
                            period = new FinancePeriod() { Quarter = int.Parse(fyr["QuarterType"].ToString()), Year = int.Parse(fyr["Year"].ToString()) };
                        }
                        tmp = int.Parse(fyr["Year"].ToString()) * 10 + int.Parse(fyr["QuarterType"].ToString());
                        switch (fyr["MaChiTieu"].ToString())
                        {
                            case "Audited":
                                period.SubTitle = fyr["TieuDeNhom"].ToString();
                                break;
                            case "QuarterModify":
                                var qrt = fyr["TieuDeNhom"].ToString();
                                var qrti = 0;
                                if (qrt.EndsWith("T")) { period.QuarterTitle = qrt.Remove(qrt.Length - 1) + " tháng"; }
                                else if (int.TryParse(qrt, out qrti) && qrti >= 1 && qrti < 5)
                                {
                                    period.QuarterTitle = "Quý " + qrti;
                                }
                                else period.QuarterTitle = "";
                                break;
                            case "YearModify":
                                if (int.TryParse(fyr["TieuDeNhom"].ToString(), out qrti))
                                {
                                    period.YearTitle = "Năm " + qrti;
                                }
                                else period.YearTitle = "";
                                break;
                            case "FromDate":
                                qrt = fyr["TieuDeNhom"].ToString();
                                if (qrt.Contains("/"))
                                    period.BeginTitle = qrt.Substring(0, qrt.LastIndexOf("/"));
                                break;
                            case "ToDate":
                                qrt = fyr["TieuDeNhom"].ToString();
                                if (qrt.Contains("/"))
                                    period.EndTitle = qrt.Substring(0, qrt.LastIndexOf("/"));
                                break;
                            default:
                                break;
                        }
                    }
                    if (period != null) { period.UpdateTitle(); periods.Add(period); }
                    profile.FinancePeriods = periods;

                    //profile - financeInfo
                    var financeInfo = new List<FinanceInfo>();
                    var fit = SqlDb.GetChiTieuFinance(stock.Symbol);
                    var fvt = SqlDb.GetFinanceData(stock.Symbol);
                    var groupId = 0;
                    FinanceInfo info = null;
                    foreach (DataRow fir in fit.Rows)
                    {
                        if (info == null || groupId != int.Parse(fir["LoaiChiTieu"].ToString()))
                        {
                            if (info != null) financeInfo.Add(info);
                            info = new FinanceInfo() { NhomChiTieuId = groupId, Symbol = stock.Symbol, TenNhomChiTieu = fir["TenLoaiChiTieu"].ToString() };
                        }
                        groupId = int.Parse(fir["LoaiChiTieu"].ToString());
                        var chiTieu = new FinanceChiTieu() { ChiTieuId = fir["MaChiTieu"].ToString(), TenChiTieu = fir["TieuDeKhac"].ToString() };
                        if (fir["MaChiTieu"].ToString() == "ROA")
                        {
                            int b = 0;
                        }
                        foreach (var financePeriod in periods)
                        {
                            var fvrs = fvt.Select("MaChiTieu = '" + fir["MaChiTieu"] + "' AND Year = " + financePeriod.Year + " AND QuarterType = " + financePeriod.Quarter);
                            if (fvrs.Length > 0)
                            {
                                chiTieu.Values.Add(new FinanceValue() { Quarter = financePeriod.Quarter, Year = financePeriod.Year, Value = double.Parse(fvrs[0]["FinanceValue"].ToString()) });
                            }
                            else
                            {
                                chiTieu.Values.Add(new FinanceValue() { Quarter = financePeriod.Quarter, Year = financePeriod.Year, Value = 0 });
                            }
                        }

                        info.ChiTieus.Add(chiTieu);
                    }
                    if (info != null) financeInfo.Add(info);
                    profile.financeInfos = financeInfo;

                    //profile - leader
                    var leaders = new List<Leader>();
                    var ldt = SqlDb.GetCeos(stock.Symbol);
                    foreach (DataRow ldr in ldt.Rows)
                    {
                        leaders.Add(new Leader() { GroupID = ldr["ParentId"].ToString(), Name = ldr["FullName"].ToString(), Positions = ldr["TenNhom"].ToString() });
                    }
                    profile.Leaders = leaders;

                    //profile - owner
                    var owners = new List<MajorOwner>();
                    var odt = SqlDb.GetShareHolders(stock.Symbol);
                    foreach (DataRow odr in odt.Rows)
                    {
                        owners.Add(new MajorOwner() { Name = odr["FullName"].ToString(), Rate = double.Parse(odr["ShareHoldPct"].ToString()), ToDate = (DateTime)odr["DenNgay"], Volume = double.Parse(odr["SoCoPhieu"].ToString()) });
                    }
                    profile.MajorOwners = owners;

                    stock.CompanyProfile = profile;

                    //business plans
                    var plans = new List<BusinessPlan>();
                    if (row["HasPlan"].ToString() == "1")
                    {
                        plans.Add(new BusinessPlan() { Body = row["PlanNote"].ToString(), Date = (DateTime)row["PlanDate"], DividendsMoney = double.Parse(row["Dividend"].ToString()), DividendsStock = double.Parse(row["DivStock"].ToString()), ID = int.Parse(row["PlanId"].ToString()), IncreaseExpected = double.Parse(row["CapitalRaising"].ToString()), ProfitATax = double.Parse(row["NetIncome"].ToString()), ProfitBTax = double.Parse(row["TotalProfit"].ToString()), Revenue = double.Parse(row["TotalIncome"].ToString()), Symbol = stock.Symbol, Year = int.Parse(row["KYear"].ToString()) });
                    }
                    stock.BusinessPlans1 = plans;

                    //dividend histories
                    var divs = new List<DividendHistory>();
                    var ddt = SqlDb.GetDividendHistory(stock.Symbol);
                    foreach (DataRow ddr in ddt.Rows)
                    {
                        divs.Add(new DividendHistory() { DonViDoiTuong = ddr["DonViDoiTuong"].ToString(), NgayGDKHQ = (DateTime)ddr["NgayGDKHQ"], GhiChu = ddr["GhiChu"].ToString(), SuKien = ddr["SuKien"].ToString(), Symbol = stock.Symbol, TiLe = ddr["TiLe"].ToString() });
                    }
                    stock.DividendHistorys = divs;

                    //báo cáo phân tích
                    var reports = new List<Reports>();
                    var rdt = SqlDb.GetAnalysisReports(stock.Symbol);
                    foreach (DataRow rdr in rdt.Rows)
                    {
                        reports.Add(new Reports() { ID = int.Parse(rdr["ID"].ToString()), Title = rdr["title"].ToString(), DateDeploy = (DateTime)rdr["PublishDate"], ResourceCode = rdr["Source"].ToString(), IsHot = rdr["IsHot"].ToString().ToLower() == "true" });
                    }
                    stock.Reports3 = reports;

                    //công ty cùng ngành
                    var samecateCompanies = new List<StockShortInfo>();
                    var scdt = SqlDb.GetSameCateCompanies(stock.Symbol);
                    foreach (DataRow scdr in scdt.Rows)
                    {
                        samecateCompanies.Add(new StockShortInfo() { Symbol = scdr["StockSymbol"].ToString(), TradeCenterId = int.Parse(scdr["TradeCenterId"].ToString()), Name = scdr["FullName"].ToString(), EPS = double.Parse(scdr["EPS"].ToString()) });
                    }
                    stock.SameCategory = samecateCompanies;

                    //eps tương đương
                    var sameEPSCompanies = new List<StockShortInfo>();
                    var sedt = SqlDb.GetSameEPSCompanies(stock.Symbol);
                    foreach (DataRow sedr in sedt.Rows)
                    {
                        sameEPSCompanies.Add(new StockShortInfo() { Symbol = sedr["StockSymbol"].ToString(), TradeCenterId = int.Parse(sedr["TradeCenterId"].ToString()), Name = sedr["FullName"].ToString(), EPS = double.Parse(sedr["EPS"].ToString()), MarketValue = double.Parse(sedr["MarketCap"].ToString()) });
                    }
                    stock.SameEPS = sameEPSCompanies;

                    //pe tương đương
                    var samePECompanies = new List<StockShortInfo>();
                    var spdt = SqlDb.GetSamePECompanies(stock.Symbol);
                    foreach (DataRow spdr in spdt.Rows)
                    {
                        samePECompanies.Add(new StockShortInfo() { Symbol = spdr["StockSymbol"].ToString(), TradeCenterId = int.Parse(spdr["TradeCenterId"].ToString()), Name = spdr["FullName"].ToString(), EPS = double.Parse(spdr["EPS"].ToString()), MarketValue = double.Parse(spdr["MarketCap"].ToString()) });
                    }
                    stock.SamePE = samePECompanies;

                    //stock history
                    var history = new StockCompactHistory();

                    //stock history - price
                    var price = new List<PriceCompactHistory>();
                    var pdt = SqlDb.GetPriceHistory(stock.Symbol, 10);
                    foreach (DataRow pdr in pdt.Rows)
                    {
                        price.Add(new PriceCompactHistory() { ClosePrice = double.Parse(pdr["Price"].ToString()), BasicPrice = double.Parse(pdr["BasicPrice"].ToString()), Ceiling = double.Parse(pdr["Ceiling"].ToString()), Floor = double.Parse(pdr["Floor"].ToString()), Volume = double.Parse(pdr["Volume"].ToString()), TotalValue = double.Parse(pdr["TotalValue"].ToString()), TradeDate = (DateTime)pdr["TradeDate"] });

                    }
                    history.Price = price;

                    //stock history - order
                    var order = new List<OrderCompactHistory>();
                    var hodt = SqlDb.GetOrderHistory(stock.Symbol, 10);
                    foreach (DataRow hodr in hodt.Rows)
                    {
                        order.Add(new OrderCompactHistory() { AskAverageVolume = double.Parse(hodr["AskAverage"].ToString()), AskLeft = double.Parse(hodr["AskLeft"].ToString()), BidAverageVolume = double.Parse(hodr["BidAverage"].ToString()), BidLeft = double.Parse(hodr["BidLeft"].ToString()), TradeDate = (DateTime)hodr["Trading_Date"] });
                    }
                    history.Orders = order;

                    //stock history - foreign
                    var foreign = new List<ForeignCompactHistory>();
                    var fdt = SqlDb.GetForeignHistory(stock.Symbol, 10);
                    foreach (DataRow fdr in fdt.Rows)
                    {
                        foreign.Add(new ForeignCompactHistory() { BuyPercent = double.Parse(fdr["FBuyPercent"].ToString()), SellPercent = double.Parse(fdr["FSellPercent"].ToString()), NetVolume = double.Parse(fdr["FNetVolume"].ToString()), NetValue = double.Parse(fdr["FNetValue"].ToString()), TradeDate = (DateTime)fdr["Trading_Date"] });
                    }
                    history.Foreign = foreign;

                    stock.StockPriceHistory = history;

                    //tin tức và sự kiện
                    var news = new List<StockNews>();
                    var ndt = SqlDb.GetCompanyNews(stock.Symbol, -1);
                    foreach (DataRow ndr in ndt.Rows)
                    {
                        news.Add(new StockNews() { DateDeploy = (DateTime)ndr["PostTime"], ID = int.Parse(ndr["Id"].ToString()), Title = ndr["Title"].ToString(), TypeID = ndr["ConfigId"].ToString() });
                    }
                    stock.StockNews = news;

                    #endregion
                    var end2 = DateTime.Now;

                    //var st = BLFACTORY.RedisClient.Get<Stock>("stock:stockid:ACB:Object");
                    string key = string.Format(RedisKey.Key, symbol);
                    //var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
                    if (redis.ContainsKey(key))
                        redis.Set<Stock>(key, stock);
                    else
                        redis.Add<Stock>(key, stock);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(symbol + " : " + ex.ToString());
                }

            }
            DateTime end = DateTime.Now;
            MessageBox.Show("DOne");


            //var set = DateTime.Now;

            //textBox3.Text = set.ToString();

            ////var st = redis.Get<Stock>(key);
            //var get = DateTime.Now;
            //textBox4.Text = get.ToString();

        }
Exemplo n.º 23
0
        private void button14_Click(object sender, EventArgs e)
        {
            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
            string date = "";
            #region FN
            try
            {
                var keylist = RedisKey.KeyCompanyNews;
                var ls = (redis.ContainsKey(keylist)) ? redis.Get<List<string>>(keylist) : new List<string>();
                var pdt = (date == "" || ls.Count == 0) ? SqlDb.GetCompanyNews("A", 1000) : SqlDb.GetCompanyNews("A", date);

                var key1 = string.Format(RedisKey.KeyCompanyNewsByCate, 1); //Tình hình SXKD & Phân tích khác
                var key2 = string.Format(RedisKey.KeyCompanyNewsByCate, 2); // Cổ tức - Chốt quyền
                var key3 = string.Format(RedisKey.KeyCompanyNewsByCate, 3); // Thay đổi nhân sự
                var key4 = string.Format(RedisKey.KeyCompanyNewsByCate, 4); // Tăng vốn - Cổ phiếu quỹ
                var key5 = string.Format(RedisKey.KeyCompanyNewsByCate, 5); // GD cđ lớn & cđ nội bộ
                var cate1 = (redis.ContainsKey(key1)) ? redis.Get<List<string>>(key1) : new List<string>();

                var cate2 = (redis.ContainsKey(key2)) ? redis.Get<List<string>>(key2) : new List<string>();
                var cate3 = (redis.ContainsKey(key3)) ? redis.Get<List<string>>(key3) : new List<string>();

                var cate4 = (redis.ContainsKey(key4)) ? redis.Get<List<string>>(key4) : new List<string>();
                var cate5 = (redis.ContainsKey(key5)) ? redis.Get<List<string>>(key5) : new List<string>();

                foreach (DataRow rdr in pdt.Rows)
                {
                    var key = string.Format(RedisKey.KeyCompanyNewsDetail, rdr["ID"]);
                    var obj = new StockNews() { ID = int.Parse(rdr["ID"].ToString()), Body = rdr["Content"].ToString(), DateDeploy = (DateTime)rdr["PostTime"], Image = rdr["ImagePath"].ToString(), Title = rdr["title"].ToString(), Sapo = rdr["SubContent"].ToString(), TypeID = rdr["ConfigId"].ToString(), Symbol = rdr["StockSymbols"].ToString() };
                    if (redis.ContainsKey(key))
                        redis.Set(key, obj);
                    else
                        redis.Add(key, obj);
                    if (!ls.Contains(key)) ls.Add(key);
                    #region Update category list
                    if (obj.TypeID.Contains("1"))
                    {
                        if (!cate1.Contains(key)) cate1.Add(key);
                    }
                    else
                    {
                        if (cate1.Contains(key)) cate1.Remove(key);
                    }
                    if (obj.TypeID.Contains("2"))
                    {
                        if (!cate2.Contains(key)) cate2.Add(key);
                    }
                    else
                    {
                        if (cate2.Contains(key)) cate2.Remove(key);
                    }
                    if (obj.TypeID.Contains("1"))
                    {
                        if (!cate3.Contains(key)) cate3.Add(key);
                    }
                    else
                    {
                        if (cate3.Contains(key)) cate3.Remove(key);
                    }
                    if (obj.TypeID.Contains("1"))
                    {
                        if (!cate4.Contains(key)) cate4.Add(key);
                    }
                    else
                    {
                        if (cate4.Contains(key)) cate4.Remove(key);
                    }
                    if (obj.TypeID.Contains("1"))
                    {
                        if (!cate5.Contains(key)) cate5.Add(key);
                    }
                    else
                    {
                        if (cate5.Contains(key)) cate5.Remove(key);
                    }
                    #endregion
                }
                if (redis.ContainsKey(keylist))
                    redis.Set(keylist, ls);
                else
                    redis.Add(keylist, ls);
                #region Update category list
                if (redis.ContainsKey(key1))
                    redis.Set(key1, cate1);
                else
                    redis.Add(key1, cate1);
                if (redis.ContainsKey(key2))
                    redis.Set(key2, cate2);
                else
                    redis.Add(key2, cate2);
                if (redis.ContainsKey(key3))
                    redis.Set(key3, cate3);
                else
                    redis.Add(key3, cate3);
                if (redis.ContainsKey(key4))
                    redis.Set(key4, cate4);
                else
                    redis.Add(key4, cate4);
                if (redis.ContainsKey(key5))
                    redis.Set(key5, cate5);
                else
                    redis.Add(key5, cate5);
                #endregion
            }
            catch (Exception ex)
            {
                //log.WriteEntry(symbol + " : FN : " + ex.ToString(), EventLogEntryType.Error);
                //ret = false;
            }
            #endregion
        }
Exemplo n.º 24
0
        private void button2_Click(object sender, EventArgs e)
        {
            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);

            //var pdt = bFirst ? sql.GetAllPrice(centerId) : sql.GetChangedPriceSymbols(centerId);

            DateTime start = DateTime.Now;
            var dt = SqlDb.GetAllPrice(1);
            var allkey = string.Format(RedisKey.KeyRealTimePrice, 1);
            if (redis.ContainsKey(allkey))
                redis.Set(allkey, Lib.Serialize(dt));
            else
                redis.Add(allkey, Lib.Serialize(dt));
            var testdt = Lib.Deserialize(redis.Get<string>(allkey));
            dt.Merge(SqlDb.GetAllPrice(2));
            dt.Merge(SqlDb.GetAllPrice(9));
            foreach (DataRow pdr in dt.Rows)
            {
                try
                {

                    //Thread.Sleep(1000);
                    //update stock price 
                    var symbol = pdr["Symbol"].ToString();

                    #region Get Stock Price Data

                    //var cdt = SqlDb.GetCenterId(symbol);
                    //if (cdt.Rows.Count == 0) continue;
                    var centerId = int.Parse(pdr["centerId"].ToString());
                    //var pdt = SqlDb.GetRealtimePriceData(symbol, centerId);
                    //if (pdt.Rows.Count == 0) continue;
                    //var pdr = pdt.Rows[0];
                    var bAvg = centerId != 1 && !Lib.InTradingTime(centerId);
                    var price = new StockPrice() { Symbol = symbol, LastTradeDate = (DateTime)pdr["TradeDate"], Price = double.Parse(pdr[bAvg ? "AveragePrice" : "TradingPrice"].ToString()), RefPrice = double.Parse(pdr["Ref"].ToString()), CeilingPrice = double.Parse(pdr["Ceiling"].ToString()), FloorPrice = double.Parse(pdr["Floor"].ToString()), Volume = double.Parse(pdr["TradingVol"].ToString()), Value = double.Parse(pdr["TotalTradingValue"].ToString()), HighPrice = double.Parse(pdr["TradingPriceMax"].ToString()), LowPrice = double.Parse(pdr["TradingPriceMin"].ToString()), OpenPrice = double.Parse(pdr["OpenPrice"].ToString()), ClosePrice = double.Parse(pdr["TradingPrice"].ToString()), ForeignBuyValue = double.Parse(pdr["BuyFrValue"].ToString()), ForeignBuyVolume = double.Parse(pdr["BuyFrVolume"].ToString()), ForeignSellValue = double.Parse(pdr["SellFrValue"].ToString()), ForeignSellVolume = double.Parse(pdr["SellFrVolume"].ToString()), ForeignCurrentRoom = double.Parse(pdr["RemainFrRoom"].ToString()), AskPrice01 = double.Parse(pdr["SellPrice1"].ToString()), AskPrice02 = double.Parse(pdr["SellPrice2"].ToString()), AskPrice03 = double.Parse(pdr["SellPrice3"].ToString()), AskVolume01 = double.Parse(pdr["SellVol1"].ToString()), AskVolume02 = double.Parse(pdr["SellVol2"].ToString()), AskVolume03 = double.Parse(pdr["SellVol3"].ToString()), BidPrice01 = double.Parse(pdr["BidPrice1"].ToString()), BidPrice02 = double.Parse(pdr["BidPrice2"].ToString()), BidPrice03 = double.Parse(pdr["BidPrice3"].ToString()), BidVolume01 = double.Parse(pdr["BidVol1"].ToString()), BidVolume02 = double.Parse(pdr["BidVol2"].ToString()), BidVolume03 = double.Parse(pdr["BidVol3"].ToString()) };

                    #endregion

                    var key = string.Format(RedisKey.PriceKey, symbol);

                    if (redis.ContainsKey(key))
                        redis.Set<StockPrice>(key, price);
                    else
                        redis.Add<StockPrice>(key, price);
                }
                catch (Exception ex)
                {
                    continue;
                }
            }
            //var set = DateTime.Now;

            //textBox3.Text = set.ToString();

            //var st = redis.Get<StockPrice>(key);
            //var get = DateTime.Now;
            //textBox4.Text = get.ToString();
            DateTime end = DateTime.Now;
            MessageBox.Show("Done");

        }
Exemplo n.º 25
0
        private void UpdatePrice(int centerId, bool bFirst)
        {
            try
            {
                var redisPrice = new RedisClient(ConfigRedis.PriceHost, ConfigRedis.PricePort);
                var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
                //var pdt = bFirst ? sql.GetAllPrice(centerId) : sql.GetChangedPriceSymbols(centerId);
                var sql = new SqlDb();
                var isInTrading = Utils.InTradingTime(centerId);
                var bRealtime = isInTrading;
                if (!isInTrading)
                {
                    var rlddt = sql.GetLastRealtimePriceDate(centerId);
                    var impdt = sql.GetLastImportPriceDate(centerId);
                    if (impdt.Rows.Count == 0)
                    {
                        bRealtime = rlddt.Rows.Count > 0;
                    }
                    else
                    {
                        if (rlddt.Rows.Count == 0) bRealtime = false;
                        else
                        {
                            bRealtime = int.Parse(rlddt.Rows[0][0].ToString().Replace(".", "")) > int.Parse(impdt.Rows[0][0].ToString().Replace(".", ""));
                        }
                    }
                }
                //log.WriteEntry("UpdatePrice : " + centerId + " : " + bRealtime, EventLogEntryType.Information);
                var pdt = bRealtime ? sql.GetRealtimePrice(centerId) : sql.GetPriceData(centerId);
                var allkey = string.Format(RedisKey.KeyRealTimePrice, centerId);
                if (redis.ContainsKey(allkey))
                    redis.Set(allkey, Utils.Serialize(pdt));
                else
                    redis.Add(allkey, Utils.Serialize(pdt));
                var stats = new List<int> { 0, 0, 0, 0, 0 };
                var rows = pdt.Select("Symbol<>'CENTER'");
                //log.WriteEntry("UpdatePrice : " + centerId + " : " + bRealtime + " : " + rows[0]["TradeDate"], EventLogEntryType.Information);
                foreach (var pdr in rows)
                {
                    var symbol = pdr["Symbol"].ToString();

                    try
                    {
                        #region Get Stock Price Data

                        //var cdt = sql.GetCenterId(symbol);
                        //if (cdt.Rows.Count == 0) continue;
                        //var centerId = int.Parse(pdr["centerId"].ToString());
                        //var pdt = sql.GetRealtimePriceData(symbol, centerId);
                        //if (pdt.Rows.Count == 0) continue;
                        //var pdr = pdt.Rows[0];
                        var bAvg = centerId != 1 && !isInTrading;
                        var price = redis.Get<StockPrice>(String.Format(RedisKey.PriceKey, symbol)) ?? new StockPrice();
                        price.Symbol = symbol;
                        price.LastTradeDate = (DateTime)pdr["TradeDate"];

                        price.Price = double.Parse(pdr[bAvg ? "AveragePrice" : "TradingPrice"].ToString()); price.RefPrice = double.Parse(pdr["Ref"].ToString()); price.CeilingPrice = double.Parse(pdr["Ceiling"].ToString()); price.FloorPrice = double.Parse(pdr["Floor"].ToString()); price.Volume = double.Parse(pdr["TradingVol"].ToString()); price.Value = double.Parse(pdr["TotalTradingValue"].ToString()); price.HighPrice = double.Parse(pdr["TradingPriceMax"].ToString()); price.LowPrice = double.Parse(pdr["TradingPriceMin"].ToString()); price.OpenPrice = double.Parse(pdr["OpenPrice"].ToString()); price.ClosePrice = double.Parse(pdr["TradingPrice"].ToString());
                        try
                        {
                            price.AvgPrice = double.Parse(pdr["AveragePrice"].ToString());
                            price.ClosePrice = double.Parse(pdr["TradingPrice"].ToString());
                        }
                        catch (Exception) { }
                        price.BidTotalOrder = double.Parse(pdr["TotalBidOrder"].ToString());
                        price.BidTotalVolume = double.Parse(pdr["TotalBidVolume"].ToString());
                        price.AskTotalOrder = double.Parse(pdr["TotalAskOrder"].ToString());
                        price.AskTotalVolume = double.Parse(pdr["TotalAskVolume"].ToString());

                        if (double.Parse(pdr["HasForeign"].ToString()) >= 0)
                        {
                            price.ForeignCurrentRoom = double.Parse(pdr["RemainFrRoom"].ToString());
                            price.ForeignTotalRoom = double.Parse(pdr["FrTotalRoom"].ToString());
                            price.ForeignBuyValue = double.Parse(pdr["BuyFrValue"].ToString()); price.ForeignBuyVolume = double.Parse(pdr["BuyFrVolume"].ToString()); price.ForeignSellValue = double.Parse(pdr["SellFrValue"].ToString()); price.ForeignSellVolume = double.Parse(pdr["SellFrVolume"].ToString());
                        }
                        if (bRealtime)
                        {
                            price.AskPrice01 = double.Parse(pdr["SellPrice1"].ToString());
                            price.AskPrice02 = double.Parse(pdr["SellPrice2"].ToString());
                            price.AskPrice03 = double.Parse(pdr["SellPrice3"].ToString());
                            price.AskVolume01 = double.Parse(pdr["SellVol1"].ToString());
                            price.AskVolume02 = double.Parse(pdr["SellVol2"].ToString());
                            price.AskVolume03 = double.Parse(pdr["SellVol3"].ToString());
                            price.BidPrice01 = double.Parse(pdr["BidPrice1"].ToString());
                            price.BidPrice02 = double.Parse(pdr["BidPrice2"].ToString());
                            price.BidPrice03 = double.Parse(pdr["BidPrice3"].ToString());
                            price.BidVolume01 = double.Parse(pdr["BidVol1"].ToString());
                            price.BidVolume02 = double.Parse(pdr["BidVol2"].ToString());
                            price.BidVolume03 = double.Parse(pdr["BidVol3"].ToString());
                        }

                        #endregion

                        #region Update Center Stats
                        var key = string.Format(RedisKey.PriceKey, symbol);
                        if (redis.ContainsKey(key))
                            redis.Set<StockPrice>(key, price);
                        else
                            redis.Add<StockPrice>(key, price);
                        if (redisPrice.ContainsKey(key))
                            redisPrice.Set<StockPrice>(key, price);
                        else
                            redisPrice.Add<StockPrice>(key, price);

                        if (price.Price <= 0) continue;
                        if (Math.Round(price.Price, 2) <= Math.Round(price.FloorPrice, 2)) stats[0]++;
                        else if (Math.Round(price.Price, 2) < Math.Round(price.RefPrice, 2)) stats[1]++;
                        else if (Math.Round(price.Price, 2) >= Math.Round(price.CeilingPrice, 2)) stats[4]++;
                        else if (Math.Round(price.Price, 2) > Math.Round(price.RefPrice, 2)) stats[3]++;
                        else stats[2]++;
                        #endregion

                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry("Price " + symbol + ":" + ex.ToString(), EventLogEntryType.Information);
                    }


                }

                #region Center stats
                rows = pdt.Select("Symbol='CENTER'");
                if (rows.Length == 0) return;
                //update center stats
                var centerkey = string.Format(RedisKey.KeyCenterIndex, centerId);
                var center = redis.ContainsKey(centerkey) ? redis.Get<TradeCenterStats>(centerkey) : new TradeCenterStats() { TradeCenterId = centerId };
                center.Ceiling = stats[4];
                center.Up = stats[3];
                center.Normal = stats[2];
                center.Down = stats[1];
                center.Floor = stats[0];

                center.CurrentDate = (DateTime)rows[0]["TradeDate"];
                //log.WriteEntry("UpdatePrice : " + centerId + " : Center : " + rows[0]["TradeDate"], EventLogEntryType.Information);
                center.CurrentIndex = double.Parse(rows[0]["TradingPrice"].ToString());
                center.PrevIndex = double.Parse(rows[0]["Ref"].ToString());
                center.CurrentVolume = double.Parse(rows[0]["TotalTradingVolume"].ToString());
                center.CurrentValue = double.Parse(rows[0]["TotalTradingValue"].ToString());

                center.ForeignBuyVolume = double.Parse(rows[0]["BuyFrVolume"].ToString());
                center.ForeignBuyValue = double.Parse(rows[0]["BuyFrValue"].ToString());
                center.ForeignSellVolume = double.Parse(rows[0]["SellFrVolume"].ToString());
                center.ForeignSellValue = double.Parse(rows[0]["SellFrValue"].ToString());
                //chỉ số theo đợt
                if (centerId == 1)
                {
                    center.Index1 = double.Parse(rows[0]["BidPrice1"].ToString());
                    center.Volume1 = double.Parse(rows[0]["BidVol1"].ToString());
                    center.Value1 = double.Parse(rows[0]["BidPrice2"].ToString());
                    center.Index2 = double.Parse(rows[0]["BidVol2"].ToString());
                    center.Volume2 = double.Parse(rows[0]["BidPrice3"].ToString());
                    center.Value2 = double.Parse(rows[0]["BidVol3"].ToString());
                    center.Index3 = double.Parse(rows[0]["SellPrice1"].ToString());
                    center.Volume3 = double.Parse(rows[0]["SellVol1"].ToString());
                    center.Value3 = double.Parse(rows[0]["SellPrice2"].ToString());
                }
                if (!bRealtime) { center.ChartFolder = rows[0]["SecName"].ToString(); }
                if (redis.ContainsKey(centerkey))
                    redis.Set(centerkey, center);
                else
                    redis.Add(centerkey, center);
                #endregion
            }
            catch (Exception ex)
            {
                log.WriteEntry("PriceData - " + centerId + ": " + ex.ToString(), EventLogEntryType.Error);
            }
        }
Exemplo n.º 26
0
        private void button3_Click(object sender, EventArgs e)
        {
            var symbol = "VRC";

            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
            var keylist = string.Format(RedisKey.PriceHistoryKeys, symbol);
            var ls = redis.ContainsKey(keylist) ? redis.Get<List<String>>(keylist) : new List<string>();

            var pdt = SqlDb.GetPriceHistory(symbol, -1);
            foreach (DataRow pdr in pdt.Rows)
            {
                var key = string.Format(RedisKey.PriceHistory, symbol, ((DateTime)pdr["TradeDate"]).ToString("yyyyMMdd"));

                var price = new StockHistory() { TradeDate = (DateTime)pdr["TradeDate"], ClosePrice = double.Parse(pdr["ClosePrice"].ToString()), AveragePrice = double.Parse(pdr["AveragePrice"].ToString()), BasicPrice = double.Parse(pdr["BasicPrice"].ToString()), Ceiling = double.Parse(pdr["Ceiling"].ToString()), Floor = double.Parse(pdr["Floor"].ToString()), Volume = double.Parse(pdr["Volume"].ToString()), TotalValue = double.Parse(pdr["TotalValue"].ToString()), AgreedValue = double.Parse(pdr["AgreedValue"].ToString()), AgreedVolume = double.Parse(pdr["AgreedVolume"].ToString()), Symbol = symbol, KLGDDot1 = double.Parse(pdr["VolumePhase1"].ToString()), KLGDDot2 = double.Parse(pdr["VolumePhase2"].ToString()), KLGDDot3 = double.Parse(pdr["VolumePhase3"].ToString()), OpenPrice = double.Parse(pdr["OpenPrice"].ToString()), HighPrice = double.Parse(pdr["HighPrice"].ToString()), LowPrice = double.Parse(pdr["LowPrice"].ToString()) };
                if (redis.ContainsKey(key))
                    redis.Set<StockHistory>(key, price);
                else
                    redis.Add<StockHistory>(key, price);

                if (!ls.Contains(key)) ls.Add(key);
            }
            ls.Sort();
            ls.Reverse();
            if (redis.ContainsKey(keylist))
                redis.Set<List<string>>(keylist, ls);
            else
                redis.Add<List<string>>(keylist, ls);

            var test = redis.Get<List<string>>(keylist);
        }
Exemplo n.º 27
0
 public void UpdateTopPrice()
 {
     try
     {
         var bfirstTime = true;
         if ((ConfigurationManager.AppSettings["PriceAllowance"] ?? "") != "TRUE")
         {
             //Thread.CurrentThread.Abort();
             return;
         }
         var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
         while (ServiceStarted)
         {
             try
             {
                 if (!bfirstTime)
                 {
                     var itv = interval;
                     if (!Utils.InTradingTime(1) && !Utils.InTradingTime(2)) itv = longInterval;
                     Thread.Sleep(itv);
                 }
                 bfirstTime = false;
                 /*----- hnx -----*/
                 var hnxkey = string.Format(RedisKey.KeyRealTimePrice, 2);
                 var hnx = ConvertPrice(Utils.Deserialize(redis.Get<string>(hnxkey))) ?? new DataTable();
                 var hnxpu = new List<TopStock>();
                 var hnxpd = new List<TopStock>();
                 var hnxvd = new List<TopStock>();
                 if (hnx.Rows.Count > 0)
                 {
                     var bAvg = !Utils.InTradingTime(2);
                     var hrs = hnx.Select("Symbol <> 'CENTER'", (bAvg ? "DoubleAvgChange" : "DoublePriceChange") + " DESC");
                     var key = string.Format(RedisKey.KeyTopStock, RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.PriceUp);
                     //var hnxpu = new List<TopStock>();
                     for (var i = 0; i < 10; i++)
                     {
                         if (hrs.Length <= i || double.Parse(hrs[i][(bAvg ? "DoubleAvgChange" : "DoublePriceChange")].ToString()) <= 0) break;
                         hnxpu.Add(new TopStock() { Symbol = hrs[i]["Symbol"].ToString(), BasicPrice = double.Parse(hrs[i]["Ref"].ToString()), Price = double.Parse(hrs[i][(bAvg ? "AveragePrice" : "TradingPrice")].ToString()), Volume = double.Parse(hrs[i]["TradingVol"].ToString()) });
                     }
                     if (redis.ContainsKey(key))
                         redis.Set(key, hnxpu);
                     else
                         redis.Add(key, hnxpu);
                     /****************/
                     hrs = hnx.Select("Symbol <> 'CENTER'", (bAvg ? "DoubleAvgChange" : "DoublePriceChange") + " ASC, Symbol");
                     key = string.Format(RedisKey.KeyTopStock, RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.PriceDown);
                     //var hnxpd = new List<TopStock>();
                     for (var i = 0; i < 10; i++)
                     {
                         if (hrs.Length <= i || double.Parse(hrs[i][(bAvg ? "DoubleAvgChange" : "DoublePriceChange")].ToString()) >= 0) break;
                         hnxpd.Add(new TopStock() { Symbol = hrs[i]["Symbol"].ToString(), BasicPrice = double.Parse(hrs[i]["Ref"].ToString()), Price = double.Parse(hrs[i][(bAvg ? "AveragePrice" : "TradingPrice")].ToString()), Volume = double.Parse(hrs[i]["TradingVol"].ToString()) });
                     }
                     if (redis.ContainsKey(key))
                         redis.Set(key, hnxpd);
                     else
                         redis.Add(key, hnxpd);
                     /****************/
                     hrs = hnx.Select("Symbol <> 'CENTER'", "DoubleVolume DESC, Symbol");
                     key = string.Format(RedisKey.KeyTopStock, RedisKey.KeyTopStockCenter.Ha, RedisKey.KeyTopStockType.VolumeDown);
                     //var hnxvd = new List<TopStock>();
                     for (var i = 0; i < 10; i++)
                     {
                         if (hrs.Length <= i || double.Parse(hrs[i]["TradingVol"].ToString()) <= 0) break;
                         hnxvd.Add(new TopStock() { Symbol = hrs[i]["Symbol"].ToString(), BasicPrice = double.Parse(hrs[i]["Ref"].ToString()), Price = double.Parse(hrs[i][(bAvg ? "AveragePrice" : "TradingPrice")].ToString()), Volume = double.Parse(hrs[i]["TradingVol"].ToString()) });
                     }
                     if (redis.ContainsKey(key))
                         redis.Set(key, hnxvd);
                     else
                         redis.Add(key, hnxvd);
                 }
                 /*--------------*/
                 /*----- hsx ----*/
                 var hsxkey = string.Format(RedisKey.KeyRealTimePrice, 1);
                 var hsx = ConvertPrice(Utils.Deserialize(redis.Get<string>(hsxkey))) ?? new DataTable();
                 var hsxpu = new List<TopStock>();
                 var hsxpd = new List<TopStock>();
                 var hsxvd = new List<TopStock>();
                 if (hsx.Rows.Count > 0)
                 {
                     var hrs = hsx.Select("Symbol <> 'CENTER'", "DoublePriceChange DESC, Symbol");
                     var key = string.Format(RedisKey.KeyTopStock, RedisKey.KeyTopStockCenter.Ho, RedisKey.KeyTopStockType.PriceUp);
                     //var hsxpu = new List<TopStock>();
                     for (var i = 0; i < 10; i++)
                     {
                         if (hrs.Length <= i || double.Parse(hrs[i]["DoublePriceChange"].ToString()) <= 0) break;
                         hsxpu.Add(new TopStock() { Symbol = hrs[i]["Symbol"].ToString(), BasicPrice = double.Parse(hrs[i]["Ref"].ToString()), Price = double.Parse(hrs[i]["TradingPrice"].ToString()), Volume = double.Parse(hrs[i]["TradingVol"].ToString()) });
                     }
                     if (redis.ContainsKey(key))
                         redis.Set(key, hsxpu);
                     else
                         redis.Add(key, hsxpu);
                     /****************/
                     hrs = hsx.Select("Symbol <> 'CENTER'", "DoublePriceChange, Symbol");
                     key = string.Format(RedisKey.KeyTopStock, RedisKey.KeyTopStockCenter.Ho, RedisKey.KeyTopStockType.PriceDown);
                     //var hsxpd = new List<TopStock>();
                     for (var i = 0; i < 10; i++)
                     {
                         if (hrs.Length <= i || double.Parse(hrs[i]["DoublePriceChange"].ToString()) >= 0) break;
                         hsxpd.Add(new TopStock() { Symbol = hrs[i]["Symbol"].ToString(), BasicPrice = double.Parse(hrs[i]["Ref"].ToString()), Price = double.Parse(hrs[i]["TradingPrice"].ToString()), Volume = double.Parse(hrs[i]["TradingVol"].ToString()) });
                     }
                     if (redis.ContainsKey(key))
                         redis.Set(key, hsxpd);
                     else
                         redis.Add(key, hsxpd);
                     /****************/
                     hrs = hsx.Select("Symbol <> 'CENTER'", "DoubleVolume DESC, Symbol");
                     key = string.Format(RedisKey.KeyTopStock, RedisKey.KeyTopStockCenter.Ho, RedisKey.KeyTopStockType.VolumeDown);
                     //var hsxvd = new List<TopStock>();
                     for (var i = 0; i < 10; i++)
                     {
                         if (hrs.Length <= i || double.Parse(hrs[i]["DoubleVolume"].ToString()) <= 0) break;
                         hsxvd.Add(new TopStock() { Symbol = hrs[i]["Symbol"].ToString(), BasicPrice = double.Parse(hrs[i]["Ref"].ToString()), Price = double.Parse(hrs[i]["TradingPrice"].ToString()), Volume = double.Parse(hrs[i]["TradingVol"].ToString()) });
                     }
                     if (redis.ContainsKey(key))
                         redis.Set(key, hsxvd);
                     else
                         redis.Add(key, hsxvd);
                 }
                 /*--------------*/
                 /*----- all ----*/
                 var all = MergeList(hnxpu, hsxpu, RedisKey.KeyTopStockType.PriceUp);
                 var allkey = string.Format(RedisKey.KeyTopStock, RedisKey.KeyTopStockCenter.All, RedisKey.KeyTopStockType.PriceUp);
                 if (redis.ContainsKey(allkey))
                     redis.Set(allkey, all);
                 else
                     redis.Add(allkey, all);
                 all = MergeList(hnxpd, hsxpd, RedisKey.KeyTopStockType.PriceDown);
                 allkey = string.Format(RedisKey.KeyTopStock, RedisKey.KeyTopStockCenter.All, RedisKey.KeyTopStockType.PriceDown);
                 if (redis.ContainsKey(allkey))
                     redis.Set(allkey, all);
                 else
                     redis.Add(allkey, all);
                 all = MergeList(hnxvd, hsxvd, RedisKey.KeyTopStockType.VolumeDown);
                 allkey = string.Format(RedisKey.KeyTopStock, RedisKey.KeyTopStockCenter.All, RedisKey.KeyTopStockType.VolumeDown);
                 if (redis.ContainsKey(allkey))
                     redis.Set(allkey, all);
                 else
                     redis.Add(allkey, all);
                 /*--------------*/
             }
             catch (Exception ex)
             {
                 log.WriteEntry(ex.ToString(), EventLogEntryType.Error);
             }
         }
     }
     catch (Exception ex)
     {
         log.WriteEntry(ex.ToString(), EventLogEntryType.Error);
     }
     finally
     {
         //Thread.CurrentThread.Abort();
     }
 }
Exemplo n.º 28
0
        private void button4_Click(object sender, EventArgs e)
        {
            var symbol = "VNINDEX";

            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
            var keylist = string.Format(RedisKey.OrderHistoryKeys, symbol);
            var ls = redis.ContainsKey(keylist) ? redis.Get<List<String>>(keylist) : new List<string>();

            var pdt = SqlDb.GetOrderHistory(symbol, -1);
            foreach (DataRow pdr in pdt.Rows)
            {
                var key = string.Format(RedisKey.OrderHistory, symbol, ((DateTime)pdr["Trading_Date"]).ToString("yyyyMMdd"));

                var order = new OrderHistory() { TradeDate = (DateTime)pdr["Trading_Date"], BuyOrderCount = double.Parse(pdr["Bid_Order"].ToString()), BuyVolume = double.Parse(pdr["Bid_Volume"].ToString()), SellOrderCount = double.Parse(pdr["Offer_Order"].ToString()), SellVolume = double.Parse(pdr["Offer_Volume"].ToString()), Volume = double.Parse(pdr["Volume"].ToString()), Price = double.Parse(pdr["Price"].ToString()), BasicPrice = double.Parse(pdr["BasicPrice"].ToString()), Ceiling = double.Parse(pdr["Ceiling"].ToString()), Floor = double.Parse(pdr["Floor"].ToString()), Symbol = symbol };
                if (redis.ContainsKey(key))
                    redis.Set<OrderHistory>(key, order);
                else
                    redis.Add<OrderHistory>(key, order);

                if (!ls.Contains(key)) ls.Add(key);
            }
            ls.Sort();
            ls.Reverse();
            if (redis.ContainsKey(keylist))
                redis.Set<List<string>>(keylist, ls);
            else
                redis.Add<List<string>>(keylist, ls);

            var test = redis.Get<List<string>>(keylist);
        }
Exemplo n.º 29
0
        public void UpdateFundTransaction()
        {
            try
            {
                var bfirstTime = true;
                if ((ConfigurationManager.AppSettings["PriceAllowance"] ?? "") != "TRUE")
                {
                    //Thread.CurrentThread.Abort();
                    return;
                }
                var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
                while (ServiceStarted)
                {
                    try
                    {
                        #region "Fund Transaction"
                        var fndt = SqlDb.GetFundUpdate();

                        var fndkeylist = "";
                        var symbol = "";
                        var fndls = new List<string>();
                        foreach (DataRow fndr in fndt.Rows)
                        {
                            if (symbol != fndr["Symbol"].ToString().ToUpper())
                            {
                                if (fndls.Count > 0)
                                {
                                    fndls.Sort();
                                    fndls.Reverse();
                                    if (redis.ContainsKey(fndkeylist))
                                        redis.Set<List<string>>(fndkeylist, fndls);
                                    else
                                        redis.Add<List<string>>(fndkeylist, fndls);
                                }
                                symbol = fndr["Symbol"].ToString().ToUpper();
                                fndkeylist = string.Format(RedisKey.FundHistoryKeys, symbol);
                                fndls = new List<string>();
                            }
                            if (symbol == "") continue;
                            var key = string.Format(RedisKey.FundHistory, symbol, ((DateTime)fndr["TradingDate"]).ToString("yyyyMMdd"));
                            var order = new FundHistory() { Symbol = symbol, TradeDate = (DateTime)fndr["TradingDate"], TransactionType = fndr["Buy_Sale"].ToString() == "s" ? "Bán" : "Mua", PlanVolume = double.Parse(fndr["RegisteredVol"].ToString()), TodayVolume = double.Parse(fndr["TodayTradingVol"].ToString()), AccumulateVolume = double.Parse(fndr["AccumVol"].ToString()), ExpiredDate = (DateTime)fndr["ExpireDate"] };
                            if (redis.ContainsKey(key))
                                redis.Set<FundHistory>(key, order);
                            else
                                redis.Add<FundHistory>(key, order);

                            if (!fndls.Contains(key)) fndls.Add(key);
                        }
                        if (fndls.Count > 0)
                        {
                            fndls.Sort();
                            fndls.Reverse();
                            if (redis.ContainsKey(fndkeylist))
                                redis.Set<List<string>>(fndkeylist, fndls);
                            else
                                redis.Add<List<string>>(fndkeylist, fndls);
                        }
                        #endregion


                    }
                    catch (Exception ex)
                    {
                        log.WriteEntry(ex.ToString(), EventLogEntryType.Error);
                    }
                    Thread.Sleep(300000); // 5 mins
                }
            }
            catch (Exception ex)
            {
                log.WriteEntry(ex.ToString(), EventLogEntryType.Error);
            }
            finally
            {
                //Thread.CurrentThread.Abort();
            }
        }
Exemplo n.º 30
0
        private void button5_Click(object sender, EventArgs e)
        {
            var symbol = "VNINDEX";

            var redis = new RedisClient(ConfigRedis.Host, ConfigRedis.Port);
            var keylist = string.Format(RedisKey.ForeignHistoryKeys, symbol);
            var ls = redis.ContainsKey(keylist) ? redis.Get<List<String>>(keylist) : new List<string>();

            var pdt = SqlDb.GetForeignHistory(symbol, -1);
            foreach (DataRow pdr in pdt.Rows)
            {
                var key = string.Format(RedisKey.ForeignHistory, symbol, ((DateTime)pdr["Trading_Date"]).ToString("yyyyMMdd"));

                var order = new ForeignHistory() { TradeDate = (DateTime)pdr["Trading_Date"], BuyVolume = double.Parse(pdr["Buying_Volume"].ToString()), BuyValue = double.Parse(pdr["Buying_Value"].ToString()), SellVolume = double.Parse(pdr["Selling_Volume"].ToString()), SellValue = double.Parse(pdr["Selling_Value"].ToString()), Room = double.Parse(pdr["CurrentRoom"].ToString()), TotalRoom = double.Parse(pdr["TotalRoom"].ToString()), Percent = double.Parse(pdr["SoHuu"].ToString()), Symbol = symbol };
                if (redis.ContainsKey(key))
                    redis.Set<ForeignHistory>(key, order);
                else
                    redis.Add<ForeignHistory>(key, order);

                if (!ls.Contains(key)) ls.Add(key);
            }
            ls.Sort();
            ls.Reverse();
            if (redis.ContainsKey(keylist))
                redis.Set<List<string>>(keylist, ls);
            else
                redis.Add<List<string>>(keylist, ls);

            var test = redis.Get<List<string>>(keylist);
        }