diff --git a/DDUtilityApp/DDUtilityApp.csproj b/DDUtilityApp/DDUtilityApp.csproj
index b20d1ad..7057cda 100644
--- a/DDUtilityApp/DDUtilityApp.csproj
+++ b/DDUtilityApp/DDUtilityApp.csproj
@@ -16,7 +16,7 @@
- ftp://192.168.100.11/eqview/Provider/
+ ftp://pms.e1soft.co.kr/eqview/Provider/
true
Web
true
@@ -35,7 +35,7 @@
index.htm
true
0
- 2025.03.14.0
+ 2025.03.18.0
false
true
true
@@ -404,6 +404,12 @@
FrmEqSelector.cs
+
+ Form
+
+
+ FrmServerLog.cs
+
Form
@@ -522,6 +528,9 @@
FrmWorkFlow.cs
+
+ FrmServerLog.cs
+
FrmFDCMongo.cs
diff --git a/DDUtilityApp/GlobalVariable.cs b/DDUtilityApp/GlobalVariable.cs
index ae58f39..c12e2c5 100644
--- a/DDUtilityApp/GlobalVariable.cs
+++ b/DDUtilityApp/GlobalVariable.cs
@@ -31,7 +31,7 @@ namespace DDUtilityApp
///
/// 로그파일 다운로드 경로 jhlim 20250202
///
- public string MesDownloadPath { get; set; }
+ public string DownloadPathServerLog { get; set; }
///
/// Workflow 다운로드 경로
@@ -106,22 +106,32 @@ namespace DDUtilityApp
}
}
+ ///
+ /// Loading AppSettings
+ ///
private void LodConfig()
{
// DefaultPath
string defaultPath = ConfigurationManager.AppSettings["DefaultPath"];
if (string.IsNullOrEmpty(defaultPath)) defaultPath = $@"%MyDocuments%\DDUtility\";
this.DefaultPath = defaultPath.Replace("%MyDocuments%", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
- this.DownloadPath = $@"{this.DefaultPath}Download\";
- this.WorkflowPath = $@"{this.DefaultPath}Workflow\";
- this.MesDownloadPath = $@"{this.DefaultPath}MesDownload\"; //jhlim 20250202
+ this.DownloadPath = Path.Combine(this.DefaultPath, "Download");
+ this.WorkflowPath = Path.Combine(this.DefaultPath, "Workflow");
+ this.DownloadPathServerLog = Path.Combine(this.DefaultPath, "DownloadServer");
}
+ ///
+ /// Loading Setting.xml
+ ///
public void LoadSetting()
{
this.LoadSetting($@"{this.DefaultPath}Setting.xml");
}
+ ///
+ /// Loading Setting File
+ ///
+ ///
private void LoadSetting(string filename)
{
try
diff --git a/DDUtilityApp/LOGPARSER/FrmEqSelector.cs b/DDUtilityApp/LOGPARSER/FrmEqSelector.cs
index 678f2f7..d105f8a 100644
--- a/DDUtilityApp/LOGPARSER/FrmEqSelector.cs
+++ b/DDUtilityApp/LOGPARSER/FrmEqSelector.cs
@@ -218,7 +218,7 @@ namespace DDUtilityApp.LOGPARSER
{
if (this.tabControl1.SelectedTab == this.tabHSMS)
{
- if (this.gridHsms.DataSource == null) return;
+ if (this.gridHsms.DataSource != null) return;
string remotePath = $"/{this.Account.DefaultPath}/{this.Equipment.EquipmentID}/THiRA_SECSGEM/HSMS";
switch (this.Account.Access)
@@ -911,7 +911,7 @@ namespace DDUtilityApp.LOGPARSER
}
}
- MessageBox.Show($"{grid.SelectedRows.Count}개의 파일을 저장하였습니다.");
+ //MessageBox.Show($"{grid.SelectedRows.Count}개의 파일을 저장하였습니다.");
foreach (string file in downfiles)
System.Diagnostics.Process.Start(file);
}
diff --git a/DDUtilityApp/LOGPARSER/FrmLogParser.cs b/DDUtilityApp/LOGPARSER/FrmLogParser.cs
index fee25ac..102cf27 100644
--- a/DDUtilityApp/LOGPARSER/FrmLogParser.cs
+++ b/DDUtilityApp/LOGPARSER/FrmLogParser.cs
@@ -951,6 +951,7 @@ namespace DDUtilityApp.LOGPARSER
private void BtnDeploySite_Click(object sender, EventArgs e)
{
Process.Start("IEXPLORE.EXE", "http://pms.e1soft.co.kr:8090/Deploy/eqview/");
+ Clipboard.SetText("http://pms.e1soft.co.kr:8090/Deploy/eqview/");
}
private void BtnTest01_Click(object sender, EventArgs e)
diff --git a/DDUtilityApp/LOGPARSER/PARSER/EisParser0.cs b/DDUtilityApp/LOGPARSER/PARSER/EisParser0.cs
index a0d71e0..52b533b 100644
--- a/DDUtilityApp/LOGPARSER/PARSER/EisParser0.cs
+++ b/DDUtilityApp/LOGPARSER/PARSER/EisParser0.cs
@@ -378,7 +378,7 @@ namespace DDUtilityApp.LOGPARSER.PARSER
dlg = new FrmEqSelector();
dlg.Owner = sender;
- dlg.Size = new System.Drawing.Size(sender.Width - 60, sender.Height - 60);
+ dlg.Size = new System.Drawing.Size(sender.Width - 10, sender.Height - 60);
dlg.StartPosition = FormStartPosition.CenterParent;
dlg.ServerName = this.ServerName;
dlg.Equipment = sender.Equipment == null ? new EisEquipment() { EquipmentID = this.EquipmentID, Server = new LogServer(this.ServerName)} : sender.Equipment;
diff --git a/DDUtilityApp/MESDOWNLOADER/FrmServerLog.Designer.cs b/DDUtilityApp/MESDOWNLOADER/FrmServerLog.Designer.cs
new file mode 100644
index 0000000..bf9c8a2
--- /dev/null
+++ b/DDUtilityApp/MESDOWNLOADER/FrmServerLog.Designer.cs
@@ -0,0 +1,272 @@
+namespace DDUtilityApp.MESDOWNLOADER
+{
+ partial class FrmServerLog
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ Telerik.WinControls.UI.TableViewDefinition tableViewDefinition4 = new Telerik.WinControls.UI.TableViewDefinition();
+ this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.pnlAPList = new System.Windows.Forms.FlowLayoutPanel();
+ this.pnlCommand = new System.Windows.Forms.Panel();
+ this.btnDownPathOpen = new System.Windows.Forms.Button();
+ this.btnDownPathChange = new System.Windows.Forms.Button();
+ this.btnRefresh = new System.Windows.Forms.Button();
+ this.tboxDownPath = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.cboxServer = new System.Windows.Forms.ComboBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+ this.treeFolder = new System.Windows.Forms.TreeView();
+ this.gridFiles = new JWH.CONTROL.GridViewEx();
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+ this.splitContainer1.Panel1.SuspendLayout();
+ this.splitContainer1.Panel2.SuspendLayout();
+ this.splitContainer1.SuspendLayout();
+ this.panel1.SuspendLayout();
+ this.pnlCommand.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+ this.splitContainer2.Panel1.SuspendLayout();
+ this.splitContainer2.Panel2.SuspendLayout();
+ this.splitContainer2.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.gridFiles)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.gridFiles.MasterTemplate)).BeginInit();
+ this.SuspendLayout();
+ //
+ // splitContainer1
+ //
+ this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+ this.splitContainer1.Location = new System.Drawing.Point(3, 3);
+ this.splitContainer1.Name = "splitContainer1";
+ this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
+ //
+ // splitContainer1.Panel1
+ //
+ this.splitContainer1.Panel1.Controls.Add(this.panel1);
+ this.splitContainer1.Panel1MinSize = 94;
+ //
+ // splitContainer1.Panel2
+ //
+ this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);
+ this.splitContainer1.Size = new System.Drawing.Size(794, 569);
+ this.splitContainer1.SplitterDistance = 94;
+ this.splitContainer1.TabIndex = 0;
+ //
+ // panel1
+ //
+ this.panel1.Controls.Add(this.pnlAPList);
+ this.panel1.Controls.Add(this.pnlCommand);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panel1.Location = new System.Drawing.Point(0, 0);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(794, 94);
+ this.panel1.TabIndex = 0;
+ //
+ // pnlAPList
+ //
+ this.pnlAPList.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pnlAPList.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
+ this.pnlAPList.Location = new System.Drawing.Point(722, 0);
+ this.pnlAPList.Name = "pnlAPList";
+ this.pnlAPList.Padding = new System.Windows.Forms.Padding(0, 10, 0, 0);
+ this.pnlAPList.Size = new System.Drawing.Size(72, 94);
+ this.pnlAPList.TabIndex = 1;
+ //
+ // pnlCommand
+ //
+ this.pnlCommand.Controls.Add(this.btnDownPathOpen);
+ this.pnlCommand.Controls.Add(this.btnDownPathChange);
+ this.pnlCommand.Controls.Add(this.btnRefresh);
+ this.pnlCommand.Controls.Add(this.tboxDownPath);
+ this.pnlCommand.Controls.Add(this.label2);
+ this.pnlCommand.Controls.Add(this.cboxServer);
+ this.pnlCommand.Controls.Add(this.label1);
+ this.pnlCommand.Dock = System.Windows.Forms.DockStyle.Left;
+ this.pnlCommand.Location = new System.Drawing.Point(0, 0);
+ this.pnlCommand.Name = "pnlCommand";
+ this.pnlCommand.Size = new System.Drawing.Size(722, 94);
+ this.pnlCommand.TabIndex = 0;
+ //
+ // btnDownPathOpen
+ //
+ this.btnDownPathOpen.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnDownPathOpen.Location = new System.Drawing.Point(622, 62);
+ this.btnDownPathOpen.Name = "btnDownPathOpen";
+ this.btnDownPathOpen.Size = new System.Drawing.Size(90, 23);
+ this.btnDownPathOpen.TabIndex = 6;
+ this.btnDownPathOpen.Text = "Open";
+ this.btnDownPathOpen.UseVisualStyleBackColor = true;
+ //
+ // btnDownPathChange
+ //
+ this.btnDownPathChange.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnDownPathChange.Location = new System.Drawing.Point(622, 37);
+ this.btnDownPathChange.Name = "btnDownPathChange";
+ this.btnDownPathChange.Size = new System.Drawing.Size(90, 23);
+ this.btnDownPathChange.TabIndex = 5;
+ this.btnDownPathChange.Text = "Change";
+ this.btnDownPathChange.UseVisualStyleBackColor = true;
+ //
+ // btnRefresh
+ //
+ this.btnRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnRefresh.Location = new System.Drawing.Point(622, 10);
+ this.btnRefresh.Name = "btnRefresh";
+ this.btnRefresh.Size = new System.Drawing.Size(90, 23);
+ this.btnRefresh.TabIndex = 4;
+ this.btnRefresh.Text = "Refresh";
+ this.btnRefresh.UseVisualStyleBackColor = true;
+ //
+ // tboxDownPath
+ //
+ this.tboxDownPath.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tboxDownPath.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ this.tboxDownPath.Location = new System.Drawing.Point(136, 38);
+ this.tboxDownPath.Multiline = true;
+ this.tboxDownPath.Name = "tboxDownPath";
+ this.tboxDownPath.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+ this.tboxDownPath.Size = new System.Drawing.Size(480, 47);
+ this.tboxDownPath.TabIndex = 3;
+ //
+ // label2
+ //
+ this.label2.Location = new System.Drawing.Point(10, 38);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(120, 23);
+ this.label2.TabIndex = 2;
+ this.label2.Text = "로컬디렉토리 : ";
+ this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // cboxServer
+ //
+ this.cboxServer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.cboxServer.FormattingEnabled = true;
+ this.cboxServer.Location = new System.Drawing.Point(136, 12);
+ this.cboxServer.Name = "cboxServer";
+ this.cboxServer.Size = new System.Drawing.Size(480, 20);
+ this.cboxServer.TabIndex = 1;
+ //
+ // label1
+ //
+ this.label1.Location = new System.Drawing.Point(10, 10);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(120, 23);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Server : ";
+ this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // splitContainer2
+ //
+ this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitContainer2.Location = new System.Drawing.Point(0, 0);
+ this.splitContainer2.Name = "splitContainer2";
+ //
+ // splitContainer2.Panel1
+ //
+ this.splitContainer2.Panel1.Controls.Add(this.treeFolder);
+ //
+ // splitContainer2.Panel2
+ //
+ this.splitContainer2.Panel2.Controls.Add(this.gridFiles);
+ this.splitContainer2.Size = new System.Drawing.Size(794, 471);
+ this.splitContainer2.SplitterDistance = 264;
+ this.splitContainer2.TabIndex = 0;
+ //
+ // treeFolder
+ //
+ this.treeFolder.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.treeFolder.Location = new System.Drawing.Point(0, 0);
+ this.treeFolder.Name = "treeFolder";
+ this.treeFolder.Size = new System.Drawing.Size(264, 471);
+ this.treeFolder.TabIndex = 0;
+ //
+ // gridFiles
+ //
+ this.gridFiles.BackColor = System.Drawing.SystemColors.ControlLightLight;
+ this.gridFiles.ColumnResizeKey = System.Windows.Forms.Keys.F6;
+ this.gridFiles.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.gridFiles.Location = new System.Drawing.Point(0, 0);
+ //
+ //
+ //
+ this.gridFiles.MasterTemplate.ViewDefinition = tableViewDefinition4;
+ this.gridFiles.Name = "gridViewEx1";
+ //
+ //
+ //
+ this.gridFiles.RootElement.ControlBounds = new System.Drawing.Rectangle(0, 0, 240, 150);
+ this.gridFiles.Size = new System.Drawing.Size(526, 471);
+ this.gridFiles.TabIndex = 0;
+ //
+ // FrmServerLog
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 575);
+ this.Controls.Add(this.splitContainer1);
+ this.Name = "FrmServerLog";
+ this.Padding = new System.Windows.Forms.Padding(3);
+ this.Text = "FrmServerLog";
+ this.splitContainer1.Panel1.ResumeLayout(false);
+ this.splitContainer1.Panel2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+ this.splitContainer1.ResumeLayout(false);
+ this.panel1.ResumeLayout(false);
+ this.pnlCommand.ResumeLayout(false);
+ this.pnlCommand.PerformLayout();
+ this.splitContainer2.Panel1.ResumeLayout(false);
+ this.splitContainer2.Panel2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+ this.splitContainer2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.gridFiles.MasterTemplate)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.gridFiles)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.SplitContainer splitContainer1;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.SplitContainer splitContainer2;
+ private System.Windows.Forms.FlowLayoutPanel pnlAPList;
+ private System.Windows.Forms.Panel pnlCommand;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox tboxDownPath;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.ComboBox cboxServer;
+ private System.Windows.Forms.Button btnDownPathOpen;
+ private System.Windows.Forms.Button btnDownPathChange;
+ private System.Windows.Forms.Button btnRefresh;
+ private System.Windows.Forms.TreeView treeFolder;
+ private JWH.CONTROL.GridViewEx gridFiles;
+ }
+}
\ No newline at end of file
diff --git a/DDUtilityApp/MESDOWNLOADER/FrmServerLog.cs b/DDUtilityApp/MESDOWNLOADER/FrmServerLog.cs
new file mode 100644
index 0000000..9f5d6a6
--- /dev/null
+++ b/DDUtilityApp/MESDOWNLOADER/FrmServerLog.cs
@@ -0,0 +1,538 @@
+using DDUtilityApp.LOGPARSER.DATA;
+using JWH;
+using JWH.NETWORK;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Diagnostics;
+using System.Drawing;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Telerik.WinControls.UI;
+
+namespace DDUtilityApp.MESDOWNLOADER
+{
+ public partial class FrmServerLog: Form
+ {
+
+ private DataSet DSSetting { get; set; } = null;
+
+ private DataTable DTFileInfo { get; set; } = null;
+
+ public FrmServerLog()
+ {
+ InitializeComponent();
+
+ this.SetLayout();
+ this.SetEventHandler();
+ }
+
+ private void SetLayout()
+ {
+ try
+ {
+#if DEBUG
+ this.Text = $"ServerLog Download - Ver. {Application.ProductVersion} : DEBUG";
+#else
+ this.Text = $"ServerLog Download - Ver. {Application.ProductVersion}";
+#endif
+ this.Font = new Font("돋움체", 9);
+
+ this.CreateDTFileInfo();
+ this.SetCboxServer();
+ this.GridFiles_Setting();
+
+ this.tboxDownPath.ReadOnly = true;
+ this.tboxDownPath.Text = GlobalVariable.Instance.DownloadPathServerLog;
+ }
+ catch (Exception ex)
+ {
+ XLogger.Instance.Fatal(ex, true);
+ }
+ }
+
+ private void SetEventHandler()
+ {
+ try
+ {
+ this.cboxServer.SelectedIndexChanged += this.CboxServer_SelectedIndexChanged;
+ this.btnRefresh.Click += this.BtnRefresh_Click;
+ this.btnDownPathChange.Click += this.BtnDownPathChange_Click;
+ this.btnDownPathOpen.Click += this.BtnDownPathOpen_Click;
+
+ this.treeFolder.AfterSelect += this.TreeFolder_AfterSelect;
+
+ this.gridFiles.CellDoubleClick += this.GridFiles_CellDoubleClick;
+ this.gridFiles.KeyDown += this.GridFiles_KeyDown;
+ }
+ catch (Exception ex)
+ {
+ XLogger.Instance.Fatal(ex, true);
+ }
+ }
+
+ #region [ Controls ] --------------------------------------------------
+
+ ///
+ /// 서버선택
+ ///
+ ///
+ ///
+ private void CboxServer_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ try
+ {
+ this.GridFiles_Setting();
+ if (this.DSSetting == null || this.DSSetting.Tables.Contains("Item") == false) return;
+
+ int value = (int)this.cboxServer.SelectedValue;
+ var query = from dtServer in DSSetting.Tables["Server"].AsEnumerable()
+ join dtItem in DSSetting.Tables["Item"].AsEnumerable()
+ on dtServer.Field("Server_Id") equals dtItem.Field("Server_Id")
+ where dtItem.Field("Server_Id") == value
+ select new
+ {
+ name = dtServer.Field("name"),
+ nameap = dtItem.Field("name"),
+ url = dtItem.Field("url"),
+ dir = dtItem.Field("dir"),
+ conkey = dtItem.Field("conkey"),
+ Server_Id = dtItem.Field("Server_Id"),
+ };
+
+ foreach (Control control in this.pnlAPList.Controls)
+ control.Dispose();
+ this.pnlAPList.Controls.Clear();
+
+ int index = 0;
+ foreach (var item in query)
+ {
+ string[] splitIP = item.url.Split('.');
+ CheckBox chk = new CheckBox()
+ {
+ Text = $"{item.nameap} ({splitIP[splitIP.Length - 1]})",
+ AutoSize = true,
+ Checked = true,
+ Padding = new Padding(5, 3, 3, 5),
+ Margin = new Padding(0),
+ Tag = item.nameap,
+ };
+ index++;
+ this.pnlAPList.Controls.Add(chk);
+ }
+
+ this.treeFolder.Nodes.Clear();
+ TreeNode rootNode = this.treeFolder.Nodes.Add("ROOT");
+ this.treeFolder.SelectedNode = rootNode;
+ }
+ catch (Exception ex)
+ {
+ XLogger.Instance.Fatal(ex, true);
+ }
+ }
+
+ ///
+ /// 현재 (Treeview.SelectedNode)경로의 파일목록 갱신
+ ///
+ ///
+ ///
+ private void BtnRefresh_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ this.Cursor = Cursors.WaitCursor;
+ this.SuspendLayout();
+ this.DTFileInfo.Rows.Clear();
+ this.gridFiles.DataSource = null;
+
+ int server_Id = (int)this.cboxServer.SelectedValue;
+ TreeNode currentNode = this.treeFolder.SelectedNode;
+ if (currentNode == null) return;
+ string subPath = currentNode.Tag as string;
+
+ foreach (Control control in this.pnlAPList.Controls)
+ {
+ CheckBox chk = control as CheckBox;
+ if (chk == null || chk.Checked == false) continue;
+
+ string nameap = control.Tag as string;
+ if (string.IsNullOrEmpty(nameap)) continue;
+
+ DataRow[] rows = this.DSSetting.Tables["Item"].Select($"Server_Id='{server_Id}' AND name='{nameap}'");
+ foreach (DataRow row in rows)
+ {
+ string url = row["url"] as string;
+ string dir = row["dir"] as string;
+ string conkey = row["conkey"] as string;
+
+ string userId = this.GetUserIdFromConkey(conkey);
+ string password = this.GetPasswordFromConkey(conkey);
+ string currentPath = string.IsNullOrEmpty(subPath) ? dir : System.IO.Path.Combine(dir, subPath);
+
+ FtpsClient.Initialize(url, userId, password);
+ var files = FtpsClient.GetFtpsList(currentPath);
+
+ foreach (var file in files)
+ {
+ DataRow rowFile = this.DTFileInfo.NewRow();
+ rowFile["nameap"] = nameap;
+ rowFile["Name"] = file.Name;
+ rowFile["FileName"] = file.Name;
+ rowFile["Size"] = this.GetFileSize(file.Size, FileSizeType.MB);
+ rowFile["Modified"] = file.Modified.ToString("yyyy-MM-dd HH:mm:ss");
+ rowFile["Type"] = file.Type;
+ rowFile["url"] = url;
+ rowFile["dir"] = dir;
+ rowFile["subpath"] = subPath;
+ rowFile["userId"] = userId;
+ rowFile["password"] = password;
+ this.DTFileInfo.Rows.Add(rowFile);
+ }
+ }
+ }
+
+ this.DTFileInfo.DefaultView.RowFilter = $"Type='Directory'";
+ this.DTFileInfo.DefaultView.Sort = "FileName ASC";
+ foreach (DataRow row in this.DTFileInfo.DefaultView.ToTable(true, "FileName").Rows)
+ {
+
+ string fileName = row["FileName"] as string;
+ if (string.IsNullOrEmpty(fileName)) continue;
+ if (currentNode.Nodes.ContainsKey(fileName)) continue;
+
+ TreeNode node = currentNode.Nodes.Add(fileName, fileName);
+ node.Tag = string.IsNullOrEmpty(currentNode.Tag as string) ? fileName : System.IO.Path.Combine(currentNode.Tag as string, fileName);
+ }
+ currentNode.Expand();
+
+ this.DTFileInfo.DefaultView.RowFilter = "Type='File'";
+ this.DTFileInfo.DefaultView.Sort = "Modified DESC";
+ this.gridFiles.DataSource = this.DTFileInfo;
+ this.gridFiles.BestFitColumns();
+ }
+ catch (Exception ex)
+ {
+ XLogger.Instance.Fatal(ex, true);
+ }
+ finally
+ {
+ this.ResumeLayout();
+ this.Cursor = Cursors.Default;
+ }
+ }
+
+ ///
+ /// 로그파일 다운로드 폴더설정
+ ///
+ ///
+ ///
+ private void BtnDownPathChange_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if (string.IsNullOrEmpty(this.tboxDownPath.Text))
+ this.tboxDownPath.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
+
+ using (FolderBrowserDialog dlg = new FolderBrowserDialog())
+ {
+ dlg.SelectedPath = this.tboxDownPath.Text;
+ if (dlg.ShowDialog() == DialogResult.OK)
+ {
+ this.tboxDownPath.Text = dlg.SelectedPath;
+ GlobalVariable.Instance.DownloadPathServerLog = this.tboxDownPath.Text;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ XLogger.Instance.Fatal(ex, true);
+ }
+ }
+
+ ///
+ /// 로그파일 다운로드 폴더열기
+ ///
+ ///
+ ///
+ private void BtnDownPathOpen_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ Process.Start("explorer.exe", this.tboxDownPath.Text);
+ }
+ catch (Exception ex)
+ {
+ XLogger.Instance.Fatal(ex, true);
+ }
+ }
+
+ private void TreeFolder_AfterSelect(object sender, TreeViewEventArgs e)
+ {
+ this.BtnRefresh_Click(this.btnRefresh, new EventArgs());
+ }
+
+ #endregion
+
+ #region [ GridFiles ] -------------------------------------------------
+
+ private void GridFiles_Setting()
+ {
+ try
+ {
+ this.gridFiles.SelectionMode = GridViewSelectionMode.FullRowSelect;
+ this.gridFiles.MultiSelect = true;
+ this.gridFiles.TableElement.RowHeight = 22;
+ this.gridFiles.Columns.Clear();
+ this.gridFiles.Columns.Add(new GridViewTextBoxColumn("nameap") { HeaderText = "Server", ReadOnly = true });
+ this.gridFiles.Columns.Add(new GridViewTextBoxColumn("Name") { ReadOnly=true, IsVisible = false });
+ this.gridFiles.Columns.Add(new GridViewTextBoxColumn("FileName") { ReadOnly = true });
+ this.gridFiles.Columns.Add(new GridViewTextBoxColumn("Size") { ReadOnly = true, TextAlignment = ContentAlignment.MiddleRight });
+ this.gridFiles.Columns.Add(new GridViewTextBoxColumn("Modified") { ReadOnly = true });
+ this.gridFiles.Columns.Add(new GridViewTextBoxColumn("Type") { ReadOnly = true });
+ }
+ catch (Exception ex)
+ {
+ XLogger.Instance.Fatal(ex, true);
+ }
+ }
+
+ private void GridFiles_KeyDown(object sender, KeyEventArgs e)
+ {
+ try
+ {
+ if (e.KeyCode != Keys.Enter) return;
+
+ this.GridFiles_CellDoubleClick(this.gridFiles, null);
+ }
+ catch (Exception ex)
+ {
+ XLogger.Instance.Fatal(ex, true);
+ }
+ }
+
+ private async void GridFiles_CellDoubleClick(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
+ {
+ try
+ {
+ List rows = new List();
+ List downloads = new List();
+
+ if (e != null)
+ {
+ // 더블클릭된 파일 추가
+ DataRowView view = e.Row.DataBoundItem as DataRowView;
+ if (view != null && view.Row != null) rows.Add(view.Row);
+ }
+ else
+ {
+ // 선택된 파일들 추가
+ foreach(GridViewRowInfo row in this.gridFiles.SelectedRows)
+ {
+ DataRowView view = row.DataBoundItem as DataRowView;
+ if (view != null && view.Row != null) rows.Add(view.Row);
+ }
+ }
+
+ // 다운로드
+ bool hasZip = false;
+ using (ProgressForm frmProgress = new ProgressForm(rows.Count))
+ {
+ int countDown = 0;
+ frmProgress.Show();
+ frmProgress.UpdateProgress(string.Empty, countDown);
+
+ foreach(DataRow row in rows)
+ {
+ string fileName = row["FileName"] as string;
+ string url = row["url"] as string;
+ string dir = row["dir"] as string;
+ string subpath = row["subpath"] as string;
+ string userId = row["userId"] as string;
+ string password = row["password"] as string;
+
+ string extension = System.IO.Path.GetExtension(fileName);
+ if (string.Compare(extension, ".Zip", true) == 0) hasZip = true;
+ else if (string.Compare(extension, ".Log", false) == 0) fileName += ".Log";
+
+ List paths = new List();
+ if (!string.IsNullOrEmpty(dir)) paths.Add(dir);
+ if (!string.IsNullOrEmpty(subpath)) paths.Add(subpath);
+ if (!string.IsNullOrEmpty(fileName)) paths.Add(fileName);
+ string pathSRC = System.IO.Path.Combine(paths.ToArray());
+ string pathDST = System.IO.Path.Combine(this.tboxDownPath.Text, this.cboxServer.Text, fileName);
+ frmProgress.UpdateProgress($"{fileName}", countDown);
+
+ FtpsClient.Disconnect();
+ FtpsClient.Initialize(url, userId, password);
+ bool isSuccess = await Task.Run(() =>
+ FtpsClient.DownloadFtpsFile(pathSRC, pathDST)
+ );
+
+ countDown++;
+ if (isSuccess) downloads.Add(pathDST);
+ }
+ }
+
+ if (downloads.Count < 1)
+ {
+ MessageBox.Show($"다운로드된 파일이 없습니다.", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ return;
+ }
+
+ // FileMerge
+ if (downloads.Count == 1)
+ {
+ string fileName = downloads[0];
+ if (hasZip)
+ {
+ string path = System.IO.Path.Combine(this.tboxDownPath.Text, this.cboxServer.Text, fileName);
+ string command = $"/select,{path}";
+ Process.Start($"explorer.exe", command);
+ }
+ else
+ {
+ string extension = System.IO.Path.GetExtension(fileName);
+ if (string.Compare(extension, ".Log", true) != 0)
+ System.IO.File.Move(fileName, fileName += ".log");
+ System.Diagnostics.Process.Start(fileName);
+ }
+ }
+ else
+ {
+ if (hasZip)
+ {
+ string path = System.IO.Path.Combine(this.tboxDownPath.Text, this.cboxServer.Text);
+ string command = $"/select,{path}";
+ Process.Start($"explorer.exe", path);
+ }
+ else
+ {
+ string filename = Util.GetFileMerge(downloads);
+ System.Diagnostics.Process.Start(filename);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ XLogger.Instance.Fatal(ex, true);
+ }
+ }
+
+ #endregion
+
+ ///
+ /// Server + File 저장테이블 생성
+ ///
+ ///
+ private void CreateDTFileInfo()
+ {
+ try
+ {
+ this.DTFileInfo = new DataTable();
+ this.DTFileInfo.Columns.Add("nameap", typeof(string));
+ this.DTFileInfo.Columns.Add("Name", typeof(string));
+ this.DTFileInfo.Columns.Add("FileName", typeof(string));
+ this.DTFileInfo.Columns.Add("Size", typeof(string));
+ this.DTFileInfo.Columns.Add("Modified", typeof(string));
+ this.DTFileInfo.Columns.Add("Type", typeof(string));
+ this.DTFileInfo.Columns.Add("url", typeof(string));
+ this.DTFileInfo.Columns.Add("dir", typeof(string));
+ this.DTFileInfo.Columns.Add("subpath", typeof(string));
+ this.DTFileInfo.Columns.Add("userId", typeof(string));
+ this.DTFileInfo.Columns.Add("password", typeof(string));
+ }
+ catch (Exception ex)
+ {
+ XLogger.Instance.Fatal(ex, true);
+ }
+ }
+
+ ///
+ /// XML 설정파일 로딩 및 CboxServer 셋팅
+ ///
+ private void SetCboxServer()
+ {
+ try
+ {
+ string path = ConfigurationManager.AppSettings["BULK_VIEWER"];
+ this.DSSetting = XmlToDsConverter.ConvertXmlToDataSet(path);
+ if (this.DSSetting == null || this.DSSetting.Tables.Count < 1 || this.DSSetting.Tables.Contains("Server") == false)
+ {
+ MessageBox.Show("XML 데이터를 불러올 수 없습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ this.cboxServer.DropDownStyle = ComboBoxStyle.DropDownList;
+ this.cboxServer.DataSource = DSSetting.Tables["Server"];
+ this.cboxServer.DisplayMember = "name";
+ this.cboxServer.ValueMember = "Server_Id";
+ this.cboxServer.SelectedIndex = -1;
+ }
+ catch (Exception ex)
+ {
+ XLogger.Instance.Fatal(ex, true);
+ }
+ }
+
+ ///
+ /// conkey to Base64
+ ///
+ ///
+ ///
+ private string GetUserIdFromConkey(string conkey)
+ {
+ try
+ {
+ string value = Util.GetBase64(conkey);
+ string[] items = value.Split(':');
+ if (items == null || items.Length < 1) return string.Empty;
+
+ return items[0];
+ }
+ catch (Exception ex)
+ {
+ XLogger.Instance.Fatal(ex, true);
+ return string.Empty;
+ }
+ }
+
+ ///
+ /// conkey to Base64
+ ///
+ ///
+ ///
+ private string GetPasswordFromConkey(string conkey)
+ {
+ try
+ {
+ string value = Util.GetBase64(conkey);
+ string[] items = value.Split(':');
+ if (items == null || items.Length < 2) return string.Empty;
+
+ return items[1];
+ }
+ catch (Exception ex)
+ {
+ XLogger.Instance.Fatal(ex, true);
+ return string.Empty;
+ }
+ }
+
+ public string GetFileSize(long length, FileSizeType format = FileSizeType.Auto)
+ {
+ int index = 0;
+ int nFormat = (int)format;
+ double value = length;
+ for (index = 0; index < nFormat; index++)
+ {
+ if (format == FileSizeType.Auto && value < 1024) break;
+ value /= 1024;
+ }
+
+ return $"{value.ToString("N2")} {(FileSizeType)index}";
+ }
+
+ }
+}
diff --git a/DDUtilityApp/MESDOWNLOADER/FrmServerLog.resx b/DDUtilityApp/MESDOWNLOADER/FrmServerLog.resx
new file mode 100644
index 0000000..85d34e3
--- /dev/null
+++ b/DDUtilityApp/MESDOWNLOADER/FrmServerLog.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git a/DDUtilityApp/MESDOWNLOADER/ServerLog.cs b/DDUtilityApp/MESDOWNLOADER/ServerLog.cs
index 6d08746..647b8c0 100644
--- a/DDUtilityApp/MESDOWNLOADER/ServerLog.cs
+++ b/DDUtilityApp/MESDOWNLOADER/ServerLog.cs
@@ -32,7 +32,7 @@ namespace DDUtilityApp.MESDOWNLOADER
private void ServerLog_Shown(object sender, EventArgs e)
{
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
- txtPath.Text = GlobalVariable.Instance.MesDownloadPath; //Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
+ txtPath.Text = GlobalVariable.Instance.DownloadPathServerLog; //Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
SetGridView();
}
private void ServerLog_Resize(object sender, EventArgs e)
@@ -66,7 +66,7 @@ namespace DDUtilityApp.MESDOWNLOADER
{
// 선택한 경로를 텍스트 박스에 표시
txtPath.Text = folderDialog.SelectedPath;
- GlobalVariable.Instance.MesDownloadPath = folderDialog.SelectedPath;
+ GlobalVariable.Instance.DownloadPathServerLog = folderDialog.SelectedPath;
}
}
}
@@ -366,8 +366,16 @@ namespace DDUtilityApp.MESDOWNLOADER
// 데이터 테이블 생성 후 바인딩
foreach (var item in fileList)
{
- dtFiles.Rows.Add(row.Cells["name"].Value, row.Cells["nameap"].Value, item.Name, item.Size.ToString("N0")
- , item.Modified.ToString("yyyy-MM-dd HH:mm:ss"), item.Type, row.Cells["url"].Value, row.Cells["dir"].Value, userInfo[0], userInfo[1]);
+ dtFiles.Rows.Add(
+ row.Cells["name"].Value,
+ row.Cells["nameap"].Value,
+ item.Name, item.Size.ToString("N0"),
+ item.Modified.ToString("yyyy-MM-dd HH:mm:ss"),
+ item.Type,
+ row.Cells["url"].Value,
+ row.Cells["dir"].Value,
+ userInfo[0],
+ userInfo[1]);
}
}
diff --git a/DDUtilityApp/Program.cs b/DDUtilityApp/Program.cs
index 61978d4..d155c0c 100644
--- a/DDUtilityApp/Program.cs
+++ b/DDUtilityApp/Program.cs
@@ -70,7 +70,8 @@ namespace DDUtilityApp
#region [ 버튼 생성 정보 ]
frmMain.Buttons.Add("EIS Log Viewer", new EisParser0());
- frmMain.Buttons.Add("MES Log Download", typeof(MESDOWNLOADER.ServerLog));
+ //frmMain.Buttons.Add("MES Log Download", typeof(MESDOWNLOADER.ServerLog));
+ frmMain.Buttons.Add("ServerLog Download", typeof(MESDOWNLOADER.FrmServerLog));
//frmMain.Buttons.Add("MIS Log Viewer", new AgvParser()); // 제거
frmMain.Buttons.Add("FDC Mongo Viewer", typeof(MONGO.FrmFDCMongo));
frmMain.Buttons.Add("HSMS Converter", typeof(LOGPARSER.FrmHsmsViewer));
diff --git a/DDUtilityApp/ViewList.xml b/DDUtilityApp/ViewList.xml
index 60144ca..7e896f4 100644
--- a/DDUtilityApp/ViewList.xml
+++ b/DDUtilityApp/ViewList.xml
@@ -15,7 +15,7 @@
-
+