calpuff-client-Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


// 数据库dll

using MySql.Data.MySqlClient;
using System.IO;

namespace ClientV1._1
{    
   

    public partial class Form1 : Form
    {
        public static string SrcPath = "";
       // db Part

        public static string dbIp ="";

        public static string dbName = "";

        public static string dbUser = "";

        public static string dbPasswd = "";


        public static string modelname = "";

        public static string startdate = "";

        public static string enddate = "";

        public static string nx = "";

        public static string ny = "";

        public static string xrefkm = "";

        public static string yrefkm = "";

        public static string dgridkm = "";


        public static string identifier = "";
        
        // for terrel  identifier
        public static string gtopo30="";

        // for ctgproc identifier
        public static string glazas="";

        public  const int maxFileNum = 10000; //#MaxLimit
        public  string[] terrelFiles = new string[maxFileNum], ctgprocFiles = new string[maxFileNum];
        // 取出最后的文件名

        public  string[] terrelFileNames = new string[maxFileNum], ctgprocFileNames = new string[maxFileNum];
        public   void init()
        {
            modelname = "";
            startdate = "";
            enddate = "";
            nx = "";
            ny = "";
            xrefkm = "";
            yrefkm = "";
            dgridkm = "";
            identifier = "";
            gtopo30="";
            glazas="";

            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
            textBox6.Text = "";

            comboBox1.SelectedIndex = -1;
            comboBox2.SelectedIndex = -1;

            SrcPath ="";

            label13.Text = "Selected: C:\\" ;

        }

        // 四个基本参数的合法性检查
        public static bool ParamValidate()
        {
  
            if (xrefkm == "")
            {
                MessageBox.Show("Please Input XREFKM");
                return false;
            }

            if (yrefkm == "")
            {
                MessageBox.Show("Please Input YREFKM");
                return false;
            }

            if (nx == "")
            {
                MessageBox.Show("Please Input NX");
                return false;
            }

            if (ny == "")
            {
                MessageBox.Show("Please Input NY");
                return false;
            }

            if (dgridkm == "")
            {
                MessageBox.Show("Please Input DGRIDKM");
                return false;
            }

            // 合法性检查  至少是double

            try
            {
                double.Parse(xrefkm);
            }
            catch
            {
                MessageBox.Show("XREFKM should be a float number");
                return false;
            }

            try
            {
                double.Parse(yrefkm);
            }
            catch
            {
                MessageBox.Show("YREFKM should be a float number");
                return false;
            }

            try
            {
                double.Parse(nx);
            }
            catch
            {
                MessageBox.Show("NX should be a float number");
                return false;
            }

            try
            {
                double.Parse(ny);
            }
            catch
            {
                MessageBox.Show("NY should be a float number");
                return false;
            }

            try
            {
                double.Parse(dgridkm);
            }
            catch
            {
                MessageBox.Show("DGRIDKM should be a float number");
                return false;
            }

            //  全都没问题  返回合法
            return true;

        }

        // 非静态资源 this调用即可

        public bool DateAssignAndCheck()
        {
             dateTimePicker1.Format=DateTimePickerFormat.Custom;
             dateTimePicker2.Format=DateTimePickerFormat.Custom;
             
             dateTimePicker1.CustomFormat="yyyy-MM-dd";
             dateTimePicker2.CustomFormat="yyyy-MM-dd";

             string year1 = dateTimePicker1.Value.Year.ToString();
             
             string month1 = dateTimePicker1.Value.Month.ToString();
             
             // 规范形式

             if(dateTimePicker1.Value.Month<10)
             {
                 month1 = "0" + month1;
             }

             string day1 = dateTimePicker1.Value.Day.ToString();

             if (dateTimePicker1.Value.Day < 10)
             {
                 day1 = "0" + day1;
             }


             string year2 = dateTimePicker1.Value.Year.ToString();

             string month2 = dateTimePicker1.Value.Month.ToString();

             // 规范形式

             if (dateTimePicker2.Value.Month < 10)
             {
                 month2 = "0" + month2;
             }

             string day2 = dateTimePicker2.Value.Day.ToString();

             if (dateTimePicker2.Value.Day < 10)
             {
                 day2 = "0" + day2;
             }
             startdate = year1 + "-" + month1 + "-" + day1;

             enddate = year2 + "-" + month2 + "-" + day2;


             int result = dateTimePicker1.Value.Date.CompareTo(dateTimePicker2.Value.Date);

             if (result > 0)
                 return false;
             
             else return true;

        }

  
        public static bool IdentifierValidate()
        {
               
            int length = identifier.Length;

         

            for(int i=0;i<length;i++)
            {
                if (identifier[i] <= 'Z' && identifier[i] >= 'A') continue;
                if (identifier[i] <= 'z' && identifier[i] >= 'a') continue;
                if (identifier[i] <= '9' && identifier[i] >= '0') continue;
                if (identifier[i] == '_') continue;
                if (identifier[i] == '@') continue;
                return false;
            }

            return true;
        }

