//消息提醒 private void OutMsg() { ThreadPool.QueueUserWorkItem(o => { while (true) { try { if (queueMsgList.Count > 0) { //从队列中拿出数据 ErrorMsg eMsg = queueMsgList.Dequeue(); this.notifyIconMsg.ShowBalloonTip(eMsg.ShowTime, GetDescription(typeof(ErrorTitleType),Convert.ToInt32(eMsg.TitleType)), eMsg.Content, eMsg.ToolTripType); Thread.Sleep(eMsg.ShowTime); } else { Thread.Sleep(30);//避免了CPU空转。 } } catch (Exception ex) { ErrorMsg eMsg = new ErrorMsg(); eMsg.TitleType = (int)ErrorTitleType.CWMsg; eMsg.Content = ex.Message; eMsg.CreateTime = DateTime.Now; eMsg.ShowTime = 4000; eMsg.ToolTripType = ToolTipIcon.Error; queueMsgList.Enqueue(eMsg); log.Error(string.Format("读取队列数据异常,异常信息:{0} ;异常详情:{1}", ex.Message, ex)); } } }); }
public void Show(int fCount) { List<APIStock> listStock = new List<APIStock>(); List<APIMarket> listMarket = new List<APIMarket>(); try { //if(!((DateTime.Now.Hour > 9 && DateTime.Now.Hour < 12) || (DateTime.Now.Hour >= 13 && DateTime.Now.Hour < 16))) //{ // return; //} string sUrl = Convert.ToString(ConfigurationManager.AppSettings["GPURL"]); //stockid=sz002673,sh600030,sz002673,sz002673,sz002673,sz002673,sz002673,sz002673,sz002673,sz002673&list=1 string stockidList = ConfigurationManager.AppSettings["GPPamamList"].Trim(); if (string.IsNullOrEmpty(stockidList)) { MessageBox.Show("请先添加股票"); return; } string sParam = "stockid=" + stockidList + "&list=1"; string sMessage = HttpGet(sUrl, sParam); if (!string.IsNullOrEmpty(sMessage)) { JObject jo = (JObject)JsonConvert.DeserializeObject(sMessage); string sReturnCode = Convert.ToString(jo["errNum"]); string sReturnMsg = Convert.ToString(jo["errMsg"]); if (string.IsNullOrEmpty(sReturnCode)) { log.Error("请求异常,次数:" + fCount); //MessageBox.Show("请求异常"); this.Text = "请求异常"; return; } int mReturnCode = Convert.ToInt32(sReturnCode); if (mReturnCode == (int)ErrorCode.Success) { string sReturnContent = Convert.ToString(jo["retData"]); if (!string.IsNullOrEmpty(sReturnContent)) { JObject jContent = (JObject)JsonConvert.DeserializeObject(sReturnContent); string sGSList = Convert.ToString(jContent["stockinfo"]);//上市公司列表 string sDPList = Convert.ToString(jContent["market"]);//上证,深证 int mGSCount = jContent["stockinfo"].AsQueryable().Count(); //涨跌判断 List<APIStock> listGPYJ = GetGPYJList(); for (int i = 0; i < mGSCount; i++) { APIStock stock = new APIStock(); JObject jStock = (JObject)jContent["stockinfo"][i]; stock.name = Convert.ToString(jStock["name"]).Trim('"'); if (string.IsNullOrEmpty(stock.name)) { continue; } stock.SysNo = Convert.ToString(jStock["code"]).Trim('"'); stock.currentPrice = Convert.ToString(jStock["currentPrice"]); string mIncrease = Convert.ToString(Math.Round(Convert.ToDouble(jStock["increase"].ToString()), 2, MidpointRounding.AwayFromZero));//涨跌幅 if (BIsTX == true) { int txT = 1; if (string.IsNullOrEmpty(BTXTime) || int.TryParse(BTXTime, out txT) == false) { txT = 1; } else { txT = Convert.ToInt32(BTXTime); } //当前股票已提醒的间隔时间 var mGPYTX = (from t in queueTXMsgList where t.Code == stock.SysNo && t.CreateTime >= DateTime.Now.AddMinutes(-txT) select t).ToList(); if (mGPYTX.Count <= 0) { if (listGPYJ != null && listGPYJ.Count > 0) { var mGP = (from t in listGPYJ where t.SysNo == stock.SysNo && t.ISYJ == 1 select t).ToList(); if (mGP.Count > 0) { string returnMsg = PriceYJ(stock.currentPrice, mIncrease, mGP[0]); if (!string.IsNullOrEmpty(returnMsg)) { ErrorMsg eMsg = new ErrorMsg(); eMsg.Code = stock.SysNo; eMsg.TitleType = (int)ErrorTitleType.GJMsg; eMsg.Content = returnMsg; eMsg.CreateTime = DateTime.Now; eMsg.ShowTime = 5000; eMsg.ToolTripType = ToolTipIcon.Warning; queueMsgList.Enqueue(eMsg); queueTXMsgList.Enqueue(eMsg); //this.notifyIconMsg.ShowBalloonTip(5000, "消息提醒", returnMsg, ToolTipIcon.Warning); } } } } } stock.name = Convert.ToString(jStock["name"]).Trim('"'); stock.code = Convert.ToString(jStock["code"]).Trim('"').Substring(2); stock.date = jStock["time"].ToString().Trim('"'); stock.openningPrice = Convert.ToString(jStock["OpenningPrice"]); stock.closingPrice = Convert.ToString(jStock["closingPrice"]); stock.hPrice = Convert.ToString(jStock["hPrice"]); stock.lPrice = Convert.ToString(jStock["lPrice"]); //stock.growth = Convert.ToString(jStock["growth"]); //stock.growthPercent = Convert.ToString(jStock["growthPercent"]); //stock.dealnumber = Convert.ToString(jStock["dealnumber"]); stock.turnover = Convert.ToString(Math.Round(Convert.ToDouble(jStock["turnover"].ToString()) / 100000000, 2, MidpointRounding.AwayFromZero)); //stock.hPrice52 = Convert.ToString(jStock["52hPrice"]); //stock.lPrice52 = Convert.ToString(jStock["52lPrice"]); stock.competitivePrice = Convert.ToString(jStock["competitivePrice"]); stock.auctionPrice = Convert.ToString(jStock["auctionPrice"]); stock.totalNumber = Convert.ToString(Math.Round(Convert.ToDouble(jStock["totalNumber"].ToString()) / 1000000, 2, MidpointRounding.AwayFromZero)); stock.increase = (mIncrease.Substring(0, 1) == "-") ? mIncrease.Substring(1) : mIncrease; listStock.Add(stock); } JObject jMarket = (JObject)jContent["market"]; APIMarket mSH = new APIMarket(); mSH.name = jMarket["shanghai"]["name"].ToString().Trim('"'); mSH.curdot = Convert.ToString(Math.Round(Convert.ToDouble(jMarket["shanghai"]["curdot"].ToString()), 2, MidpointRounding.AwayFromZero)); mSH.curprice = Convert.ToString(Math.Round(Convert.ToDouble(jMarket["shanghai"]["curprice"].ToString()), 2, MidpointRounding.AwayFromZero)); mSH.rate = Convert.ToString(Math.Round(Convert.ToDouble(jMarket["shanghai"]["rate"].ToString()), 2, MidpointRounding.AwayFromZero)); mSH.dealnumber = Convert.ToString(Math.Round(Convert.ToDouble(jMarket["shanghai"]["dealnumber"].ToString()) / 100000000, 2, MidpointRounding.AwayFromZero)); mSH.turnover = Convert.ToString(Math.Round(Convert.ToDouble(jMarket["shanghai"]["turnover"].ToString()) / 10000, 2, MidpointRounding.AwayFromZero)); APIMarket mSZ = new APIMarket(); mSZ.name = Convert.ToString(jMarket["shenzhen"]["name"]).Trim('"'); mSZ.curdot = Convert.ToString(Math.Round(Convert.ToDouble(jMarket["shenzhen"]["curdot"].ToString()), 2, MidpointRounding.AwayFromZero)); mSZ.curprice = Convert.ToString(Math.Round(Convert.ToDouble(jMarket["shenzhen"]["curprice"].ToString()), 2, MidpointRounding.AwayFromZero)); mSZ.rate = Convert.ToString(Math.Round(Convert.ToDouble(jMarket["shenzhen"]["rate"].ToString()), 2, MidpointRounding.AwayFromZero)); mSZ.dealnumber = Convert.ToString(Math.Round(Convert.ToDouble(jMarket["shenzhen"]["dealnumber"].ToString()) / 100000000, 2, MidpointRounding.AwayFromZero)); mSZ.turnover = Convert.ToString(Math.Round(Convert.ToDouble(jMarket["shenzhen"]["turnover"].ToString()) / 10000, 2, MidpointRounding.AwayFromZero)); listMarket.Add(mSH); listMarket.Add(mSZ); } } else if (!Enum.IsDefined(typeof(ErrorCode), mReturnCode)) { log.Error("返回未知异常,次数:" + fCount + ",异常编号:" + mReturnCode + ";异常说明:" + sReturnMsg); //MessageBox.Show("返回未知异常,异常编号:" + mReturnCode + ";异常说明:" + sReturnMsg); this.Text = "返回未知异常,异常编号:" + mReturnCode + ";异常说明:" + sReturnMsg; return; } else { MessageBox.Show(GetDescription(typeof(ErrorCode), mReturnCode)); } } else { log.Error("返回数据空,次数:" + fCount); //MessageBox.Show("返回数据空"); this.Text = "返回数据空"; return; } } catch (Exception ex) { log.Error("获取股票数据1,出现异常:"+ex.Message+";异常详情:" + ex); } try { if (listMarket.Count > 0) { APIMarket apiSHZS = listMarket[0]; double shRate = Convert.ToDouble(apiSHZS.rate); Color shColor = Color.Red; string shZF = "+"; string shJT = "↑"; if (shRate >= 0) { shColor = Color.Red; shZF = "+"; shJT = "↑"; } else { shColor = Color.Green; shZF = ""; shJT = "↓"; } lblSHZS1.Text = apiSHZS.name; lblSHZS1.ForeColor = shColor; lblSHZS2.Text = shJT + apiSHZS.curdot + " " + shZF + apiSHZS.rate + "%"; lblSHZS2.ForeColor = shColor; //lblSHZS3.Text = shZF + apiSHZS.curprice + " " + shZF + apiSHZS.rate + "%"; //lblSHZS3.ForeColor = shColor; APIMarket apiSZZS = listMarket[1]; double szRate = Convert.ToDouble(apiSZZS.rate); Color szColor = Color.Red; string szZF = "+"; string szJT = "↑"; if (szRate >= 0) { szColor = Color.Red; szZF = "+"; szJT = "↑"; } else { szColor = Color.Green; szZF = ""; szJT = "↓"; } lblSZZS1.Text = apiSZZS.name; lblSZZS1.ForeColor = szColor; lblSZZS2.Text = szJT + apiSZZS.curdot + " " + szZF + apiSZZS.rate + "%"; lblSZZS2.ForeColor = szColor; //lblSZZS3.Text = szZF + apiSZZS.curprice + " " + szZF + apiSZZS.rate + "%"; //lblSZZS3.ForeColor = szColor; } } catch (Exception ex) { log.Error("获取股票数据2,出现异常:"+ex.Message+";异常详情:" + ex); } try { lock (locker) { #region 绑定数据到DataGridView dataGridView1.Columns.Clear(); if (listStock.Count > 0) { //dataGridView1.Columns[4].DataPropertyName DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn(); col1.HeaderText = "股票名称"; col1.DataPropertyName = "name"; col1.Name = "name"; col1.Width = 80; col1.ReadOnly = true; col1.Frozen = true; //col1.ContextMenuStrip = contextMenuStripGridView; dataGridView1.Columns.Insert(0, col1); DataGridViewTextBoxColumn col3 = new DataGridViewTextBoxColumn(); col3.HeaderText = "当前价"; col3.DataPropertyName = "currentPrice"; col3.Name = "currentPrice"; col3.Width = 70; col3.ReadOnly = true; //col3.ContextMenuStrip = contextMenuStripGridView; dataGridView1.Columns.Insert(1, col3); DataGridViewTextBoxColumn col18 = new DataGridViewTextBoxColumn(); col18.HeaderText = "涨幅(%)"; col18.DataPropertyName = "increase"; col18.Name = "increase"; col18.Width = 75; col18.ReadOnly = true; //col18.ContextMenuStrip = contextMenuStripGridView; dataGridView1.Columns.Insert(2, col18); DataGridViewTextBoxColumn col2 = new DataGridViewTextBoxColumn(); col2.HeaderText = "股票代码"; col2.DataPropertyName = "code"; col2.Name = "code"; col2.Width = 80; col2.ReadOnly = true; //col2.ContextMenuStrip = contextMenuStripGridView; dataGridView1.Columns.Insert(3, col2); DataGridViewTextBoxColumn col6 = new DataGridViewTextBoxColumn(); col6.HeaderText = "今日最高价"; col6.DataPropertyName = "hPrice"; col6.Name = "hPrice"; col6.Width = 90; col6.ReadOnly = true; dataGridView1.Columns.Insert(4, col6); DataGridViewTextBoxColumn col7 = new DataGridViewTextBoxColumn(); col7.HeaderText = "今日最低价"; col7.DataPropertyName = "lPrice"; col7.Name = "lPrice"; col7.Width = 90; col7.ReadOnly = true; dataGridView1.Columns.Insert(5, col7); DataGridViewTextBoxColumn col8 = new DataGridViewTextBoxColumn(); col8.HeaderText = "开盘价"; col8.DataPropertyName = "openningPrice"; col8.Name = "openningPrice"; col8.Width = 70; col8.ReadOnly = true; dataGridView1.Columns.Insert(6, col8); DataGridViewTextBoxColumn col9 = new DataGridViewTextBoxColumn(); col9.HeaderText = "昨日收盘价"; col9.DataPropertyName = "closingPrice"; col9.Name = "closingPrice"; col9.Width = 90; col9.ReadOnly = true; dataGridView1.Columns.Insert(7, col9); DataGridViewTextBoxColumn col17 = new DataGridViewTextBoxColumn(); col17.HeaderText = "成交量(万)"; col17.DataPropertyName = "totalNumber"; col17.Name = "totalNumber"; col17.Width = 90; col17.ReadOnly = true; dataGridView1.Columns.Insert(8, col17); DataGridViewTextBoxColumn col13 = new DataGridViewTextBoxColumn(); col13.HeaderText = "成交金额(亿)"; col13.DataPropertyName = "turnover"; col13.Name = "turnover"; col13.Width = 100; col13.ReadOnly = true; dataGridView1.Columns.Insert(9, col13); DataGridViewTextBoxColumn col14 = new DataGridViewTextBoxColumn(); col14.HeaderText = "刷新日期"; col14.DataPropertyName = "date"; col14.Name = "date"; col14.Width = 90; col14.ReadOnly = true; dataGridView1.Columns.Insert(10, col14); //DataGridViewTextBoxColumn col4 = new DataGridViewTextBoxColumn(); //col4.HeaderText = "涨幅比例"; //col4.DataPropertyName = "growthPercent"; //col4.Name = "growthPercent"; //col4.Width = 100; //col4.ReadOnly = true; //dataGridView1.Columns.Add(col4); //DataGridViewTextBoxColumn col5 = new DataGridViewTextBoxColumn(); //col5.HeaderText = "价格涨幅"; //col5.DataPropertyName = "growth"; //col5.Name = "growth"; //col5.Width = 100; //col5.ReadOnly = true; //dataGridView1.Columns.Add(col5); //DataGridViewTextBoxColumn col10 = new DataGridViewTextBoxColumn(); //col10.HeaderText = "52周最高价"; //col10.DataPropertyName = "hPrice52"; //col10.Name = "hPrice52"; //col10.Width = 100; //col10.ReadOnly = true; //dataGridView1.Columns.Add(col10); //DataGridViewTextBoxColumn col11 = new DataGridViewTextBoxColumn(); //col11.HeaderText = "52周最低价"; //col11.DataPropertyName = "lPrice52"; //col11.Name = "lPrice52"; //col11.Width = 100; //col11.ReadOnly = true; //dataGridView1.Columns.Add(col11); //DataGridViewTextBoxColumn col12 = new DataGridViewTextBoxColumn(); //col12.HeaderText = "成交量股"; //col12.DataPropertyName = "dealnumber"; //col12.Name = "dealnumber"; //col12.Width = 100; //col12.ReadOnly = true; //dataGridView1.Columns.Add(col12); //DataGridViewTextBoxColumn col15 = new DataGridViewTextBoxColumn(); //col15.HeaderText = "未知competitivePrice"; //col15.DataPropertyName = "competitivePrice"; //col15.Name = "competitivePrice"; //col15.Width = 100; //col15.ReadOnly = true; //dataGridView1.Columns.Add(col15); //DataGridViewTextBoxColumn col16 = new DataGridViewTextBoxColumn(); //col16.HeaderText = "未知auctionPrice"; //col16.DataPropertyName = "auctionPrice"; //col16.Name = "auctionPrice"; //col16.Width = 100; //col16.ReadOnly = true; //dataGridView1.Columns.Add(col16); //dataGridView1.AllowUserToAddRows = false; //dataGridView1.AllowUserToOrderColumns = true; //允许用户调整列的位置 //dataGridView1.Columns[0].Visible = false; //dataGridView1.ColumnHeadersVisible = false; // 列头隐藏 //dataGridView1.RowHeadersVisible = false; // 行头隐藏 dataGridView1.ReadOnly = true; dataGridView1.AutoGenerateColumns = false; dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; dataGridView1.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; dataGridView1.DataSource = listStock; //http://wsh1798.iteye.com/blog/601592 } #endregion } } catch (Exception ex) { log.Error("获取股票数据3,出现异常:"+ex.Message+";异常详情:" + ex); } try { //ShowHGT(); } catch (Exception ex) { log.Error("获取股票数据4,出现异常:"+ex.Message+";异常详情:" + ex); } }