From 11be29edca1faf7e9518893e287da12bacb0ed1c Mon Sep 17 00:00:00 2001 From: "DESKTOP-999R8N3\\CJY" Date: Wed, 30 Aug 2023 10:41:13 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=ED=86=B5?= =?UTF-8?q?=EA=B3=84=20=EC=A7=84=ED=96=89=20=EC=A4=91(=EC=B6=94=ED=9B=84?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=2015=EC=9D=B8=EC=B9=98=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EB=9E=A8=20=EB=94=B0=EB=9D=BC=EA=B0=88=20?= =?UTF-8?q?=EC=98=88=EC=A0=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- INT69DB_2A/DataStore.cs | 2 +- .../DialogFormDataStatistics.Designer.cs | 66 +- .../DialogForms/DialogFormDataStatistics.cs | 424 +++++++++++-- INT69DB_2A/Forms/FormDataBackup_Part11.cs | 9 +- INT69DB_2A/Forms/FormDataStatistics.cs | 567 +++++++++++------- INT69DB_2A/Forms/FormMain.cs | 493 ++++++--------- INT69DB_2A/Forms/FormMotorSetting.cs | 12 +- INT69DB_2A/Forms/FormOption.cs | 4 +- INT69DB_2A/Version.txt | 2 + INT69DB_2A/bin/Release/DllAes128.dll | Bin 74752 -> 74752 bytes INT69DB_2A/bin/Release/DllUserMgr.dll | Bin 49664 -> 51200 bytes 11 files changed, 941 insertions(+), 638 deletions(-) diff --git a/INT69DB_2A/DataStore.cs b/INT69DB_2A/DataStore.cs index 70ee908..1447492 100644 --- a/INT69DB_2A/DataStore.cs +++ b/INT69DB_2A/DataStore.cs @@ -38,8 +38,8 @@ namespace INT69DB_2A FormUserGroupEditor, FormOption, // 하단 세 항목은 위치를 맨 뒤로 고정할 것 - FormDataBackup, FormDataStatistics, + FormDataBackup, FormDataViewer, }; diff --git a/INT69DB_2A/DialogForms/DialogFormDataStatistics.Designer.cs b/INT69DB_2A/DialogForms/DialogFormDataStatistics.Designer.cs index be71787..ed8b8a4 100644 --- a/INT69DB_2A/DialogForms/DialogFormDataStatistics.Designer.cs +++ b/INT69DB_2A/DialogForms/DialogFormDataStatistics.Designer.cs @@ -30,12 +30,10 @@ { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogFormDataStatistics)); this.smartForm1 = new SmartX.SmartForm(); - this.treeView1 = new System.Windows.Forms.TreeView(); + this.treeView = new System.Windows.Forms.TreeView(); this.buttonRead = new SmartX.SmartButton(); this.labelFileName = new SmartX.SmartLabel(); this.smartGroupBox1 = new SmartX.SmartGroupBox(); - this.smartLabel5 = new SmartX.SmartLabel(); - this.labelId = new SmartX.SmartLabel(); this.smartLabel3 = new SmartX.SmartLabel(); this.labelProductNo = new SmartX.SmartLabel(); this.smartLabel2 = new SmartX.SmartLabel(); @@ -61,13 +59,13 @@ this.smartForm1.SpecialFunctionClickPointSize = 100; this.smartForm1.SuspendLayoutInterval = 0; // - // treeView1 + // treeView // - this.treeView1.Location = new System.Drawing.Point(12, 12); - this.treeView1.Name = "treeView1"; - this.treeView1.Size = new System.Drawing.Size(219, 445); - this.treeView1.TabIndex = 4; - this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); + this.treeView.Location = new System.Drawing.Point(12, 12); + this.treeView.Name = "treeView"; + this.treeView.Size = new System.Drawing.Size(219, 445); + this.treeView.TabIndex = 4; + this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect); // // buttonRead // @@ -127,8 +125,6 @@ // this.smartGroupBox1.BackPictureBox = this.smartForm1; this.smartGroupBox1.BackPictureBox1 = null; - this.smartGroupBox1.Controls.Add(this.smartLabel5); - this.smartGroupBox1.Controls.Add(this.labelId); this.smartGroupBox1.Controls.Add(this.smartLabel3); this.smartGroupBox1.Controls.Add(this.labelProductNo); this.smartGroupBox1.Controls.Add(this.smartLabel2); @@ -137,7 +133,7 @@ this.smartGroupBox1.Controls.Add(this.buttonClose); this.smartGroupBox1.Controls.Add(this.labelFileName); this.smartGroupBox1.Controls.Add(this.buttonRead); - this.smartGroupBox1.Controls.Add(this.treeView1); + this.smartGroupBox1.Controls.Add(this.treeView); this.smartGroupBox1.FrameLineColor1 = System.Drawing.Color.Black; this.smartGroupBox1.FrameLineColor2 = System.Drawing.Color.Black; this.smartGroupBox1.FrameLineThickness = 1; @@ -152,48 +148,6 @@ this.smartGroupBox1.Text = "smartGroupBox1"; this.smartGroupBox1.TextColor = System.Drawing.Color.Black; // - // smartLabel5 - // - this.smartLabel5.BackColor = System.Drawing.Color.DimGray; - this.smartLabel5.BackPictureBox = null; - this.smartLabel5.BackPictureBox1 = null; - this.smartLabel5.BackPictureBox2 = null; - this.smartLabel5.BorderColor = System.Drawing.Color.DimGray; - this.smartLabel5.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.smartLabel5.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold); - this.smartLabel5.ForeColor = System.Drawing.Color.White; - this.smartLabel5.InitVisible = true; - this.smartLabel5.LineSpacing = 0F; - this.smartLabel5.Location = new System.Drawing.Point(237, 180); - this.smartLabel5.Name = "smartLabel5"; - this.smartLabel5.Size = new System.Drawing.Size(100, 20); - this.smartLabel5.TabIndex = 20; - this.smartLabel5.Text = "ID"; - this.smartLabel5.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; - this.smartLabel5.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; - this.smartLabel5.Wordwrap = false; - // - // labelId - // - this.labelId.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(30)))), ((int)(((byte)(30))))); - this.labelId.BackPictureBox = null; - this.labelId.BackPictureBox1 = null; - this.labelId.BackPictureBox2 = null; - this.labelId.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(30)))), ((int)(((byte)(30))))); - this.labelId.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.labelId.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold); - this.labelId.ForeColor = System.Drawing.Color.White; - this.labelId.InitVisible = true; - this.labelId.LineSpacing = 0F; - this.labelId.Location = new System.Drawing.Point(237, 202); - this.labelId.Name = "labelId"; - this.labelId.Size = new System.Drawing.Size(100, 20); - this.labelId.TabIndex = 19; - this.labelId.Text = "1"; - this.labelId.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; - this.labelId.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; - this.labelId.Wordwrap = false; - // // smartLabel3 // this.smartLabel3.BackColor = System.Drawing.Color.DimGray; @@ -352,14 +306,12 @@ #endregion private SmartX.SmartForm smartForm1; - private System.Windows.Forms.TreeView treeView1; + private System.Windows.Forms.TreeView treeView; private SmartX.SmartButton buttonRead; private SmartX.SmartLabel labelFileName; private SmartX.SmartGroupBox smartGroupBox1; private SmartX.SmartButton buttonClose; private SmartX.SmartLabel labelNodeIndex; - private SmartX.SmartLabel smartLabel5; - private SmartX.SmartLabel labelId; private SmartX.SmartLabel smartLabel3; private SmartX.SmartLabel labelProductNo; private SmartX.SmartLabel smartLabel2; diff --git a/INT69DB_2A/DialogForms/DialogFormDataStatistics.cs b/INT69DB_2A/DialogForms/DialogFormDataStatistics.cs index 928ee70..01a6de2 100644 --- a/INT69DB_2A/DialogForms/DialogFormDataStatistics.cs +++ b/INT69DB_2A/DialogForms/DialogFormDataStatistics.cs @@ -57,13 +57,186 @@ namespace INT69DB_2A.DialogForms } private void DefaultSetting() { - this.DisplayTreeViewUpdate(); + if (this.ParentForm.ParentForm.SystemConfig.IsPart11 == false) + this.DisplayTreeViewUpdate1(); + else + this.DisplayTreeViewUpdate2(); this.labelNodeIndex.Text = "-"; this.labelFileName.Text = "-"; this.labelDate.Text = "-"; this.labelProductNo.Text = "-"; - this.labelId.Text = "-"; + } + + #region 기존코드 + //private Collection> FileClassification(List files) + //{ + // string date = "", date1 = ""; + // Collection> fileClassification = new Collection>(); + // List list = new List(); + + // for (int i = 0; i < files.Count; i++) + // { + // date = files[i].Substring(0, 12); + // if (i == 0) + // date1 = date; + + // if (date == date1) + // { + // list.Add(files[i]); + // } + // else + // { + // date1 = date; + + // List l = new List(); + + // foreach (string s in list) + // l.Add(s); + + // fileClassification.Add(l); + // list = new List(); + // list.Add(files[i]); + // } + // } + + // List ls = new List(); + // foreach (string s in list) + // ls.Add(s); + // fileClassification.Add(ls); + + // return fileClassification; + //} + //private List FileSort(FileInfo[] files) + //{ + // List listFiles = new List(); + // Dictionary fileNames = new Dictionary(); + // Dictionary fileNamesSort = new Dictionary(); + + // foreach (FileInfo file in files) + // { + // if (file.Name.StartsWith("20") == true) + // fileNames.Add(file.Name, int.Parse(file.Name.Substring(11, 1))); + // } + + // var vrList = fileNames.Keys.ToList(); + // vrList.Sort(); + + // foreach (var v in vrList) + // fileNamesSort.Add(v, fileNames[v]); + + // foreach (var v in fileNamesSort) + // listFiles.Add(v.Key); + + // return listFiles; + //} + //private List FileSort(List lst) + //{ + // List listFiles = new List(); + // Dictionary fileNames = new Dictionary(); + // Dictionary fileNamesSort = new Dictionary(); + + // foreach (string list in lst) + // { + // if (list.Length == 22) + // fileNames.Add(list, int.Parse(list.Substring(13, 1))); + // else + // fileNames.Add(list, int.Parse(list.Substring(13, 2))); + // } + + // // Lane 순서데로 오름차순 정렬 + // var vrList = fileNames.OrderBy(x => x.Value); + + // foreach (var v in vrList) + // listFiles.Add(v.Key); + + // return listFiles; + //} + + //private void DisplayTreeViewUpdate() + //{ + // int fileCount = 0; + + // DirectoryInfo dir = new DirectoryInfo(this.ParentForm.ParentForm.PathDataBackupFolder); + // List fileNames = new List(); + + // // 폴더 체크 + // if (dir.Exists == false) + // dir.Create(); + + // FileInfo[] files = dir.GetFiles(); + + // foreach (FileInfo file in files) + // { + // if (file.Name.StartsWith("20") == true) + // fileCount++; + // } + + // if (fileCount != 0) + // { + // // 파일 이름 순으로 정렬 + // fileNames = this.FileSort(files); + // // 파일 날짜 순으로 분류 + // this.ParentForm.CollectionFileClassification = this.FileClassification(fileNames); + + // foreach (List list in this.ParentForm.CollectionFileClassification) + // { + // List myList = new List(); + + // // Lane 순서데로 오름 차순 정렬 + // if (list.Count > 1 && list[0].Length > 18) + // myList = this.FileSort(list); + // else + // myList = list; + + // TreeNode node = new TreeNode(myList[0].Substring(0, 12)); + + // for (int i = 0; i < myList.Count; i++) + // { + // node.Nodes.Add(myList[i]); + // } + + // this.treeView1.Nodes.Add(node); + // } + // } + //} + #endregion + + private string GetSeletedNodeList(TreeView tree) + { + int yearCNT, monthCNT, dayCNT; + List listSelectedFile = new List(); + string selectedFile = ""; + + yearCNT = tree.Nodes.Count; + if (yearCNT != 0) + { + for (int i = 0; i < yearCNT; i++) + { + monthCNT = tree.Nodes[i].Nodes.Count; + if (monthCNT != 0) + { + for (int j = 0; j < monthCNT; j++) + { + dayCNT = tree.Nodes[i].Nodes[j].Nodes.Count; + if (dayCNT != 0) + { + for (int k = 0; k < dayCNT; k++) + { + if (tree.Nodes[i].Nodes[j].Nodes[k].IsSelected == true) + { + //listSelectedFile.Add(tree.Nodes[i].Nodes[j].Nodes[k].Text); + //listSelectedFile.Add(string.Format("{0}\\{1}\\{2}", tree.Nodes[i].Text, tree.Nodes[i].Nodes[j].Text, tree.Nodes[i].Nodes[j].Nodes[k].Text)); + selectedFile = string.Format("{0}\\{1}\\{2}", tree.Nodes[i].Text, tree.Nodes[i].Nodes[j].Text, tree.Nodes[i].Nodes[j].Nodes[k].Text); + } + } + } + } + } + } + } + + return selectedFile; } private Collection> FileClassification(List files) @@ -74,7 +247,7 @@ namespace INT69DB_2A.DialogForms for (int i = 0; i < files.Count; i++) { - date = files[i].Substring(0, 12); + date = files[i].Substring(0, 8); if (i == 0) date1 = date; @@ -113,16 +286,11 @@ namespace INT69DB_2A.DialogForms foreach (FileInfo file in files) { if (file.Name.StartsWith("20") == true) - fileNames.Add(file.Name, int.Parse(file.Name.Substring(11, 1))); + fileNames.Add(file.Name, int.Parse(file.Name.Substring(9, 1))); } - var vrList = fileNames.Keys.ToList(); - vrList.Sort(); - + var vrList = fileNames.OrderBy(x => x.Value); foreach (var v in vrList) - fileNamesSort.Add(v, fileNames[v]); - - foreach (var v in fileNamesSort) listFiles.Add(v.Key); return listFiles; @@ -149,8 +317,50 @@ namespace INT69DB_2A.DialogForms return listFiles; } + private List DirectorySort(DirectoryInfo[] directorys) + { + List listDirectory = new List(); + Dictionary dirNames = new Dictionary(); - private void DisplayTreeViewUpdate() + foreach (DirectoryInfo dir in directorys) + dirNames.Add(dir.Name, int.Parse(dir.Name)); + + // 순서데로 오름차순 정렬 + var vrList = dirNames.OrderBy(x => x.Value); + foreach (var v in vrList) + listDirectory.Add(v.Key); + + return listDirectory; + } + private List DayInspectionDirectorySort(FileInfo[] files) + { + List listFile = new List(); + Dictionary dirNames = new Dictionary(); + + #region File List 품번 순서데로 정렬 + foreach (FileInfo file in files) + dirNames.Add(file.Name, int.Parse(file.Name.Substring(10, 1))); + + var vrList = dirNames.OrderBy(x => x.Value); + foreach (var v in vrList) + listFile.Add(v.Key); + #endregion + + #region File List 날짜 순서데로 정렬 + dirNames = new Dictionary(); + foreach (string f in listFile) + dirNames.Add(f, int.Parse(f.Substring(1, 8))); + + listFile.Clear(); + vrList = dirNames.OrderBy(x => x.Value); + foreach (var v in vrList) + listFile.Add(v.Key); + #endregion + + return listFile; + } + + private void DisplayTreeViewUpdate1() { int fileCount = 0; @@ -178,29 +388,99 @@ namespace INT69DB_2A.DialogForms foreach (List list in this.ParentForm.CollectionFileClassification) { - List myList = new List(); + TreeNode node = new TreeNode(list[0].Substring(0, 10)); - // Lane 순서데로 오름 차순 정렬 - if (list.Count > 1 && list[0].Length > 18) - myList = this.FileSort(list); - else - myList = list; - - TreeNode node = new TreeNode(myList[0].Substring(0, 12)); - - for (int i = 0; i < myList.Count; i++) + for (int i = 0; i < list.Count; i++) { - node.Nodes.Add(myList[i]); + node.Nodes.Add(list[i]); } - this.treeView1.Nodes.Add(node); + this.treeView.Nodes.Add(node); + } + } + } + private void DisplayTreeViewUpdate2() + { + int fileCount = 0; + //TreeNode node; + List listInspectionFile = new List(); + List years = new List(); + List months = new List(); + List days = new List(); + + this.treeView.Nodes.Clear(); + listInspectionFile.Clear(); + + DirectoryInfo dir = new DirectoryInfo(this.ParentForm.ParentForm.PathDataInspectionFolder); + List fileNames = new List(); + + // 폴더 체크 + if (dir.Exists == false) + dir.Create(); + + // year 폴더 가져오기 + DirectoryInfo[] yearDirectorys = dir.GetDirectories(); + // year 폴더 정렬 + years = this.DirectorySort(yearDirectorys); + + // Inspection File 리스트 생성 + if (years.Count != 0) + { + // Year + foreach (string year in years) + { + DataBackupYear y = new DataBackupYear(year); + DirectoryInfo monthDir = new DirectoryInfo(string.Format("{0}{1}", this.ParentForm.ParentForm.PathDataInspectionFolder, year)); + DirectoryInfo[] monthDirectorys = monthDir.GetDirectories(); + + months = this.DirectorySort(monthDirectorys); + + if (months.Count != 0) + { + // Month + foreach (string month in months) + { + DirectoryInfo dayDir = new DirectoryInfo(string.Format("{0}{1}\\{2}", this.ParentForm.ParentForm.PathDataInspectionFolder, year, month)); + FileInfo[] dayFiles = dayDir.GetFiles(); + + days = this.DayInspectionDirectorySort(dayFiles); + + DataBackupMonth m = new DataBackupMonth(month); + m.Days = days; + + y.Months.Add(m); + } + + listInspectionFile.Add(y); + } + else + { + listInspectionFile.Add(y); + } + } + + // node 생성 + for (int i = 0; i < listInspectionFile.Count; i++) + { + TreeNode node = new TreeNode(listInspectionFile[i].Year); + for (int j = 0; j < listInspectionFile[i].Months.Count; j++) + { + TreeNode nodeMonth = new TreeNode(listInspectionFile[i].Months[j].Month); + + for (int k = 0; k < listInspectionFile[i].Months[j].Days.Count; k++) + { + nodeMonth.Nodes.Add(listInspectionFile[i].Months[j].Days[k]); + fileCount++; + } + node.Nodes.Add(nodeMonth); + } + this.treeView.Nodes.Add(node); } } } public void DisplayRefresh() { - this.DisplayTreeViewUpdate(); } #endregion @@ -209,22 +489,49 @@ namespace INT69DB_2A.DialogForms { int ret = 0; - if (this.ParentForm.SelectNodeIndex == -1) - return; - - this.treeView1.Enabled = false; - this.buttonRead.Enabled = false; - this.buttonClose.Enabled = false; - - if (this.treeView1.Nodes.Count != 0) + if (this.ParentForm.ParentForm.SystemConfig.IsPart11 == false) { - this.ParentForm.ClearData(); + if (this.ParentForm.SelectNodeIndex == -1) + return; - if (this.ParentForm.ParentForm.SystemConfig.EquipmentMode == 2) - ret = this.ParentForm.DataRead2(); - else + this.treeView.Enabled = false; + this.buttonRead.Enabled = false; + this.buttonClose.Enabled = false; + + if (this.treeView.Nodes.Count != 0) + { + this.ParentForm.ClearData(); ret = this.ParentForm.DataRead1(); + if (ret == 0) + { + this.DialogResult = DialogResult.OK; + this.Close(); + } + else + this.DialogResult = DialogResult.Cancel; + } + + this.treeView.Enabled = true; + this.buttonRead.Enabled = true; + this.buttonClose.Enabled = true; + } + else + { + string selectedFile = "", filePath = ""; + selectedFile = this.GetSeletedNodeList(this.treeView); + + if (selectedFile == "") + return; + + this.treeView.Enabled = false; + this.buttonRead.Enabled = false; + this.buttonClose.Enabled = false; + + this.ParentForm.ClearData(); + filePath = string.Format("{0}{1}", this.ParentForm.ParentForm.PathDataInspectionFolder, selectedFile); + ret = this.ParentForm.DataRead1(filePath); + if (ret == 0) { this.DialogResult = DialogResult.OK; @@ -232,11 +539,11 @@ namespace INT69DB_2A.DialogForms } else this.DialogResult = DialogResult.Cancel; - } - this.treeView1.Enabled = true; - this.buttonRead.Enabled = true; - this.buttonClose.Enabled = true; + this.treeView.Enabled = true; + this.buttonRead.Enabled = true; + this.buttonClose.Enabled = true; + } } private void buttonClose_Click(object sender, EventArgs e) { @@ -244,27 +551,40 @@ namespace INT69DB_2A.DialogForms this.Close(); } - private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) + private void treeView_AfterSelect(object sender, TreeViewEventArgs e) { - string fileName = ""; + string fileName = "", date = "-"; + string[] splitFileName = e.Node.Text.Split('-'); - if (e.Node.Parent == null) + if (this.ParentForm.ParentForm.SystemConfig.IsPart11 == false) { - fileName = e.Node.Text; - this.ParentForm.SelectNodeIndex = e.Node.Index; - //this.labelNodeIndex.Text = string.Format("{0}", this.ParentForm.SelectNodeIndex + 1); + if (e.Node.Parent == null) + { + fileName = e.Node.Text; + this.ParentForm.SelectNodeIndex = e.Node.Index; + //this.labelNodeIndex.Text = string.Format("{0}", this.ParentForm.SelectNodeIndex + 1); + } + else + { + fileName = e.Node.Parent.Text; + this.ParentForm.SelectNodeIndex = e.Node.Parent.Index; + //this.labelNodeIndex.Text = string.Format("{0}", this.ParentForm.SelectNodeIndex + 1); + } + + date = string.Format("{0}.{1}.{2}", fileName.Substring(0, 4), fileName.Substring(4, 2), fileName.Substring(6, 2)); } else { - fileName = e.Node.Parent.Text; - this.ParentForm.SelectNodeIndex = e.Node.Parent.Index; - //this.labelNodeIndex.Text = string.Format("{0}", this.ParentForm.SelectNodeIndex + 1); + if (e.Node.Text.Substring(0, 1) == "I") + { + fileName = e.Node.Text; + date = string.Format("{0}.{1}.{2}", fileName.Substring(1, 4), fileName.Substring(5, 2), fileName.Substring(7, 2)); + } } this.labelFileName.Text = fileName; - this.labelDate.Text = string.Format("{0}.{1}.{2}", fileName.Substring(0, 4), fileName.Substring(4, 2), fileName.Substring(6, 2)); - this.labelProductNo.Text = fileName.Substring(9, 1); - this.labelId.Text = fileName.Substring(11, 1); + this.labelProductNo.Text = splitFileName[1]; + this.labelDate.Text = date; } #endregion } diff --git a/INT69DB_2A/Forms/FormDataBackup_Part11.cs b/INT69DB_2A/Forms/FormDataBackup_Part11.cs index eb45167..df8ea8c 100644 --- a/INT69DB_2A/Forms/FormDataBackup_Part11.cs +++ b/INT69DB_2A/Forms/FormDataBackup_Part11.cs @@ -107,10 +107,11 @@ namespace INT69DB_2A.Forms dataFolderPath = this.ParentForm.PathDataHistoryFolder; break; case DataStore.E_DataType.Inspection: - if(this.ParentForm.SystemConfig.EquipmentMode == 2) - dataFolderPath = this.ParentForm.PathDataInspectionStick2Folder; - else - dataFolderPath = this.ParentForm.PathDataInspectionStick1Folder; + dataFolderPath = this.ParentForm.PathDataInspectionFolder; + //if (this.ParentForm.SystemConfig.EquipmentMode == 2) + // dataFolderPath = this.ParentForm.PathDataInspectionStick2Folder; + //else + // dataFolderPath = this.ParentForm.PathDataInspectionStick1Folder; break; case DataStore.E_DataType.Others: dataFolderPath = this.ParentForm.PathDataOthersFolder; diff --git a/INT69DB_2A/Forms/FormDataStatistics.cs b/INT69DB_2A/Forms/FormDataStatistics.cs index 93928ea..d71fbea 100644 --- a/INT69DB_2A/Forms/FormDataStatistics.cs +++ b/INT69DB_2A/Forms/FormDataStatistics.cs @@ -548,234 +548,156 @@ namespace INT69DB_2A.Forms } private void DataAnalysis() { - if (this.ParentForm.SystemConfig.EquipmentMode == 2) + #region Data SET + if (this.ParentForm.SystemConfig.EquipmentColumns == 7) { - #region Stick 2 - for (int i = 0; i < this.CollectionWeightDataStick2.Count; i++) + for (int i = 0; i < this.CollectionWeightData.Count; i++) { - for (int j = 0; j < this.CollectionWeightDataStick2[i].Count; j++) - { - this.SetData(this.CollectionLaneData[i], this.CollectionWeightDataStick2[i][j][9], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightDataStick2[i][j][10])); - } + this.SetData(this.CollectionLaneData[0], this.CollectionWeightData[i][9], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][10])); + this.SetData(this.CollectionLaneData[1], this.CollectionWeightData[i][11], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][12])); + this.SetData(this.CollectionLaneData[2], this.CollectionWeightData[i][13], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][14])); + this.SetData(this.CollectionLaneData[3], this.CollectionWeightData[i][15], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][16])); + this.SetData(this.CollectionLaneData[4], this.CollectionWeightData[i][17], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][18])); + this.SetData(this.CollectionLaneData[5], this.CollectionWeightData[i][19], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][20])); + this.SetData(this.CollectionLaneData[6], this.CollectionWeightData[i][21], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][22])); + } + } + else if (this.ParentForm.SystemConfig.EquipmentColumns == 8) + { + for (int i = 0; i < this.CollectionWeightData.Count; i++) + { + this.SetData(this.CollectionLaneData[0], this.CollectionWeightData[i][9], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][10])); + this.SetData(this.CollectionLaneData[1], this.CollectionWeightData[i][11], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][12])); + this.SetData(this.CollectionLaneData[2], this.CollectionWeightData[i][13], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][14])); + this.SetData(this.CollectionLaneData[3], this.CollectionWeightData[i][15], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][16])); + this.SetData(this.CollectionLaneData[4], this.CollectionWeightData[i][17], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][18])); + this.SetData(this.CollectionLaneData[5], this.CollectionWeightData[i][19], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][20])); + this.SetData(this.CollectionLaneData[6], this.CollectionWeightData[i][21], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][22])); + this.SetData(this.CollectionLaneData[7], this.CollectionWeightData[i][23], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][24])); + } + } + else if (this.ParentForm.SystemConfig.EquipmentColumns == 10) + { + for (int i = 0; i < this.CollectionWeightData.Count; i++) + { + this.SetData(this.CollectionLaneData[0], this.CollectionWeightData[i][9], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][10])); + this.SetData(this.CollectionLaneData[1], this.CollectionWeightData[i][11], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][12])); + this.SetData(this.CollectionLaneData[2], this.CollectionWeightData[i][13], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][14])); + this.SetData(this.CollectionLaneData[3], this.CollectionWeightData[i][15], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][16])); + this.SetData(this.CollectionLaneData[4], this.CollectionWeightData[i][17], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][18])); + this.SetData(this.CollectionLaneData[5], this.CollectionWeightData[i][19], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][20])); + this.SetData(this.CollectionLaneData[6], this.CollectionWeightData[i][21], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][22])); + this.SetData(this.CollectionLaneData[7], this.CollectionWeightData[i][23], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][24])); + this.SetData(this.CollectionLaneData[8], this.CollectionWeightData[i][25], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][26])); + this.SetData(this.CollectionLaneData[9], this.CollectionWeightData[i][27], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][28])); } - #endregion } else { - #region Stick 1,3 - if (this.ParentForm.SystemConfig.EquipmentColumns == 2) + for (int i = 0; i < this.CollectionWeightData.Count; i++) { - for (int i = 0; i < this.CollectionWeightData.Count; i++) - { - this.SetData(this.CollectionLaneData[0], this.CollectionWeightData[i][9], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][10])); - this.SetData(this.CollectionLaneData[1], this.CollectionWeightData[i][11], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][12])); - } + this.SetData(this.CollectionLaneData[0], this.CollectionWeightData[i][9], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][10])); + this.SetData(this.CollectionLaneData[1], this.CollectionWeightData[i][11], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][12])); + this.SetData(this.CollectionLaneData[2], this.CollectionWeightData[i][13], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][14])); + this.SetData(this.CollectionLaneData[3], this.CollectionWeightData[i][15], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][16])); + this.SetData(this.CollectionLaneData[4], this.CollectionWeightData[i][17], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][18])); + this.SetData(this.CollectionLaneData[5], this.CollectionWeightData[i][19], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][20])); + this.SetData(this.CollectionLaneData[6], this.CollectionWeightData[i][21], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][22])); + this.SetData(this.CollectionLaneData[7], this.CollectionWeightData[i][23], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][24])); + this.SetData(this.CollectionLaneData[8], this.CollectionWeightData[i][25], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][26])); + this.SetData(this.CollectionLaneData[9], this.CollectionWeightData[i][27], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][28])); + this.SetData(this.CollectionLaneData[10], this.CollectionWeightData[i][29], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][30])); + this.SetData(this.CollectionLaneData[11], this.CollectionWeightData[i][31], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][32])); } - else if (this.ParentForm.SystemConfig.EquipmentColumns == 3) - { - for (int i = 0; i < this.CollectionWeightData.Count; i++) - { - this.SetData(this.CollectionLaneData[0], this.CollectionWeightData[i][9], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][10])); - this.SetData(this.CollectionLaneData[1], this.CollectionWeightData[i][11], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][12])); - this.SetData(this.CollectionLaneData[2], this.CollectionWeightData[i][13], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][14])); - } - } - else if (this.ParentForm.SystemConfig.EquipmentColumns == 4) - { - for (int i = 0; i < this.CollectionWeightData.Count; i++) - { - this.SetData(this.CollectionLaneData[0], this.CollectionWeightData[i][9], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][10])); - this.SetData(this.CollectionLaneData[1], this.CollectionWeightData[i][11], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][12])); - this.SetData(this.CollectionLaneData[2], this.CollectionWeightData[i][13], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][14])); - this.SetData(this.CollectionLaneData[3], this.CollectionWeightData[i][15], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][16])); - } - } - else if (this.ParentForm.SystemConfig.EquipmentColumns == 5) - { - for (int i = 0; i < this.CollectionWeightData.Count; i++) - { - this.SetData(this.CollectionLaneData[0], this.CollectionWeightData[i][9], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][10])); - this.SetData(this.CollectionLaneData[1], this.CollectionWeightData[i][11], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][12])); - this.SetData(this.CollectionLaneData[2], this.CollectionWeightData[i][13], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][14])); - this.SetData(this.CollectionLaneData[3], this.CollectionWeightData[i][15], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][16])); - this.SetData(this.CollectionLaneData[4], this.CollectionWeightData[i][17], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][18])); - } - } - else if (this.ParentForm.SystemConfig.EquipmentColumns == 6) - { - for (int i = 0; i < this.CollectionWeightData.Count; i++) - { - this.SetData(this.CollectionLaneData[0], this.CollectionWeightData[i][9], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][10])); - this.SetData(this.CollectionLaneData[1], this.CollectionWeightData[i][11], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][12])); - this.SetData(this.CollectionLaneData[2], this.CollectionWeightData[i][13], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][14])); - this.SetData(this.CollectionLaneData[3], this.CollectionWeightData[i][15], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][16])); - this.SetData(this.CollectionLaneData[4], this.CollectionWeightData[i][17], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][18])); - this.SetData(this.CollectionLaneData[5], this.CollectionWeightData[i][19], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][20])); - } - } - else if (this.ParentForm.SystemConfig.EquipmentColumns == 7) - { - for (int i = 0; i < this.CollectionWeightData.Count; i++) - { - this.SetData(this.CollectionLaneData[0], this.CollectionWeightData[i][9], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][10])); - this.SetData(this.CollectionLaneData[1], this.CollectionWeightData[i][11], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][12])); - this.SetData(this.CollectionLaneData[2], this.CollectionWeightData[i][13], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][14])); - this.SetData(this.CollectionLaneData[3], this.CollectionWeightData[i][15], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][16])); - this.SetData(this.CollectionLaneData[4], this.CollectionWeightData[i][17], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][18])); - this.SetData(this.CollectionLaneData[5], this.CollectionWeightData[i][19], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][20])); - this.SetData(this.CollectionLaneData[6], this.CollectionWeightData[i][21], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][22])); - } - } - else if (this.ParentForm.SystemConfig.EquipmentColumns == 8) - { - for (int i = 0; i < this.CollectionWeightData.Count; i++) - { - this.SetData(this.CollectionLaneData[0], this.CollectionWeightData[i][9], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][10])); - this.SetData(this.CollectionLaneData[1], this.CollectionWeightData[i][11], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][12])); - this.SetData(this.CollectionLaneData[2], this.CollectionWeightData[i][13], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][14])); - this.SetData(this.CollectionLaneData[3], this.CollectionWeightData[i][15], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][16])); - this.SetData(this.CollectionLaneData[4], this.CollectionWeightData[i][17], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][18])); - this.SetData(this.CollectionLaneData[5], this.CollectionWeightData[i][19], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][20])); - this.SetData(this.CollectionLaneData[6], this.CollectionWeightData[i][21], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][22])); - this.SetData(this.CollectionLaneData[7], this.CollectionWeightData[i][23], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][24])); - } - } - else - { - for (int i = 0; i < this.CollectionWeightData.Count; i++) - { - this.SetData(this.CollectionLaneData[0], this.CollectionWeightData[i][9], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][10])); - this.SetData(this.CollectionLaneData[1], this.CollectionWeightData[i][11], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][12])); - this.SetData(this.CollectionLaneData[2], this.CollectionWeightData[i][13], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][14])); - this.SetData(this.CollectionLaneData[3], this.CollectionWeightData[i][15], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][16])); - this.SetData(this.CollectionLaneData[4], this.CollectionWeightData[i][17], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][18])); - this.SetData(this.CollectionLaneData[5], this.CollectionWeightData[i][19], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][20])); - this.SetData(this.CollectionLaneData[6], this.CollectionWeightData[i][21], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][22])); - this.SetData(this.CollectionLaneData[7], this.CollectionWeightData[i][23], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][24])); - this.SetData(this.CollectionLaneData[8], this.CollectionWeightData[i][25], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][26])); - this.SetData(this.CollectionLaneData[9], this.CollectionWeightData[i][27], Helper.StringToJudgmentStatusStatistics(this.CollectionWeightData[i][28])); - } - } - #endregion } + #endregion for (int i = 0; i < this.CollectionLaneData.Count; i++) this.CollectionLaneData[i].StatisticalAnalysis(); - if (this.ParentForm.SystemConfig.EquipmentMode == 2) - this.SetCommonData(this.CollectionWeightDataStick2, this.CollectionLaneData); - else - this.SetCommonData(this.CollectionWeightData, this.CollectionLaneData); - + this.SetCommonData(this.CollectionWeightData, this.CollectionLaneData); this.UpdateDisplay(this.CurrentDataCommonList, this.CollectionLaneData); } public int DataRead1() { string path = ""; - int ret = 0, flag = 0; - long count = 0; + int ret = 0; - SmartX.SmartSplash splash; - - splash = new SmartX.SmartSplash(); + SmartSplash splash = new SmartX.SmartSplash(); splash.CenterPosition = true; splash.AnimationInterval = 100; splash.LoadingImagePathname = "SmartLoading4"; splash.Start(); this.CollectionWeightData.Clear(); - path = string.Format("{0}{1}", this.ParentForm.PathDataBackupFolder, this.CollectionFileClassification[this.SelectNodeIndex][0]); + ret = this.DataReadToAnalysis(path); + this.CollectionWeightData.Clear(); + splash.Finish(); - this.ParentForm.smartFileIO.FilePathName = path; - this.ParentForm.smartFileIO.Open(2000000); - this.ParentForm.smartFileIO.ReadStringAllBuffer(); - - try + if (ret != 0) { - count = this.ParentForm.smartFileIO.GetCount(); - for (int i = 0; i < count; i++) - { - if (flag == 100) - { - Thread.Sleep(5); - flag = 0; - } - this.CollectionWeightData.Add(this.ParentForm.smartFileIO.ReadStringBuffer(i).Split(',')); - flag++; - } - - this.ParentForm.smartFileIO.Close(); - this.CollectionWeightData.RemoveAt(0); - this.DataAnalysis(); - - ret = 0; - splash.Finish(); - } - catch - { - ret = -1; - splash.Finish(); + // 이 파일은 지원이 되지 않습니다 DialogFormMessage msg = new DialogFormMessage(13, this.ParentForm.SystemConfig.Language); msg.ShowDialog(); - - this.ParentForm.smartFileIO.Close(); } return ret; } - public int DataRead2() + public int DataRead1(string filePath) { - string path = "", lane = ""; - int ret = 0, index = 0; - List lt; + int ret = 0; - SmartX.SmartSplash splash; - - splash = new SmartX.SmartSplash(); + SmartSplash splash = new SmartX.SmartSplash(); splash.CenterPosition = true; splash.AnimationInterval = 100; splash.LoadingImagePathname = "SmartLoading4"; splash.Start(); - lt = new List(); + this.CollectionWeightData.Clear(); + ret = this.DataReadToAnalysis(filePath); + this.CollectionWeightData.Clear(); + splash.Finish(); - // 열별로 삭제 - for (int i = 0; i < this.ParentForm.SystemConfig.EquipmentColumns; i++) - this.CollectionWeightDataStick2[i].Clear(); + if (ret != 0) + { + // 이 파일은 지원이 되지 않습니다 + DialogFormMessage msg = new DialogFormMessage(13, this.ParentForm.SystemConfig.Language); + msg.ShowDialog(); + } + + return ret; + } + private int DataReadToAnalysis(string path) + { + int ret = 0; + StreamReader sr; try { - for (int i = 0; i < this.CollectionFileClassification[this.SelectNodeIndex].Count; i++) - { - lt.Clear(); - if (this.CollectionFileClassification[this.SelectNodeIndex][i].Length == 22) - lane = this.CollectionFileClassification[this.SelectNodeIndex][i].Substring(13, 1); - else - lane = this.CollectionFileClassification[this.SelectNodeIndex][i].Substring(13, 2); - index = int.Parse(lane); + sr = new StreamReader(path, Encoding.UTF8); - path = string.Format("{0}{1}", this.ParentForm.PathDataBackupFolder, this.CollectionFileClassification[this.SelectNodeIndex][i]); - this.LoadDataBackupFile(ref this.CollectionWeightDataStick2, path, index - 1); + while (sr.EndOfStream != true) + { + this.CollectionWeightData.Add(sr.ReadLine().Split(',')); } + sr.Close(); + + this.CollectionWeightData.RemoveAt(0); this.DataAnalysis(); - splash.Finish(); + ret = 0; } catch { ret = -1; - splash.Finish(); - DialogFormMessage msg = new DialogFormMessage(13, this.ParentForm.SystemConfig.Language); - msg.ShowDialog(); - - this.ParentForm.smartFileIO.Close(); } return ret; } + public void ClearData() { this.InitializeLabels(); @@ -783,16 +705,15 @@ namespace INT69DB_2A.Forms for (int i = 0; i < this.CollectionLaneData.Count; i++) this.CollectionLaneData[i].ClearDatas(); } - private void FileBackup(DataCommonList commonList, Collection datas) + private void FileBackup1(string path, DateTime time, DataCommonList commonList, Collection datas) { bool fileCheck = false; string fullFilePath = ""; StreamWriter sw; - fullFilePath = string.Format("{0}{1:yyyyMMdd-HHmmss}_{2}_CheckList.csv", - this.ParentForm.PathDataStatisticsFolder, DateTime.Now, this.ParentForm.SystemConfig.UsbID); + fullFilePath = string.Format("{0}S{1:yyyyMMdd-HHmmss}.csv", path, time); this.ParentForm.smartFileIO.FilePathName = fullFilePath; - sw = new StreamWriter(fullFilePath, true, Encoding.Default); + sw = new StreamWriter(fullFilePath, true, Encoding.UTF8); FileInfo fileInfo = new FileInfo(fullFilePath); fileCheck = fileInfo.Exists; @@ -986,6 +907,167 @@ namespace INT69DB_2A.Forms sw.Close(); } + private void FileBackup2(string path, DateTime time, DataCommonList commonList, Collection datas) + { + bool fileCheck = false; + string fullFilePath = ""; + StreamWriter sw; + + fullFilePath = string.Format("{0}S{1:yyyyMMdd-HHmmss}.csv", path, time); + this.ParentForm.smartFileIO.FilePathName = fullFilePath; + sw = new StreamWriter(fullFilePath, true, Encoding.UTF8); + + FileInfo fileInfo = new FileInfo(fullFilePath); + fileCheck = fileInfo.Exists; + + // 같은 파일이 있으면 초기화 + if (fileCheck == true) + { + this.ParentForm.smartFileIO.Open(this.ParentForm.BufferSmartUart); + + for (int i = 0; i < 40; i++) + { + this.ParentForm.smartFileIO.WriteString(""); + } + this.ParentForm.smartFileIO.Close(); + } + + for (int i = 0; i < this.ParentForm.SystemConfig.EquipmentColumns; i++) + { + // Lane Number + sw.Write("{0}", i + 1); + sw.Write(","); + + // ProductName + sw.Write(commonList.ProductName); + sw.Write(","); + // Lot + sw.Write(commonList.Lot); + sw.Write(","); + // StartTime + sw.Write(commonList.StartTime); + sw.Write(","); + // EndTime + sw.Write(commonList.EndTime); + sw.Write(","); + + // UnderRange + sw.Write(commonList.UnderRange); + sw.Write(","); + // PassRange + sw.Write(commonList.PassRange); + sw.Write(","); + // OverRange + sw.Write(commonList.OverRange); + sw.Write(","); + // TareRange + sw.Write(commonList.TareRange); + sw.Write(","); + + // TotalCount + sw.Write(commonList.TotalCount); + sw.Write(","); + // TotalNGCount + sw.Write(commonList.TotalNGCount); + sw.Write(","); + + // TotalPassCount + sw.Write(commonList.TotalPassCount); + sw.Write(","); + // TotalPassPercentage + sw.Write(commonList.TotalPassPercentage); + sw.Write(","); + // TotalPassAverage + sw.Write(string.Format("{0:0.000}", commonList.TotalPassAverageWeight)); + sw.Write(","); + // TotalPassSD + sw.Write(string.Format("{0:0.00}", commonList.TotalPassStandardDeviation)); + sw.Write(","); + + // TotalUnderCount + sw.Write(commonList.TotalUnderCount); + sw.Write(","); + // TotalUnderPercentage + sw.Write(commonList.TotalUnderPercentage); + sw.Write(","); + // TotalUnderSumWeight + sw.Write(string.Format("{0:0.0000}", commonList.TotalUnderSumWeight / 1000)); + sw.Write(","); + + // TotalOverCount + sw.Write(commonList.TotalOverCount); + sw.Write(","); + // TotalOverPercentage + sw.Write(commonList.TotalOverPercentage); + sw.Write(","); + // TotalOverSumWeight + sw.Write(string.Format("{0:0.0000}", commonList.TotalOverSumWeight / 1000)); + sw.Write(","); + + // TotalExNgCount + sw.Write(commonList.TotalExNgCount); + sw.Write(","); + // TotalExNgPercentage + sw.Write(commonList.TotalExNgPercentage); + sw.Write(","); + + // Lane PassCount + sw.Write(datas[i].PassTotalCount); + sw.Write(","); + // Lane PassAverage + sw.Write(string.Format("{0:0.000}", datas[i].PassAverage)); + sw.Write(","); + // Lane PassPercentage + sw.Write(datas[i].PassPercentage); + sw.Write(","); + // Lane PassSD + sw.Write(string.Format("{0:0.00}", datas[i].PassStandardDeviation)); + sw.Write(","); + // Lane PassMinWeight + sw.Write(Helper.DoubleToString(datas[i].PassMinWeight, 1)); + sw.Write(","); + // Lane PassMaxWeight + sw.Write(Helper.DoubleToString(datas[i].PassMaxWeight, 1)); + sw.Write(","); + + // Lane OverCount + sw.Write(datas[i].OverTotalCount); + sw.Write(","); + // Lane OverSumWeight + sw.Write(Helper.DoubleToString(datas[i].OverSumWeight / 1000, 3)); + sw.Write(","); + // Lane OverPercentage + sw.Write(datas[i].OverPercentage); + sw.Write(","); + + // Lane UnderCount + sw.Write(datas[i].UnderTotalCount); + sw.Write(","); + // Lane UnderSumWeight + sw.Write(Helper.DoubleToString(datas[i].UnderSumWeight / 1000, 3)); + sw.Write(","); + // Lane UnderPercentage + sw.Write(datas[i].UnderPercentage); + sw.Write(","); + + // Lane ExNgCount + sw.Write(datas[i].ExNgTotalCount); + sw.Write(","); + // Lane ExNgPercentage + sw.Write(datas[i].ExNgPercentage); + sw.Write(","); + + // Lane TotalCount + sw.Write(datas[i].TotalCount); + sw.Write(","); + // Lane TotalNgCount + sw.Write(datas[i].TotalNGCount); + + sw.WriteLine(); + } + + sw.Close(); + } private bool CheckUSBMemory() { bool ret = false; @@ -1025,6 +1107,96 @@ namespace INT69DB_2A.Forms this.FileCopy(file, fileName); } } + //private void CreateScreenCapture(string path, DateTime time) + //{ + // string filePath = ""; + // Bitmap bitMap = new Bitmap(1024, 768); + + // bitMap = IntechGraphics.CopyFromScreen(); + // filePath = string.Format("{0}S{1:yyyyMMdd-HHmmss}.jpg", path, time); + + // bitMap.Save(filePath, ImageFormat.Jpeg); + //} + + private void Backup() + { + this.SelectNodeIndex = -1; + + DialogFormDataStatistics form = new DialogFormDataStatistics(this); + if (form.ShowDialog() == DialogResult.OK) + this.buttonSave.Enabled = true; + else + this.buttonSave.Enabled = false; + } + private int Backup1() + { + int ret = 0; + string filePath = ""; + bool directoryCheck = false; + DateTime time = DateTime.Now; + + // 메모리 장착 체크 + if (this.CheckUSBMemory() == false) + { + DialogFormMessage msg = new DialogFormMessage(5, this.ParentForm.SystemConfig.Language); + msg.ShowDialog(); + + this.buttonSave.Enabled = true; + ret = -1; + return ret; + } + + #region 통계 데이터 생성 + // ScreenCapture + //this.CreateScreenCapture(this.ParentForm.PathDataStatisticsFolder, time); + // csv File + this.FileBackup1(this.ParentForm.PathDataStatisticsFolder, time, this.CurrentDataCommonList, this.CollectionLaneData); + #endregion + + #region 메모리로 파일 복사 + //try + //{ + // filePath = "하드 디스크\\"; + // DirectoryInfo dir = new DirectoryInfo(this.ParentForm.PathDataStatisticsFolder); + + // directoryCheck = dir.Exists; + // // 폴더 체크 + // if (directoryCheck == false) + // dir.Create(); + + // FileInfo[] files = dir.GetFiles(); + + // foreach (FileInfo file in files) + // { + // this.FileCopy(file, filePath + file.Name); + // file.Delete(); + // } + // DialogFormMessage msg = new DialogFormMessage("2", this.ParentForm.SystemConfig.Language); + // msg.ShowDialog(); + //} + //catch + //{ + // DialogFormMessage msg = new DialogFormMessage(6, this.ParentForm.SystemConfig.Language); + // msg.ShowDialog(); + // ret = -1; + // return ret; + //} + #endregion + + return ret; + } + private int Backup2() + { + int ret = 0; + DateTime time = DateTime.Now; + + // ScreenCapture + //this.CreateScreenCapture(this.ParentForm.PathDataBackupFolder, time); + // csv File + this.FileBackup2(this.ParentForm.PathDataBackupFolder, time, this.CurrentDataCommonList, this.CollectionLaneData); + + return ret; + } public void DisplayRefresh() { @@ -1065,51 +1237,10 @@ namespace INT69DB_2A.Forms { this.buttonSave.Enabled = false; - string filePath = ""; - bool directoryCheck = false; - - // 메모리 장착 체크 - if (this.CheckUSBMemory() == false) - { - DialogFormMessage msg = new DialogFormMessage(5, this.ParentForm.SystemConfig.Language); - msg.ShowDialog(); - - this.buttonSave.Enabled = true; - return; - } - - #region 통계 데이터 생성 - this.FileBackup(this.CurrentDataCommonList, this.CollectionLaneData); - #endregion - - #region 메모리로 파일 복사 - try - { - filePath = "하드 디스크\\"; - DirectoryInfo dir = new DirectoryInfo(this.ParentForm.PathDataStatisticsFolder); - - directoryCheck = dir.Exists; - // 폴더 체크 - if (directoryCheck == false) - dir.Create(); - - FileInfo[] files = dir.GetFiles(); - - foreach (FileInfo file in files) - { - this.FileCopy(file, filePath + file.Name); - file.Delete(); - } - DialogFormMessage msg = new DialogFormMessage("2", this.ParentForm.SystemConfig.Language); - msg.ShowDialog(); - } - catch - { - DialogFormMessage msg = new DialogFormMessage(6, this.ParentForm.SystemConfig.Language); - msg.ShowDialog(); - return; - } - #endregion + if (this.ParentForm.SystemConfig.IsPart11 == false) + this.Backup1(); + else + this.Backup2(); this.buttonSave.Enabled = true; } diff --git a/INT69DB_2A/Forms/FormMain.cs b/INT69DB_2A/Forms/FormMain.cs index b0b2f3f..25597c3 100644 --- a/INT69DB_2A/Forms/FormMain.cs +++ b/INT69DB_2A/Forms/FormMain.cs @@ -314,8 +314,8 @@ namespace INT69DB_2A.Forms this.ChildFormDataBackup = new FormDataBackup(this); else { - this.ChildFormDataBackup_Part11 = new FormDataBackup_Part11(this); this.ChildFormDataStatistics = new FormDataStatistics(this); + this.ChildFormDataBackup_Part11 = new FormDataBackup_Part11(this); this.ChildFormDataViewer = new FormDataViewer(this); } @@ -343,8 +343,8 @@ namespace INT69DB_2A.Forms this.smartForm.AddChildForm(this.ChildFormDataBackup); else { - this.smartForm.AddChildForm(this.ChildFormDataBackup_Part11); this.smartForm.AddChildForm(this.ChildFormDataStatistics); + this.smartForm.AddChildForm(this.ChildFormDataBackup_Part11); this.smartForm.AddChildForm(this.ChildFormDataViewer); } } @@ -501,13 +501,13 @@ namespace INT69DB_2A.Forms if (Directory.Exists(this.PathDataInspectionFolder) == false) Directory.CreateDirectory(this.PathDataInspectionFolder); - // Inspection\\Stick1 폴더 생성 - if (Directory.Exists(this.PathDataInspectionStick1Folder) == false) - Directory.CreateDirectory(this.PathDataInspectionStick1Folder); + //// Inspection\\Stick1 폴더 생성 + //if (Directory.Exists(this.PathDataInspectionStick1Folder) == false) + // Directory.CreateDirectory(this.PathDataInspectionStick1Folder); - // Inspection\\Stick2 폴더 생성 - if (Directory.Exists(this.PathDataInspectionStick2Folder) == false) - Directory.CreateDirectory(this.PathDataInspectionStick2Folder); + //// Inspection\\Stick2 폴더 생성 + //if (Directory.Exists(this.PathDataInspectionStick2Folder) == false) + // Directory.CreateDirectory(this.PathDataInspectionStick2Folder); // Encryption 폴더 생성 if (Directory.Exists(this.PathEncryptionFolder) == false) @@ -3962,10 +3962,7 @@ namespace INT69DB_2A.Forms #endregion if (this.SystemConfig.CurrentForm == DataStore.FormStore.FormMainDisplay) { - if(this.SystemConfig.IsPart11 == true) - this.TrackingInspectionData(this.CollectionWeightData[0], 1); - else - this.DataBackup(this.CollectionWeightData[0], 1); + this.TrackingInspectionData(this.CollectionWeightData[0], 1); this.ChildFormMainDisplay.UpdateUpdateStartWeightDisplay1(this.EquipmentStatus, this.CollectionWeightData[0]); this.Update30000ModbusData(0); @@ -3995,10 +3992,7 @@ namespace INT69DB_2A.Forms #endregion if (this.SystemConfig.CurrentForm == DataStore.FormStore.FormMainDisplay) { - if (this.SystemConfig.IsPart11 == true) - this.TrackingInspectionData(this.CollectionWeightData[1], 2); - else - this.DataBackup(this.CollectionWeightData[1], 2); + this.TrackingInspectionData(this.CollectionWeightData[1], 2); this.ChildFormMainDisplay.UpdateUpdateStartWeightDisplay2(this.EquipmentStatus, this.CollectionWeightData[1]); this.Update30000ModbusData(1); @@ -4028,10 +4022,7 @@ namespace INT69DB_2A.Forms #endregion if (this.SystemConfig.CurrentForm == DataStore.FormStore.FormMainDisplay) { - if (this.SystemConfig.IsPart11 == true) - this.TrackingInspectionData(this.CollectionWeightData[2], 3); - else - this.DataBackup(this.CollectionWeightData[2], 3); + this.TrackingInspectionData(this.CollectionWeightData[2], 3); this.ChildFormMainDisplay.UpdateUpdateStartWeightDisplay3(this.EquipmentStatus, this.CollectionWeightData[2]); this.Update30000ModbusData(2); @@ -4061,10 +4052,7 @@ namespace INT69DB_2A.Forms #endregion if (this.SystemConfig.CurrentForm == DataStore.FormStore.FormMainDisplay) { - if (this.SystemConfig.IsPart11 == true) - this.TrackingInspectionData(this.CollectionWeightData[3], 4); - else - this.DataBackup(this.CollectionWeightData[3], 4); + this.TrackingInspectionData(this.CollectionWeightData[3], 4); this.ChildFormMainDisplay.UpdateUpdateStartWeightDisplay4(this.EquipmentStatus, this.CollectionWeightData[3]); this.Update30000ModbusData(3); @@ -4094,10 +4082,7 @@ namespace INT69DB_2A.Forms #endregion if (this.SystemConfig.CurrentForm == DataStore.FormStore.FormMainDisplay) { - if (this.SystemConfig.IsPart11 == true) - this.TrackingInspectionData(this.CollectionWeightData[4], 5); - else - this.DataBackup(this.CollectionWeightData[4], 5); + this.TrackingInspectionData(this.CollectionWeightData[4], 5); this.ChildFormMainDisplay.UpdateUpdateStartWeightDisplay5(this.EquipmentStatus, this.CollectionWeightData[4]); this.Update30000ModbusData(4); @@ -4127,10 +4112,7 @@ namespace INT69DB_2A.Forms #endregion if (this.SystemConfig.CurrentForm == DataStore.FormStore.FormMainDisplay) { - if (this.SystemConfig.IsPart11 == true) - this.TrackingInspectionData(this.CollectionWeightData[5], 6); - else - this.DataBackup(this.CollectionWeightData[5], 6); + this.TrackingInspectionData(this.CollectionWeightData[5], 6); this.ChildFormMainDisplay.UpdateUpdateStartWeightDisplay6(this.EquipmentStatus, this.CollectionWeightData[5]); this.Update30000ModbusData(5); @@ -4160,10 +4142,7 @@ namespace INT69DB_2A.Forms #endregion if (this.SystemConfig.CurrentForm == DataStore.FormStore.FormMainDisplay) { - if (this.SystemConfig.IsPart11 == true) - this.TrackingInspectionData(this.CollectionWeightData[6], 7); - else - this.DataBackup(this.CollectionWeightData[6], 7); + this.TrackingInspectionData(this.CollectionWeightData[6], 7); this.ChildFormMainDisplay.UpdateUpdateStartWeightDisplay7(this.EquipmentStatus, this.CollectionWeightData[6]); this.Update30000ModbusData(6); @@ -4193,10 +4172,7 @@ namespace INT69DB_2A.Forms #endregion if (this.SystemConfig.CurrentForm == DataStore.FormStore.FormMainDisplay) { - if (this.SystemConfig.IsPart11 == true) - this.TrackingInspectionData(this.CollectionWeightData[7], 8); - else - this.DataBackup(this.CollectionWeightData[7], 8); + this.TrackingInspectionData(this.CollectionWeightData[7], 8); this.ChildFormMainDisplay.UpdateUpdateStartWeightDisplay8(this.EquipmentStatus, this.CollectionWeightData[7]); this.Update30000ModbusData(7); @@ -4226,10 +4202,7 @@ namespace INT69DB_2A.Forms #endregion if (this.SystemConfig.CurrentForm == DataStore.FormStore.FormMainDisplay) { - if (this.SystemConfig.IsPart11 == true) - this.TrackingInspectionData(this.CollectionWeightData[8], 9); - else - this.DataBackup(this.CollectionWeightData[8], 9); + this.TrackingInspectionData(this.CollectionWeightData[8], 9); this.ChildFormMainDisplay.UpdateUpdateStartWeightDisplay9(this.EquipmentStatus, this.CollectionWeightData[8]); this.Update30000ModbusData(8); @@ -4259,10 +4232,7 @@ namespace INT69DB_2A.Forms #endregion if (this.SystemConfig.CurrentForm == DataStore.FormStore.FormMainDisplay) { - if (this.SystemConfig.IsPart11 == true) - this.TrackingInspectionData(this.CollectionWeightData[9], 10); - else - this.DataBackup(this.CollectionWeightData[9], 10); + this.TrackingInspectionData(this.CollectionWeightData[9], 10); this.ChildFormMainDisplay.UpdateUpdateStartWeightDisplay10(this.EquipmentStatus, this.CollectionWeightData[9]); this.Update30000ModbusData(9); @@ -4298,10 +4268,7 @@ namespace INT69DB_2A.Forms #endregion if (this.SystemConfig.CurrentForm == DataStore.FormStore.FormMainDisplay) { - if (this.SystemConfig.IsPart11 == true) - this.TrackingInspectionData(this.CollectionWeightData); - else - this.DataBackup(this.CollectionWeightData); + this.TrackingInspectionData(this.CollectionWeightData); this.ChildFormMainDisplay.UpdateUpdateStartWeightDisplay(this.EquipmentStatus, this.CollectionWeightData); for (int i = 0; i < this.SystemConfig.EquipmentColumns; i++) @@ -6311,166 +6278,6 @@ namespace INT69DB_2A.Forms } #endregion - #region Data Backup - private void DataBackup(Collection items) - { - bool fileCheck = false, directoryCheck = false; - string fullFilePath = ""; - StreamWriter sw; - - this.RemoveUsbBackupFile(); - - if (this.SystemConfig.IsDataBackup == true) - { - fullFilePath = string.Format("{0}{1:yyyyMMdd}_{2}.csv", this.PathDataBackupFolder, DateTime.Now, this.SystemConfig.UsbID); - - DirectoryInfo di = new DirectoryInfo(this.PathDataBackupFolder); - directoryCheck = di.Exists; - // 폴더 체크 - if (directoryCheck == false) - di.Create(); - - FileInfo fileInfo = new FileInfo(fullFilePath); - fileCheck = fileInfo.Exists; - - sw = new StreamWriter(fullFilePath, true, Encoding.UTF8); - - if (fileCheck == false) - { - sw.Write("Date"); - sw.Write(","); - sw.Write("Time"); - sw.Write(","); - sw.Write("P_No"); - sw.Write(","); - sw.Write("Name"); - sw.Write(","); - sw.Write("Lot"); - - for (int i = 0; i < this.SystemConfig.EquipmentColumns; i++) - { - sw.Write(","); - sw.Write(string.Format("#{0}_Weight", i + 1)); - sw.Write(","); - sw.Write("Grade"); - } - sw.WriteLine(); - } - - sw.Write(string.Format("{0:yyyy-MM-dd}", DateTime.Now)); - sw.Write(","); - sw.Write(string.Format("{0:HH:mm:ss}", DateTime.Now)); - sw.Write(","); - sw.Write(this.CurrentProductItem.Number); - sw.Write(","); - sw.Write(this.CurrentProductItem.Name); - sw.Write(","); - sw.Write(this.CurrentProductItem.LotNo); - - for (int i = 0; i < this.SystemConfig.EquipmentColumns; i++) - { - sw.Write(","); - sw.Write(Helper.DoubleToString(items[i].Weight, this.SystemConfig.DecimalPlaces)); - sw.Write(","); - sw.Write(items[i].JudgmentStatus); - } - sw.WriteLine(); - sw.Close(); - } - } - private void DataBackup(WeightData item, int line) - { - bool fileCheck = false, directoryCheck = false; - string fullFilePath = ""; - StreamWriter sw; - - this.RemoveUsbBackupFile(); - - if (this.SystemConfig.IsDataBackup == true) - { - fullFilePath = string.Format("{0}{1:yyyyMMdd}_{2}_{3}Line.csv", this.PathDataBackupFolder, DateTime.Now, this.SystemConfig.UsbID, line); - - DirectoryInfo di = new DirectoryInfo(this.PathDataBackupFolder); - directoryCheck = di.Exists; - // 폴더 체크 - if (directoryCheck == false) - di.Create(); - - FileInfo fileInfo = new FileInfo(fullFilePath); - fileCheck = fileInfo.Exists; - - sw = new StreamWriter(fullFilePath, true, Encoding.UTF8); - - if (fileCheck == false) - { - sw.Write("Date"); - sw.Write(","); - sw.Write("Time"); - sw.Write(","); - sw.Write("P_No"); - sw.Write(","); - sw.Write("Name"); - sw.Write(","); - sw.Write("Lot"); - sw.Write(","); - sw.Write("Weight"); - sw.Write(","); - sw.Write("Grade"); - sw.WriteLine(); - } - - sw.Write(string.Format("{0:yyyy-MM-dd}", DateTime.Now)); - sw.Write(","); - sw.Write(string.Format("{0:HH:mm:ss}", DateTime.Now)); - sw.Write(","); - sw.Write(this.CurrentProductItem.Number); - sw.Write(","); - sw.Write(this.CurrentProductItem.Name); - sw.Write(","); - sw.Write(this.CurrentProductItem.LotNo); - sw.Write(","); - sw.Write(Helper.DoubleToString(item.Weight, this.SystemConfig.DecimalPlaces)); - sw.Write(","); - sw.Write(item.JudgmentStatus); - sw.WriteLine(); - sw.Close(); - } - } - - private void RemoveUsbBackupFile() - { - bool directoryCheck = false; - - try - { - string dday = string.Format("{0:yyyyMMdd}", DateTime.Now.AddDays(-180)) + ".csv"; - - DirectoryInfo dir = new DirectoryInfo(this.PathDataBackupFolder); - - directoryCheck = dir.Exists; - // 폴더 체크 - if (directoryCheck == false) - dir.Create(); - - FileInfo[] files = dir.GetFiles(); - foreach (FileInfo subfile in files) - { - if (subfile.Name.StartsWith("20")) // 날짜 비교하여 180일 지난화일은 삭제함 - { - if (subfile.Name.CompareTo(dday) < 0) - { - subfile.Delete(); - } - } - } - } - catch - { - - } - - } - #endregion #region Backup public List GetSeletedNodeList(TreeView tree) { @@ -6548,142 +6355,234 @@ namespace INT69DB_2A.Forms { DateTime time = DateTime.Now; - folder = string.Format("{0}{1}\\{2}\\", this.PathDataInspectionFolder, time.Year, time.Month); - if (Directory.Exists(folder) == false) - Directory.CreateDirectory(folder); - fileName = string.Format("I{0:yyyyMMdd}-{1}.csv", time, this.CurrentProductItem.Number); + if (this.SystemConfig.IsPart11 == false) + { + folder = this.PathDataBackupFolder; + fileName = string.Format("{0:yyyyMMdd}-{1}", time, this.SystemConfig.ProductNumber); + } + else + { + folder = string.Format("{0}{1}\\{2}\\", this.PathDataInspectionFolder, time.Year, time.Month); + fileName = string.Format("I{0:yyyyMMdd}-{1}.csv", time, this.SystemConfig.ProductNumber); + } } + private void GetTrackingInspectionFolderPath(ref string folder, ref string fileName, int lane) + { + string ret = ""; + DateTime time = DateTime.Now; + if (this.SystemConfig.IsPart11 == false) + { + ret = string.Format("{0}{1:yyyyMMdd}-{2}_{3}Lane.csv", this.PathDataBackupFolder, DateTime.Now, this.SystemConfig.ProductNumber, lane); + folder = this.PathDataBackupFolder; + fileName = string.Format("{0:yyyyMMdd}-{1}_{2}Lane.csv", time, this.SystemConfig.ProductNumber, lane); + } + else + { + folder = string.Format("{0}{1}\\{2}\\", this.PathDataInspectionFolder, time.Year, time.Month); + fileName = string.Format("I{0:yyyyMMdd}-{1}_{2}Lane.csv", time, this.SystemConfig.ProductNumber, lane); + } + } /// /// 스틱1 /// /// - public void TrackingInspectionData(Collection items) + private void TrackingInspectionData(Collection items) { bool fileCheck = false, directoryCheck = false; string fullFilePath = "", folderPath = "", fileName = ""; - string filePathExtension = ""; StreamWriter sw; - DateTime time = DateTime.Now; - filePathExtension = ".csv"; - - this.GetTrackingInspectionFolderPath(ref folderPath, ref fileName); - fullFilePath = string.Format("{0}{1}", folderPath, fileName); - - FileInfo fileInfo = new FileInfo(fullFilePath); - fileCheck = fileInfo.Exists; - - sw = new StreamWriter(fullFilePath, true, Encoding.UTF8); - - if (fileCheck == false) + if (this.SystemConfig.IsDataBackup == true) { - this.RemoveInspectionDataFile(); + this.GetTrackingInspectionFolderPath(ref folderPath, ref fileName); + fullFilePath = string.Format("{0}{1}", folderPath, fileName); - sw.Write("Date"); + DirectoryInfo di = new DirectoryInfo(folderPath); + directoryCheck = di.Exists; + // 폴더 체크 + if (directoryCheck == false) + di.Create(); + + FileInfo fileInfo = new FileInfo(fullFilePath); + fileCheck = fileInfo.Exists; + + sw = new StreamWriter(fullFilePath, true, Encoding.UTF8); + + if (fileCheck == false) + { + this.RemoveInspectionDataFile(); + + sw.Write("Date"); + sw.Write(","); + sw.Write("Time"); + sw.Write(","); + sw.Write("P_No"); + sw.Write(","); + sw.Write("Name"); + sw.Write(","); + sw.Write("Lot"); + sw.Write(","); + sw.Write("UnderRange"); + sw.Write(","); + sw.Write("PassRange"); + sw.Write(","); + sw.Write("OverRange"); + sw.Write(","); + sw.Write("TareRange"); + + for (int i = 0; i < this.SystemConfig.EquipmentColumns; i++) + { + sw.Write(","); + sw.Write(string.Format("#{0}_Weight", i + 1)); + sw.Write(","); + sw.Write(string.Format("#{0}_Grade", i + 1)); + } + + sw.WriteLine(); + } + + sw.Write(string.Format("{0:yyyy-MM-dd}", DateTime.Now)); sw.Write(","); - sw.Write("Time"); + sw.Write(string.Format("{0:HH:mm:ss}", DateTime.Now)); sw.Write(","); - sw.Write("P_No"); + sw.Write(this.CurrentProductItem.Number); sw.Write(","); - sw.Write("Name"); + sw.Write(this.CurrentProductItem.Name); sw.Write(","); - sw.Write("Lot"); + sw.Write(this.CurrentProductItem.LotNo); + sw.Write(","); + sw.Write(Helper.StringToDecimalPlaces(this.CurrentProductItem.UnderRange, this.SystemConfig.DecimalPlaces)); + sw.Write(","); + sw.Write(Helper.StringToDecimalPlaces(this.CurrentProductItem.PassRange, this.SystemConfig.DecimalPlaces)); + sw.Write(","); + sw.Write(Helper.StringToDecimalPlaces(this.CurrentProductItem.OverRange, this.SystemConfig.DecimalPlaces)); + sw.Write(","); + sw.Write(Helper.StringToDecimalPlaces(this.CurrentProductItem.TareRange, this.SystemConfig.DecimalPlaces)); for (int i = 0; i < this.SystemConfig.EquipmentColumns; i++) { sw.Write(","); - sw.Write(string.Format("#{0}_Weight", i + 1)); + sw.Write(Helper.DoubleToString(items[i].Weight, this.SystemConfig.DecimalPlaces)); sw.Write(","); - sw.Write(string.Format("#{0}_Grade", i + 1)); + sw.Write(items[i].JudgmentStatus); } sw.WriteLine(); + sw.Close(); } - - sw.Write(string.Format("{0:yyyy-MM-dd}", time)); - sw.Write(","); - sw.Write(string.Format("{0:HH:mm:ss}", time)); - sw.Write(","); - sw.Write(this.CurrentProductItem.Number); - sw.Write(","); - sw.Write(this.CurrentProductItem.Name); - sw.Write(","); - sw.Write(this.CurrentProductItem.LotNo); - - for (int i = 0; i < this.SystemConfig.EquipmentColumns; i++) - { - sw.Write(","); - sw.Write(Helper.DoubleToString(items[i].Weight, this.SystemConfig.DecimalPlaces)); - sw.Write(","); - sw.Write(items[i].JudgmentStatus); - } - sw.WriteLine(); - sw.Close(); } /// /// 스틱2 /// /// - public void TrackingInspectionData(WeightData item, int line) + private void TrackingInspectionData(WeightData item, int lane) { bool fileCheck = false, directoryCheck = false; string fullFilePath = "", folderPath = "", fileName = ""; - string filePathExtension = ""; StreamWriter sw; - DateTime time = DateTime.Now; - filePathExtension = ".csv"; - - this.GetTrackingInspectionFolderPath(ref folderPath, ref fileName); - fullFilePath = string.Format("{0}{1}", folderPath, fileName); - - FileInfo fileInfo = new FileInfo(fullFilePath); - fileCheck = fileInfo.Exists; - - sw = new StreamWriter(fullFilePath, true, Encoding.UTF8); - - if (fileCheck == false) + if (this.SystemConfig.IsDataBackup == true) { - this.RemoveInspectionDataFile(); + this.GetTrackingInspectionFolderPath(ref folderPath, ref fileName); + fullFilePath = string.Format("{0}{1}", folderPath, fileName); - sw.Write("Date"); + DirectoryInfo di = new DirectoryInfo(folderPath); + directoryCheck = di.Exists; + // 폴더 체크 + if (directoryCheck == false) + di.Create(); + + FileInfo fileInfo = new FileInfo(fullFilePath); + fileCheck = fileInfo.Exists; + + sw = new StreamWriter(fullFilePath, true, Encoding.UTF8); + + if (fileCheck == false) + { + this.RemoveInspectionDataFile(); + + sw.Write("Date"); + sw.Write(","); + sw.Write("Time"); + sw.Write(","); + sw.Write("P_No"); + sw.Write(","); + sw.Write("Name"); + sw.Write(","); + sw.Write("Lot"); + sw.Write(","); + sw.Write("UnderRange"); + sw.Write(","); + sw.Write("PassRange"); + sw.Write(","); + sw.Write("OverRange"); + sw.Write(","); + sw.Write("TareRange"); + sw.Write(","); + sw.Write("Weight"); + sw.Write(","); + sw.Write("Grade"); + + sw.WriteLine(); + } + + sw.Write(string.Format("{0:yyyy-MM-dd}", DateTime.Now)); sw.Write(","); - sw.Write("Time"); + sw.Write(string.Format("{0:HH:mm:ss}", DateTime.Now)); sw.Write(","); - sw.Write("P_No"); + sw.Write(this.CurrentProductItem.Number); sw.Write(","); - sw.Write("Name"); + sw.Write(this.CurrentProductItem.Name); sw.Write(","); - sw.Write("Lot"); + sw.Write(this.CurrentProductItem.LotNo); sw.Write(","); - sw.Write("Weight"); + sw.Write(Helper.StringToDecimalPlaces(this.CurrentProductItem.UnderRange, this.SystemConfig.DecimalPlaces)); sw.Write(","); - sw.Write("Grade"); + sw.Write(Helper.StringToDecimalPlaces(this.CurrentProductItem.PassRange, this.SystemConfig.DecimalPlaces)); + sw.Write(","); + sw.Write(Helper.StringToDecimalPlaces(this.CurrentProductItem.OverRange, this.SystemConfig.DecimalPlaces)); + sw.Write(","); + sw.Write(Helper.StringToDecimalPlaces(this.CurrentProductItem.TareRange, this.SystemConfig.DecimalPlaces)); + sw.Write(","); + sw.Write(Helper.DoubleToString(item.Weight, this.SystemConfig.DecimalPlaces)); + sw.Write(","); + sw.Write(item.JudgmentStatus); sw.WriteLine(); - } - sw.Write(string.Format("{0:yyyy-MM-dd}", time)); - sw.Write(","); - sw.Write(string.Format("{0:HH:mm:ss}", time)); - sw.Write(","); - sw.Write(this.CurrentProductItem.Number); - sw.Write(","); - sw.Write(this.CurrentProductItem.Name); - sw.Write(","); - sw.Write(this.CurrentProductItem.LotNo); - sw.Write(","); - sw.Write(Helper.DoubleToString(item.Weight, this.SystemConfig.DecimalPlaces)); - sw.Write(","); - sw.Write(item.JudgmentStatus); - sw.WriteLine(); - sw.Close(); + sw.Close(); + } } private void RemoveInspectionDataFile() { try { - this.DeleteLogFile(this.PathDataInspectionFolder, DataStore.E_DataType.Inspection); + if (this.SystemConfig.IsPart11 == true) + this.DeleteLogFile(this.PathDataInspectionFolder, DataStore.E_DataType.Inspection); + else + { + bool directoryCheck = false; + string dday = string.Format("{0:yyyyMMdd}", DateTime.Now.AddDays(-180)) + ".csv"; + + DirectoryInfo dir = new DirectoryInfo(this.PathDataInspectionFolder); + + directoryCheck = dir.Exists; + // 폴더 체크 + if (directoryCheck == false) + dir.Create(); + + FileInfo[] files = dir.GetFiles(); + foreach (FileInfo subfile in files) + { + if (subfile.Name.StartsWith("20")) // 날짜 비교하여 10일 지난화일은 삭제함 + { + if (subfile.Name.CompareTo(dday) < 0) + { + subfile.Delete(); + } + } + } + } } catch { diff --git a/INT69DB_2A/Forms/FormMotorSetting.cs b/INT69DB_2A/Forms/FormMotorSetting.cs index 109645e..b7bcdc6 100644 --- a/INT69DB_2A/Forms/FormMotorSetting.cs +++ b/INT69DB_2A/Forms/FormMotorSetting.cs @@ -2151,19 +2151,19 @@ namespace INT69DB_2A.Forms { case (int)DataStore.StepMotorType.MDrive: if (this.ParentForm.SystemConfig.IsImpellerMotorDirectionCW == true) - value = this.DeviceName + "MR -" + this.CurrentAngle + "00"; + value = "MR -" + this.CurrentAngle + "00"; else - value = this.DeviceName + "MR " + this.CurrentAngle + "00"; + value = "MR " + this.CurrentAngle + "00"; this.TransferDirectSTXETX0x0ACOM1(this.DeviceName + value); break; case (int)DataStore.StepMotorType.Moons: if (this.ParentForm.SystemConfig.IsImpellerMotorDirectionCW == true) - value = this.SelectImpellerTag + "FL-" + this.CurrentAngle + "00"; + value = "FL-" + this.CurrentAngle + "00"; else - value = this.SelectImpellerTag + "FL" + this.CurrentAngle + "00"; + value = "FL" + this.CurrentAngle + "00"; - this.TransferDirectETX0x0DCOM1(value); + this.TransferDirectETX0x0DCOM1(this.SelectImpellerTag + value); break; default: break; @@ -2192,7 +2192,7 @@ namespace INT69DB_2A.Forms else value = "FL-" + this.CurrentAngle + "00"; - this.TransferDirectETX0x0D(value); + this.TransferDirectETX0x0D(this.SelectImpellerTag + value); break; default: break; diff --git a/INT69DB_2A/Forms/FormOption.cs b/INT69DB_2A/Forms/FormOption.cs index 780e8e5..27f0846 100644 --- a/INT69DB_2A/Forms/FormOption.cs +++ b/INT69DB_2A/Forms/FormOption.cs @@ -107,13 +107,11 @@ namespace INT69DB_2A.Forms if (this.buttonPart11.ButtonStatus == SmartX.SmartButton.BUTSTATUS.DOWN) { this.ParentForm.SystemConfig.IsPart11 = true; + this.ParentForm.SystemConfig.IsDataBackup = true; this.ParentForm.SystemConfig.IsLogin = true; } else - { this.ParentForm.SystemConfig.IsPart11 = false; - this.ParentForm.SystemConfig.IsLogin = false; - } // 데이터 통계 기능 사용 유무 if (this.buttonStatistics.ButtonStatus == SmartButton.BUTSTATUS.DOWN) diff --git a/INT69DB_2A/Version.txt b/INT69DB_2A/Version.txt index 5955096..d53232a 100644 --- a/INT69DB_2A/Version.txt +++ b/INT69DB_2A/Version.txt @@ -19,6 +19,8 @@ - Ver 4.5.0 Modify - Framework : SmartX Framework V3.1.1(update: 2019.03.21) - (V4.5.1) ȭ ȵǴ + - ͼ - ׽Ʈ(COM1, RS485) + 'ȸ' ϴ - Part 11 INT69DC_7C V11.0.0 diff --git a/INT69DB_2A/bin/Release/DllAes128.dll b/INT69DB_2A/bin/Release/DllAes128.dll index 1e538944262d4277e467d053292ec00c5a762082..85db51856a22b2ff11d9ecfc0020bc0bf86c83f8 100644 GIT binary patch delta 58 zcmZoT!P0PoWx@w$ulzR~KRfOP(VNZpt@RQ3a%G#R5jVHn3@K(A#Se0Gw}0Vc{J;#7 L-~ODBQBo8D8G9Jo delta 58 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 idODp^XcFIe9pC#_f)FT&*$9%r!$ZvoeQlR4mxA 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