        public static bool  DbTest()
        {
            MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection();

            // 到时候换成一个公网IP  
            string connStr = "server=" + Form1.dbIp + ";user id=" + Form1.dbUser + ";password=" + Form1.dbPasswd + ";database=" + Form1.dbName + ";pooling=false;charset=utf8";

            conn.ConnectionString = connStr;
            try
            {
                conn.Open();

            }
            catch
            {
                MessageBox.Show("Database Connection Error");
                return false;
            }

            return true;

        }

        public  bool  ParamAssignAndCheck()
        {

            xrefkm = textBox1.Text;
            yrefkm = textBox2.Text;

            nx = textBox3.Text;
            ny = textBox4.Text;

            dgridkm = textBox5.Text;

            identifier = textBox6.Text;


            if (ParamValidate() == false)
            {
                return false;
            }
  

            if (DbTest() == false)
            {
                return false;
            }

            // 日期单独检查
          

            if (identifier == "")
            {
                MessageBox.Show("Identifier Should Be Non-empty");
                return false;
            }
            // identifier 检查   需要连接数据库
            if (IdentifierValidate() == false)
            {
                MessageBox.Show("Identifier Should Consist Of 'A-Z','a'-'z' '@' and '_'");
                return false;
            }

            // 检查过关 
            return true;

        }
        public static int Existed(string _identifier)
        {

            MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection();

            string connStr = "server=" + Form1.dbIp + ";user id=" + Form1.dbUser + ";password=" + Form1.dbPasswd + ";database=" + Form1.dbName + ";pooling=false;charset=utf8";

            conn.ConnectionString = connStr;

            try
            {
                conn.Open();
            }

            catch
            {
                MessageBox.Show("Database Connection Error");
                return -1;  // 代表DB 连接故障
            }




            MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "select * from t_calpuf_conf where identifier=\"" + _identifier + "\""; 

            MySqlDataReader reader = cmd.ExecuteReader();

            // 先检查identifier是否已经存在

            if (reader.HasRows)
            {
                
                conn.Close();

                return 1;
            }
            else
            {
                conn.Close();
                return 0;
            }
            // 关联新的cmd conn需要重启

        }

     

        public Form1()
        {
            InitializeComponent();

            Point point = new Point(Screen.PrimaryScreen.WorkingArea.Width / 2 - this.Size.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2 - this.Size.Height / 2);//窗体位置
            this.StartPosition = FormStartPosition.Manual;
            this.Location = point;

            //  导入配置文件

            loadIni();


        }


      

        // 选择文件
       

        //  db Conf
        private void button8_Click(object sender, EventArgs e)
        {
            ServerConf form = new ServerConf();
            Point point = new Point(Screen.PrimaryScreen.WorkingArea.Width / 2 - form.Size.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2 - form.Size.Height / 2);//窗体位置
            form.StartPosition = FormStartPosition.Manual;
            form.Location = point;
            form.ShowDialog();
        }

        public void enable()
        {
            this.Enabled = true;
        }
        // 从另一个表里

