1396 lines
62 KiB
C#
1396 lines
62 KiB
C#
using DDUtilityApp.DATA;
|
|
using DDUtilityApp.LOGPARSER.DATA;
|
|
using DDUtilityApp.SECS;
|
|
using FluentFTP;
|
|
using FluentFTP.Helpers;
|
|
using JWH;
|
|
using JWH.CONTROL;
|
|
using JWH.DATA;
|
|
using JWH.NETWORK;
|
|
using Org.BouncyCastle.Tls.Crypto;
|
|
using Renci.SshNet;
|
|
using Renci.SshNet.Sftp;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net.NetworkInformation;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Forms.DataVisualization.Charting;
|
|
using Telerik.WinControls.UI;
|
|
using static Telerik.WinControls.UI.ValueMapper;
|
|
|
|
namespace DDUtilityApp.LOGPARSER
|
|
{
|
|
|
|
public partial class FrmEqSelector : Form
|
|
{
|
|
|
|
#region [ Properties ] ------------------------------------------------
|
|
|
|
public enum eServerType { EIS, AGV }
|
|
|
|
public eServerType ServerType { get; set; } = eServerType.EIS;
|
|
|
|
/// <summary>
|
|
/// 로그서버 접속정보
|
|
/// </summary>
|
|
public Account Account { get; set; } = null;
|
|
|
|
/// <summary>
|
|
/// 선택된 로그파일
|
|
/// </summary>
|
|
public LogFile[] SelectedLogFiles { get; set; } = null;
|
|
|
|
private LogServer LogServer { get; set; } = null;
|
|
|
|
public EisEquipment Equipment { get; set; } = null;
|
|
|
|
public string ServerName { get; set; } = string.Empty;
|
|
|
|
public SECSDefine SECSDefine { get; set; } = null;
|
|
|
|
private int InitializeStatus { get; set; } = 0;
|
|
|
|
#endregion
|
|
|
|
#region [ FrmEqSelector ] ---------------------------------------------
|
|
|
|
public FrmEqSelector()
|
|
{
|
|
InitializeComponent();
|
|
this.SetLayout();
|
|
this.SetEventHandler();
|
|
}
|
|
|
|
public FrmEqSelector(eServerType server) : this()
|
|
{
|
|
this.ServerType = server;
|
|
}
|
|
|
|
private void SetLayout()
|
|
{
|
|
Font font = new Font("돋움체", 9);
|
|
|
|
this.tboxName.ImeMode = ImeMode.Hangul;
|
|
this.tboxEquipmentID.ImeMode = ImeMode.Alpha;
|
|
this.chkAllEquipment.Checked = GlobalVariable.Instance.FrmEqSelector_AllEquipment;
|
|
this.chkUseSMB.Checked = true; // = GlobalVariable.Instance.FrmEqSelector_UseSMB
|
|
this.chkUseSMB.Visible = false;
|
|
this.tabControl1.SelectedIndex = 0;
|
|
this.tboxModelDescription.Font = font;
|
|
}
|
|
|
|
protected void SetEventHandler()
|
|
{
|
|
this.Shown += this.FrmEqSelector_Shown;
|
|
this.FormClosing += FrmEqSelector_FormClosing;
|
|
this.FormClosed += this.FrmEqSelector_FormClosed;
|
|
this.Disposed += this.FrmEqSelector_Disposed;
|
|
|
|
this.cboxServer.SelectedValueChanged += CboxServer_SelectedValueChanged;
|
|
this.btnOK.Click += BtnOK_Click;
|
|
this.tboxName.KeyDown += TboxFilter_KeyDown;
|
|
this.tboxEquipmentID.KeyDown += TboxFilter_KeyDown;
|
|
this.chkAllEquipment.CheckStateChanged += ChkAllEquipment_CheckStateChanged;
|
|
|
|
this.flowLayoutPanel1.DoubleClick += this.FlowLayoutPanel1_DoubleClick;
|
|
|
|
this.gridEquipments.SelectionChanged += GridEquipments_SelectionChanged;
|
|
this.gridEquipments.CellDoubleClick += GridEquipments_CellDoubleClick;
|
|
this.gridEquipments.DataBindingComplete += GridEquipments_DataBindingComplete;
|
|
this.gridEquipments.KeyDown += GridEquipments_KeyDown;
|
|
|
|
this.gridLogFiles.CellDoubleClick += GridLogFiles_CellDoubleClick;
|
|
this.gridLogFiles.KeyDown += GridLogFiles_KeyDown;
|
|
|
|
this.gridWorkflow.CellDoubleClick += Grid_CellDoubleClick;
|
|
this.gridWorkflow.KeyDown += Grid_KeyDown;
|
|
this.gridHsms.CellDoubleClick += Grid_CellDoubleClick;
|
|
this.gridHsms.KeyDown += Grid_KeyDown;
|
|
}
|
|
|
|
private async void FrmEqSelector_Shown(object sender, EventArgs e)
|
|
{
|
|
await Task.Delay(200);
|
|
|
|
try
|
|
{
|
|
this.SuspendLayout();
|
|
|
|
this.GridEquipments_Setting();
|
|
this.GridLogFiles_Setting(this.gridLogFiles);
|
|
this.GridLogFiles_Setting(this.gridHsms);
|
|
this.GridLogFiles_Setting(this.gridWorkflow);
|
|
this.GridModelDetail_Setting();
|
|
|
|
this.InitializeStatus = 1;
|
|
this.SetLogServer();
|
|
if (this.Equipment != null) this.SetEquipment(this.Equipment);
|
|
else this.SetEquipment(this.ServerName, this.Equipment?.EquipmentID);
|
|
this.InitializeStatus = 0;
|
|
|
|
this.GridEquipments_SelectionChanged(this.gridEquipments, null);
|
|
this.SetSelectedLogFiles(this.SelectedLogFiles);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex, true);
|
|
}
|
|
finally
|
|
{
|
|
this.InitializeStatus = 0;
|
|
this.ResumeLayout();
|
|
}
|
|
}
|
|
|
|
private void FrmEqSelector_Disposed(object sender, EventArgs e)
|
|
{
|
|
if (this.gridEquipments != null) this.gridEquipments.Dispose();
|
|
if (this.gridLogFiles != null) this.gridLogFiles.Dispose();
|
|
if (this.gridModelDetail != null) this.gridModelDetail.Dispose();
|
|
}
|
|
|
|
private void FlowLayoutPanel1_DoubleClick(object sender, EventArgs e)
|
|
{
|
|
this.ControlCapture();
|
|
}
|
|
|
|
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
|
|
{
|
|
try
|
|
{
|
|
switch (keyData)
|
|
{
|
|
case Keys.F1:
|
|
Process.Start("IEXPLORE.EXE", "http://pms.e1soft.co.kr:8090/Deploy/eqview/");
|
|
break;
|
|
case Keys.F6:
|
|
this.gridEquipments.BestFitColumns(BestFitColumnMode.DisplayedCells);
|
|
this.gridLogFiles.BestFitColumns(BestFitColumnMode.DisplayedCells);
|
|
this.gridModelDetail.BestFitColumns(BestFitColumnMode.DisplayedCells);
|
|
break;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex);
|
|
}
|
|
|
|
return base.ProcessCmdKey(ref msg, keyData);
|
|
}
|
|
|
|
private void FrmEqSelector_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
}
|
|
|
|
private void FrmEqSelector_FormClosed(object sender, FormClosedEventArgs e)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
foreach (GridViewColumn column in this.gridEquipments.Columns.OrderBy(x => x.Index))
|
|
if (column.IsVisible) sb.AppendFormat($"{column.Name};");
|
|
GlobalVariable.Instance.FrmEqSelector_GridEquipmentHeader = sb.ToString();
|
|
GlobalVariable.Instance.FrmEqSelector_UseSMB = this.chkUseSMB.Checked;
|
|
GlobalVariable.Instance.SaveSetting();
|
|
|
|
if (this.DialogResult == DialogResult.OK)
|
|
this.GetGEMSetting();
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
#region [ Control Events ] --------------------------------------------
|
|
|
|
private void CboxServer_SelectedValueChanged(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
EisEquipment[] equipments = this.GetEquipments();
|
|
if (this.chkAllEquipment.Checked == false)
|
|
equipments = equipments.Where(x => x.MesRegistration).ToArray();
|
|
|
|
this.gridEquipments.AutoBinding(equipments);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex, true);
|
|
}
|
|
finally
|
|
{
|
|
this.Cursor = Cursors.Default;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// jhlim 20250202
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (this.tabControl1.SelectedTab == this.tabHSMS)
|
|
{
|
|
if (this.gridHsms.DataSource != null) return;
|
|
|
|
string remotePath = $"/{this.Account.DefaultPath}/{this.Equipment.EquipmentID}/THiRA_SECSGEM/HSMS";
|
|
switch (this.Account.Access)
|
|
{
|
|
case AccessType.SMB:
|
|
break;
|
|
case AccessType.FTPS:
|
|
{
|
|
FtpsClient.Connect();
|
|
FtpListItem[] items = FtpsClient.GetFtpsList(remotePath);
|
|
this.gridHsms.AutoBinding(this.GetLogFiles(items));
|
|
FtpsClient.Disconnect();
|
|
}
|
|
break;
|
|
case AccessType.SFTP:
|
|
{
|
|
StpClientWrap.Connect();
|
|
ISftpFile[] items = (ISftpFile[])StpClientWrap.GetSftpList(remotePath);
|
|
this.gridHsms.AutoBinding(this.GetLogFiles(items));
|
|
StpClientWrap.Disconnect();
|
|
}
|
|
break;
|
|
case AccessType.FTP:
|
|
break;
|
|
}
|
|
}
|
|
else if (this.tabControl1.SelectedTab == this.tabWorkflow)
|
|
{
|
|
if (this.gridWorkflow.DataSource != null) return;
|
|
|
|
string remotePath = $"/{this.Account.DefaultPath}/{this.Equipment.EquipmentID}/Workflow";
|
|
switch (this.Account.Access)
|
|
{
|
|
case AccessType.SMB:
|
|
break;
|
|
case AccessType.FTPS:
|
|
{
|
|
FtpsClient.Connect();
|
|
FtpListItem[] items = FtpsClient.GetFtpsList(remotePath);
|
|
LogFile[] logFiles = this.GetLogFiles(items);
|
|
this.gridWorkflow.AutoBinding(logFiles);
|
|
FtpsClient.Disconnect();
|
|
}
|
|
break;
|
|
case AccessType.SFTP:
|
|
{
|
|
StpClientWrap.Connect();
|
|
ISftpFile[] items = (ISftpFile[])StpClientWrap.GetSftpList(remotePath);
|
|
this.gridWorkflow.AutoBinding(this.GetLogFiles(items));
|
|
StpClientWrap.Disconnect();
|
|
}
|
|
break;
|
|
case AccessType.FTP:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex, true);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// [CheckPoint] 로그파일 목록을 반환한다
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void BtnOK_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
LogFile logFile = null;
|
|
List<LogFile> list = new List<LogFile>();
|
|
foreach (GridViewRowInfo row in this.gridLogFiles.SelectedRows)
|
|
{
|
|
logFile = row.DataBoundItem as LogFile;
|
|
if (logFile == null) continue;
|
|
list.Add(logFile);
|
|
}
|
|
|
|
SelectedLogFiles = list.ToArray();
|
|
this.DialogResult = DialogResult.OK;
|
|
this.Close();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex, true);
|
|
}
|
|
}
|
|
|
|
private void TboxFilter_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
switch (e.KeyCode)
|
|
{
|
|
case Keys.Enter:
|
|
this.gridEquipments.FilterDescriptors.Remove("DisplayName");
|
|
this.gridEquipments.FilterDescriptors.Remove("MesName");
|
|
this.gridEquipments.FilterDescriptors.Remove("EquipmentID");
|
|
|
|
if (string.IsNullOrWhiteSpace(this.tboxEquipmentID.Text) == false)
|
|
{
|
|
Telerik.WinControls.Data.FilterDescriptor filter = new Telerik.WinControls.Data.FilterDescriptor("EquipmentID", Telerik.WinControls.Data.FilterOperator.Contains, this.tboxEquipmentID.Text);
|
|
this.gridEquipments.FilterDescriptors.Add(filter);
|
|
}
|
|
if (string.IsNullOrWhiteSpace(this.tboxName.Text) == false)
|
|
{
|
|
string columnName = string.Empty; ;
|
|
if (string.IsNullOrEmpty(columnName)) columnName = this.gridEquipments.Columns["DisplayName"].IsVisible ? "DisplayName" : string.Empty;
|
|
if (string.IsNullOrEmpty(columnName)) columnName = this.gridEquipments.Columns["MesName"].IsVisible ? "MesName" : string.Empty;
|
|
if (string.IsNullOrEmpty(columnName)) columnName = "DisplayName";
|
|
|
|
Telerik.WinControls.Data.FilterDescriptor filter = new Telerik.WinControls.Data.FilterDescriptor(columnName, Telerik.WinControls.Data.FilterOperator.Contains, this.tboxName.Text);
|
|
this.gridEquipments.FilterDescriptors.Add(filter);
|
|
}
|
|
break;
|
|
case Keys.Escape:
|
|
if (sender == this.tboxEquipmentID) this.gridEquipments.FilterDescriptors.Remove("EquipmentID");
|
|
if (sender == this.tboxName) { this.gridEquipments.FilterDescriptors.Remove("DisplayName"); this.gridEquipments.FilterDescriptors.Remove("MesName"); }
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void ChkAllEquipment_CheckStateChanged(object sender, EventArgs e)
|
|
{
|
|
this.CboxServer_SelectedValueChanged(this.cboxServer, null);
|
|
GlobalVariable.Instance.FrmEqSelector_AllEquipment = this.chkAllEquipment.Checked;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region [ GridEquipments ] --------------------------------------------
|
|
|
|
private void GridEquipments_Setting()
|
|
{
|
|
GridViewEx grid = this.gridEquipments;
|
|
grid.TableElement.RowHeight = 20;
|
|
grid.MultiSelect = false;
|
|
|
|
Dictionary<string, string> dicColumnText = new Dictionary<string, string>();
|
|
dicColumnText.Add("Facility", "");
|
|
dicColumnText.Add("Line", "");
|
|
dicColumnText.Add("EquipmentID", "");
|
|
dicColumnText.Add("DisplayName", "Name");
|
|
dicColumnText.Add("ProcessSegmentID", "공정ID");
|
|
dicColumnText.Add("ProcessSegmentName", "공정명");
|
|
dicColumnText.Add("MesName", "MES Name");
|
|
dicColumnText.Add("Description", "EIS Name");
|
|
dicColumnText.Add("ControlMode", "Control");
|
|
dicColumnText.Add("State", "");
|
|
dicColumnText.Add("LastTrackInLotID", "In LOT");
|
|
dicColumnText.Add("LastTrackOutLotID", "Out LOT");
|
|
dicColumnText.Add("ModelID", "");
|
|
dicColumnText.Add("Maker", "");
|
|
dicColumnText.Add("Version", "");
|
|
dicColumnText.Add("ModelVersion", "ModelVer");
|
|
dicColumnText.Add("EquipmentIP", "");
|
|
dicColumnText.Add("Port", "");
|
|
dicColumnText.Add("ServerIP", "");
|
|
dicColumnText.Add("OriginServerIP", "OriginIP");
|
|
dicColumnText.Add("GemSettingID", "GemID");
|
|
dicColumnText.Add("DriverFileName", "Driver File");
|
|
dicColumnText.Add("LogPath", "");
|
|
dicColumnText.Add("PMDate", "PM Date");
|
|
dicColumnText.Add("PlcType", "PLC Type");
|
|
|
|
#region [저장된 컬럼순서 적용]
|
|
string columnNames = GlobalVariable.Instance.FrmEqSelector_GridEquipmentHeader;
|
|
string columnText = string.Empty;
|
|
if (string.IsNullOrEmpty(columnNames) == false)
|
|
{
|
|
foreach (string columnName in columnNames.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
|
|
{
|
|
columnText = columnName;
|
|
if (dicColumnText.ContainsKey(columnName))
|
|
{
|
|
if (string.IsNullOrEmpty(dicColumnText[columnName]) == false) columnText = dicColumnText[columnName];
|
|
dicColumnText.Remove(columnName);
|
|
}
|
|
|
|
grid.AddColumn(columnName, columnText);
|
|
}
|
|
}
|
|
|
|
foreach (string columnName in dicColumnText.Keys)
|
|
{
|
|
columnText = columnName;
|
|
if (string.IsNullOrEmpty(dicColumnText[columnName]) == false) columnText = dicColumnText[columnName];
|
|
grid.AddColumn(columnName, columnText).IsVisible = false;
|
|
}
|
|
#endregion
|
|
|
|
grid.AddContextMenu("");
|
|
grid.AddContextMenu("Open Windows", this.GridEquipments_OpenWindows);
|
|
}
|
|
|
|
/// <summary>
|
|
/// [CheckPoint] 선택된 설비의 로그파일 목록을 표시한다.
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void GridEquipments_SelectionChanged(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (this.InitializeStatus > 0) return;
|
|
if (this.gridEquipments.SelectedRows.Count < 1) return;
|
|
|
|
this.gridLogFiles.DataSource = null;
|
|
this.gridModelDetail.DataSource = null;
|
|
this.gridWorkflow.DataSource = null;
|
|
this.gridHsms.DataSource = null;
|
|
|
|
EisEquipment equipment = this.gridEquipments.SelectedRows[0].DataBoundItem as EisEquipment;
|
|
if (equipment == null) return;
|
|
|
|
this.Cursor = Cursors.WaitCursor;
|
|
this.Equipment = equipment;
|
|
LogServer logServer = this.cboxServer.SelectedItem as LogServer;
|
|
string path = string.Empty;
|
|
|
|
#region [ Model Details ]
|
|
|
|
// 모델 버전 정보
|
|
EisModelDetails[] modelDetails = this.GetModelDetails(equipment);
|
|
this.gridModelDetail.AutoBinding(modelDetails);
|
|
this.gridModelDetail.SetRowForeColor("LockState", $"LockState = 'BLOCKED'", Color.LightGray);
|
|
foreach (GridViewRowInfo row in this.gridModelDetail.Rows)
|
|
{
|
|
EisModelDetails item = row.DataBoundItem as EisModelDetails;
|
|
if (item == null) continue;
|
|
if (item.Version == equipment.Version)
|
|
{
|
|
row.IsSelected = true;
|
|
row.IsCurrent = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 모델 정보
|
|
EisModelInfo[] modelInfo = this.GetModelInfo(equipment);
|
|
if (modelInfo?.Length > 0)
|
|
{
|
|
this.tboxModelDescription.Text = modelInfo[0].Description;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region [ LogFiles ]
|
|
|
|
if (logServer.NetworkAccount.ContainsKey(equipment.LogServerIP) == false) return;
|
|
{
|
|
this.Account = logServer.NetworkAccount[equipment.LogServerIP];
|
|
switch (this.Account.Access)
|
|
{
|
|
case AccessType.SMB:
|
|
{
|
|
// Checking Local IP-Address
|
|
bool isLocal = false;
|
|
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
|
|
foreach (UnicastIPAddressInformation ip in nic.GetIPProperties().UnicastAddresses)
|
|
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
|
|
if (ip.Address.ToString() == this.Account.IPAddress) { isLocal = true; break; }
|
|
|
|
if (this.chkUseSMB.Checked)
|
|
{
|
|
if (isLocal) path = $@"{equipment.LogPath}\{equipment.EquipmentID}";
|
|
else return;
|
|
}
|
|
else
|
|
{
|
|
if (isLocal) path = $@"{equipment.LogPath}\{equipment.EquipmentID}";
|
|
else path = $@"\\{this.Account.IPAddress}\{this.Account.DefaultPath}{equipment.EquipmentID}\";
|
|
}
|
|
|
|
int result = ExtensionAPI.ConnectRemoteServer(this.Account.IPAddress, this.Account.UserID, this.Account.Password);
|
|
if (result != 0 && result != 1219) { MessageBox.Show($@"네트워크 접근에 실패하였습니다. (Code:{result})"); return; }
|
|
|
|
DirectoryInfo directory = new DirectoryInfo(path);
|
|
if (directory.Exists == false) { MessageBox.Show($@"폴더가 존재하지 않습니다" + Environment.NewLine + Environment.NewLine + $@"Path: {path}"); return; }
|
|
|
|
this.gridLogFiles.AutoBinding(this.GetLogFiles(directory.GetFiles()));
|
|
this.rstatus1.Text = $"Path={path}";
|
|
}
|
|
break;
|
|
case AccessType.FTPS:
|
|
{
|
|
FtpsClient.Initialize(this.Account.IPAddress, this.Account.UserID, this.Account.Password);
|
|
FtpsClient.Connect();
|
|
|
|
path = $"/{this.Account.DefaultPath}/{equipment.EquipmentID}";
|
|
FtpListItem[] ftpFiles = FtpsClient.GetFtpsList(path);
|
|
if (ftpFiles != null) this.gridLogFiles.AutoBinding(this.GetLogFiles(ftpFiles));
|
|
this.rstatus1.Text = $"Path={this.Account.IPAddress}{path}";
|
|
|
|
//if (FtpsClient.IsDirExists($"{path}/THiRA_SECSGEM/HSMS") && !this.tabControl1.TabPages.Contains(tabHSMS))
|
|
// this.tabControl1.TabPages.Add(this.tabHSMS);
|
|
|
|
FtpsClient.Disconnect();
|
|
}
|
|
break;
|
|
case AccessType.SFTP:
|
|
{
|
|
StpClientWrap.Initialize(this.Account.IPAddress, this.Account.UserID, this.Account.Password);
|
|
StpClientWrap.Connect();
|
|
|
|
path = $"/{this.Account.DefaultPath}/{equipment.EquipmentID}";
|
|
ISftpFile[] ftpFiles = (ISftpFile[])StpClientWrap.GetSftpList(path);
|
|
if (ftpFiles != null) this.gridLogFiles.AutoBinding(this.GetLogFiles(ftpFiles));
|
|
this.rstatus1.Text = $"Path={this.Account.IPAddress}{path}";
|
|
|
|
//if (StpClientWrap.IsDirExists($"{path}/THiRA_SECSGEM/HSMS") && !this.tabControl1.TabPages.Contains(tabHSMS))
|
|
// this.tabControl1.TabPages.Add(this.tabHSMS);
|
|
|
|
StpClientWrap.Disconnect();
|
|
}
|
|
break;
|
|
case AccessType.FTP:
|
|
{
|
|
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region [ Workflow & HSMS ]
|
|
|
|
this.tabControl1_SelectedIndexChanged(this.tabControl1, new EventArgs());
|
|
|
|
#endregion
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (this.LogServer.NetworkAccount.ContainsKey(this.Equipment.LogServerIP))
|
|
{
|
|
// 해당 접속정보를 삭제한다
|
|
this.LogServer.NetworkAccount.Remove(this.Equipment.LogServerIP);
|
|
ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Marking", $"ServerIP = '{this.Equipment.LogServerIP}'", true);
|
|
formatting.RowBackColor = Color.FromArgb(88, 255, 0, 0);
|
|
this.gridEquipments.Columns["ServerIP"].ConditionalFormattingObjectList.Add(formatting);
|
|
}
|
|
XLogger.Instance.Fatal(ex, true);
|
|
}
|
|
finally
|
|
{
|
|
this.Cursor = Cursors.Default;
|
|
}
|
|
}
|
|
|
|
private void GridEquipments_CellDoubleClick(object sender, GridViewCellEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
this.gridLogFiles.ClearSelection();
|
|
if (this.gridLogFiles.Rows.Count > 0) this.gridLogFiles.Rows[0].IsSelected = true;
|
|
this.GridLogFiles_CellDoubleClick(this.gridLogFiles, null);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex);
|
|
}
|
|
}
|
|
|
|
private void GridEquipments_DataBindingComplete(object sender, GridViewBindingCompleteEventArgs e)
|
|
{
|
|
GridViewEx grid = this.gridEquipments;
|
|
if (grid.Columns.Contains("Version"))
|
|
{
|
|
bool isExist = false;
|
|
foreach (BaseFormattingObject item in grid.Columns["Version"].ConditionalFormattingObjectList)
|
|
if (item.Name == "VERSION_MissMatch") isExist = true;
|
|
if (isExist == false)
|
|
{
|
|
ExpressionFormattingObject formatting = new ExpressionFormattingObject($"VERSION_MissMatch", "Version<>ModelVersion", true);
|
|
formatting.CellBackColor = Color.FromArgb(128, 255, 0, 0);
|
|
grid.Columns["Version"].ConditionalFormattingObjectList.Add(formatting);
|
|
}
|
|
}
|
|
if (grid.Columns.Contains("PMDate"))
|
|
{
|
|
bool isExist = false;
|
|
foreach (BaseFormattingObject item in grid.Columns["PMDate"].ConditionalFormattingObjectList)
|
|
if (item.Name == "PMDate_MissMatch") isExist = true;
|
|
if (isExist == false)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.Append($"PMDate>=#{DateTime.Now.ToString("yyyy-MM-dd")}#");
|
|
sb.Append(" AND ");
|
|
sb.Append($"PMDate<#{DateTime.Now.AddDays(1).ToString("yyyy-MM-dd")}#");
|
|
ExpressionFormattingObject formatting = new ExpressionFormattingObject($"PMDate_MissMatch", sb.ToString(), true);
|
|
formatting.CellBackColor = Color.YellowGreen;
|
|
grid.Columns["PMDate"].ConditionalFormattingObjectList.Add(formatting);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void GridEquipments_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Enter) this.BtnOK_Click(this.btnOK, null);
|
|
}
|
|
|
|
private void GridEquipments_OpenWindows(object sender, params object[] args)
|
|
{
|
|
try
|
|
{
|
|
if (this.gridEquipments.SelectedRows.Count < 1) return;
|
|
string serverID = this.cboxServer.Text;
|
|
string equipmentID = this.gridEquipments.SelectedRows[0].Cells["EquipmentID"].Value.ToString();
|
|
//this.gridLogFiles.SelectedRows;
|
|
|
|
ProcessStartInfo processStartInfo = new ProcessStartInfo();
|
|
processStartInfo.FileName = Application.ExecutablePath;
|
|
processStartInfo.WorkingDirectory = Environment.CurrentDirectory;
|
|
processStartInfo.Arguments = $"FrmLogParser {serverID} {equipmentID}";
|
|
Process process = Process.Start(processStartInfo);
|
|
|
|
//this.DialogResult = DialogResult.Cancel;
|
|
//this.Close();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region [ GridLogFiles ] ----------------------------------------------
|
|
|
|
private void GridLogFiles_Setting(GridViewEx grid)
|
|
{
|
|
//GridViewEx grid = this.gridLogFiles; jhlim 20250202
|
|
grid.TableElement.RowHeight = 20;
|
|
grid.MultiSelect = true;
|
|
|
|
grid.AddColumn("Name");
|
|
grid.AddColumn("Length");
|
|
grid.AddColumn("LastWriteTime");
|
|
|
|
//grid.AddContextMenu("");
|
|
//grid.AddContextMenu("Open Log", GridEquipments_OpenWindows);
|
|
}
|
|
|
|
private void GridLogFiles_CellDoubleClick(object sender, GridViewCellEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
this.BtnOK_Click(this.btnOK, null);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex, true);
|
|
}
|
|
}
|
|
|
|
private void GridLogFiles_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Enter) this.BtnOK_Click(this.btnOK, null);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region [ Grid Worflow & HSMS ] ----------------------------------------------
|
|
|
|
/// <summary>
|
|
/// Workflow, HSMS 파일목록 Grid
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Grid_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Enter)
|
|
{
|
|
Grid_CellDoubleClick((GridViewEx)sender, null);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Workflow, HSMS 파일 Download
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Grid_CellDoubleClick(object sender, GridViewCellEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
string destPath = Path.Combine(GlobalVariable.Instance.DownloadPath, this.Equipment.EquipmentID);
|
|
|
|
RadGridView grid = sender as RadGridView;
|
|
if (grid == null && sender.GetType() == typeof(GridDataCellElement))
|
|
{
|
|
GridDataCellElement element = sender as GridDataCellElement;
|
|
grid = element.RowElement.GridControl;
|
|
}
|
|
if (grid == null) return;
|
|
|
|
if (grid == this.gridHsms) destPath = Path.Combine(destPath, "HSMS");
|
|
else if (grid == this.gridWorkflow) destPath = Path.Combine(destPath, "Workflow");
|
|
if (System.IO.Directory.Exists(destPath) == false) System.IO.Directory.CreateDirectory(destPath);
|
|
|
|
List<string> downfiles = new List<string>();
|
|
foreach (GridViewRowInfo row in grid.SelectedRows)
|
|
{
|
|
LogFile logFile = row.DataBoundItem as LogFile;
|
|
string destFileName = Path.Combine(destPath, logFile.FileName);
|
|
|
|
switch (this.Account.Access)
|
|
{
|
|
case AccessType.SMB:
|
|
{ }
|
|
break;
|
|
case AccessType.FTPS:
|
|
{
|
|
FtpsClient.DownloadFtpsFile(logFile.FullName, destFileName);
|
|
downfiles.Add(destFileName);
|
|
logFile.DestFullName = destFileName;
|
|
}
|
|
break;
|
|
case AccessType.SFTP:
|
|
{
|
|
StpClientWrap.DownloadSftpFile(logFile.FullName, destFileName);
|
|
downfiles.Add(destFileName);
|
|
logFile.DestFullName = destFileName;
|
|
}
|
|
break;
|
|
case AccessType.FTP:
|
|
{ }
|
|
break;
|
|
}
|
|
}
|
|
|
|
//MessageBox.Show($"{grid.SelectedRows.Count}개의 파일을 저장하였습니다.");
|
|
foreach (string file in downfiles)
|
|
System.Diagnostics.Process.Start(file);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex, true);
|
|
}
|
|
}
|
|
|
|
private void GridLogFiles_OpenWindows(object sender, params object[] args)
|
|
{
|
|
try
|
|
{
|
|
if (this.gridEquipments.SelectedRows.Count < 1) return;
|
|
string serverID = this.cboxServer.Text;
|
|
string equipmentID = this.gridEquipments.SelectedRows[0].Cells["EquipmentID"].Value.ToString();
|
|
|
|
ProcessStartInfo processStartInfo = new ProcessStartInfo();
|
|
processStartInfo.FileName = Application.ExecutablePath;
|
|
processStartInfo.WorkingDirectory = Environment.CurrentDirectory;
|
|
processStartInfo.Arguments = $"FrmLogParser {serverID} {equipmentID}";
|
|
Process process = Process.Start(processStartInfo);
|
|
|
|
//this.DialogResult = DialogResult.Cancel;
|
|
//this.Close();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region [ GridModelDetail ] -------------------------------------------
|
|
|
|
private void GridModelDetail_Setting()
|
|
{
|
|
GridViewDataColumn item = null;
|
|
GridViewEx grid = this.gridModelDetail;
|
|
grid.MasterView.TableHeaderRow.MinHeight = 30;
|
|
grid.AutoSizeRows = true;
|
|
//grid.AllowDragToGroup = false;
|
|
grid.AllowAutoSizeColumns = false;
|
|
//grid.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
|
|
|
|
grid.Columns.Clear();
|
|
grid.AddColumn("ModelID").IsVisible = false;
|
|
item = grid.AddColumn("Version");
|
|
item.MinWidth = 100; item.MaxWidth = 120;
|
|
item = grid.AddColumn("Description");
|
|
item.MinWidth = 100; //item.MaxWidth = 500;
|
|
item = grid.AddColumn("DateTime");
|
|
item.MinWidth = 100; item.MaxWidth = 130;
|
|
item = grid.AddColumn("Modifier");
|
|
item.MinWidth = 80; item.MaxWidth = 80;
|
|
//grid.AddColumn("LockState");
|
|
}
|
|
|
|
private EisModelDetails[] GetModelDetails(EisEquipment equipment)
|
|
{
|
|
try
|
|
{
|
|
|
|
LogServer logServer = this.cboxServer.SelectedItem as LogServer;
|
|
if (logServer == null) return null;
|
|
this.LogServer = logServer;
|
|
|
|
this.Cursor = Cursors.WaitCursor;
|
|
DataTable dtModelDetails = logServer.GetModelDetails(equipment.ModelID);
|
|
EisModelDetails[] modelDetails = dtModelDetails.ToClass<EisModelDetails>();
|
|
|
|
return modelDetails;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex, true);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private EisModelInfo[] GetModelInfo(EisEquipment equipment)
|
|
{
|
|
try
|
|
{
|
|
LogServer logServer = this.cboxServer.SelectedItem as LogServer;
|
|
if (logServer == null) return null;
|
|
this.LogServer = logServer;
|
|
|
|
this.Cursor = Cursors.WaitCursor;
|
|
DataTable dtModelDetails = logServer.GetModelInfo(equipment.ModelID);
|
|
EisModelInfo[] modelDetails = dtModelDetails.ToClass<EisModelInfo>();
|
|
|
|
return modelDetails;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex, true);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region [ Method ] ----------------------------------------------------
|
|
|
|
private void SetLogServer()
|
|
{
|
|
this.cboxServer.Items.Clear();
|
|
StringBuilder sbEquipments = new StringBuilder();
|
|
StringBuilder sbModelDetails = new StringBuilder();
|
|
StringBuilder sbModelInfo = new StringBuilder();
|
|
|
|
LogServer logServer = null;
|
|
switch (this.ServerType)
|
|
{
|
|
case eServerType.EIS:
|
|
sbEquipments.Clear();
|
|
sbEquipments.AppendLine($"SELECT EQ.Line, ");
|
|
sbEquipments.AppendLine($" EQ.ModelID, ");
|
|
sbEquipments.AppendLine($" (SELECT MAX(Version) FROM EquipmentModelDetails WHERE ModelID=EQ.ModelID AND LockState != 'BLOCKED') ModelVersion, ");
|
|
sbEquipments.AppendLine($" EQ.Version, ");
|
|
sbEquipments.AppendLine($" EQ.RunningVersion, ");
|
|
sbEquipments.AppendLine($" EQ.EquipmentID, ");
|
|
sbEquipments.AppendLine($" EQ.Description, ");
|
|
sbEquipments.AppendLine($" DP.GemSettingID, ");
|
|
sbEquipments.AppendLine($" DP.DriverFileName, ");
|
|
sbEquipments.AppendLine($" DP.EquipmentIP, ");
|
|
sbEquipments.AppendLine($" DP.Port, ");
|
|
sbEquipments.AppendLine($" EQ.ServerIP, ");
|
|
sbEquipments.AppendLine($" EQ.OriginServerIP, ");
|
|
sbEquipments.AppendLine($" DP.MESDaemon, ");
|
|
sbEquipments.AppendLine($" DP.MESService, ");
|
|
sbEquipments.AppendLine($" DP.MESSubject, ");
|
|
sbEquipments.AppendLine($" DP.PlcType, ");
|
|
sbEquipments.AppendLine($" EQ.LogPath ");
|
|
sbEquipments.AppendLine($"FROM Equipment EQ ");
|
|
sbEquipments.AppendLine($" LEFT JOIN ( ");
|
|
sbEquipments.AppendLine($" SELECT DP1.EquipmentID, ");
|
|
sbEquipments.AppendLine($" DP1.GemSettingID, ");
|
|
sbEquipments.AppendLine($" DP1.Value EquipmentIP, ");
|
|
sbEquipments.AppendLine($" DP2.Value DriverFileName, ");
|
|
sbEquipments.AppendLine($" DP3.Value Port, ");
|
|
sbEquipments.AppendLine($" DP4.Value MESDaemon, ");
|
|
sbEquipments.AppendLine($" DP5.Value MESService, ");
|
|
sbEquipments.AppendLine($" DP6.Value MESSubject, ");
|
|
sbEquipments.AppendLine($" DP7.Value PlcType ");
|
|
sbEquipments.AppendLine($" FROM DriverParameter DP1 ");
|
|
sbEquipments.AppendLine($" LEFT JOIN DriverParameter DP2 ON DP2.EquipmentID=DP1.EquipmentID AND DP2.DriverName=DP1.DriverName AND DP2.Name IN ('MessageFileName', 'PLC_MAPFILENAME') ");
|
|
sbEquipments.AppendLine($" LEFT JOIN DriverParameter DP3 ON DP3.EquipmentID=DP1.EquipmentID AND DP3.DriverName=DP1.DriverName AND DP3.Name IN ('PortNo', 'PLC_PORT') ");
|
|
sbEquipments.AppendLine($" LEFT JOIN DriverParameter DP4 ON DP4.EquipmentID=DP1.EquipmentID AND DP4.DriverName='MES' AND DP4.Name IN ('Daemon') ");
|
|
sbEquipments.AppendLine($" LEFT JOIN DriverParameter DP5 ON DP5.EquipmentID=DP1.EquipmentID AND DP5.DriverName='MES' AND DP5.Name IN ('Service') ");
|
|
sbEquipments.AppendLine($" LEFT JOIN DriverParameter DP6 ON DP6.EquipmentID=DP1.EquipmentID AND DP6.DriverName='MES' AND DP6.Name IN ('SendSubject') ");
|
|
sbEquipments.AppendLine($" LEFT JOIN DriverParameter DP7 ON DP7.EquipmentID=DP1.EquipmentID AND DP7.DriverName='EQP' AND DP7.Name IN ('PLC_TYPE') ");
|
|
sbEquipments.AppendLine($" WHERE DP1.Name IN ('RemoteAddress', 'PLC_IPADDRESS') ) DP ON DP.EquipmentID = EQ.EquipmentID ");
|
|
sbEquipments.AppendLine($"ORDER BY Line, ModelID, EquipmentID ");
|
|
|
|
sbModelDetails.Clear();
|
|
sbModelDetails.AppendLine($"SELECT * ");
|
|
sbModelDetails.AppendLine($"FROM EquipmentModelDetails ");
|
|
sbModelDetails.AppendLine($"WHERE ModelID=@MODEL_ID ");
|
|
sbModelDetails.AppendLine($"ORDER BY Version DESC ");
|
|
|
|
sbModelInfo.Clear();
|
|
sbModelInfo.AppendLine($"SELECT * ");
|
|
sbModelInfo.AppendLine($"FROM EquipmentModel ");
|
|
sbModelInfo.AppendLine($"WHERE ModelID=@MODEL_ID ");
|
|
|
|
#region [ EIS.B1 ]
|
|
logServer = new LogServer("EIS.B1");
|
|
logServer.DBConnectionString = $@"server=192.168.7.208;database=DDEIS;uid=EES_Service;pwd=99dU6QABcghnV^;";
|
|
logServer.DBGetEquipments = sbEquipments.ToString();
|
|
logServer.DBGetModelDetails = sbModelDetails.ToString();
|
|
logServer.DBGetModelInfo = sbModelInfo.ToString();
|
|
|
|
// B1
|
|
logServer.NetworkAccount.Add("192.168.7.214", new Account("192.168.7.214", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.7.215", new Account("192.168.7.215", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.7.216", new Account("192.168.7.216", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.7.217", new Account("192.168.7.217", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.7.218", new Account("192.168.7.218", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.7.219", new Account("192.168.7.219", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
//logServer.NetworkAccount.Add("192.168.7.150", new Account("192.168.7.150", "T001084@DAEDUCK.COM", "daeduck!1", @"Vol2\EIS서버\"));
|
|
|
|
// B1 (Multi-NIC)
|
|
logServer.NetworkAccount.Add("192.168.115.214", new Account("192.168.7.214", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.115.215", new Account("192.168.7.215", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.115.216", new Account("192.168.7.216", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.115.217", new Account("192.168.7.217", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.115.218", new Account("192.168.7.218", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.115.219", new Account("192.168.7.219", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.235.214", new Account("192.168.7.214", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.235.215", new Account("192.168.7.215", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.235.216", new Account("192.168.7.216", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.235.217", new Account("192.168.7.217", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.235.218", new Account("192.168.7.218", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.235.219", new Account("192.168.7.219", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
|
|
// B1.PLC
|
|
logServer.NetworkAccount.Add("192.168.113.231", new Account("192.168.113.231", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.113.232", new Account("192.168.113.232", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.113.233", new Account("192.168.113.233", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.113.236", new Account("192.168.113.236", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.233.231", new Account("192.168.233.231", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.233.232", new Account("192.168.233.232", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.233.233", new Account("192.168.233.233", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
|
|
// M1
|
|
logServer.NetworkAccount.Add("192.168.143.231", new Account("192.168.143.231", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.143.232", new Account("192.168.143.232", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.143.233", new Account("192.168.143.233", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.143.235", new Account("192.168.143.235", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
|
|
logServer.FTPAddress = "192.168.7.208";
|
|
logServer.FTPPort = 7000;
|
|
logServer.FTPUserID = "anonymous";
|
|
logServer.FTPPassword = "";
|
|
//logServer.FTPUserID = "EES_Service";
|
|
//logServer.FTPPassword = "99dU6QABcghnV^";
|
|
this.cboxServer.Items.Add(logServer);
|
|
#endregion
|
|
|
|
#region [ EIS.B2 ]
|
|
logServer = new LogServer("EIS.B2");
|
|
logServer.DBConnectionString = $@"server=192.168.8.217;database=EIS;uid=EIS_Service;pwd=Yi^d!3dqpc%m;";
|
|
logServer.DBGetEquipments = sbEquipments.ToString();
|
|
logServer.DBGetModelDetails = sbModelDetails.ToString();
|
|
logServer.DBGetModelInfo = sbModelInfo.ToString();
|
|
logServer.NetworkAccount.Add("192.168.8.215", new Account("192.168.8.215", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.8.216", new Account("192.168.8.216", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.NetworkAccount.Add("192.168.8.217", new Account("192.168.8.217", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
|
logServer.FTPAddress = "192.168.8.217";
|
|
logServer.FTPPort = 21;
|
|
logServer.FTPUserID = "anonymous";
|
|
logServer.FTPPassword = "";
|
|
this.cboxServer.Items.Add(logServer);
|
|
#endregion
|
|
|
|
break;
|
|
case eServerType.AGV:
|
|
break;
|
|
}
|
|
}
|
|
|
|
public EisEquipment[] GetEquipments()
|
|
{
|
|
try
|
|
{
|
|
LogServer logServer = this.cboxServer.SelectedItem as LogServer;
|
|
if (logServer == null) return null;
|
|
this.LogServer = logServer;
|
|
|
|
this.Cursor = Cursors.WaitCursor;
|
|
DataTable dtEisEquipment = logServer.GetEquipments();
|
|
EisEquipment[] equipments = dtEisEquipment.ToClass<EisEquipment>();
|
|
|
|
// Get Equipment Information of the MES Database
|
|
DataTable dtMesEquipment = this.GetMesEquipment();
|
|
foreach (EisEquipment equipment in equipments)
|
|
{
|
|
equipment.DisplayNameOrder = GlobalVariable.Instance.FrmEqSelector_NameOrder;
|
|
equipment.Server = logServer;
|
|
equipment.Description = equipment.Description.Replace("EQP_NAME=", "");
|
|
|
|
#region [ Setting Equipment Information with MES ]
|
|
try
|
|
{
|
|
if (dtMesEquipment != null)
|
|
{
|
|
DataRow[] mesRows = dtMesEquipment.Select($"EQUIPMENTID='{equipment.EquipmentID}'");
|
|
equipment.MesRegistration = false;
|
|
if (mesRows.Length < 1) continue;
|
|
|
|
DataRow row = mesRows[0];
|
|
if (mesRows.Length > 0)
|
|
{
|
|
for (int i = 0; i < mesRows.Length; i++)
|
|
{
|
|
if (mesRows[i]["SITEID"].ToString() == "1130")
|
|
{
|
|
row = mesRows[i];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
equipment.Facility = row["FACILITYNAME"].ToString();
|
|
equipment.ProcessSegmentID = row["PROCESSSEGMENTID"].ToString();
|
|
equipment.ProcessSegmentName = row["PROCESSSEGMENTNAME"].ToString();
|
|
equipment.MesName = row["DESCRIPTION"].ToString();
|
|
equipment.OperationMode = row["OPERATIONMODE"].ToString();
|
|
equipment.ControlMode = row["CONTROLMODE"].ToString();
|
|
equipment.State = row["EQPSTATE"].ToString();
|
|
equipment.LastTrackInLotID = row["LASTTRACKINLOTID"].ToString();
|
|
equipment.LastTrackOutLotID = row["LASTTRACKOUTLOTID"].ToString();
|
|
equipment.Maker = row["MAKER"].ToString();
|
|
DateTime pmDateTime = DateTime.MinValue;
|
|
if (DateTime.TryParseExact(row["PLANDATE"].ToString(), "yyyyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out pmDateTime))
|
|
equipment.PMDate = pmDateTime;
|
|
equipment.MesRegistration = true;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex);
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
|
|
return equipments.OrderBy(x => x.OrderByKey).ThenBy(x => x.Line).ThenBy(x => x.ProcessSegmentID).ThenBy(x => x.MesName).ToArray();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex, true);
|
|
return null;
|
|
}
|
|
finally
|
|
{
|
|
this.Cursor = Cursors.Default;
|
|
}
|
|
}
|
|
|
|
private void SetEquipment(DataTableBase equipment)
|
|
{
|
|
try
|
|
{
|
|
if (equipment == null) return;
|
|
|
|
EisEquipment eqp = equipment as EisEquipment;
|
|
if (eqp != null)
|
|
{
|
|
if (eqp.Server == null) return;
|
|
foreach (LogServer server in this.cboxServer.Items)
|
|
{
|
|
if (server.Name == eqp.Server.Name)
|
|
{
|
|
this.cboxServer.SelectedItem = server;
|
|
foreach (GridViewRowInfo row in this.gridEquipments.Rows)
|
|
{
|
|
EisEquipment bindItem = row.DataBoundItem as EisEquipment;
|
|
if (bindItem == null) continue;
|
|
if (bindItem.EquipmentID == eqp.EquipmentID)
|
|
{
|
|
row.IsSelected = true;
|
|
row.IsCurrent = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex);
|
|
}
|
|
}
|
|
|
|
private void SetEquipment(string serverName, string equipmentID)
|
|
{
|
|
try
|
|
{
|
|
foreach (LogServer server in this.cboxServer.Items)
|
|
{
|
|
if (server.Name == serverName)
|
|
{
|
|
this.cboxServer.SelectedItem = server;
|
|
foreach (GridViewRowInfo row in this.gridEquipments.Rows)
|
|
{
|
|
EisEquipment bindItem = row.DataBoundItem as EisEquipment;
|
|
if (bindItem == null) continue;
|
|
if (bindItem.EquipmentID == equipmentID)
|
|
{
|
|
row.IsSelected = true;
|
|
row.IsCurrent = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex);
|
|
}
|
|
}
|
|
|
|
private void SetSelectedLogFiles(LogFile[] logFiles)
|
|
{
|
|
this.gridLogFiles.ClearSelection();
|
|
|
|
GridViewRowInfo current = null;
|
|
foreach (GridViewRowInfo row in this.gridLogFiles.Rows)
|
|
{
|
|
LogFile item = row.DataBoundItem as LogFile;
|
|
if (item == null) continue;
|
|
|
|
foreach (LogFile logFile in logFiles)
|
|
{
|
|
if (string.Compare(item.FileName, logFile.FileName, true) == 0)
|
|
{
|
|
if (current == null)
|
|
{
|
|
current = row;
|
|
row.IsCurrent = true;
|
|
}
|
|
row.IsSelected = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private object GetNetworkAccount(string logserverIP) //jhim 20250202
|
|
{
|
|
return ((LogServer)this.cboxServer.SelectedItem)?.NetworkAccount[logserverIP];
|
|
}
|
|
|
|
/// <summary>
|
|
/// DB에서 GEM 정보 수집
|
|
/// </summary>
|
|
private void GetGEMSetting()
|
|
{
|
|
try
|
|
{
|
|
LogServer logServer = this.cboxServer.SelectedItem as LogServer;
|
|
if (logServer == null) return;
|
|
if (this.Equipment == null) return;
|
|
|
|
this.Cursor = Cursors.WaitCursor;
|
|
DataSet ds = logServer.ExecuteQuery($"SELECT GEMObject FROM GEMParameter WHERE ModelID='{this.Equipment.ModelID}' AND GemSettingID='{this.Equipment.GemSettingID}'");
|
|
if (ds == null || ds.Tables.Count < 1 || ds.Tables[0].Rows.Count < 1) return;
|
|
|
|
byte[] byteObject = (byte[])ds.Tables[0].Rows[0][0];
|
|
EIS.Framework.Service.GEM.GEMSettings gem = byteObject.ToObject<EIS.Framework.Service.GEM.GEMSettings>();
|
|
|
|
this.SECSDefine = new SECSDefine(gem);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex, true);
|
|
}
|
|
finally
|
|
{
|
|
this.Cursor = Cursors.Default;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// MES DB에서 설비정보 수집
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private DataTable GetMesEquipment()
|
|
{
|
|
SqlConnection sqlConnection = null;
|
|
DataSet ds = null;
|
|
DataTable dt = null;
|
|
try
|
|
{
|
|
string connectionString = string.Empty;
|
|
connectionString = $@"server=192.168.8.232;database=ddmes;uid=DDB2MESAdmin;pwd=Yhqe4csJXJ4W5$%;";
|
|
|
|
StringBuilder query = new StringBuilder();
|
|
query.AppendLine($" SELECT A.SITEID, ");
|
|
query.AppendLine($" A.FACILITYID, ");
|
|
query.AppendLine($" D.FACILITYNAME, ");
|
|
query.AppendLine($" B.PROCESSSEGMENTID, ");
|
|
query.AppendLine($" B.PROCESSSEGMENTNAME, ");
|
|
query.AppendLine($" A.SUBCATEGORY, ");
|
|
query.AppendLine($" C.EQUIPMENTID AS MAINEQUIPMENTID, ");
|
|
query.AppendLine($" C.EQUIPMENTNAME AS MAINEQUIPMENTNAME, ");
|
|
query.AppendLine($" A.EQUIPMENTID, ");
|
|
query.AppendLine($" A.EQUIPMENTNAME, ");
|
|
query.AppendLine($" A.DESCRIPTION, ");
|
|
query.AppendLine($" A.OPERATIONMODE, ");
|
|
query.AppendLine($" A.CONTROLMODE, ");
|
|
query.AppendLine($" A.LASTTRACKINLOTID, ");
|
|
query.AppendLine($" A.LASTTRACKOUTLOTID, ");
|
|
query.AppendLine($" A.MAKER, ");
|
|
query.AppendLine($" A.EQPSTATE, ");
|
|
query.AppendLine($" A.LOCATION ");
|
|
query.AppendLine($" , E.PLANDATE ");
|
|
query.AppendLine($" FROM CIM_EQUIPMENT A (nolock) ");
|
|
query.AppendLine($" LEFT JOIN CIM_PROCESSSEGMENT B (nolock) ON A.PROCESSSEGMENTID = B.PROCESSSEGMENTID AND A.SITEID = B.SITEID ");
|
|
query.AppendLine($" LEFT JOIN CIM_EQUIPMENT C (nolock) ON A.PARENTID = C.EQUIPMENTID AND A.SITEID = C.SITEID ");
|
|
query.AppendLine($" LEFT JOIN CIM_FACILITY D (nolock) ON A.PHYSICALLOCATION = D.FACILITYID AND A.SITEID = D.SITEID ");
|
|
query.AppendLine($" LEFT JOIN (SELECT SITEID, EQUIPMENTID, MIN(PLANSTART) PLANDATE FROM DD_SEGMENTPMDETAIL (nolock) WHERE PLANSTART >= '{DateTime.Now.ToString("yyyyMMdd")}' GROUP BY SITEID, EQUIPMENTID) E ON A.EQUIPMENTID = E.EQUIPMENTID AND A.SITEID = E.SITEID ");
|
|
//query.AppendLine($" WHERE A.SITEID='1130' ");
|
|
|
|
sqlConnection = new SqlConnection();
|
|
sqlConnection.ConnectionString = connectionString;
|
|
sqlConnection.Open();
|
|
|
|
SqlCommand sqlCommand = new SqlCommand();
|
|
sqlCommand.Connection = sqlConnection;
|
|
sqlCommand.CommandType = CommandType.Text;
|
|
sqlCommand.CommandText = query.ToString();
|
|
|
|
ds = new DataSet();
|
|
SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCommand);
|
|
sqlAdapter.Fill(ds);
|
|
sqlConnection.Close();
|
|
|
|
if (ds != null && ds.Tables.Count > 0) dt = ds.Tables[0];
|
|
return dt;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XLogger.Instance.Fatal(ex);
|
|
return null;
|
|
}
|
|
finally
|
|
{
|
|
if (sqlConnection != null && sqlConnection.State != ConnectionState.Closed)
|
|
{
|
|
sqlConnection.Close();
|
|
sqlConnection.Dispose();
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// SMB Log Files
|
|
/// </summary>
|
|
/// <param name="fileItems"></param>
|
|
/// <returns></returns>
|
|
private LogFile[] GetLogFiles(FileInfo[] fileItems)
|
|
{
|
|
LogFile[] logFiles = fileItems
|
|
.Select(item => new LogFile
|
|
{
|
|
Account = this.Account,
|
|
FullName = item.FullName,
|
|
Length = item.Length,
|
|
CreationTime = item.CreationTime,
|
|
LastAccessTime = item.LastAccessTime,
|
|
LastWriteTime = item.LastWriteTime
|
|
})
|
|
.OrderByDescending(x => x.Name)
|
|
.ToArray();
|
|
|
|
return logFiles;
|
|
}
|
|
|
|
/// <summary>
|
|
/// FTPS Log Files
|
|
/// </summary>
|
|
/// <param name="fileItems"></param>
|
|
/// <returns></returns>
|
|
private LogFile[] GetLogFiles(FtpListItem[] fileItems)
|
|
{
|
|
LogFile[] logFiles = fileItems.Where(item => item.Type == FtpFileSystemObjectType.File)
|
|
.Select(item => new LogFile
|
|
{
|
|
Account = this.Account,
|
|
FullName = item.FullName,
|
|
Length = item.Size,
|
|
CreationTime = item.Created.ToLocalTime(),
|
|
LastAccessTime = item.Modified.ToLocalTime(),
|
|
LastWriteTime = item.Modified.ToLocalTime()
|
|
})
|
|
.OrderByDescending(x => x.Name)
|
|
.ToArray();
|
|
|
|
return logFiles;
|
|
}
|
|
|
|
/// <summary>
|
|
/// SFTP Log Files
|
|
/// </summary>
|
|
/// <param name="fileItems"></param>
|
|
/// <returns></returns>
|
|
private LogFile[] GetLogFiles(ISftpFile[] fileItems)
|
|
{
|
|
LogFile[] logFiles = fileItems.Where(item => !item.IsDirectory && item.Name != "." && item.Name != "..")
|
|
.Select(item => new LogFile
|
|
{
|
|
Account = this.Account,
|
|
FullName = item.FullName,
|
|
Length = item.Length,
|
|
CreationTime = item.LastAccessTime,
|
|
LastAccessTime = item.LastAccessTime,
|
|
LastWriteTime = item.LastWriteTime
|
|
})
|
|
.OrderByDescending(x => x.Name)
|
|
.ToArray();
|
|
|
|
return logFiles;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Fts Log Files jhlim 20250202
|
|
/// </summary>
|
|
/// <param name="fileItems"></param>
|
|
/// <returns></returns>
|
|
private LogFile[] GetFtpslogFiles(object fileItems)
|
|
{
|
|
LogFile[] logFiles = ((FtpListItem[])fileItems).Where(item => item.Type == FtpFileSystemObjectType.File)
|
|
.Select(item => new LogFile
|
|
{
|
|
Account = this.Account,
|
|
FullName = item.FullName,
|
|
Length = item.Size,
|
|
CreationTime = item.Modified,
|
|
LastAccessTime = item.Modified,
|
|
LastWriteTime = item.Modified
|
|
})
|
|
.OrderByDescending(x => x.Name)
|
|
.ToArray();
|
|
|
|
return logFiles;
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|