|  |  |  | using SkiaSharp; | 
					
						
							|  |  |  | using SunlightCentralizedControlManagement_SCCM_.UserClass; | 
					
						
							|  |  |  | using SunlightCentralizedControlManagement_SCCM_.ViewModel; | 
					
						
							|  |  |  | using System; | 
					
						
							|  |  |  | using System.Collections; | 
					
						
							|  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  | using System.Data; | 
					
						
							|  |  |  | using System.Linq; | 
					
						
							|  |  |  | using System.Net; | 
					
						
							|  |  |  | using System.Net.NetworkInformation; | 
					
						
							|  |  |  | using System.Net.Sockets; | 
					
						
							|  |  |  | using System.Runtime.Remoting.Metadata.W3cXsd2001; | 
					
						
							|  |  |  | using System.Text; | 
					
						
							|  |  |  | using System.Threading.Tasks; | 
					
						
							|  |  |  | using System.Windows; | 
					
						
							|  |  |  | using System.Windows.Controls; | 
					
						
							|  |  |  | using System.Windows.Data; | 
					
						
							|  |  |  | using System.Windows.Documents; | 
					
						
							|  |  |  | using System.Windows.Input; | 
					
						
							|  |  |  | using System.Windows.Media; | 
					
						
							|  |  |  | using System.Windows.Media.Imaging; | 
					
						
							|  |  |  | using System.Windows.Navigation; | 
					
						
							|  |  |  | using System.Windows.Shapes; | 
					
						
							|  |  |  | using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace SunlightCentralizedControlManagement_SCCM_.View | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     /// <summary>
 | 
					
						
							|  |  |  |     /// MachinesSet.xaml 的交互逻辑
 | 
					
						
							|  |  |  |     /// </summary>
 | 
					
						
							|  |  |  |     public partial class MachinesSet : UserControl | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         public MachinesSet() | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             InitializeComponent(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             // 获取所有可用串口端口,并添加到comboBoxCOM
 | 
					
						
							|  |  |  |             string[] ports = System.IO.Ports.SerialPort.GetPortNames(); | 
					
						
							|  |  |  |             comboBoxCOM0.ItemsSource = ports; | 
					
						
							|  |  |  |             comboBoxCOM0.Text = Configini.IniReadvalue("SYS", "COM"); | 
					
						
							|  |  |  |             comboBoxMachine.ItemsSource = MainWindowViewModel.Machines.AsEnumerable().Select(rowdata => rowdata.Field<string>("name")).ToList();//转换机台                                                                                                                            
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         private SQLiteHelper SQLiteHelpers = null;  //定义数据库
 | 
					
						
							|  |  |  |         private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\SCCM.db";  //数据库路径
 | 
					
						
							|  |  |  |         private readonly UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(Convert.ToString(System.AppDomain.CurrentDomain.BaseDirectory) + "SCCM.ini"); | 
					
						
							|  |  |  |         //private string SYS_machines = null;
 | 
					
						
							|  |  |  |         int ID_; | 
					
						
							|  |  |  |         private void UserControl_Loaded(object sender, RoutedEventArgs e) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             Griddata.ItemsSource = MainWindowViewModel.Machines.DefaultView; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         private void Griddata_MouseDoubleClick(object sender, MouseButtonEventArgs e) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             int rownum = Griddata.SelectedIndex;//获取鼠标选中行并定义变量
 | 
					
						
							|  |  |  |             if (rownum != -1)//判断鼠标定位是否有效
 | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 ID_ = int.Parse((Griddata.Columns[7].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text); | 
					
						
							|  |  |  |                 comboBoxMachine.Text = (Griddata.Columns[1].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第1列,
 | 
					
						
							|  |  |  |                 TextMachineGroup.Text = (Griddata.Columns[2].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
 | 
					
						
							|  |  |  |                 IP.Text = (Griddata.Columns[3].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
 | 
					
						
							|  |  |  |                 PORT.Text = (Griddata.Columns[4].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
 | 
					
						
							|  |  |  |                 comboBoxCOM0.Text = (Griddata.Columns[5].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
 | 
					
						
							|  |  |  |                 BAUD.Text = (Griddata.Columns[6].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
 | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         private void Save_Click(object sender, RoutedEventArgs e) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             if (!string.IsNullOrEmpty(comboBoxMachine.Text)) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 Dictionary<string, object> Machines_DAT = new Dictionary<string, object>();//缓存函数
 | 
					
						
							|  |  |  |                 Dictionary<string, object> dr_new = new Dictionary<string, object>();//缓存函数
 | 
					
						
							|  |  |  |                 dr_new.Add("Name", comboBoxMachine.Text); | 
					
						
							|  |  |  |                 dr_new.Add("Groups", TextMachineGroup.Text); | 
					
						
							|  |  |  |                 dr_new.Add("IP", IP.Text); | 
					
						
							|  |  |  |                 dr_new.Add("PORT", PORT.Text);  | 
					
						
							|  |  |  |                 dr_new.Add("Serial", comboBoxCOM0.Text); | 
					
						
							|  |  |  |                 dr_new.Add("Baud", BAUD.Text); | 
					
						
							|  |  |  |                 SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
 | 
					
						
							|  |  |  |                 SQLiteHelpers.Open();  //打开数据库
 | 
					
						
							|  |  |  |                 if (SQLiteHelpers.ExecuteDataSet("select * from Machines where name ='" + comboBoxMachine.Text + "'", null).Tables[0].Rows.Count == 0) | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     MainWindowViewModel.Machines.Rows.Add(dr_new); | 
					
						
							|  |  |  |                     DatSteps(MainWindowViewModel.Machines);                | 
					
						
							|  |  |  |                     SQLiteHelpers.Delete("Machines", null, null);// 
 | 
					
						
							|  |  |  |                     for (int x = 0; x < MainWindowViewModel.Machines.Rows.Count; x++) | 
					
						
							|  |  |  |                     { | 
					
						
							|  |  |  |                         Machines_DAT.Add("ID", MainWindowViewModel.Machines.Rows[x]["ID"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Name", MainWindowViewModel.Machines.Rows[x]["Name"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("IP", MainWindowViewModel.Machines.Rows[x]["IP"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("PORT", MainWindowViewModel.Machines.Rows[x]["PORT"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Serial", MainWindowViewModel.Machines.Rows[x]["Serial"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Baud", MainWindowViewModel.Machines.Rows[x]["Baud"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Groups", MainWindowViewModel.Machines.Rows[x]["Groups"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Desktop", MainWindowViewModel.Machines.Rows[x]["Desktop"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Dispense", MainWindowViewModel.Machines.Rows[x]["Dispense"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("LOCK", "FALSE"); | 
					
						
							|  |  |  |                         SQLiteHelpers.InsertData("Machines", Machines_DAT);//行插入                                                                             
 | 
					
						
							|  |  |  |                         Machines_DAT.Clear(); | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 else  | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     DataRow dr = MainWindowViewModel.Machines.Rows[ID_-1]; | 
					
						
							|  |  |  |                     dr.BeginEdit(); | 
					
						
							|  |  |  |                     dr["Name"] = comboBoxMachine.Text; | 
					
						
							|  |  |  |                     dr["Groups"] = TextMachineGroup.Text; | 
					
						
							|  |  |  |                     dr["IP"] = IP.Text; | 
					
						
							|  |  |  |                     dr["PORT"] = PORT.Text; | 
					
						
							|  |  |  |                     dr["Serial"] = comboBoxCOM0.Text; | 
					
						
							|  |  |  |                     dr["Baud"] = BAUD.Text; | 
					
						
							|  |  |  |                     dr.EndEdit(); | 
					
						
							|  |  |  |                     SQLiteHelpers.Delete("Machines", null, null);// 
 | 
					
						
							|  |  |  |                     for (int x = 0; x < MainWindowViewModel.Machines.Rows.Count; x++) | 
					
						
							|  |  |  |                     { | 
					
						
							|  |  |  |                         Machines_DAT.Add("ID", MainWindowViewModel.Machines.Rows[x]["ID"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Name", MainWindowViewModel.Machines.Rows[x]["Name"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("IP", MainWindowViewModel.Machines.Rows[x]["IP"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("PORT", MainWindowViewModel.Machines.Rows[x]["PORT"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Serial", MainWindowViewModel.Machines.Rows[x]["Serial"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Baud", MainWindowViewModel.Machines.Rows[x]["Baud"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Groups", MainWindowViewModel.Machines.Rows[x]["Groups"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Desktop", MainWindowViewModel.Machines.Rows[x]["Desktop"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Dispense", MainWindowViewModel.Machines.Rows[x]["Dispense"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("LOCK", "FALSE"); | 
					
						
							|  |  |  |                         SQLiteHelpers.InsertData("Machines", Machines_DAT);//行插入                                                                             
 | 
					
						
							|  |  |  |                         Machines_DAT.Clear(); | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 }                                         | 
					
						
							|  |  |  |                 SQLiteHelpers.Close(); | 
					
						
							|  |  |  |                 Griddata.ItemsSource = MainWindowViewModel.Machines.DefaultView; | 
					
						
							|  |  |  |                 comboBoxMachine.Text = null; | 
					
						
							|  |  |  |                 TextMachineGroup.Text = null; | 
					
						
							|  |  |  |                 IP.Text = null; | 
					
						
							|  |  |  |                 PORT.Text = "7789"; | 
					
						
							|  |  |  |                 comboBoxCOM0.Text = null; | 
					
						
							|  |  |  |                 BAUD.Text = "57600"; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 textlog.Text = "Invalid"; | 
					
						
							|  |  |  |                 textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0)); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         private void Delete_Click(object sender, RoutedEventArgs e)//删除
 | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             if (!string.IsNullOrEmpty(comboBoxMachine.Text)) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 MessageBoxResult vr = System.Windows.MessageBox.Show(Properties.Resources.Delete + comboBoxMachine.Text, "SCCM", MessageBoxButton.OKCancel, MessageBoxImage.Question); | 
					
						
							|  |  |  |                 if (vr == MessageBoxResult.OK) // 如果是确定,就执行下面代码
 | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     MainWindowViewModel.Machines.Rows.RemoveAt(ID_-1); | 
					
						
							|  |  |  |                     DatSteps(MainWindowViewModel.Machines); | 
					
						
							|  |  |  |                    | 
					
						
							|  |  |  |                     SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
 | 
					
						
							|  |  |  |                     SQLiteHelpers.Open();  //打开数据库
 | 
					
						
							|  |  |  |                     Dictionary<string, object> Machines_DAT = new Dictionary<string, object>();//缓存函数
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     SQLiteHelpers.Delete("Machines",null, null);// 
 | 
					
						
							|  |  |  |                     for (int x = 0; x < MainWindowViewModel.Machines.Rows.Count; x++) | 
					
						
							|  |  |  |                     { | 
					
						
							|  |  |  |                         Machines_DAT.Add("ID", MainWindowViewModel.Machines.Rows[x]["ID"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Name", MainWindowViewModel.Machines.Rows[x]["Name"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("IP", MainWindowViewModel.Machines.Rows[x]["IP"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("PORT", MainWindowViewModel.Machines.Rows[x]["PORT"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Serial", MainWindowViewModel.Machines.Rows[x]["Serial"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Baud", MainWindowViewModel.Machines.Rows[x]["Baud"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Groups", MainWindowViewModel.Machines.Rows[x]["Groups"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Desktop", MainWindowViewModel.Machines.Rows[x]["Desktop"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("Dispense", MainWindowViewModel.Machines.Rows[x]["Dispense"]); | 
					
						
							|  |  |  |                         Machines_DAT.Add("LOCK", "FALSE"); | 
					
						
							|  |  |  |                         SQLiteHelpers.InsertData("Machines", Machines_DAT);//行插入                                                                             
 | 
					
						
							|  |  |  |                         Machines_DAT.Clear(); | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                     SQLiteHelpers.Close();  //关闭连接
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     Griddata.ItemsSource = MainWindowViewModel.Machines.DefaultView; | 
					
						
							|  |  |  |                     comboBoxMachine.Text = null; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 textlog.Text = "Invalid"; | 
					
						
							|  |  |  |                 textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0)); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         public void DatSteps(DataTable db)//行号刷新
 | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             int a = db.Rows.Count; | 
					
						
							|  |  |  |             for (int i = 0; i < a; i++) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 DataRow dr = db.Rows[i]; | 
					
						
							|  |  |  |                 dr.BeginEdit(); | 
					
						
							|  |  |  |                 dr["ID"] = i ; | 
					
						
							|  |  |  |                 dr.EndEdit(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         private void Test_Click(object sender, RoutedEventArgs e)//测试按钮
 | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             if (!string.IsNullOrEmpty(IP.Text) && !string.IsNullOrEmpty(PORT.Text)) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 textlog.Text = "TEST"; | 
					
						
							|  |  |  |                 textlog.Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 255)); | 
					
						
							|  |  |  |                 //------------使用ping类------
 | 
					
						
							|  |  |  |                 string host = IP.Text; | 
					
						
							|  |  |  |                 Ping p1 = new Ping(); | 
					
						
							|  |  |  |                 PingReply reply = p1.Send(host); //发送主机名或Ip地址
 | 
					
						
							|  |  |  |                                                  //StringBuilder sbuilder;
 | 
					
						
							|  |  |  |                 if (reply.Status == IPStatus.Success) | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); | 
					
						
							|  |  |  |                     //连接服务器,绑定IP 与 端口
 | 
					
						
							|  |  |  |                     IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse(IP.Text), int.Parse(PORT.Text)); | 
					
						
							|  |  |  |                     try | 
					
						
							|  |  |  |                     { | 
					
						
							|  |  |  |                         socket.Connect(iPEndPoint); | 
					
						
							|  |  |  |                         socket.Close();//离线
 | 
					
						
							|  |  |  |                         textlog.Text = "Link succeed"; | 
					
						
							|  |  |  |                         textlog.Foreground = new SolidColorBrush(Color.FromRgb(0, 255, 0)); | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                     catch (Exception) | 
					
						
							|  |  |  |                     { | 
					
						
							|  |  |  |                         textlog.Text = "Link failed"; | 
					
						
							|  |  |  |                         textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 0)); | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 else if (reply.Status == IPStatus.TimedOut) | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     textlog.Text = "Link timeout"; | 
					
						
							|  |  |  |                     textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0)); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 else | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     textlog.Text = "No links"; | 
					
						
							|  |  |  |                     textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0)); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             else if (!string.IsNullOrEmpty(comboBoxCOM0.Text)) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             else  | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 textlog.Text = "Invalid"; | 
					
						
							|  |  |  |                 textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0)); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |