Compare commits
24 Commits
05390839fc
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f0114e7b3f | ||
|
|
395102ffea | ||
|
|
de709d7030 | ||
|
|
53e734f5e2 | ||
|
|
06499030a6 | ||
| 4b73deabf3 | |||
| 68d51f64d0 | |||
|
|
15a0127778 | ||
| e7a8c36412 | |||
|
|
0507461566 | ||
| d9d9d7b71f | |||
| 0ddef9106b | |||
| 7b11a3e1b1 | |||
|
|
1d77f7a2cd | ||
| fe76ce56d4 | |||
|
|
0c12d15092 | ||
| f3d11daf94 | |||
| fda27adace | |||
| f57a9ae1ff | |||
| 1ee9e948d9 | |||
| 63897c889e | |||
| 29a0c365c5 | |||
| 1ffb8e0785 | |||
| 010aa6aa49 |
@@ -6,7 +6,7 @@
|
||||
<appSettings>
|
||||
<add key="ClientSettingsProvider.ServiceUri" value=""/>
|
||||
<add key="BULK_VIEWER" value="ViewList.xml" />
|
||||
</appSettings>
|
||||
</appSettings>
|
||||
<system.web>
|
||||
<membership defaultProvider="ClientAuthenticationMembershipProvider">
|
||||
<providers>
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<TargetFrameworkProfile />
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
<PublishUrl>ftp://pms.e1soft.co.kr/eqview/Provider/</PublishUrl>
|
||||
<PublishUrl>ftp://192.168.100.11/eqview/Provider/</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Web</InstallFrom>
|
||||
<UpdateEnabled>true</UpdateEnabled>
|
||||
@@ -35,7 +35,7 @@
|
||||
<WebPage>index.htm</WebPage>
|
||||
<TrustUrlParameters>true</TrustUrlParameters>
|
||||
<ApplicationRevision>0</ApplicationRevision>
|
||||
<ApplicationVersion>2025.03.14.0</ApplicationVersion>
|
||||
<ApplicationVersion>2025.05.01.0</ApplicationVersion>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
||||
<PublishWizardCompleted>true</PublishWizardCompleted>
|
||||
@@ -632,6 +632,16 @@
|
||||
<IncludeHash>True</IncludeHash>
|
||||
<FileType>File</FileType>
|
||||
</PublishFile>
|
||||
<PublishFile Include="ViewList.xml">
|
||||
<Visible>False</Visible>
|
||||
<Group>
|
||||
</Group>
|
||||
<TargetPath>
|
||||
</TargetPath>
|
||||
<PublishState>Include</PublishState>
|
||||
<IncludeHash>True</IncludeHash>
|
||||
<FileType>File</FileType>
|
||||
</PublishFile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Analyzer Include="..\packages\AWSSDK.SecurityToken.3.7.100.14\analyzers\dotnet\cs\AWSSDK.SecurityToken.CodeAnalysis.dll" />
|
||||
|
||||
@@ -7,6 +7,6 @@ using System.Threading.Tasks;
|
||||
namespace DDUtilityApp
|
||||
{
|
||||
|
||||
public enum AccessType { SMB, FTP, FTPS, SFTP };
|
||||
public enum AccessType { SMB, FTP, FTPS, SFTP, LOCAL };
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
using JWH;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using Telerik.WinControls.UI;
|
||||
using static DDUtilityApp.GlobalVariable;
|
||||
|
||||
namespace DDUtilityApp
|
||||
{
|
||||
@@ -11,7 +14,7 @@ namespace DDUtilityApp
|
||||
|
||||
public object SelectedObject { get; set; } = null;
|
||||
|
||||
public Dictionary<string, object> Buttons { get; set; } = new Dictionary<string, object>();
|
||||
public List<DynamicControl> Buttons { get; set; } = new List<DynamicControl>();
|
||||
|
||||
public FrmMain()
|
||||
{
|
||||
@@ -21,7 +24,7 @@ namespace DDUtilityApp
|
||||
this.SetEventHandler();
|
||||
}
|
||||
|
||||
public FrmMain(Dictionary<string, object> args) : this()
|
||||
public FrmMain(List<DynamicControl> args) : this()
|
||||
{
|
||||
this.Buttons = args;
|
||||
this.SetButtons();
|
||||
@@ -48,21 +51,23 @@ namespace DDUtilityApp
|
||||
{
|
||||
try
|
||||
{
|
||||
eUserLevel userLevel = GlobalVariable.Instance.UserLevel;
|
||||
|
||||
int btnWidth = 200;
|
||||
int btnHeight = 32;
|
||||
int tabIndex = 0;
|
||||
int tabIndex = 10;
|
||||
|
||||
List<Button> lstControls = new List<Button>();
|
||||
foreach(string name in this.Buttons.Keys)
|
||||
foreach(DynamicControl obj in this.Buttons)
|
||||
{
|
||||
object obj = this.Buttons[name];
|
||||
|
||||
Button button = new Button();
|
||||
button.Text = name;
|
||||
button.Text = obj.Name;
|
||||
button.Size = new Size(btnWidth, btnHeight);
|
||||
button.Dock = DockStyle.Top;
|
||||
button.TabIndex = tabIndex++;
|
||||
button.Tag = obj;
|
||||
button.Tag = obj.Value;
|
||||
button.Visible = obj.Visible;
|
||||
if (obj.Visible == false && userLevel > eUserLevel.Normal) button.Visible = true;
|
||||
button.Click += Button_Click;
|
||||
lstControls.Add(button);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using JWH;
|
||||
using log4net.Core;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Configuration;
|
||||
@@ -31,7 +32,7 @@ namespace DDUtilityApp
|
||||
/// <summary>
|
||||
/// 로그파일 다운로드 경로 jhlim 20250202
|
||||
/// </summary>
|
||||
public string MesDownloadPath { get; set; }
|
||||
public string DownloadPathServerLog { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Workflow 다운로드 경로
|
||||
@@ -56,6 +57,8 @@ namespace DDUtilityApp
|
||||
|
||||
public Size FormSize { get; set; } = new Size(1300, 750);
|
||||
|
||||
public eUserLevel UserLevel { get; set; } = eUserLevel.None;
|
||||
|
||||
#region [ LogParser ]
|
||||
|
||||
public string EisParser_GridHeader { get; set; } = string.Empty;
|
||||
@@ -117,7 +120,7 @@ namespace DDUtilityApp
|
||||
this.DefaultPath = defaultPath.Replace("%MyDocuments%", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
|
||||
this.DownloadPath = Path.Combine(this.DefaultPath, "Download");
|
||||
this.WorkflowPath = Path.Combine(this.DefaultPath, "Workflow");
|
||||
this.MesDownloadPath = Path.Combine(this.DefaultPath, "DownloadMES");
|
||||
this.DownloadPathServerLog = Path.Combine(this.DefaultPath, "DownloadServer");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -218,6 +221,14 @@ namespace DDUtilityApp
|
||||
}
|
||||
}
|
||||
|
||||
public enum eUserLevel
|
||||
{
|
||||
None = 0,
|
||||
Normal = 1,
|
||||
Admin = 16,
|
||||
SupperAdmin = 128
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -58,13 +58,13 @@ namespace DDUtilityApp.LOGPARSER.DATA
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = string.Empty;
|
||||
foreach(string name in this.DisplayNameOrder.Split(';'))
|
||||
{
|
||||
value = this.PropertyGet(name);
|
||||
if (!string.IsNullOrEmpty(value)) break;
|
||||
}
|
||||
return value;
|
||||
//string value = string.Empty;
|
||||
//foreach(string name in this.DisplayNameOrder.Split(';'))
|
||||
//{
|
||||
// value = this.PropertyGet(name).ToString();
|
||||
// if (!string.IsNullOrEmpty(value)) break;
|
||||
//}
|
||||
return this.MesName;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ 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;
|
||||
@@ -55,6 +56,8 @@ namespace DDUtilityApp.LOGPARSER
|
||||
|
||||
public SECSDefine SECSDefine { get; set; } = null;
|
||||
|
||||
private int InitializeStatus { get; set; } = 0;
|
||||
|
||||
#endregion
|
||||
|
||||
#region [ FrmEqSelector ] ---------------------------------------------
|
||||
@@ -82,17 +85,11 @@ namespace DDUtilityApp.LOGPARSER
|
||||
this.chkUseSMB.Visible = false;
|
||||
this.tabControl1.SelectedIndex = 0;
|
||||
this.tboxModelDescription.Font = font;
|
||||
|
||||
this.GridEquipments_Setting();
|
||||
this.GridLogFiles_Setting(this.gridLogFiles); //jhlim 20250202
|
||||
this.GridLogFiles_Setting(this.gridHsms); //jhlim 20250202
|
||||
this.GridLogFiles_Setting(this.gridWorkflow); //jhlim 20250202
|
||||
this.GridModelDetail_Setting();
|
||||
}
|
||||
|
||||
protected void SetEventHandler()
|
||||
{
|
||||
this.Load += FrmEquipments_Load;
|
||||
this.Shown += this.FrmEqSelector_Shown;
|
||||
this.FormClosing += FrmEqSelector_FormClosing;
|
||||
this.FormClosed += this.FrmEqSelector_FormClosed;
|
||||
this.Disposed += this.FrmEqSelector_Disposed;
|
||||
@@ -113,12 +110,44 @@ namespace DDUtilityApp.LOGPARSER
|
||||
this.gridLogFiles.CellDoubleClick += GridLogFiles_CellDoubleClick;
|
||||
this.gridLogFiles.KeyDown += GridLogFiles_KeyDown;
|
||||
|
||||
//jhlim 20250202 start
|
||||
this.gridWorkflow.CellDoubleClick += Grid_CellDoubleClick;
|
||||
this.gridWorkflow.KeyDown += Grid_KeyDown;
|
||||
this.gridHsms.CellDoubleClick += Grid_CellDoubleClick;
|
||||
this.gridHsms.KeyDown += Grid_KeyDown;
|
||||
//jhlim 20250202 end
|
||||
}
|
||||
|
||||
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)
|
||||
@@ -157,14 +186,6 @@ namespace DDUtilityApp.LOGPARSER
|
||||
return base.ProcessCmdKey(ref msg, keyData);
|
||||
}
|
||||
|
||||
private void FrmEquipments_Load(object sender, EventArgs e)
|
||||
{
|
||||
this.SetLogServer();
|
||||
if (this.Equipment != null) this.SetEquipment(this.Equipment);
|
||||
else this.SetEquipment(this.ServerName, this.Equipment?.EquipmentID);
|
||||
this.SetSelectedLogFiles(this.SelectedLogFiles);
|
||||
}
|
||||
|
||||
private void FrmEqSelector_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
}
|
||||
@@ -356,7 +377,7 @@ namespace DDUtilityApp.LOGPARSER
|
||||
{
|
||||
GridViewEx grid = this.gridEquipments;
|
||||
grid.TableElement.RowHeight = 20;
|
||||
grid.MultiSelect = true;
|
||||
grid.MultiSelect = false;
|
||||
|
||||
Dictionary<string, string> dicColumnText = new Dictionary<string, string>();
|
||||
dicColumnText.Add("Facility", "");
|
||||
@@ -424,12 +445,13 @@ namespace DDUtilityApp.LOGPARSER
|
||||
{
|
||||
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;
|
||||
//if (this.tabControl1.TabPages.Contains(this.tabHSMS)) this.tabControl1.TabPages.Remove(this.tabHSMS);
|
||||
|
||||
EisEquipment equipment = this.gridEquipments.SelectedRows[0].DataBoundItem as EisEquipment;
|
||||
if (equipment == null) return;
|
||||
@@ -570,165 +592,6 @@ namespace DDUtilityApp.LOGPARSER
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// [CheckPoint] 선택된 설비의 로그파일 목록을 표시한다.
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void xGridEquipments_SelectionChanged(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (this.gridEquipments.SelectedRows.Count < 1) return;
|
||||
this.gridLogFiles.DataSource = null;
|
||||
this.gridModelDetail.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)) //jhlim 20250202 jj
|
||||
{
|
||||
// Checking Local IP-Address
|
||||
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() == equipment.LogServerIP)
|
||||
{
|
||||
path = $@"{equipment.LogPath}\{equipment.EquipmentID}";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// SMB (Server Message Block)
|
||||
//if (string.IsNullOrEmpty(path) && this.chkUseSMB.Checked)
|
||||
//{
|
||||
// Account account = logServer.NetworkAccount[equipment.LogServerIP];
|
||||
// int result = ExtensionAPI.ConnectRemoteServer(account.IPAddress, account.UserID, account.Password);
|
||||
// if (result != 0 && result != 1219) { MessageBox.Show($@"네트워크 접근에 실패하였습니다. (Code:{result})"); return; }
|
||||
// path = logServer.GetLogPath(equipment.LogServerIP, equipment.EquipmentID);
|
||||
//}
|
||||
|
||||
if (string.IsNullOrEmpty(path) && this.chkUseSMB.Checked) //jhlim 20250202
|
||||
{
|
||||
Account account = logServer.NetworkAccount[equipment.LogServerIP];
|
||||
object rtnObj = null;
|
||||
|
||||
// StpClientWrap 사용
|
||||
//StpClientWrap.Initialize(equipment?.LogServerIP, "test", "daeduck!1");
|
||||
//StpClientWrap.Connect();
|
||||
var svrInfo = (DDUtilityApp.DATA.Account)GetNetworkAccount(equipment?.LogServerIP);
|
||||
FtpsClient.Initialize(equipment?.LogServerIP, svrInfo.UserID, svrInfo.Password);
|
||||
FtpsClient.Connect();
|
||||
|
||||
var remotePath = $"/{svrInfo.DefaultPath}/{equipment.EquipmentID}";
|
||||
//var remotePath = $"{equipment.EquipmentID}";
|
||||
// SFTP 파일 목록 가져오기
|
||||
//rtnObj = StpClientWrap.GetSftpList(remotePath);
|
||||
rtnObj = FtpsClient.GetFtpsList(remotePath);
|
||||
|
||||
if (rtnObj == null) return;
|
||||
//StpClientWrap.IsDirectory( "/302304/THiRA_SECSGEM/HSMS")
|
||||
//var hsmsEnabled = (StpClientWrap.IsDirExists( $"{remotePath}/THiRA_SECSGEM/HSMS"));
|
||||
var hsmsEnabled = (FtpsClient.IsDirExists($"{remotePath}/THiRA_SECSGEM/HSMS"));
|
||||
|
||||
if (hsmsEnabled == false)
|
||||
{
|
||||
if (tabControl1.TabPages.Contains(tabHSMS))
|
||||
{
|
||||
tabControl1.TabPages.Remove(tabHSMS);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!tabControl1.TabPages.Contains(tabHSMS))
|
||||
{
|
||||
tabControl1.TabPages.Add(tabHSMS);
|
||||
}
|
||||
}
|
||||
|
||||
this.gridLogFiles.AutoBinding(GetFtpslogFiles(rtnObj));
|
||||
|
||||
// 연결 종료 //jhlim 20250202
|
||||
//StpClientWrap.Disconnect();
|
||||
FtpsClient.Disconnect();
|
||||
}
|
||||
else if (string.IsNullOrEmpty(path) == false)
|
||||
{
|
||||
// 로그 파일 목록
|
||||
DirectoryInfo directory = new DirectoryInfo(path);
|
||||
if (directory.Exists == false)
|
||||
{
|
||||
MessageBox.Show($@"폴더가 존재하지 않습니다" + Environment.NewLine + Environment.NewLine + $@"Path: {path}");
|
||||
return;
|
||||
}
|
||||
LogFile[] logFiles = directory.GetFiles().ToClass<LogFile>().OrderByDescending(x => x.Name).ToArray();
|
||||
this.gridLogFiles.AutoBinding(logFiles);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
path = $@"{equipment.LogPath}\{equipment.EquipmentID}";
|
||||
}
|
||||
this.rstatus1.Text = path;
|
||||
if (string.IsNullOrEmpty(path)) return;
|
||||
#endregion
|
||||
|
||||
//// 로그 파일 목록
|
||||
//DirectoryInfo directory = new DirectoryInfo(path);
|
||||
//if (directory.Exists == false)
|
||||
//{
|
||||
// MessageBox.Show($@"폴더가 존재하지 않습니다" + Environment.NewLine + Environment.NewLine + $@"Path: {path}");
|
||||
// return;
|
||||
//}
|
||||
//LogFile[] logFiles = directory.GetFiles().ToClass<LogFile>().OrderByDescending(x => x.Name).ToArray();
|
||||
//this.gridLogFiles.AutoBinding(logFiles);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
XLogger.Instance.Fatal(ex, true);
|
||||
}
|
||||
finally
|
||||
{
|
||||
this.Cursor = Cursors.Default;
|
||||
}
|
||||
}
|
||||
|
||||
private void GridEquipments_CellDoubleClick(object sender, GridViewCellEventArgs e)
|
||||
{
|
||||
try
|
||||
@@ -1096,7 +959,6 @@ namespace DDUtilityApp.LOGPARSER
|
||||
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));
|
||||
@@ -1110,7 +972,6 @@ namespace DDUtilityApp.LOGPARSER
|
||||
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));
|
||||
@@ -1125,6 +986,10 @@ namespace DDUtilityApp.LOGPARSER
|
||||
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));
|
||||
|
||||
// B4, MTV
|
||||
logServer.NetworkAccount.Add("192.168.163.232", new Account("192.168.163.232", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
||||
logServer.NetworkAccount.Add("192.168.173.232", new Account("192.168.173.232", "loguser", "Daeduck!1", @"EISLog", AccessType.FTPS));
|
||||
|
||||
logServer.FTPAddress = "192.168.7.208";
|
||||
logServer.FTPPort = 7000;
|
||||
logServer.FTPUserID = "anonymous";
|
||||
@@ -1136,10 +1001,11 @@ namespace DDUtilityApp.LOGPARSER
|
||||
|
||||
#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.DBConnectionString = $@"server=192.168.8.214;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));
|
||||
@@ -1469,9 +1335,9 @@ namespace DDUtilityApp.LOGPARSER
|
||||
Account = this.Account,
|
||||
FullName = item.FullName,
|
||||
Length = item.Size,
|
||||
CreationTime = item.Modified,
|
||||
LastAccessTime = item.Modified,
|
||||
LastWriteTime = item.Modified
|
||||
CreationTime = item.Created.ToLocalTime(),
|
||||
LastAccessTime = item.Modified.ToLocalTime(),
|
||||
LastWriteTime = item.Modified.ToLocalTime()
|
||||
})
|
||||
.OrderByDescending(x => x.Name)
|
||||
.ToArray();
|
||||
|
||||
@@ -34,6 +34,8 @@ namespace DDUtilityApp.LOGPARSER
|
||||
|
||||
private bool IsLogFolderOpen { get; set; } = false;
|
||||
|
||||
private XLogger Logger { get; set; } = null;
|
||||
|
||||
#endregion
|
||||
|
||||
#region [ Properties ] ------------------------------------------------
|
||||
@@ -75,6 +77,8 @@ namespace DDUtilityApp.LOGPARSER
|
||||
public FrmLogParser()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
XLogger.Instance = new XLogger("LogViewer");
|
||||
this.SetLayout();
|
||||
this.SetEventHandler();
|
||||
|
||||
@@ -300,7 +304,10 @@ namespace DDUtilityApp.LOGPARSER
|
||||
{
|
||||
ListViewItem lviewItem = this.lviewFiles.Items.Add(Path.GetFileName(filePath));
|
||||
lviewItem.Checked = true;
|
||||
lviewItem.Tag = filePath;
|
||||
LogFile logFile = new LogFile(filePath);
|
||||
logFile.Account = new Account();
|
||||
logFile.Account.Access = AccessType.LOCAL;
|
||||
lviewItem.Tag = logFile;
|
||||
}
|
||||
|
||||
this.tboxEISInfo01.Clear();
|
||||
@@ -791,7 +798,7 @@ namespace DDUtilityApp.LOGPARSER
|
||||
|
||||
string propertyName = values[0].Trim();
|
||||
string valueB = values[1].Trim().Replace("'", "");
|
||||
string valueA = data.PropertyGet(propertyName);
|
||||
string valueA = data.PropertyGet(propertyName).ToString();
|
||||
if (valueA != valueB) flag = false;
|
||||
}
|
||||
|
||||
@@ -1311,6 +1318,7 @@ namespace DDUtilityApp.LOGPARSER
|
||||
XLogger.Instance.Info(lviewItem.Text);
|
||||
|
||||
LogFile logFile = lviewItem.Tag as LogFile;
|
||||
if (logFile == null) continue;
|
||||
switch(logFile.Account.Access)
|
||||
{
|
||||
case AccessType.SMB:
|
||||
@@ -1361,6 +1369,15 @@ namespace DDUtilityApp.LOGPARSER
|
||||
break;
|
||||
case AccessType.FTP:
|
||||
break;
|
||||
case AccessType.LOCAL:
|
||||
{
|
||||
destPath = Path.Combine(GlobalVariable.Instance.DownloadPath, "Local");
|
||||
if (Directory.Exists(destPath) == false) Directory.CreateDirectory(destPath);
|
||||
logFile.DestFullName = Path.Combine(destPath, logFile.FileName);
|
||||
|
||||
System.IO.File.Copy(logFile.FullName, logFile.DestFullName, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
lstFileName.Add(logFile.DestFullName);
|
||||
@@ -1377,7 +1394,7 @@ namespace DDUtilityApp.LOGPARSER
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
XLogger.Instance.Fatal(ex);
|
||||
XLogger.Instance.Fatal(ex, true);
|
||||
return this.StandardCollection;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -566,7 +566,7 @@ namespace DDUtilityApp.LOGPARSER
|
||||
|
||||
string propertyName = values[0].Trim();
|
||||
string valueB = values[1].Trim().Replace("'", "");
|
||||
string valueA = data.PropertyGet(propertyName);
|
||||
string valueA = data.PropertyGet(propertyName).ToString();
|
||||
if (valueA != valueB) flag = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
@@ -74,7 +75,7 @@ namespace DDUtilityApp.LOGPARSER.PARSER
|
||||
}
|
||||
catch (Exception ex01)
|
||||
{
|
||||
XLogger.Instance.Fatal(ex01);
|
||||
XLogger.Instance.Fatal(ex01, true);
|
||||
}
|
||||
|
||||
if (reader != null) reader.Close();
|
||||
@@ -98,6 +99,7 @@ namespace DDUtilityApp.LOGPARSER.PARSER
|
||||
Parser parser = null;
|
||||
try
|
||||
{
|
||||
// 0.LogLevel 1.DateTime 2.Server
|
||||
if (string.IsNullOrWhiteSpace(strLine)) return parser;
|
||||
if (strLine.Length < this.LogDTime.Length) return parser;
|
||||
string[] strValues = this.GetHeaderValues(strLine);
|
||||
@@ -131,6 +133,10 @@ namespace DDUtilityApp.LOGPARSER.PARSER
|
||||
{
|
||||
parser = this.MES_Parser;
|
||||
}
|
||||
else if (strValues[2].Trim() == "TRACE")
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else if (strValues[2].Trim() == "ADD" || strValues[1].Trim() == "DISPOSE")
|
||||
{
|
||||
parser = this.TID_Parser;
|
||||
@@ -216,7 +222,7 @@ namespace DDUtilityApp.LOGPARSER.PARSER
|
||||
try
|
||||
{
|
||||
MemoryStream stream = new MemoryStream(text.ConvertBytes());
|
||||
StreamReader reader = new StreamReader(stream);
|
||||
StreamReader reader = new StreamReader(stream, Encoding.Default);
|
||||
|
||||
SECSItem parent = null;
|
||||
SECSItem item = null;
|
||||
@@ -378,8 +384,13 @@ namespace DDUtilityApp.LOGPARSER.PARSER
|
||||
|
||||
dlg = new FrmEqSelector();
|
||||
dlg.Owner = sender;
|
||||
dlg.Size = new System.Drawing.Size(sender.Width - 10, sender.Height - 60);
|
||||
dlg.StartPosition = FormStartPosition.CenterParent;
|
||||
dlg.StartPosition = FormStartPosition.Manual;
|
||||
int nWidth = sender.Width - 10;
|
||||
int nHeight = sender.Height - 48;
|
||||
int nLeft = sender.Left + ((sender.Width - nWidth) / 2);
|
||||
int nTop = Math.Max(0, sender.Top) + ((sender.Height - nHeight)) - 10;
|
||||
dlg.Size = new System.Drawing.Size(nWidth, nHeight);
|
||||
dlg.Location = new System.Drawing.Point(nLeft, nTop);
|
||||
dlg.ServerName = this.ServerName;
|
||||
dlg.Equipment = sender.Equipment == null ? new EisEquipment() { EquipmentID = this.EquipmentID, Server = new LogServer(this.ServerName)} : sender.Equipment;
|
||||
dlg.SelectedLogFiles = lstLogFile.ToArray();
|
||||
@@ -598,11 +609,13 @@ namespace DDUtilityApp.LOGPARSER.PARSER
|
||||
{
|
||||
if (this.SECSDefine != null) this.SECSDefine.SetInformation(rootSECS);
|
||||
this.LogString_Append(rootSECS.ToFullString());
|
||||
string ceid = string.Empty;
|
||||
|
||||
// CEID
|
||||
secsItem = rootSECS.GetItemByName("CEID").FirstOrDefault();
|
||||
if (secsItem == null && rootSECS.ChildItems.Count == 3) secsItem = rootSECS[1];
|
||||
standardData.Value = $"CEID: {secsItem.Value}" + (string.IsNullOrEmpty(secsItem.Description) ? "" : $" {secsItem.Description}");
|
||||
ceid = secsItem.Value;
|
||||
|
||||
// LOTID
|
||||
secsItems = rootSECS.GetItemByName("LOT_ID", "LOTID", "LotID", "LEFT_LOTID", "RIGHT_LOTID");
|
||||
@@ -664,6 +677,15 @@ namespace DDUtilityApp.LOGPARSER.PARSER
|
||||
standardData.ModuleID += item.Value;
|
||||
}
|
||||
|
||||
// 308:ModuleIn, 309:ModuleOut 'Name' 항목을 추가한다.
|
||||
if (new string[] { "308", "309" }.Contains(ceid))
|
||||
secsItems = rootSECS.GetItemByName("NAME");
|
||||
foreach (SECSItem item in secsItems)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(standardData.ModuleID)) standardData.HostPanelID += " ";
|
||||
standardData.ModuleID += item.Value;
|
||||
}
|
||||
|
||||
this.SendStandardData.Add(standardData.SystemByte, standardData);
|
||||
}
|
||||
|
||||
|
||||
49
DDUtilityApp/MESDOWNLOADER/FrmServerLog.Designer.cs
generated
49
DDUtilityApp/MESDOWNLOADER/FrmServerLog.Designer.cs
generated
@@ -28,7 +28,7 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition4 = new Telerik.WinControls.UI.TableViewDefinition();
|
||||
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition1 = 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();
|
||||
@@ -43,6 +43,7 @@
|
||||
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
|
||||
this.treeFolder = new System.Windows.Forms.TreeView();
|
||||
this.gridFiles = new JWH.CONTROL.GridViewEx();
|
||||
this.chkMerge = new System.Windows.Forms.CheckBox();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
||||
this.splitContainer1.Panel1.SuspendLayout();
|
||||
this.splitContainer1.Panel2.SuspendLayout();
|
||||
@@ -73,7 +74,7 @@
|
||||
// splitContainer1.Panel2
|
||||
//
|
||||
this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);
|
||||
this.splitContainer1.Size = new System.Drawing.Size(794, 569);
|
||||
this.splitContainer1.Size = new System.Drawing.Size(987, 569);
|
||||
this.splitContainer1.SplitterDistance = 94;
|
||||
this.splitContainer1.TabIndex = 0;
|
||||
//
|
||||
@@ -84,21 +85,22 @@
|
||||
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.Size = new System.Drawing.Size(987, 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.Location = new System.Drawing.Point(825, 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.Size = new System.Drawing.Size(162, 94);
|
||||
this.pnlAPList.TabIndex = 1;
|
||||
//
|
||||
// pnlCommand
|
||||
//
|
||||
this.pnlCommand.Controls.Add(this.chkMerge);
|
||||
this.pnlCommand.Controls.Add(this.btnDownPathOpen);
|
||||
this.pnlCommand.Controls.Add(this.btnDownPathChange);
|
||||
this.pnlCommand.Controls.Add(this.btnRefresh);
|
||||
@@ -109,13 +111,13 @@
|
||||
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.Size = new System.Drawing.Size(825, 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.Location = new System.Drawing.Point(637, 63);
|
||||
this.btnDownPathOpen.Name = "btnDownPathOpen";
|
||||
this.btnDownPathOpen.Size = new System.Drawing.Size(90, 23);
|
||||
this.btnDownPathOpen.TabIndex = 6;
|
||||
@@ -125,7 +127,7 @@
|
||||
// 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.Location = new System.Drawing.Point(637, 38);
|
||||
this.btnDownPathChange.Name = "btnDownPathChange";
|
||||
this.btnDownPathChange.Size = new System.Drawing.Size(90, 23);
|
||||
this.btnDownPathChange.TabIndex = 5;
|
||||
@@ -135,7 +137,7 @@
|
||||
// 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.Location = new System.Drawing.Point(637, 11);
|
||||
this.btnRefresh.Name = "btnRefresh";
|
||||
this.btnRefresh.Size = new System.Drawing.Size(90, 23);
|
||||
this.btnRefresh.TabIndex = 4;
|
||||
@@ -152,7 +154,7 @@
|
||||
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.Size = new System.Drawing.Size(495, 47);
|
||||
this.tboxDownPath.TabIndex = 3;
|
||||
//
|
||||
// label2
|
||||
@@ -171,7 +173,7 @@
|
||||
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.Size = new System.Drawing.Size(495, 20);
|
||||
this.cboxServer.TabIndex = 1;
|
||||
//
|
||||
// label1
|
||||
@@ -196,8 +198,8 @@
|
||||
// splitContainer2.Panel2
|
||||
//
|
||||
this.splitContainer2.Panel2.Controls.Add(this.gridFiles);
|
||||
this.splitContainer2.Size = new System.Drawing.Size(794, 471);
|
||||
this.splitContainer2.SplitterDistance = 264;
|
||||
this.splitContainer2.Size = new System.Drawing.Size(987, 471);
|
||||
this.splitContainer2.SplitterDistance = 328;
|
||||
this.splitContainer2.TabIndex = 0;
|
||||
//
|
||||
// treeFolder
|
||||
@@ -205,7 +207,7 @@
|
||||
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.Size = new System.Drawing.Size(328, 471);
|
||||
this.treeFolder.TabIndex = 0;
|
||||
//
|
||||
// gridFiles
|
||||
@@ -217,20 +219,30 @@
|
||||
//
|
||||
//
|
||||
//
|
||||
this.gridFiles.MasterTemplate.ViewDefinition = tableViewDefinition4;
|
||||
this.gridFiles.Name = "gridViewEx1";
|
||||
this.gridFiles.MasterTemplate.ViewDefinition = tableViewDefinition1;
|
||||
this.gridFiles.Name = "gridFiles";
|
||||
//
|
||||
//
|
||||
//
|
||||
this.gridFiles.RootElement.ControlBounds = new System.Drawing.Rectangle(0, 0, 240, 150);
|
||||
this.gridFiles.Size = new System.Drawing.Size(526, 471);
|
||||
this.gridFiles.Size = new System.Drawing.Size(655, 471);
|
||||
this.gridFiles.TabIndex = 0;
|
||||
//
|
||||
// chkMerge
|
||||
//
|
||||
this.chkMerge.AutoSize = true;
|
||||
this.chkMerge.Location = new System.Drawing.Point(734, 15);
|
||||
this.chkMerge.Name = "chkMerge";
|
||||
this.chkMerge.Size = new System.Drawing.Size(60, 16);
|
||||
this.chkMerge.TabIndex = 7;
|
||||
this.chkMerge.Text = "Merge";
|
||||
this.chkMerge.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// 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.ClientSize = new System.Drawing.Size(993, 575);
|
||||
this.Controls.Add(this.splitContainer1);
|
||||
this.Name = "FrmServerLog";
|
||||
this.Padding = new System.Windows.Forms.Padding(3);
|
||||
@@ -268,5 +280,6 @@
|
||||
private System.Windows.Forms.Button btnRefresh;
|
||||
private System.Windows.Forms.TreeView treeFolder;
|
||||
private JWH.CONTROL.GridViewEx gridFiles;
|
||||
private System.Windows.Forms.CheckBox chkMerge;
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,16 @@
|
||||
using DDUtilityApp.LOGPARSER.DATA;
|
||||
using JWH;
|
||||
using JWH.NETWORK;
|
||||
using Org.BouncyCastle.Tls.Crypto;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Forms.DataVisualization.Charting;
|
||||
using Telerik.WinControls.Drawing;
|
||||
using Telerik.WinControls.UI;
|
||||
|
||||
namespace DDUtilityApp.MESDOWNLOADER
|
||||
@@ -40,14 +34,19 @@ namespace DDUtilityApp.MESDOWNLOADER
|
||||
{
|
||||
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.MesDownloadPath;
|
||||
|
||||
this.treeFolder.Font = new Font("돋움체", 10.0F);
|
||||
this.tboxDownPath.Text = GlobalVariable.Instance.DownloadPathServerLog;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -87,7 +86,6 @@ namespace DDUtilityApp.MESDOWNLOADER
|
||||
try
|
||||
{
|
||||
this.GridFiles_Setting();
|
||||
Color[] backColors = new Color[] { Color.FromArgb(0, 255, 255, 255), Color.FromArgb(255, 255, 255, 220), Color.FromArgb(255, 255, 220, 255), Color.FromArgb(255, 220, 255, 255) };
|
||||
if (this.DSSetting == null || this.DSSetting.Tables.Contains("Item") == false) return;
|
||||
|
||||
int value = (int)this.cboxServer.SelectedValue;
|
||||
@@ -112,20 +110,18 @@ namespace DDUtilityApp.MESDOWNLOADER
|
||||
int index = 0;
|
||||
foreach (var item in query)
|
||||
{
|
||||
string[] splitIP = item.url.Split('.');
|
||||
CheckBox chk = new CheckBox()
|
||||
{
|
||||
Text = $"{item.nameap} ({item.url})",
|
||||
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,
|
||||
BackColor = backColors[index % 4]
|
||||
};
|
||||
index++;
|
||||
this.pnlAPList.Controls.Add(chk);
|
||||
|
||||
ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Marking", $"nameap='{item.nameap}'", true);
|
||||
formatting.RowBackColor = chk.BackColor;
|
||||
this.gridFiles.Columns["nameap"].ConditionalFormattingObjectList.Add(formatting);
|
||||
}
|
||||
|
||||
this.treeFolder.Nodes.Clear();
|
||||
@@ -168,33 +164,40 @@ namespace DDUtilityApp.MESDOWNLOADER
|
||||
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)
|
||||
try
|
||||
{
|
||||
DataRow rowFile = this.DTFileInfo.NewRow();
|
||||
rowFile["Check"] = false;
|
||||
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);
|
||||
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.ToLocalTime();
|
||||
rowFile["Type"] = file.Type;
|
||||
rowFile["url"] = url;
|
||||
rowFile["dir"] = dir;
|
||||
rowFile["subpath"] = subPath;
|
||||
rowFile["userId"] = userId;
|
||||
rowFile["password"] = password;
|
||||
this.DTFileInfo.Rows.Add(rowFile);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
chk.Checked = false;
|
||||
chk.Enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -213,7 +216,7 @@ namespace DDUtilityApp.MESDOWNLOADER
|
||||
}
|
||||
currentNode.Expand();
|
||||
|
||||
this.DTFileInfo.DefaultView.RowFilter = "";
|
||||
this.DTFileInfo.DefaultView.RowFilter = "Type='File'";
|
||||
this.DTFileInfo.DefaultView.Sort = "Modified DESC";
|
||||
this.gridFiles.DataSource = this.DTFileInfo;
|
||||
this.gridFiles.BestFitColumns();
|
||||
@@ -247,7 +250,7 @@ namespace DDUtilityApp.MESDOWNLOADER
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
this.tboxDownPath.Text = dlg.SelectedPath;
|
||||
GlobalVariable.Instance.MesDownloadPath = this.tboxDownPath.Text;
|
||||
GlobalVariable.Instance.DownloadPathServerLog = this.tboxDownPath.Text;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -266,7 +269,8 @@ namespace DDUtilityApp.MESDOWNLOADER
|
||||
{
|
||||
try
|
||||
{
|
||||
Process.Start("explorer.exe", this.tboxDownPath.Text);
|
||||
string path = System.IO.Path.Combine(this.tboxDownPath.Text, this.cboxServer.Text);
|
||||
Process.Start("explorer.exe", path);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -287,13 +291,15 @@ namespace DDUtilityApp.MESDOWNLOADER
|
||||
{
|
||||
try
|
||||
{
|
||||
this.gridFiles.SelectionMode = GridViewSelectionMode.FullRowSelect;
|
||||
this.gridFiles.MultiSelect = true;
|
||||
this.gridFiles.TableElement.RowHeight = 22;
|
||||
this.gridFiles.Columns.Clear();
|
||||
this.gridFiles.Columns.Add(new GridViewCheckBoxColumn("Check") { });
|
||||
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 GridViewDateTimeColumn("Modified") { ReadOnly = true });
|
||||
this.gridFiles.Columns.Add(new GridViewTextBoxColumn("Type") { ReadOnly = true });
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -306,7 +312,9 @@ namespace DDUtilityApp.MESDOWNLOADER
|
||||
{
|
||||
try
|
||||
{
|
||||
if (e.KeyCode != Keys.Enter) return;
|
||||
|
||||
this.GridFiles_CellDoubleClick(this.gridFiles, null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -314,11 +322,141 @@ namespace DDUtilityApp.MESDOWNLOADER
|
||||
}
|
||||
}
|
||||
|
||||
private void GridFiles_CellDoubleClick(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
|
||||
/// <summary>
|
||||
/// FileDownload
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private async void GridFiles_CellDoubleClick(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
List<DataRow> rows = new List<DataRow>();
|
||||
List<string> downloads = new List<string>();
|
||||
|
||||
if (e != null)
|
||||
{
|
||||
// 더블클릭된 파일 추가
|
||||
DataRowView view = e.Row.DataBoundItem as DataRowView;
|
||||
if (view != null && view.Row != null) rows.Add(view.Row);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 선택된 파일들 추가
|
||||
List<DataRow> rowsSRC = new List<DataRow>();
|
||||
foreach(GridViewRowInfo row in this.gridFiles.SelectedRows)
|
||||
{
|
||||
DataRowView view = row.DataBoundItem as DataRowView;
|
||||
if (view != null && view.Row != null) rowsSRC.Add(view.Row);
|
||||
}
|
||||
|
||||
// 수정일자 정렬
|
||||
foreach (DataRow row in rowsSRC.OrderBy(row => row.Field<DateTime>("Modified")))
|
||||
rows.Add(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 nameap = row["nameap"] as string;
|
||||
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 fileNameDST = $"{nameap}_{fileName}";
|
||||
|
||||
string extension = System.IO.Path.GetExtension(fileNameDST);
|
||||
if (string.Compare(extension, ".Zip", true) == 0) hasZip = true;
|
||||
else if (string.Compare(extension, ".Log", false) != 0) fileNameDST += ".Log";
|
||||
|
||||
List<string> paths = new List<string>();
|
||||
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, fileNameDST);
|
||||
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 (this.chkMerge.Checked)
|
||||
{
|
||||
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);
|
||||
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
|
||||
{
|
||||
foreach (string download in downloads)
|
||||
System.Diagnostics.Process.Start(download);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -337,12 +475,11 @@ namespace DDUtilityApp.MESDOWNLOADER
|
||||
try
|
||||
{
|
||||
this.DTFileInfo = new DataTable();
|
||||
this.DTFileInfo.Columns.Add("Check", typeof(bool));
|
||||
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("Modified", typeof(DateTime));
|
||||
this.DTFileInfo.Columns.Add("Type", typeof(string));
|
||||
this.DTFileInfo.Columns.Add("url", typeof(string));
|
||||
this.DTFileInfo.Columns.Add("dir", typeof(string));
|
||||
@@ -356,21 +493,29 @@ namespace DDUtilityApp.MESDOWNLOADER
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// XML 설정파일 로딩 및 CboxServer 셋팅
|
||||
/// </summary>
|
||||
/// <summary>
|
||||
/// XML 설정파일 로딩 및 CboxServer 셋팅
|
||||
/// </summary>
|
||||
private void SetCboxServer()
|
||||
{
|
||||
try
|
||||
{
|
||||
string path = ConfigurationManager.AppSettings["BULK_VIEWER"];
|
||||
this.DSSetting = XmlToDsConverter.ConvertXmlToDataSet(path);
|
||||
string srcFileName = ConfigurationManager.AppSettings["BULK_VIEWER"];
|
||||
string myFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "DDUtility", "ViewList.xml");
|
||||
if (!File.Exists(myFileName))
|
||||
{
|
||||
if (!File.Exists(srcFileName)) throw new FileNotFoundException($"Source file not found: {srcFileName}");
|
||||
File.Copy(srcFileName, myFileName);
|
||||
}
|
||||
|
||||
this.DSSetting = XmlToDsConverter.ConvertXmlToDataSet(myFileName);
|
||||
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";
|
||||
|
||||
@@ -117,7 +117,4 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="gridFiles.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,13 +33,13 @@ namespace DDUtilityApp.MESDOWNLOADER
|
||||
|
||||
try
|
||||
{
|
||||
using (StreamWriter writer = new StreamWriter(mergedFilePath, false)) // false: 새 파일 생성
|
||||
using (StreamWriter writer = new StreamWriter(mergedFilePath, false, Encoding.Default))
|
||||
{
|
||||
foreach (string file in filePaths)
|
||||
{
|
||||
if (File.Exists(file))
|
||||
{
|
||||
using (StreamReader reader = new StreamReader(file))
|
||||
using (StreamReader reader = new StreamReader(file, Encoding.Default))
|
||||
{
|
||||
writer.Write(reader.ReadToEnd());
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@ namespace DDUtilityApp
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
|
||||
Form frm = null;
|
||||
|
||||
if (args.Length > 0)
|
||||
{
|
||||
if (string.Compare(args[0], "FrmLogParser", true) == 0 && args.Length >= 3)
|
||||
@@ -69,16 +68,16 @@ namespace DDUtilityApp
|
||||
frmMain.FormBorderStyle = FormBorderStyle.FixedDialog;
|
||||
|
||||
#region [ 버튼 생성 정보 ]
|
||||
frmMain.Buttons.Add("EIS Log Viewer", new EisParser0());
|
||||
frmMain.Buttons.Add("MES Log Download", typeof(MESDOWNLOADER.ServerLog));
|
||||
frmMain.Buttons.Add("Server Log 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));
|
||||
frmMain.Buttons.Add("TIB Simulator", typeof(TIBRENDEZVOUS.FrmSimulator01));
|
||||
frmMain.Buttons.Add("TibcoConfig.Xml", typeof(ETC.FrmTIbcoConfig));
|
||||
frmMain.Buttons.Add(new DynamicControl("EIS Log Viewer", new EisParser0()));
|
||||
//frmMain.Buttons.Add("MES Log Download", typeof(MESDOWNLOADER.ServerLog));
|
||||
frmMain.Buttons.Add(new DynamicControl("ServerLog Download", typeof(MESDOWNLOADER.FrmServerLog), false));
|
||||
//frmMain.Buttons.Add("MIS Log Viewer", new AgvParser());
|
||||
frmMain.Buttons.Add(new DynamicControl("FDC Mongo Viewer", typeof(MONGO.FrmFDCMongo)));
|
||||
frmMain.Buttons.Add(new DynamicControl("HSMS Converter", typeof(LOGPARSER.FrmHsmsViewer)));
|
||||
frmMain.Buttons.Add(new DynamicControl("TIB Simulator", typeof(TIBRENDEZVOUS.FrmSimulator01)));
|
||||
frmMain.Buttons.Add(new DynamicControl("TibcoConfig.Xml", typeof(ETC.FrmTIbcoConfig)));
|
||||
#if DEBUG
|
||||
frmMain.Buttons.Add("FTP Test", typeof(SPECDOCUMENT.FrmSpecDocument));
|
||||
frmMain.Buttons.Add(new DynamicControl("FTP Test", typeof(SPECDOCUMENT.FrmSpecDocument)));
|
||||
#endif
|
||||
#endregion
|
||||
|
||||
@@ -219,4 +218,24 @@ namespace DDUtilityApp
|
||||
|
||||
}
|
||||
|
||||
public class DynamicControl
|
||||
{
|
||||
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
public object Value { get; set; } = null;
|
||||
|
||||
public bool Visible { get; set; } = true;
|
||||
|
||||
public DynamicControl(string name, object value, bool visible = true)
|
||||
{
|
||||
this.Name = name;
|
||||
this.Value = value;
|
||||
this.Visible = visible;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로
|
||||
// 지정되도록 할 수 있습니다.
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("2025.03.14.0")]
|
||||
[assembly: AssemblyFileVersion("2025.03.14.0")]
|
||||
[assembly: AssemblyVersion("2025.05.01.0")]
|
||||
[assembly: AssemblyFileVersion("2025.05.01.0")]
|
||||
|
||||
@@ -294,8 +294,13 @@
|
||||
this.lviewSubject.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.lviewSubject.AutoScroll = true;
|
||||
this.lviewSubject.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.lviewSubject.Location = new System.Drawing.Point(112, 46);
|
||||
this.lviewSubject.Name = "lviewSubject";
|
||||
//
|
||||
//
|
||||
//
|
||||
this.lviewSubject.RootElement.ControlBounds = new System.Drawing.Rectangle(0, 0, 120, 95);
|
||||
this.lviewSubject.Size = new System.Drawing.Size(350, 89);
|
||||
this.lviewSubject.TabIndex = 13;
|
||||
//
|
||||
@@ -1201,6 +1206,7 @@
|
||||
//
|
||||
// gridValue
|
||||
//
|
||||
this.gridValue.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.gridValue.ColumnResizeKey = System.Windows.Forms.Keys.F6;
|
||||
this.gridValue.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.gridValue.Location = new System.Drawing.Point(0, 0);
|
||||
@@ -1209,6 +1215,10 @@
|
||||
//
|
||||
this.gridValue.MasterTemplate.ViewDefinition = tableViewDefinition1;
|
||||
this.gridValue.Name = "gridValue";
|
||||
//
|
||||
//
|
||||
//
|
||||
this.gridValue.RootElement.ControlBounds = new System.Drawing.Rectangle(0, 0, 240, 150);
|
||||
this.gridValue.Size = new System.Drawing.Size(402, 420);
|
||||
this.gridValue.TabIndex = 2;
|
||||
//
|
||||
|
||||
@@ -997,7 +997,6 @@ namespace DDUtilityApp.TIBRENDEZVOUS
|
||||
|
||||
this.Logger.Info($"Started");
|
||||
this.tboxSettingInfo.Text = sb.ToString();
|
||||
this.Text = $"TibSimulator - {this.cboxServer.Text} :: {this.cboxTarget.Text}";
|
||||
|
||||
List<Control.ControlCollection> lstControls = new List<Control.ControlCollection>();
|
||||
lstControls.Add(this.gboxTransport.Controls);
|
||||
@@ -1008,7 +1007,7 @@ namespace DDUtilityApp.TIBRENDEZVOUS
|
||||
{
|
||||
if (ctrl.GetType() == typeof(Label)) continue;
|
||||
else if (ctrl.GetType() == typeof(TextBox)) ((TextBox)ctrl).ReadOnly = true;
|
||||
else if (ctrl.GetType() == typeof(ComboBox)) ((ComboBox)ctrl).Enabled = false;
|
||||
else if (ctrl.GetType() == typeof(ComboBox)) { ComboBox cbox = ctrl as ComboBox; cbox.DropDownStyle = ComboBoxStyle.DropDownList; cbox.Enabled = false; }
|
||||
else ctrl.Enabled = false;
|
||||
}
|
||||
}
|
||||
@@ -1038,7 +1037,7 @@ namespace DDUtilityApp.TIBRENDEZVOUS
|
||||
{
|
||||
if (ctrl.GetType() == typeof(Label)) continue;
|
||||
else if (ctrl.GetType() == typeof(TextBox)) ((TextBox)ctrl).ReadOnly = false;
|
||||
else if (ctrl.GetType() == typeof(ComboBox)) ((ComboBox)ctrl).Enabled = true;
|
||||
else if (ctrl.GetType() == typeof(ComboBox)) { ComboBox cbox = ctrl as ComboBox; cbox.DropDownStyle = ComboBoxStyle.DropDown; cbox.Enabled = true; }
|
||||
else ctrl.Enabled = true;
|
||||
}
|
||||
}
|
||||
@@ -1052,19 +1051,19 @@ namespace DDUtilityApp.TIBRENDEZVOUS
|
||||
{
|
||||
string sendSubject = string.Empty;
|
||||
string msgName = string.Empty;
|
||||
string msgSendName = string.Empty;
|
||||
string msgReplyName = string.Empty;
|
||||
string msgSendSubjectName = string.Empty;
|
||||
string msgReplySubjectName = string.Empty;
|
||||
|
||||
sendSubject = xmlMessage?.SendSubject;
|
||||
msgName = xmlMessage?.XmlData?.MessageName;
|
||||
msgSendName = xmlMessage?.XmlData?.SendSubjectName;
|
||||
msgReplyName = xmlMessage?.XmlData?.ReplySubjectName;
|
||||
msgSendSubjectName = xmlMessage?.XmlData?.SendSubjectName;
|
||||
msgReplySubjectName = xmlMessage?.XmlData?.ReplySubjectName;
|
||||
|
||||
bool isOnlyHeader = false;
|
||||
if (msgName.ToLower().StartsWith("AreYouThereRequest".ToLower()) && this.chkHideAreYouThere.Checked) isOnlyHeader = true;
|
||||
|
||||
if (isOnlyHeader) this.Logger.Info($"[S] {sendSubject} - {msgName}", this.ColorOfSend);
|
||||
else this.Logger.Info($"[S] {sendSubject}{Environment.NewLine}{xmlMessage.XmlData.GetText()}", this.ColorOfSend);
|
||||
if (isOnlyHeader) this.Logger.Info($"[S] {msgSendSubjectName} - {msgName}", this.ColorOfSend);
|
||||
else this.Logger.Info($"[S] {msgReplySubjectName}{Environment.NewLine}{xmlMessage.XmlData.GetText()}", this.ColorOfSend);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -1084,20 +1083,20 @@ namespace DDUtilityApp.TIBRENDEZVOUS
|
||||
|
||||
string listenerSubject = string.Empty;
|
||||
string msgName = string.Empty;
|
||||
string msgSendName = string.Empty;
|
||||
string msgReplyName = string.Empty;
|
||||
string msgSendSubjectName = string.Empty;
|
||||
string msgReplySubjectName = string.Empty;
|
||||
|
||||
if (sender != null) listenerSubject = sender.Subject;
|
||||
msgName = xmlReceived?.XmlData?.MessageName;
|
||||
msgSendName = xmlReceived?.XmlData?.SendSubjectName;
|
||||
msgReplyName = xmlReceived?.XmlData?.ReplySubjectName;
|
||||
msgSendSubjectName = xmlReceived?.XmlData?.SendSubjectName;
|
||||
msgReplySubjectName = xmlReceived?.XmlData?.ReplySubjectName;
|
||||
|
||||
// Log Write
|
||||
bool isOnlyHeader = false;
|
||||
if (msgName.ToLower().StartsWith("AreYouThereRequest".ToLower()) && this.chkHideAreYouThere.Checked) isOnlyHeader = true;
|
||||
|
||||
if (isOnlyHeader) this.Logger.Info($"[R] {listenerSubject} - {msgName}", this.ColorOfRecived);
|
||||
else this.Logger.Info($"[R] {listenerSubject}{Environment.NewLine}{xmlReceived.XmlData.GetText()}", this.ColorOfRecived);
|
||||
if (isOnlyHeader) this.Logger.Info($"[R] {msgReplySubjectName} - {msgName}", this.ColorOfRecived);
|
||||
else this.Logger.Info($"[R] {msgReplySubjectName}{Environment.NewLine}{xmlReceived.XmlData.GetText()}", this.ColorOfRecived);
|
||||
|
||||
// Reply Message
|
||||
bool isReply = false;
|
||||
@@ -1113,24 +1112,23 @@ namespace DDUtilityApp.TIBRENDEZVOUS
|
||||
|
||||
foreach (XmlMessage xmlReply in xmlReplys)
|
||||
{
|
||||
this.cboxSendSubject.Text = xmlReply.XmlData.SendSubjectName;
|
||||
this.tboxSendMessage.Text = xmlReply.XmlData.GetText();
|
||||
this.tboxSendMessage.Tag = xmlReply;
|
||||
|
||||
if (xmlReply.IsReply && xmlReply.RequestMessage != null)
|
||||
if (!string.IsNullOrEmpty(xmlReply.RequestMessage.ReplySubject)) this.SendButtons_Focus(this.btnSendReply);
|
||||
else this.SendButtons_Focus(this.btnSend);
|
||||
//else if (xmlReply.SendRequestFlag) this.SendButtons_Focus(this.btnSendRequest);
|
||||
else this.SendButtons_Focus(this.btnSend);
|
||||
|
||||
if (xmlReceived.XmlData.MessageName.ToLower().StartsWith("AreYouThereRequest".ToLower()))
|
||||
{
|
||||
if (this.chkSendAreYouThereReply.Checked)
|
||||
{
|
||||
this.TibRendezvous.SendMessage(xmlReply);
|
||||
this.tboxSendMessage.Clear();
|
||||
this.tboxSendMessage.Tag = null;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.cboxSendSubject.Text = xmlReply.SendSubject;
|
||||
this.tboxSendMessage.Text = xmlReply.XmlData.GetText();
|
||||
this.tboxSendMessage.Tag = xmlReply;
|
||||
|
||||
if (xmlReply.IsReply && xmlReply.RequestMessage != null)
|
||||
if (!string.IsNullOrEmpty(xmlReply.RequestMessage.ReplySubject)) this.SendButtons_Focus(this.btnSendReply);
|
||||
else this.SendButtons_Focus(this.btnSend);
|
||||
else this.SendButtons_Focus(this.btnSend);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1138,9 +1136,17 @@ namespace DDUtilityApp.TIBRENDEZVOUS
|
||||
if (this.chkSendReply.Checked)
|
||||
{
|
||||
this.TibRendezvous.SendMessage(xmlReply);
|
||||
this.tboxSendMessage.Clear();
|
||||
this.tboxSendMessage.Tag = null;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.cboxSendSubject.Text = xmlReply.SendSubject;
|
||||
this.tboxSendMessage.Text = xmlReply.XmlData.GetText();
|
||||
this.tboxSendMessage.Tag = xmlReply;
|
||||
|
||||
if (xmlReply.IsReply && xmlReply.RequestMessage != null)
|
||||
if (!string.IsNullOrEmpty(xmlReply.RequestMessage.ReplySubject)) this.SendButtons_Focus(this.btnSendReply);
|
||||
else this.SendButtons_Focus(this.btnSend);
|
||||
else this.SendButtons_Focus(this.btnSend);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,6 +117,15 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="lviewSubject.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="gridValue.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>138, 17</value>
|
||||
</metadata>
|
||||
<metadata name="radStatusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>243, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
<!--<appender-ref ref="database" />-->
|
||||
</root>
|
||||
|
||||
<logger name="DEFAULT">
|
||||
<logger name="LogViewer">
|
||||
<level value="INFO"/>
|
||||
<appender-ref ref="DefaultRolling"/>
|
||||
<appender-ref ref="LogViewerRolling"/>
|
||||
</logger>
|
||||
|
||||
<logger name="TibSimulator">
|
||||
@@ -46,6 +46,23 @@
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<appender name="LogViewerRolling" type="log4net.Appender.RollingFileAppender">
|
||||
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
|
||||
<file type="log4net.Util.PatternString" value="%envFolderPath{MyDocuments}\DDUtility\Logs\LogViewer_" />
|
||||
<!--<file type="log4net.Util.PatternString" value="X:\EIS서버\DDUtility\Logs\" />-->
|
||||
<datePattern value="yyyyMMdd'.log'" />
|
||||
<maxSizeRollBackups value="50" />
|
||||
<maximumFileSize value="10MB" />
|
||||
<staticLogFileName value="false" />
|
||||
<appendToFile value="true" />
|
||||
<preserveLogFileNameExtension value="true"/>
|
||||
<rollingStyle value="Composite" />
|
||||
<countDirection value="0" />
|
||||
<layout type="log4net.Layout.PatternLayout">
|
||||
<conversionPattern value="[%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}] %level %logger %X{id} : %X{class}.%X{method}() %message%newline" />
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<appender name="TibSimulator" type="log4net.Appender.RollingFileAppender">
|
||||
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
|
||||
<file type="log4net.Util.PatternString" value="%envFolderPath{MyDocuments}\DDUtility\Logs\TibSimulator_" />
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
@@ -17,50 +19,74 @@ namespace JWH
|
||||
|
||||
public static bool IsDesignMode = LicenseManager.UsageMode == LicenseUsageMode.Designtime;
|
||||
|
||||
/// <summary>
|
||||
/// 속성 정보를 캐싱하기 위한 사전입니다.
|
||||
/// </summary>
|
||||
private static readonly ConcurrentDictionary<Type, Dictionary<string, PropertyInfo>> PropertyCache =
|
||||
new ConcurrentDictionary<Type, Dictionary<string, PropertyInfo>>();
|
||||
|
||||
/// <summary>
|
||||
/// 주어진 타입의 속성 정보를 캐싱하여 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="type">대상 타입</param>
|
||||
/// <returns>속성 정보 사전</returns>
|
||||
private static Dictionary<string, PropertyInfo> GetCachedProperties(Type type)
|
||||
{
|
||||
return PropertyCache.GetOrAdd(type, t =>
|
||||
t.GetProperties().ToDictionary(p => p.Name, StringComparer.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
#region [ PropertiesCopy ] --------------------------------------------
|
||||
|
||||
/// <summary>
|
||||
/// 현재객체의 속성값을 대상객체의 속성에 복사합니다
|
||||
/// 현재 객체의 속성 값을 대상 객체의 속성에 복사합니다.
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="dest">대상객체</param>
|
||||
/// <param name="sender">원본 객체</param>
|
||||
/// <param name="dest">대상 객체</param>
|
||||
/// <param name="overwrite">기존 값을 덮어쓸지 여부</param>
|
||||
public static void PropertiesCopy(this object sender, object dest, bool overwrite = true)
|
||||
{
|
||||
try
|
||||
if (sender == null) throw new ArgumentNullException(nameof(sender));
|
||||
if (dest == null) throw new ArgumentNullException(nameof(dest));
|
||||
|
||||
var sourceProperties = GetCachedProperties(sender.GetType());
|
||||
var destProperties = GetCachedProperties(dest.GetType());
|
||||
|
||||
foreach (var sourceProp in sourceProperties)
|
||||
{
|
||||
foreach (PropertyInfo property in sender.GetType().GetProperties())
|
||||
if (!destProperties.TryGetValue(sourceProp.Key, out var destProp)) continue;
|
||||
if (!destProp.CanWrite) continue;
|
||||
|
||||
if (typeof(IList).IsAssignableFrom(sourceProp.Value.PropertyType))
|
||||
{
|
||||
try
|
||||
{
|
||||
PropertyInfo destProp = dest.GetType().GetProperty(property.Name, property.PropertyType);
|
||||
if (destProp == null || property.GetType() != destProp.GetType()) continue;
|
||||
//if (!property.CanWrite) continue;
|
||||
if (!destProp.CanWrite) continue;
|
||||
var sourceList = sourceProp.Value.GetValue(sender) as IList;
|
||||
if (sourceList == null) continue;
|
||||
|
||||
var destValue = destProp.GetValue(dest);
|
||||
if (overwrite == false && destValue != null) continue;
|
||||
var destList = destProp.GetValue(dest) as IList ?? (IList)Activator.CreateInstance(sourceProp.Value.PropertyType);
|
||||
if (overwrite) destList.Clear();
|
||||
|
||||
destProp.SetValue(dest, property.GetValue(sender));
|
||||
}
|
||||
catch (Exception ex)
|
||||
foreach (var item in sourceList)
|
||||
{
|
||||
XLogger.Instance.Fatal(ex);
|
||||
destList.Add(item);
|
||||
}
|
||||
|
||||
destProp.SetValue(dest, destList);
|
||||
}
|
||||
else
|
||||
{
|
||||
var sourceValue = sourceProp.Value.GetValue(sender);
|
||||
if (!overwrite && destProp.GetValue(dest) != null) continue;
|
||||
|
||||
destProp.SetValue(dest, sourceValue);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
XLogger.Instance.Fatal(ex);
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 현재객체의 속성값을 대상객체의 속성에 복사합니다
|
||||
/// DataTable의 데이터를 대상 객체의 속성에 복사합니다.
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="dest">대상객체</param>
|
||||
/// <param name="sender">원본 DataTable</param>
|
||||
/// <param name="dest">대상 객체</param>
|
||||
public static void PropertiesCopy(this DataTable sender, object dest)
|
||||
{
|
||||
try
|
||||
@@ -83,7 +109,6 @@ namespace JWH
|
||||
catch
|
||||
{
|
||||
// Object of type 'System.DBNull' cannot be converted to type 'System.String'.
|
||||
// XLogger.Instance.Warn(ex);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -100,10 +125,10 @@ namespace JWH
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dictionary<string, object>의 값을 대상객체의 속성에 복사합니다.
|
||||
/// Dictionary의 데이터를 대상 객체의 속성에 복사합니다.
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="dest"></param>
|
||||
/// <param name="sender">원본 Dictionary</param>
|
||||
/// <param name="dest">대상 객체</param>
|
||||
public static void PropertiesCopy(this Dictionary<string, object> sender, object dest)
|
||||
{
|
||||
try
|
||||
@@ -134,74 +159,150 @@ namespace JWH
|
||||
|
||||
#endregion
|
||||
|
||||
#region [ Property Set/Get ] ------------------------------------------
|
||||
|
||||
/// <summary>
|
||||
/// value 값을 현재객체의 속성에 복사합니다.
|
||||
/// 주어진 값을 현재 객체의 속성에 설정합니다.
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="sender">대상 객체</param>
|
||||
/// <param name="name">속성 이름</param>
|
||||
/// <param name="value">설정할 값</param>
|
||||
public static void PropertySet(this object sender, string name, object value)
|
||||
{
|
||||
try
|
||||
{
|
||||
PropertyInfo property = sender.GetType().GetProperty(name);
|
||||
if (property == null)
|
||||
foreach (PropertyInfo item in sender.GetType().GetProperties())
|
||||
if (string.Compare(item.Name, name, true) == 0)
|
||||
{
|
||||
property = item;
|
||||
break;
|
||||
}
|
||||
if (property == null) return;
|
||||
if (property.PropertyType != value.GetType())
|
||||
{
|
||||
try
|
||||
{ value = Convert.ChangeType(value, property.PropertyType); }
|
||||
catch
|
||||
{ return; }
|
||||
}
|
||||
PropertyInfo property;
|
||||
GetCachedProperties(sender.GetType()).TryGetValue(name, out property);
|
||||
if (property == null || !property.CanWrite) return;
|
||||
|
||||
property.SetValue(sender, value);
|
||||
}
|
||||
catch (Exception ex)
|
||||
if (value != null && property.PropertyType != value.GetType())
|
||||
{
|
||||
XLogger.Instance.Fatal(ex);
|
||||
throw ex;
|
||||
value = Convert.ChangeType(value, property.PropertyType);
|
||||
}
|
||||
|
||||
property.SetValue(sender, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 객체의 속성값을 반환합니다.
|
||||
/// 객체의 특정 속성 값을 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="name"></param>
|
||||
/// <returns></returns>
|
||||
public static string PropertyGet(this object sender, string name)
|
||||
/// <param name="sender">대상 객체</param>
|
||||
/// <param name="name">속성 이름</param>
|
||||
/// <returns>속성 값</returns>
|
||||
public static object PropertyGet(this object sender, string name)
|
||||
{
|
||||
PropertyInfo property;
|
||||
GetCachedProperties(sender.GetType()).TryGetValue(name, out property);
|
||||
return property?.GetValue(sender);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region [ ToClass() ] -------------------------------------------------
|
||||
|
||||
/// <summary>
|
||||
/// DataTable을 제네릭 객체 리스트로 변환합니다.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">제네릭 객체 타입</typeparam>
|
||||
/// <param name="dataTable">원본 DataTable</param>
|
||||
/// <returns>제네릭 객체 배열</returns>
|
||||
public static T[] ToClass<T>(this DataTable dataTable) where T : class, new()
|
||||
{
|
||||
var properties = GetCachedProperties(typeof(T));
|
||||
var list = new List<T>();
|
||||
|
||||
foreach (DataRow row in dataTable.Rows)
|
||||
{
|
||||
var obj = new T();
|
||||
foreach (var prop in properties)
|
||||
{
|
||||
if (!dataTable.Columns.Contains(prop.Key) || row[prop.Key] is DBNull) continue;
|
||||
|
||||
var value = Convert.ChangeType(row[prop.Key], prop.Value.PropertyType);
|
||||
prop.Value.SetValue(obj, value);
|
||||
}
|
||||
list.Add(obj);
|
||||
}
|
||||
|
||||
return list.ToArray();
|
||||
}
|
||||
|
||||
/// <param name="srcArray">원본 객체 배열</param>
|
||||
/// <returns>제네릭 객체 배열</returns>
|
||||
public static T[] ToClass<T>(this object[] srcArray) where T : class, new()
|
||||
{
|
||||
try
|
||||
{
|
||||
PropertyInfo property = sender.GetType().GetProperty(name);
|
||||
if (property == null)
|
||||
List<T> list = new List<T>();
|
||||
var desProperties = GetCachedProperties(typeof(T));
|
||||
|
||||
foreach (object src in srcArray)
|
||||
{
|
||||
foreach (PropertyInfo item in sender.GetType().GetProperties())
|
||||
T des = new T();
|
||||
list.Add(des);
|
||||
var srcProperties = GetCachedProperties(src.GetType());
|
||||
|
||||
foreach (var srcProperty in srcProperties)
|
||||
{
|
||||
if (string.Compare(item.Name, name, true) == 0)
|
||||
try
|
||||
{
|
||||
property = item;
|
||||
break;
|
||||
if (!desProperties.TryGetValue(srcProperty.Key, out var desProperty)) continue;
|
||||
|
||||
var srcValue = srcProperty.Value.GetValue(src);
|
||||
if (srcProperty.Value.PropertyType != desProperty.PropertyType)
|
||||
{
|
||||
srcValue = Convert.ChangeType(srcValue, desProperty.PropertyType);
|
||||
}
|
||||
|
||||
desProperty.SetValue(des, srcValue);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
XLogger.Instance.Warn(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (property == null) return string.Empty;
|
||||
return property.GetValue(sender)?.ToString();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
XLogger.Instance.Fatal(ex);
|
||||
return string.Empty;
|
||||
|
||||
return list.ToArray();
|
||||
}
|
||||
catch { throw; }
|
||||
}
|
||||
|
||||
/// <param name="src">DataTable</param>
|
||||
/// <returns>List with generic objects</returns>
|
||||
public static T ToClass<T>(this object src) where T : class, new()
|
||||
{
|
||||
try
|
||||
{
|
||||
T des = new T();
|
||||
var desProperties = GetCachedProperties(typeof(T));
|
||||
var srcProperties = GetCachedProperties(src.GetType());
|
||||
|
||||
foreach (var srcProperty in srcProperties)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!desProperties.TryGetValue(srcProperty.Key, out var desProperty)) continue;
|
||||
|
||||
var srcValue = srcProperty.Value.GetValue(src);
|
||||
if (srcProperty.Value.PropertyType != desProperty.PropertyType)
|
||||
{
|
||||
srcValue = Convert.ChangeType(srcValue, desProperty.PropertyType);
|
||||
}
|
||||
|
||||
desProperty.SetValue(des, srcValue);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
XLogger.Instance.Warn(ex);
|
||||
}
|
||||
}
|
||||
|
||||
return des;
|
||||
}
|
||||
catch { throw; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 객체의 메소드를 호출합니다.
|
||||
/// </summary>
|
||||
@@ -352,141 +453,6 @@ namespace JWH
|
||||
return null;
|
||||
}
|
||||
|
||||
#region [ ToClass() ] -------------------------------------------------
|
||||
|
||||
/// <summary>
|
||||
/// Converts a DataTable to a list with generic objects
|
||||
/// dataTable.ToClass<Employee>();
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Generic object</typeparam>
|
||||
/// <param name="dataTable">DataTable</param>
|
||||
/// <returns>List with generic objects</returns>
|
||||
public static T[] ToClass<T>(this DataTable dataTable) where T : class, new()
|
||||
{
|
||||
try
|
||||
{
|
||||
List<T> list = new List<T>();
|
||||
foreach (var row in dataTable.AsEnumerable())
|
||||
{
|
||||
T obj = new T();
|
||||
|
||||
foreach (PropertyInfo property in obj.GetType().GetProperties())
|
||||
{
|
||||
try
|
||||
{
|
||||
if (dataTable.Columns.Contains(property.Name) == false) continue;
|
||||
if (row[property.Name] is System.DBNull) continue;
|
||||
|
||||
var val = row[property.Name];
|
||||
//if (property.PropertyType == typeof(DateTime) && val.GetType() == typeof(string))
|
||||
// DateTime.TryParse(val.ToString(), out val);
|
||||
|
||||
property.SetValue(obj, Convert.ChangeType(val, property.PropertyType, CultureInfo.CurrentCulture), null);
|
||||
}
|
||||
catch
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
list.Add(obj);
|
||||
}
|
||||
|
||||
return list.ToArray();
|
||||
}
|
||||
catch { throw; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts a object to a list with generic objects
|
||||
/// dataTable.ToClass<Employee>();
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Generic object</typeparam>
|
||||
/// <param name="src">DataTable</param>
|
||||
/// <returns>List with generic objects</returns>
|
||||
public static T ToClass<T>(this object src) where T : class, new()
|
||||
{
|
||||
try
|
||||
{
|
||||
T des = new T();
|
||||
Type desType = des.GetType();
|
||||
Type srcType = src.GetType();
|
||||
foreach (PropertyInfo srcProperty in srcType.GetProperties())
|
||||
{
|
||||
try
|
||||
{
|
||||
PropertyInfo desProperty = desType.GetProperty(srcProperty.Name);
|
||||
if (desProperty == null) continue;
|
||||
|
||||
var srcValue = srcProperty.GetValue(src);
|
||||
if (srcProperty.PropertyType != desProperty.PropertyType)
|
||||
{
|
||||
srcValue = Convert.ChangeType(srcValue, desProperty.PropertyType);
|
||||
}
|
||||
|
||||
desProperty.SetValue(des, srcValue);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
XLogger.Instance.Warn(ex);
|
||||
}
|
||||
}
|
||||
|
||||
return des;
|
||||
}
|
||||
catch { throw; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts a object to a list with generic objects
|
||||
/// dataTable.ToClass<Employee>();
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Generic object</typeparam>
|
||||
/// <param name="srcArray">DataTable</param>
|
||||
/// <returns>List with generic objects</returns>
|
||||
public static T[] ToClass<T>(this object[] srcArray) where T : class, new()
|
||||
{
|
||||
try
|
||||
{
|
||||
List<T> list = new List<T>();
|
||||
|
||||
foreach (object src in srcArray)
|
||||
{
|
||||
T des = new T();
|
||||
list.Add(des);
|
||||
Type desType = des.GetType();
|
||||
|
||||
Type srcType = src.GetType();
|
||||
foreach (PropertyInfo srcProperty in srcType.GetProperties())
|
||||
{
|
||||
try
|
||||
{
|
||||
PropertyInfo desProperty = desType.GetProperty(srcProperty.Name);
|
||||
if (desProperty == null) continue;
|
||||
|
||||
var srcValue = srcProperty.GetValue(src);
|
||||
if (srcProperty.PropertyType != desProperty.PropertyType)
|
||||
{
|
||||
srcValue = Convert.ChangeType(srcValue, desProperty.PropertyType);
|
||||
}
|
||||
|
||||
desProperty.SetValue(des, srcValue);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
XLogger.Instance.Warn(ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return list.ToArray();
|
||||
}
|
||||
catch { throw; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public static CultureInfo CultureInfo { get; set; }
|
||||
|
||||
public static string ToTitleCase(this string sender)
|
||||
|
||||
@@ -60,8 +60,8 @@ namespace JWH.TIB
|
||||
XmlMessage xmlMessage = new XmlMessage(xmlData);
|
||||
if (isValueSetting)
|
||||
{
|
||||
this.SetMessageValue(xmlMessage.XmlData.Header);
|
||||
this.SetMessageValue(xmlMessage.XmlData.Body);
|
||||
this.SetMessageBodyValue(xmlMessage.XmlData.Header);
|
||||
this.SetMessageBodyValue(xmlMessage.XmlData.Body);
|
||||
}
|
||||
|
||||
return xmlMessage;
|
||||
@@ -90,11 +90,11 @@ namespace JWH.TIB
|
||||
DirectoryInfo directoryInfo = new DirectoryInfo(this.PathMessageReply);
|
||||
foreach (FileInfo fileInfo in directoryInfo.GetFiles($"{xmlRequest.XmlData.MessageName}_*.xml"))
|
||||
{
|
||||
StreamReader reader = new StreamReader(fileInfo.FullName, Encoding.UTF8, true);
|
||||
StreamReader reader = new StreamReader(fileInfo.FullName, Encoding.Default, true);
|
||||
strReply = reader.ReadToEnd();
|
||||
xmlReply = new XmlMessage(strReply);
|
||||
xmlReply.SetRequstMessage(xmlRequest);
|
||||
this.SetMessageValue(xmlReply.XmlData.Body, xmlRequest);
|
||||
xmlReply.SetSubjectName(xmlRequest);
|
||||
this.SetMessageBodyValue(xmlReply.XmlData.Body, xmlRequest);
|
||||
|
||||
lstReply.Add(xmlReply);
|
||||
}
|
||||
@@ -131,8 +131,11 @@ namespace JWH.TIB
|
||||
|
||||
XmlMessage xmlReply = new XmlMessage(xmlRequest.XmlData.GetText());
|
||||
xmlReply.XmlData.MessageName += "Reply";
|
||||
xmlReply.XmlData.SendRequestFlag = false;
|
||||
xmlReply.XmlData.ReplySubjectName = xmlRequest.XmlData.SendSubjectName;
|
||||
xmlReply.XmlData.SendSubjectName = xmlRequest.XmlData.ReplySubjectName;
|
||||
xmlReply.SendSubject = xmlReply.XmlData.SendSubjectName;
|
||||
xmlReply.SendRequestFlag = xmlReply.XmlData.SendRequestFlag;
|
||||
|
||||
xmlReply.RequestMessage = xmlRequest;
|
||||
if (xmlRequest.SendRequestFlag) xmlReply.IsReply = true;
|
||||
@@ -150,10 +153,12 @@ namespace JWH.TIB
|
||||
if (xmlRequest == null) return null;
|
||||
|
||||
XmlMessage xmlReply = new XmlMessage(xmlRequest.XmlData.GetText());
|
||||
xmlReply.XmlData.SendRequestFlag = false;
|
||||
xmlReply.XmlData.MessageName += "Reply";
|
||||
xmlReply.XmlData.SendRequestFlag = false;
|
||||
xmlReply.XmlData.ReplySubjectName = xmlRequest.XmlData.SendSubjectName;
|
||||
xmlReply.XmlData.SendSubjectName = xmlRequest.XmlData.ReplySubjectName;
|
||||
xmlReply.SendSubject = xmlReply.XmlData.SendSubjectName;
|
||||
xmlReply.SendRequestFlag = xmlReply.XmlData.SendRequestFlag;
|
||||
|
||||
XmlNode nodeReturn = xmlReply.XmlData.Message.CreateChildNode("return");
|
||||
nodeReturn.CreateChildNode("returncode", "0");
|
||||
@@ -176,7 +181,7 @@ namespace JWH.TIB
|
||||
/// </summary>
|
||||
/// <param name="node"></param>
|
||||
/// <param name="srcMessage">RequestMessage</param>
|
||||
private void SetMessageValue(XmlNode node, XmlMessage srcMessage = null)
|
||||
private void SetMessageBodyValue(XmlNode node, XmlMessage srcMessage = null)
|
||||
{
|
||||
// MessageValue(UI)
|
||||
if (node.GetText() == string.Empty)
|
||||
@@ -220,7 +225,7 @@ namespace JWH.TIB
|
||||
foreach (XmlNode child in node.ChildNodes)
|
||||
{
|
||||
if (child.GetType() == typeof(XmlText)) continue;
|
||||
this.SetMessageValue(child, srcMessage);
|
||||
this.SetMessageBodyValue(child, srcMessage);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -175,7 +175,7 @@ namespace JWH.TIB
|
||||
#region [ Method ] ====================================================
|
||||
|
||||
/// <summary>
|
||||
/// FromString
|
||||
/// 전달된 메시지(문자열)로 속성을 셋팅한다.
|
||||
/// </summary>
|
||||
/// <param name="xmlData"></param>
|
||||
public void FromString(string xmlData)
|
||||
|
||||
@@ -174,7 +174,11 @@ namespace JWH.TIB
|
||||
|
||||
#region [ Public Method ] =============================================
|
||||
|
||||
public void SetRequstMessage(XmlMessage xmlRequest)
|
||||
/// <summary>
|
||||
/// Set Value of SendSubject, ReplySubject
|
||||
/// </summary>
|
||||
/// <param name="xmlRequest"></param>
|
||||
public void SetSubjectName(XmlMessage xmlRequest)
|
||||
{
|
||||
this.RequestMessage = xmlRequest;
|
||||
this.IsReply = true;
|
||||
|
||||
@@ -1,29 +1,28 @@
|
||||
<log4net>
|
||||
<root>
|
||||
<level value="DEBUG" />
|
||||
<appender-ref ref="file" />
|
||||
<!--<appender-ref ref="console" />-->
|
||||
<appender-ref ref="Console" />
|
||||
<appender-ref ref="RollingFile" />
|
||||
<!--<appender-ref ref="database" />-->
|
||||
</root>
|
||||
|
||||
<appender name="console" type="log4net.Appender.ConsoleAppender">
|
||||
<appender name="Console" type="log4net.Appender.ConsoleAppender">
|
||||
<layout type="log4net.Layout.PatternLayout">
|
||||
<conversionPattern value="[%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff} %level] %logger %X{id} : %X{class}.%X{method}() %message%newline" />
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<appender name="file" type="log4net.Appender.RollingFileAppender">
|
||||
<appender name="LogViewerRolling" type="log4net.Appender.RollingFileAppender">
|
||||
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
|
||||
<file type="log4net.Util.PatternString" value="%envFolderPath{MyDocuments}\DDUtility\Logs\" />
|
||||
|
||||
<appendToFile value="true" />
|
||||
<preserveLogFileNameExtension value="true"/>
|
||||
|
||||
<rollingStyle value="Composite" />
|
||||
<file type="log4net.Util.PatternString" value="Logs/" />
|
||||
<datePattern value="yyyyMMdd'.log'" />
|
||||
<maxSizeRollBackups value="100" />
|
||||
<maximumFileSize value="30MB" />
|
||||
<maxSizeRollBackups value="50" />
|
||||
<maximumFileSize value="10MB" />
|
||||
<staticLogFileName value="false" />
|
||||
|
||||
<layout type="log4net.Layout.PatternLayout">
|
||||
<conversionPattern value="[%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff} %level] %logger %X{id} : %X{class}.%X{method}() %message%newline" />
|
||||
</layout>
|
||||
|
||||
Reference in New Issue
Block a user