Example #1
0
 /// <summary>
 /// 记录输出信息
 /// </summary>
 /// <param name="content">日志信息</param>
 public static void AppendLog(string content)
 {
     try
     {
         if (Form == null || Form.IsDisposed)
         {
             Form = new FormOutput();
             Form.BindConsole();
         }
         if (Form.InvokeRequired)
         {
             Form.Invoke(new Action(() =>
             {
                 Form.Show();
                 Form.WindowState = FormWindowState.Normal;
                 //Form.Activate();
             }));
         }
         else
         {
             Form.Show();
             Form.WindowState = FormWindowState.Normal;
             //Form.Activate();
         }
         MyConsole.AppendLine(content);
     }
     catch { }
 }
 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
 {
     FormOutput.AppendProress(true);
     lstCondition = e.Argument as List <RainCaculateConditon>;
     //开始计算每个值
     if (lstCondition != null && lstCondition.Count > 0)
     {
         for (int i = 0; i < lstCondition.Count; i++)
         {
             List <RainCaculateResult> tempResult = CaculateRain(lstCondition[i]);
             if (tempResult.Count > 0)
             {
                 backgroundWorker1.ReportProgress((int)((i + 1) * 100 / lstCondition.Count), tempResult);
             }
             else
             {
                 backgroundWorker1.ReportProgress((int)((i + 1) * 100 / lstCondition.Count), lstCondition[i]);
             }
         }
     }
 }
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            FormOutput.AppendProress(e.ProgressPercentage);

            List <RainCaculateResult> result = e.UserState as List <RainCaculateResult>;

            if (result == null)
            {
                RainCaculateConditon condition = e.UserState as RainCaculateConditon;

                int index = dataGridView1.Rows.Add();
                //赋值各行数据
                dataGridView1[0, index].Value = condition.EventNum;
                dataGridView1[1, index].Value = condition.StartTime.ToLongDateString();
                dataGridView1[2, index].Value = condition.EndTime.ToLongDateString();
                dataGridView1[3, index].Value = condition.State;
                dataGridView1[4, index].Value = "该行未查询到数据";

                //加上红色背景色
                dataGridView1.Rows[index].DefaultCellStyle.BackColor = Color.Red;
                return;
            }

            List <string> lstEventNum = result.OrderBy(t => t.EventNum).Select(t => t.EventNum).Distinct().ToList();

            foreach (var item in lstEventNum)
            {
                int index = dataGridView1.Rows.Add();
                //赋值各行数据
                dataGridView1[0, index].Value = item;
                dataGridView1[1, index].Value = lstCondition.Where(t => t.EventNum == item).Select(t => t.StartTime.ToLongDateString()).FirstOrDefault();
                dataGridView1[2, index].Value = lstCondition.Where(t => t.EventNum == item).Select(t => t.EndTime.ToLongDateString()).FirstOrDefault();;
                dataGridView1[3, index].Value = lstCondition.Where(t => t.EventNum == item).Select(t => t.State).FirstOrDefault();

                for (int i = 0; i < hourArry.Length; i++)
                {
                    string columName = $"RAINFALL_{hourArry[i]}_HOUR";
                    dataGridView1[columName, index].Value = result.Where(t => t.Day == false && t.EventNum == item && t.MonthMax == false && t.During == hourArry[i]).Select(t => t.MaxValue).FirstOrDefault();

                    columName = $"RAINFALL_{hourArry[i]}_HOUR_TIME";
                    dataGridView1[columName, index].Value = result.Where(t => t.Day == false && t.EventNum == item && t.MonthMax == false && t.During == hourArry[i]).Select(t => t.MaxValueDate).FirstOrDefault();

                    columName = $"RAINFALL_{hourArry[i]}_HOUR_QC";
                    dataGridView1[columName, index].Value = result.Where(t => t.Day == false && t.EventNum == item && t.MonthMax == false && t.During == hourArry[i]).Select(t => t.MaxValueQc).FirstOrDefault();

                    columName = $"MAX_{hourArry[i]}_HOUR_MONTH";
                    dataGridView1[columName, index].Value = result.Where(t => t.Day == false && t.EventNum == item && t.MonthMax == true && t.During == hourArry[i]).Select(t => t.MaxValue).FirstOrDefault();

                    columName = $"MAX_{hourArry[i]}_HOUR_MONTH_TIME";
                    dataGridView1[columName, index].Value = result.Where(t => t.Day == false && t.EventNum == item && t.MonthMax == true && t.During == hourArry[i]).Select(t => t.MaxValueDate).FirstOrDefault();

                    columName = $"MAX_{hourArry[i]}_HOUR_MONTH_QC";
                    dataGridView1[columName, index].Value = result.Where(t => t.Day == false && t.EventNum == item && t.MonthMax == true && t.During == hourArry[i]).Select(t => t.MaxValueQc).FirstOrDefault();
                }

                for (int i = 0; i < dayArry.Length; i++)
                {
                    string columName = $"RAINFALL_{dayArry[i]}_DAY";
                    dataGridView1[columName, index].Value = result.Where(t => t.Day == true && t.EventNum == item && t.MonthMax == false && t.During == dayArry[i]).Select(t => t.MaxValue).FirstOrDefault();

                    if (yxDayArry.Contains(dayArry[i]))
                    {
                        //加入有效雨量,计算有效雨量的最大值日期
                        DateTime yxMaxTime = result.Where(t => t.Day == true && t.EventNum == item && t.MonthMax == false && t.During == dayArry[i]).Select(t => t.MaxValueDate).FirstOrDefault();

                        if (yxMaxTime != DateTime.MinValue)
                        {
                            //计算有效雨量值,并乘以系数
                            double yxVal = 0;
                            for (int j = 0; j < dayArry[i]; j++)
                            {
                                string  sql = $"SELECT sum(rainfall) FROM RAINFALL_STATE where monitornum = '{dataGridView1[3, index].Value}' and recorddate > '{yxMaxTime.AddDays(-j - 1)}' and recorddate<='{yxMaxTime.AddDays(-j)}'";
                                DataSet ds  = SqlHelper.ExecuteDataset(SqlHelper.GetConnection(), CommandType.Text, sql);
                                if (ds.Tables[0].Rows.Count > 0)
                                {
                                    double?val = ConvertDecimal(ds.Tables[0].Rows[0][0]);
                                    if (val.HasValue)
                                    {
                                        double arg = Math.Round(Math.Pow(0.8, j), 2);
                                        yxVal += (val.Value * arg);
                                    }
                                }
                            }
                            columName = $"RAINFALL_{dayArry[i]}_DAY_YX";
                            dataGridView1[columName, index].Value = yxVal;
                        }
                    }

                    columName = $"RAINFALL_{dayArry[i]}_DAY_TIME";
                    dataGridView1[columName, index].Value = result.Where(t => t.Day == true && t.EventNum == item && t.MonthMax == false && t.During == dayArry[i]).Select(t => t.MaxValueDate).FirstOrDefault();

                    columName = $"RAINFALL_{dayArry[i]}_DAY_QC";
                    dataGridView1[columName, index].Value = result.Where(t => t.Day == true && t.EventNum == item && t.MonthMax == false && t.During == dayArry[i]).Select(t => t.MaxValueQc).FirstOrDefault();

                    columName = $"MAX_{dayArry[i]}_DAY_MONTH";
                    dataGridView1[columName, index].Value = result.Where(t => t.Day == true && t.EventNum == item && t.MonthMax == true && t.During == dayArry[i]).Select(t => t.MaxValue).FirstOrDefault();

                    columName = $"MAX_{dayArry[i]}_DAY_MONTH_TIME";
                    dataGridView1[columName, index].Value = result.Where(t => t.Day == true && t.EventNum == item && t.MonthMax == true && t.During == dayArry[i]).Select(t => t.MaxValueDate).FirstOrDefault();

                    columName = $"MAX_{dayArry[i]}_DAY_MONTH_QC";
                    dataGridView1[columName, index].Value = result.Where(t => t.Day == true && t.EventNum == item && t.MonthMax == true && t.During == dayArry[i]).Select(t => t.MaxValueQc).FirstOrDefault();
                }
            }
        }
 private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 {
     FormOutput.AppendProress(false);
     button2.Enabled = true;
     button3.Enabled = true;
 }