        // Refresh terrel & ctgproc files
        private void button9_Click(object sender, EventArgs e)
        {
            MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection();

            string connStr = "server=" + Form1.dbIp + ";user id=" + Form1.dbUser + ";password=" + Form1.dbPasswd + ";database=" + Form1.dbName + ";pooling=false;charset=utf8";

            conn.ConnectionString = connStr;

            try
            {
                conn.Open();
            }

            catch
            {
                MessageBox.Show("Database Connection Error");
                return;
            }



            MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();
            cmd.Connection = conn;
     
            cmd.CommandText = "select path,type from t_geo_file";
       
 
           

            System.Data.Common.DbDataReader reader = cmd.ExecuteReader();

            if(!reader.HasRows)
            {
                MessageBox.Show("No GeoFiles Are Available,Please Contact The Server Provider");
                return;
            }

            int indexOfTerrel = 0;
            int indexOfCtgproc = 0;

            // 每个task
            while (reader.Read())
            {
                string path = reader.GetString(reader.GetOrdinal("path"));
                // 生成inp 文件
                string name = reader.GetString(reader.GetOrdinal("type"));

                if (name == "terrel")
                    terrelFiles[indexOfTerrel++] = path;
                else ctgprocFiles[indexOfCtgproc++] = path;
            }


            if (indexOfTerrel==0)
            {
                MessageBox.Show("No Terrel Files Are Available,Please Contact The Server Provider");
                return;
            }

            if (indexOfCtgproc == 0)
            {
                MessageBox.Show("No Ctgproc Files Are Available,Please Contact The Server Provider");
                return;
            }

            // 将文件名作为数据源

            for (int i = 0; i < indexOfTerrel;i++ )
            {
                terrelFileNames[i] = getName(terrelFiles[i]);
            }


            for (int i = 0; i < indexOfCtgproc;i++ )
            {
                ctgprocFileNames[i] = getName(ctgprocFiles[i]);
            }

            cmd.Dispose();//此处可以不用调用,  
            conn.Close();// 离开 using 块, connection 会自行关闭  


            // 更新数据源

            comboBox1.DataSource = terrelFileNames;
            comboBox2.DataSource = ctgprocFileNames;

            MessageBox.Show("Update Successful");

        }

        // 【Run Terrel】

        private void button5_Click(object sender, EventArgs e)
        {

            // 首先更新后台记录的一些参数
            if (this.ParamAssignAndCheck() == false)
            {
                // 提示已经弹窗过了
                return;
            }
            // 是否已经用过此Identifier

          if(Existed(identifier)==1)
           {    
               MessageBox.Show("This Identifier Has Been Occupied,Please Choose Another");
               return;
           }
           //这才是最普通的
           else
           {
               // 本模型特殊的
               if (comboBox1.SelectedIndex < 0)
               {
                   MessageBox.Show("Please select a GTOPO30 File");
                   return;
               }

               gtopo30= terrelFiles[comboBox1.SelectedIndex];

               // 四个基本参数验证,数据库,文件,日期都通过  开始插入数据


               MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection();

               string connStr = "server=" + Form1.dbIp + ";user id=" + Form1.dbUser + ";password=" + Form1.dbPasswd + ";database=" + Form1.dbName + ";pooling=false;charset=utf8";

               conn.ConnectionString = connStr;


               conn.Open();


               MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();
               cmd.Connection = conn;
               // 关联新的cmd conn需要重启
              
               
               cmd.CommandText = "insert into t_calpuf_conf(startdate,enddate,xrefkm,yrefkm,nx,ny,dgridkm,identifier,modelname,gtopo30,done) values(@0,@1,@2,@3,@4,@5,@6,@7,@8,@9,@10)";
               cmd.Parameters.Add("@0", MySql.Data.MySqlClient.MySqlDbType.VarChar);
               cmd.Parameters.Add("@1", MySql.Data.MySqlClient.MySqlDbType.VarChar);
               cmd.Parameters.Add("@2", MySql.Data.MySqlClient.MySqlDbType.VarChar);
               cmd.Parameters.Add("@3", MySql.Data.MySqlClient.MySqlDbType.VarChar);
               cmd.Parameters.Add("@4", MySql.Data.MySqlClient.MySqlDbType.VarChar);
               cmd.Parameters.Add("@5", MySql.Data.MySqlClient.MySqlDbType.VarChar);
               cmd.Parameters.Add("@6", MySql.Data.MySqlClient.MySqlDbType.VarChar);
               cmd.Parameters.Add("@7", MySql.Data.MySqlClient.MySqlDbType.VarChar);
               cmd.Parameters.Add("@8", MySql.Data.MySqlClient.MySqlDbType.VarChar);
               cmd.Parameters.Add("@9", MySql.Data.MySqlClient.MySqlDbType.VarChar);
               cmd.Parameters.Add("@10", MySql.Data.MySqlClient.MySqlDbType.Int32);

               cmd.Parameters[0].Value = startdate;
               cmd.Parameters[1].Value = enddate;
               cmd.Parameters[2].Value = xrefkm;
               cmd.Parameters[3].Value = yrefkm;
               cmd.Parameters[4].Value = nx;
               cmd.Parameters[5].Value = ny;
               cmd.Parameters[6].Value = dgridkm;
               cmd.Parameters[7].Value = identifier;
               cmd.Parameters[8].Value = "terrel";
               cmd.Parameters[9].Value = gtopo30;
               cmd.Parameters[10].Value = 0;

               // 已经确认过可以连接了
               cmd.ExecuteNonQuery();

               cmd.Dispose();//此处可以不用调用,  
               conn.Close();// 离开 using 块, connection 会自行关闭  
               MessageBox.Show("Submit  Successful");

               // 提交一次任务之后初始化   不成功时保留不抹掉
               this.init();

           }
        

        }

