diff --git a/ConvertMoels/StatenClassConvert.cs b/ConvertMoels/StatenClassConvert.cs index 33c240e..9460b1a 100644 --- a/ConvertMoels/StatenClassConvert.cs +++ b/ConvertMoels/StatenClassConvert.cs @@ -20,7 +20,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.ConvertMoels string Staten = null; string i = value.ToString(); - if (i == "100") Staten = Properties.Resources.Await;//等待 + if (i == "100") Staten = Properties.Resources.NotSent;//等待 else if (i == "101") Staten = Properties.Resources.Ready;//准备 else if (i == "102") Staten = Properties.Resources.Measure;//计量 else if (i == "109") Staten = Properties.Resources.ERR;//错误 diff --git a/SunlightCentralizedControlManagement_SCCM_.csproj b/SunlightCentralizedControlManagement_SCCM_.csproj index c5f00aa..b19a993 100644 --- a/SunlightCentralizedControlManagement_SCCM_.csproj +++ b/SunlightCentralizedControlManagement_SCCM_.csproj @@ -136,6 +136,9 @@ MachinesView.xaml + + DyeingPlanView.xaml + ProductionPlanningEdit.xaml @@ -227,6 +230,10 @@ MSBuild:Compile Designer + + MSBuild:Compile + Designer + Designer MSBuild:Compile diff --git a/View/DyeingPlanView.xaml b/View/DyeingPlanView.xaml new file mode 100644 index 0000000..44a3515 --- /dev/null +++ b/View/DyeingPlanView.xaml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/View/DyeingPlanView.xaml.cs b/View/DyeingPlanView.xaml.cs new file mode 100644 index 0000000..a3f7920 --- /dev/null +++ b/View/DyeingPlanView.xaml.cs @@ -0,0 +1,358 @@ +using Newtonsoft.Json.Linq; +using nGantt.GanttChart; +using SunlightCentralizedControlManagement_SCCM_.UserClass; +using SunlightCentralizedControlManagement_SCCM_.ViewModel; +using SunlightCentralizedControlManagement_SCCM_.WindowsView; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +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 System.Xml.Linq; +using TouchSocket.Core; +using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper; +using static SunlightCentralizedControlManagement_SCCM_.WindowsView.ViewStep; +using static System.Windows.Forms.AxHost; + +namespace SunlightCentralizedControlManagement_SCCM_.View +{ + /// + /// ProductionPlanningEdit.xaml 的交互逻辑 + /// + public partial class DyeingPlanView : UserControl + { + private SQLiteHelper SQLiteHelpers = null; //定义数据库 + private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\SCCM.db"; //数据库路径 + DataTable ProgramName = new DataTable(); + DataTable WorkOrder =new DataTable(); + DataTable dat = new DataTable(); + public string WorkOrder_n; + public DyeingPlanView() + { + InitializeComponent(); + SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 + SQLiteHelpers.Open(); //打开数据库 + ProgramName = SQLiteHelpers.ExecuteDataSet("select * from ProgramName order by ProgramID desc", null).Tables[0];//缓存 + SQLiteHelpers.Close(); //关闭连接 + comboBoxMachine.ItemsSource = MainWindowViewModel.Machines.AsEnumerable().Select(rowdata => rowdata.Field("name")).ToList();//转换机台 + comboBoxProgram.ItemsSource = ProgramName.AsEnumerable().Select(rowdata => rowdata.Field("ProgramName")).ToList();//转换工艺代码 + + + } + private void UserControl_Loaded(object sender, RoutedEventArgs e) + { + + } + private void comboBoxMachine_DropDownClosed(object sender, EventArgs e)//机台选择 + { + string[] sArray = Regex.Split(comboBoxMachine.Text, @"\+", RegexOptions.IgnoreCase); + if (sArray.Length <= 1) + { + comboBoxDyelot.IsEnabled = true; + SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 + SQLiteHelpers.Open(); //打开数据库 + DataTable DatDyelot = SQLiteHelpers.ExecuteDataSet("select * from Dyelot where Machine='" + comboBoxMachine.Text + "' and State='101' order by Dyelot desc", null).Tables[0]; //读取计划表写入缓存 + SQLiteHelpers.Close(); //关闭连接 + comboBoxDyelot.ItemsSource = DatDyelot.AsEnumerable().Select(rowdata => rowdata.Field("Dyelot")).ToList();//转换代码 + } + } + private void Multi_Click(object sender, RoutedEventArgs e)//机台组 + { + MachineSelection machineSelection = new MachineSelection(); + machineSelection.AddressUpdated += new MachineSelection.AddressUpdateHandler(Address_Multi_Click); + //machineSelection.data = "ID"; + machineSelection.ShowDialog(); + } + private void Address_Multi_Click(object sender, MachineSelection.AddressUpdateEventArgs e)//机台组返回结果 + { + if(!string.IsNullOrEmpty(e.Groups)) comboBoxMachine.Text = e.Groups; + comboBoxDyelot.Text = null; + comboBoxDyelot.IsEnabled = false; + } + + private void Button_Click(object sender, RoutedEventArgs e)//保存按钮 + { + if (string.IsNullOrEmpty(comboBoxMachine.Text)) + { + MessageBox.Show("Not Machine", "SCCM", MessageBoxButton.OK, MessageBoxImage.Question); + return; + } + if (string.IsNullOrEmpty(comboBoxProgram.Text)) + { + MessageBox.Show("Not Program", "SCCM", MessageBoxButton.OK, MessageBoxImage.Question); + return; + } + string[] pArray = Regex.Split(comboBoxProgram.Text, @"\+", RegexOptions.IgnoreCase); + + + //单机器信息写入 + string sTime; + string StartTime_; + string WorkOrder_ = comboBoxMachine.Text + "_" + DateTime.Now.ToString("yyMMddHHmmss"); + if (!string.IsNullOrEmpty(WorkOrder_n)) WorkOrder_ = WorkOrder_n; + string ProgramName_ = comboBoxProgram.Text; + string ProgramID_ = null; + for (int j = 0; j < pArray.Length; j++) + { + try + { + if (j == 0) + { + ProgramID_ = ProgramName.Select("ProgramName='" + pArray[j] + "'"). + First().Field("ProgramID").ToString(); + } + else + { + ProgramID_ = ProgramID_ + "+" + ProgramName.Select("ProgramName='" + pArray[j] + "'"). + First().Field("ProgramID").ToString(); + } + } + catch (Exception) + { + MessageBox.Show("Not Program", "SCCM", MessageBoxButton.OK, MessageBoxImage.Question); + return; + } + } + string Machines_ = comboBoxMachine.Text; + string State_ = "100"; + string Dyelot_ = comboBoxDyelot.Text; + // string color_ = color_color.Background.ToString(); + SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 + SQLiteHelpers.Open(); //打开数据库 + try + { + sTime = SQLiteHelpers.ExecuteDataSet( + "select * from WorkOrder where Machines='" + comboBoxMachine.Text + "' order by EndTime desc", null). + Tables[0].Select().First().Field("EndTime").ToString(); //读取计划表写入缓存 + if (DateTime.Now < DateTime.Parse(sTime)) + { + StartTime_ = DateTime.Parse(sTime).AddMinutes(1).ToString("yyyy/MM/dd HH:mm:ss"); + } + else + { + StartTime_ = DateTime.Now.AddMinutes(1).ToString("yyyy/MM/dd HH:mm:ss"); + } + } + catch (Exception) + { + StartTime_ = DateTime.Now.AddMinutes(1).ToString("yyyy/MM/dd HH:mm:ss"); + } + + string Time_ = "0:00"; + for (int k = 0; k < pArray.Length; k++) + { + string t = ProgramName.Select("ProgramName='" + pArray[k] + "'"). + First().Field("Time").ToString(); + Time_ = (DateTime.Parse(Time_) + DateTime.Parse(t).TimeOfDay).ToString("HH:mm:ss"); + } + string EndTime_ = (DateTime.Parse(StartTime_) + DateTime.Parse(Time_).TimeOfDay).ToString("yyyy/MM/dd HH:mm:ss"); + + //插入数据信息 + Dictionary WorkOrder_new = new Dictionary();//缓存函数 + WorkOrder_new.Add("StartTime", StartTime_); + WorkOrder_new.Add("EndTime", EndTime_); + WorkOrder_new.Add("Time", Time_); + WorkOrder_new.Add("WorkOrder", WorkOrder_); + WorkOrder_new.Add("ProgramName", ProgramName_); + WorkOrder_new.Add("ProgramID", ProgramID_); + WorkOrder_new.Add("Machines", Machines_); + WorkOrder_new.Add("State", State_); + WorkOrder_new.Add("Dyelot", Dyelot_); + WorkOrder_new.Add("Remark", null); + WorkOrder_new.Add("lock", 0); + // WorkOrder_new.Add("color", color_); + SQLiteHelpers.InsertData("WorkOrder", WorkOrder_new);// 执行插入 + + Dictionary WorkOrder_DAT = new Dictionary();//缓存函数 + for (int x = 0; x < dat.Rows.Count; x++) + { + WorkOrder_DAT.Add("WorkOrder", WorkOrder_); + WorkOrder_DAT.Add("Dyelot", Dyelot_); + WorkOrder_DAT.Add("ProgramID", dat.Rows[x]["ProgramID"]); + WorkOrder_DAT.Add("Program", dat.Rows[x]["Program"]); + WorkOrder_DAT.Add("Step", dat.Rows[x]["Step"]); + WorkOrder_DAT.Add("StepID", dat.Rows[x]["StepID"]); + WorkOrder_DAT.Add("StepName", dat.Rows[x]["StepName"]); + WorkOrder_DAT.Add("ParameterName", dat.Rows[x]["ParameterName"]); + WorkOrder_DAT.Add("Parameter1", dat.Rows[x]["Parameter1"]); + WorkOrder_DAT.Add("Parameter2", dat.Rows[x]["Parameter2"]); + WorkOrder_DAT.Add("Parameter3", dat.Rows[x]["Parameter3"]); + WorkOrder_DAT.Add("Parameter4", dat.Rows[x]["Parameter4"]); + WorkOrder_DAT.Add("Parameter5", dat.Rows[x]["Parameter5"]); + WorkOrder_DAT.Add("Parameter6", dat.Rows[x]["Parameter6"]); + WorkOrder_DAT.Add("Parameter7", dat.Rows[x]["Parameter7"]); + WorkOrder_DAT.Add("Parameter8", dat.Rows[x]["Parameter8"]); + WorkOrder_DAT.Add("Parameter9", dat.Rows[x]["Parameter9"]); + WorkOrder_DAT.Add("Parameter10", dat.Rows[x]["Parameter10"]); + SQLiteHelpers.InsertData("WorkorderSteps", WorkOrder_DAT);//行插入 + WorkOrder_DAT.Clear(); + } + SQLiteHelpers.Close(); //关闭连接 + + this.Visibility = Visibility.Collapsed; + ProductionPlanningView.UI = true; + } + private void Button_Quit(object sender, RoutedEventArgs e)//退出 + { + this.Visibility = Visibility.Collapsed; + } + + 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["Step"] = i + 1; + dr.EndEdit(); + } + } + private void comboBoxProgram_DropDownClosed(object sender, EventArgs e)//工艺选择事件 + { + if (!string.IsNullOrEmpty(comboBoxProgram.Text)) + { + dat.Clear(); + SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 + SQLiteHelpers.Open(); //打开数据库 + dat = SQLiteHelpers.ExecuteDataSet( + "select * from ProgramSteps where Program='" + comboBoxProgram.SelectedValue + "' order by Step asc", null).Tables[0]; //读取计划表写入缓存 + SQLiteHelpers.Close(); //关闭连接 + DatSteps(dat); + Grid_data.ItemsSource = dat.DefaultView; + } + } + + private void comboBoxProgram_TextChanged(object sender, TextChangedEventArgs e) + { + dat.Clear(); + string text = comboBoxProgram.Text; + if (!string.IsNullOrEmpty(text)) + { + try + { + string[] sArray = Regex.Split(text, @"\+", RegexOptions.IgnoreCase); + SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 + SQLiteHelpers.Open(); //打开数据库 + for (int i = 0; i < sArray.Length; i++) + { + DataTable temp = SQLiteHelpers.ExecuteDataSet( + "select * from ProgramSteps where Program='" + sArray[i] + "' order by Step asc", null).Tables[0]; //读取计划表写入缓存 + if (dat.Columns.Count == 0) dat = temp.Clone(); + foreach (DataRow drT in temp.Rows) + { + dat.Rows.Add(drT.ItemArray); + } + }//以工艺名组合工艺细节 + if (!string.IsNullOrEmpty(WorkOrder_n)) + { + dat = SQLiteHelpers.ExecuteDataSet( + "select * from WorkorderSteps where WorkOrder='" + WorkOrder_n + "' order by Step asc", null).Tables[0]; //读取计划表写入缓存 + }//插入工单不为空时载入细节信息 + SQLiteHelpers.Close(); //关闭连接 + DatSteps(dat); + Grid_data.ItemsSource = dat.DefaultView;//显示 + } + catch (Exception) { } + } + + }//工艺修改事件 + + private void color_color_MouseDoubleClick(object sender, MouseButtonEventArgs e)//颜色 + { + System.Windows.Forms.ColorDialog colorDialog = new System.Windows.Forms.ColorDialog();//使用调色盘控件ColorDialog + if (colorDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)//打开调色盘 + { + + System.Drawing.Color DColor = colorDialog.Color;////获取选中色彩信息 + //System.Windows.Media.Color MColor = new System.Windows.Media.Color();//转换 + System.Windows.Media.Color MColor = System.Windows.Media.Color.FromArgb(DColor.A, DColor.R, DColor.G, DColor.B);//转换并配置ARGB参数 + // color_color.Background = new SolidColorBrush(MColor);//ARGB参数输出至Color的背景色 + //string colorCode = string.Format("{0:X2}", DColor.B) + string.Format("{0:X2}", DColor.G) + string.Format("{0:X2}", DColor.R);//反向十六进制RGB + //string colorCode = string.Format("{0:X2}", DColor.R) + string.Format("{0:X2}", DColor.G) + string.Format("{0:X2}", DColor.B);//正向十六进制RGB + //ColorCode_SQL = Convert.ToInt32(colorCode, 16);//十六进制RGB转存储数值 + + } + } + + //string ProgramID; + //string ProgramNAME; + string Numder = null; + string ID = null; + string P1, P2, P3, P4, P5; + + private void MenuItem_edit(object sender, RoutedEventArgs e) + { + int rownum = Grid_data.SelectedIndex;//获取鼠标选中行并定义变量 + if (rownum != -1)//判断鼠标定位是否有效 + { + ID = (Grid_data.Columns[2].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第0列, + Numder = (Grid_data.Columns[3].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第1列, + P1 = (Grid_data.Columns[6].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第6列, + P2 = (Grid_data.Columns[7].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第7列, + P3 = (Grid_data.Columns[8].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第8列, + P4 = (Grid_data.Columns[9].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第9列, + P5 = (Grid_data.Columns[10].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第10列, + + if (string.IsNullOrEmpty(Numder)) { Numder = null; P1 = "0"; P2 = "0"; P3 = "0"; P4 = "0"; P5 = "0"; } + if (ID == null) ID = dat.Rows.Count.ToString(); + ViewStep viewstop = new ViewStep(Numder, P1, P2, P3, P4, P5); + viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(Address_ButtonClicked); + viewstop.data = ID; + viewstop.ShowDialog(); + } + } + + private void Grid_data_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + int rownum = Grid_data.SelectedIndex;//获取鼠标选中行并定义变量 + if (rownum != -1)//判断鼠标定位是否有效 + { + ID = (Grid_data.Columns[2].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第0列, + Numder = (Grid_data.Columns[3].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第1列, + P1 = (Grid_data.Columns[6].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第6列, + P2 = (Grid_data.Columns[7].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第7列, + P3 = (Grid_data.Columns[8].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第8列, + P4 = (Grid_data.Columns[9].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第9列, + P5 = (Grid_data.Columns[10].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第10列, + + if (string.IsNullOrEmpty(Numder)) { Numder = null; P1 = "0"; P2 = "0"; P3 = "0"; P4 = "0"; P5 = "0"; } + if (ID == null) ID = dat.Rows.Count.ToString(); + ViewStep viewstop = new ViewStep(Numder, P1, P2, P3, P4, P5); + viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(Address_ButtonClicked); + viewstop.data = ID; + viewstop.ShowDialog(); + } + } + private void Address_ButtonClicked(object sender, AddressUpdateEventArgs e)//编辑返回结果 + { + int i = dat.Rows.Count; + int n = StrToInt.To16Convert10(ID); + + DataRow dr = dat.Rows[n - 1]; + dr.BeginEdit(); + dr["StepID"] = e.StepID; + dr["StepName"] = e.StepNAME; + dr["ParameterName"] = e.PNAME; + dr["Parameter1"] = e.P1; + dr["Parameter2"] = e.P2; + dr["Parameter3"] = e.P3; + dr["Parameter4"] = e.P4; + dr["Parameter5"] = e.P5; + dr.EndEdit(); + + Grid_data.ItemsSource = dat.DefaultView; + } + } +} diff --git a/View/ProductionPlanningView.xaml.cs b/View/ProductionPlanningView.xaml.cs index 521e339..e5b07df 100644 --- a/View/ProductionPlanningView.xaml.cs +++ b/View/ProductionPlanningView.xaml.cs @@ -231,8 +231,8 @@ namespace SunlightCentralizedControlManagement_SCCM_.View private void ListViewItem_Plan(object sender, System.Windows.Input.MouseButtonEventArgs e)//计划事件 { Picture.Content = null; - Picture.Width = 600; - Picture.Content = new ProductionPlanningEdit(null, true); + Picture.Width = 1100; + Picture.Content = new DyeingPlanView(); } private void ListViewItem_New(object sender, System.Windows.Input.MouseButtonEventArgs e)//新建事件 {