        // Run Ctgproc
        private void button6_Click(object sender, EventArgs e)
        {   

           
            // 首先更新后台记录的一些参数
            if (this.ParamAssignAndCheck() == false)
            {
                // 提示已经弹窗过了
                return;
            }
            // 是否已经用过此Identifier

            if (Existed(identifier) == 1)
            {
                MessageBox.Show("This Identifier Has Been Occupied,Please Choose Another");
                return;
            }
            //这才是最普通的
            else
            {

                if (comboBox2.SelectedIndex < 0)
                {
                    MessageBox.Show("Please select a GLAZAS File");
                    return;
                }

                glazas = ctgprocFiles[comboBox2.SelectedIndex];


                MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection();

                string connStr = "server=" + Form1.dbIp + ";user id=" + Form1.dbUser + ";password=" + Form1.dbPasswd + ";database=" + Form1.dbName + ";pooling=false;charset=utf8";

                conn.ConnectionString = connStr;

                conn.Open();


                MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();
                cmd.Connection = conn;
                // 关联新的cmd conn需要重启
               

                cmd.CommandText = "insert into t_calpuf_conf(startdate,enddate,xrefkm,yrefkm,nx,ny,dgridkm,identifier,modelname,glazas,done) values(@0,@1,@2,@3,@4,@5,@6,@7,@8,@9,@10)";
                cmd.Parameters.Add("@0", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@1", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@2", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@3", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@4", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@5", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@6", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@7", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@8", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@9", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@10", MySql.Data.MySqlClient.MySqlDbType.Int32);

                cmd.Parameters[0].Value = startdate;
                cmd.Parameters[1].Value = enddate;
                cmd.Parameters[2].Value = xrefkm;
                cmd.Parameters[3].Value = yrefkm;
                cmd.Parameters[4].Value = nx;
                cmd.Parameters[5].Value = ny;
                cmd.Parameters[6].Value = dgridkm;
                cmd.Parameters[7].Value = identifier;
                cmd.Parameters[8].Value = "ctgproc";
                cmd.Parameters[9].Value = glazas;
                cmd.Parameters[10].Value = 0;

                // 已经确认过可以连接了
                cmd.ExecuteNonQuery();

                cmd.Dispose();//此处可以不用调用,  
                conn.Close();// 离开 using 块, connection 会自行关闭  
                MessageBox.Show("Submit  Successful");

                // 提交一次任务之后初始化   不成功时保留不抹掉
                this.init();

            }


        }
        // Run Makegeo--综合前一二两个模型
        private void button3_Click(object sender, EventArgs e)
        {
            // 首先更新后台记录的一些参数
            // Common
            if (this.ParamAssignAndCheck() == false)
            {  
                // 提示已经弹窗过了
                return;
            }
            // 是否已经用过此Identifier

            if (Existed(identifier) == 1)
            {
                MessageBox.Show("This Identifier Has Been Occupied,Please Choose Another");
                return;
            }
            //这才是最普通的
            else
            {
                // 本模型特殊的
                if (comboBox1.SelectedIndex < 0)
                {
                    MessageBox.Show("Please select a GTOPO30 File");
                    return;
                }

                gtopo30 = terrelFiles[comboBox1.SelectedIndex];

                // 四个基本参数验证,数据库,文件,日期都通过  开始插入数据

                if (comboBox2.SelectedIndex < 0)
                {
                    MessageBox.Show("Please select a GLAZAS File");
                    return;
                }

                glazas = ctgprocFiles[comboBox2.SelectedIndex];


                MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection();

                string connStr = "server=" + Form1.dbIp + ";user id=" + Form1.dbUser + ";password=" + Form1.dbPasswd + ";database=" + Form1.dbName + ";pooling=false;charset=utf8";

                conn.ConnectionString = connStr;

                conn.Open();


                MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();
                cmd.Connection = conn;
                // 关联新的cmd conn需要重启
                

                cmd.CommandText = "insert into t_calpuf_conf(startdate,enddate,xrefkm,yrefkm,nx,ny,dgridkm,identifier,modelname,gtopo30,glazas,done) values(@0,@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11)";
                cmd.Parameters.Add("@0", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@1", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@2", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@3", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@4", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@5", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@6", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@7", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@8", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@9", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@10", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@11", MySql.Data.MySqlClient.MySqlDbType.VarChar);

                cmd.Parameters[0].Value = startdate;
                cmd.Parameters[1].Value = enddate;
                cmd.Parameters[2].Value = xrefkm;
                cmd.Parameters[3].Value = yrefkm;
                cmd.Parameters[4].Value = nx;
                cmd.Parameters[5].Value = ny;
                cmd.Parameters[6].Value = dgridkm;
                cmd.Parameters[7].Value = identifier;
                cmd.Parameters[8].Value = "makegeo";
                cmd.Parameters[9].Value = gtopo30;
                cmd.Parameters[10].Value = glazas;
                cmd.Parameters[11].Value = 0;

                cmd.ExecuteNonQuery();

                cmd.Dispose();//此处可以不用调用,  
                conn.Close();// 离开 using 块, connection 会自行关闭  
                MessageBox.Show("Submit  Successful");

                // 提交一次任务之后初始化   不成功时保留不抹掉
                this.init();

            }

        }
        // Run calwrf  -- 只需要选日期
        private void button7_Click(object sender, EventArgs e)
        {

               // DateAssignAndCheck 包含判断与赋值  
                if (this.DateAssignAndCheck() == false)
                {
                MessageBox.Show("Date Selection Error");
                return;
                }
               
                // 很特殊  因为不在ParamAssign里面

                identifier = textBox6.Text;

                if(identifier=="")
                {
                    MessageBox.Show("Identifier Should Be Non-empty");
                    return;
                }

                if (IdentifierValidate() == false)
                {
                   
                    MessageBox.Show("Identifier Should Consist Of 'A-Z','a'-'z' '@' and '_'");
                    return;
                }

                if (DbTest() == false)
                {
                    return;
                }

                if (Existed(identifier) == 1)
                {
                    MessageBox.Show("This Identifier Has Been Occupied,Please Choose Another");
                    return;
                }


                MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection();

                string connStr = "server=" + Form1.dbIp + ";user id=" + Form1.dbUser + ";password=" + Form1.dbPasswd + ";database=" + Form1.dbName + ";pooling=false;charset=utf8";

                conn.ConnectionString = connStr;

                conn.Open();

                MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();

                cmd.Connection = conn;

                cmd.CommandText = "insert into t_calpuf_conf(startdate,enddate,identifier,modelname,done) values(@0,@1,@2,@3,@4)";
                cmd.Parameters.Add("@0", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@1", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@2", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@3", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@4", MySql.Data.MySqlClient.MySqlDbType.Int32);


                cmd.Parameters[0].Value = startdate;
                cmd.Parameters[1].Value = enddate;
                cmd.Parameters[2].Value = identifier;
                cmd.Parameters[3].Value = "calwrf";
                cmd.Parameters[4].Value = 0;

                // 已经确认过可以连接了
                cmd.ExecuteNonQuery();

                cmd.Dispose();//此处可以不用调用,  
                conn.Close();// 离开 using 块, connection 会自行关闭  
                MessageBox.Show("Submit  Successful");

                // 提交一次任务之后初始化
                this.init();
            
        }


        // Run calmet--需要calwrf的结果  还需要makegeo  而makegeo 依赖于terrel 和ctgproc

        private void button4_Click(object sender, EventArgs e)
        { 

            // 需要选日期
            if (DateAssignAndCheck() == false)
            {
                MessageBox.Show("Date Selection Error");
                return ;
            }

            if (this.ParamAssignAndCheck() == false)
            {
                // 提示已经弹窗过了
                return;
            }
            // 是否已经用过此Identifier

            if (Existed(identifier) == 1)
            {
                MessageBox.Show("This Identifier Has Been Occupied,Please Choose Another");
                return;
            }
            //这才是最普通的
            else
            {
                // 本模型特殊的
                if (comboBox1.SelectedIndex < 0)
                {
                    MessageBox.Show("Please select a GTOPO30 File");
                    return;
                }

                gtopo30 = terrelFiles[comboBox1.SelectedIndex];

                // 四个基本参数验证,数据库,文件,日期都通过  开始插入数据

                if (comboBox2.SelectedIndex < 0)
                {
                    MessageBox.Show("Please select a GLAZAS File");
                    return;
                }

                glazas = ctgprocFiles[comboBox2.SelectedIndex];


                MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection();

                string connStr = "server=" + Form1.dbIp + ";user id=" + Form1.dbUser + ";password=" + Form1.dbPasswd + ";database=" + Form1.dbName + ";pooling=false;charset=utf8";

                conn.ConnectionString = connStr;

                conn.Open();


                MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();
                cmd.Connection = conn;
                // 关联新的cmd conn需要重启
               

                cmd.CommandText = "insert into t_calpuf_conf(startdate,enddate,xrefkm,yrefkm,nx,ny,dgridkm,identifier,modelname,gtopo30,glazas,done) values(@0,@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11)";
                cmd.Parameters.Add("@0", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@1", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@2", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@3", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@4", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@5", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@6", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@7", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@8", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@9", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@10", MySql.Data.MySqlClient.MySqlDbType.VarChar);
                cmd.Parameters.Add("@11", MySql.Data.MySqlClient.MySqlDbType.VarChar);

                cmd.Parameters[0].Value = startdate;
                cmd.Parameters[1].Value = enddate;
                cmd.Parameters[2].Value = xrefkm;
                cmd.Parameters[3].Value = yrefkm;
                cmd.Parameters[4].Value = nx;
                cmd.Parameters[5].Value = ny;
                cmd.Parameters[6].Value = dgridkm;
                cmd.Parameters[7].Value = identifier;
                cmd.Parameters[8].Value = "calmet";
                cmd.Parameters[9].Value = gtopo30;
                cmd.Parameters[10].Value = glazas;
                cmd.Parameters[11].Value = 0;
                cmd.ExecuteNonQuery();

                cmd.Dispose();//此处可以不用调用,  
                conn.Close();// 离开 using 块, connection 会自行关闭  
                MessageBox.Show("Submit  Successful");

                // 提交一次任务之后初始化   不成功时保留不抹掉
                this.init();

            }
        }

        // Choose a file
        private void button2_Click_1(object sender, EventArgs e)
        {
             OpenFileDialog dialog = new OpenFileDialog();
            dialog.Multiselect = false;   // 单选

            if (dialog.ShowDialog() == DialogResult.OK)
            {
                SrcPath = dialog.FileName;

                // 1 显示上传的文件路径 2 连接服务器将文件上传到blob里面去~  db端取出来
                label13.Text = "Selected: "+SrcPath;

            }

            else
            {
                MessageBox.Show("No file is selected");
            }
        }



      

        // Upload and Run calpuff
        private void button1_Click_1(object sender, EventArgs e)
        {
            if (SrcPath == "")
            {
                MessageBox.Show("Please Choose a File First");
                return;
            }
            else
            {

             // 检查之前几个模型   提醒用户选择同样的Id,run之间的几个模型
             // 将文件读入字节流
             byte[] SrcBiFile = null;  
             SrcBiFile = File.ReadAllBytes(SrcPath);
             //然后存到数据库里就行了~      几乎是一样的


             if (this.ParamAssignAndCheck() == false)
             {
                 // 提示已经弹窗过了
                 return;
             }

             // 需要选日期
             if (DateAssignAndCheck() == false)
             {
                 MessageBox.Show("Date Selection Error");
                 return;
             }
            
             if (comboBox1.SelectedIndex < 0)
             {
                 MessageBox.Show("Please select a GTOPO30 File");
                 return;
             }

             gtopo30 = terrelFiles[comboBox1.SelectedIndex];

             if (comboBox2.SelectedIndex < 0)
             {
                 MessageBox.Show("Please select a GLAZAS File");
                 return;
             }

             glazas = ctgprocFiles[comboBox2.SelectedIndex];

             // 四个基本参数验证,数据库,文件,日期都通过  开始插入数据


             MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection();

             string connStr = "server=" + Form1.dbIp + ";user id=" + Form1.dbUser + ";password=" + Form1.dbPasswd + ";database=" + Form1.dbName + ";pooling=false;charset=utf8";

             conn.ConnectionString = connStr;

             conn.Open();


             MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();
             cmd.Connection = conn;
             // 关联新的cmd conn需要重启
            

             cmd.CommandText = "insert into t_calpuf_conf(startdate,enddate,xrefkm,yrefkm,nx,ny,dgridkm,identifier,modelname,srcfile,gtopo30,glazas,done) values(@0,@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11,@12)";
             cmd.Parameters.Add("@0", MySql.Data.MySqlClient.MySqlDbType.VarChar);
             cmd.Parameters.Add("@1", MySql.Data.MySqlClient.MySqlDbType.VarChar);
             cmd.Parameters.Add("@2", MySql.Data.MySqlClient.MySqlDbType.VarChar);
             cmd.Parameters.Add("@3", MySql.Data.MySqlClient.MySqlDbType.VarChar);
             cmd.Parameters.Add("@4", MySql.Data.MySqlClient.MySqlDbType.VarChar);
             cmd.Parameters.Add("@5", MySql.Data.MySqlClient.MySqlDbType.VarChar);
             cmd.Parameters.Add("@6", MySql.Data.MySqlClient.MySqlDbType.VarChar);
             cmd.Parameters.Add("@7", MySql.Data.MySqlClient.MySqlDbType.VarChar);
             cmd.Parameters.Add("@8", MySql.Data.MySqlClient.MySqlDbType.VarChar);
             cmd.Parameters.Add("@9", MySql.Data.MySqlClient.MySqlDbType.Blob);
             cmd.Parameters.Add("@10", MySql.Data.MySqlClient.MySqlDbType.VarChar);
             cmd.Parameters.Add("@11", MySql.Data.MySqlClient.MySqlDbType.VarChar);
             cmd.Parameters.Add("@12", MySql.Data.MySqlClient.MySqlDbType.VarChar);

             cmd.Parameters[0].Value = startdate;
             cmd.Parameters[1].Value = enddate;
             cmd.Parameters[2].Value = xrefkm;
             cmd.Parameters[3].Value = yrefkm;
             cmd.Parameters[4].Value = nx;
             cmd.Parameters[5].Value = ny;
             cmd.Parameters[6].Value = dgridkm;
             cmd.Parameters[7].Value = identifier;
             cmd.Parameters[8].Value = "calpuff";
             cmd.Parameters[9].Value = SrcBiFile;
             cmd.Parameters[10].Value = gtopo30; 
             cmd.Parameters[11].Value = glazas;
             cmd.Parameters[12].Value = 0;

             // 已经确认过可以连接了
             cmd.ExecuteNonQuery();

             cmd.Dispose();//此处可以不用调用,  
             conn.Close();// 离开 using 块, connection 会自行关闭  

           
             MessageBox.Show("Submit  Successful");

             // 提交一次任务之后初始化
             this.init();
            }
        }


         
        // 用于筛选文件名用
         public static string getName(string path)
        {
            int index =0;
            
            int length=path.Length;
            for(int i=0;i<length;i++)
            {
                if (path[i] == '\\') index = i;
            }

            return path.Substring(index + 1, length - index - 1);

        }

         public static void loadIni()
         {
             string iniPath = System.Environment.CurrentDirectory + "\\" + "CalpuffModel.ini";

             if (!File.Exists(iniPath))
             {
                 MessageBox.Show("CalpufModel.ini is missing ,please place it in " + iniPath);
                 return;
             }

             // 先获取最大行~
             int lineCnt = 0;
             FileStream fs = new FileStream(iniPath, FileMode.Open, FileAccess.Read);
             StreamReader sr = new StreamReader(fs);

             string tempStr = "";

             while (tempStr != null)
             {
                 tempStr = sr.ReadLine();
                 lineCnt++;
             }

             lineCnt--;  // 有一位位移


             string[] ini = new string[lineCnt + 100];


             fs = new FileStream(iniPath, FileMode.Open, FileAccess.Read);

             sr = new StreamReader(fs);


             int index = 0;

             tempStr = "";

             while (tempStr != null)
             {
                 tempStr = sr.ReadLine();
                 ini[index++] = tempStr;
             }

             index--; // 此时index就是行数

             // 这样做其实很麻烦的  完全可以一次性就申请多一点  但是既然现成的代码也有 就这样写吧
             string[] key = new string[index];
             string[] value = new string[index];

             string[] keyAndValue = new string[100];// 2就够了



             for (int i = 0; i < index; i++)
             {
                 string curStr = ini[i];
                 int wordsCnt = 0;
                 infoExtract(keyAndValue, ref wordsCnt, curStr);
                 key[i] = keyAndValue[0];
                 value[i] = keyAndValue[1];
             }

             // 有点枚举  但是数据规模比较小 
             for (int i = 0; i < index; i++)
             {
                 string curKey = key[i];
                 string curValue = value[i];

                 if (curKey == "dbIp") dbIp = curValue;
                 else if (curKey == "dbName") dbName = curValue;
                 else if (curKey == "dbUser") dbUser = curValue;
                 else if (curKey == "dbPasswd") dbPasswd = curValue;

                 //else if (curKey == "ftpIp") ftpIp = curValue;
                 //else if (curKey == "ftpUser") ftpUser = curValue;
                 //else if (curKey == "ftpPasswd") ftpPasswd = curValue;
                 //else if (curKey == "inpDir") inpDir = curValue;
                 //else if (curKey == "exeDir") exeDir = curValue;
                 //else if (curKey == "wrfoutDir") wrfoutDir = curValue;
                 //else if (curKey == "outputDir") outputDir = curValue;
                 //else if (curKey == "srcDir") srcDir = curValue;

             }

             sr.Close();
             fs.Close();

         }
        

         public static void infoExtract(string[] param, ref int tokenNum, string str)
         {
             str = str.Trim();
             str += " ";
             int cnt = 0;

             while (str != " ")
             {
                 for (int i = 0; i < str.Length; i++)
                 {
                     if (str[i] == ' ')
                     {
                         param[cnt++] = str.Substring(0, i);
                         str = str.Substring(i, str.Length - i);
                         str = str.Trim();
                         str += " "; // 为了最后一次推出循环
                         break;   //  这个break 很关键  因为找到了就应该进入下一次循环了
                     }
                 }

             }
             tokenNum = cnt;

         }

         private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
         {
             System.Diagnostics.Process.Start("http://calpuff.sinaapp.com"); 
         }

         private void Form1_Load(object sender, EventArgs e)
         {

         }

    } // class definition
}   // namesapce

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值