From 0790ae42f9d1d192864ad9bb67b66c899055195e Mon Sep 17 00:00:00 2001 From: T001084 Date: Thu, 6 Mar 2025 09:40:18 +0900 Subject: [PATCH] =?UTF-8?q?FDC=20MongoDB=20=ED=8C=A8=EC=B9=98(=EC=BB=AC?= =?UTF-8?q?=EB=9F=BC=EC=B6=94=EA=B0=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DDUtilityApp/LOGPARSER/FrmEqSelector.cs | 3 +- DDUtilityApp/MONGO/FDCMongoDB.cs | 114 +++++++++++++++++------- DDUtilityApp/MONGO/FrmFDCMongo.cs | 18 +++- 3 files changed, 99 insertions(+), 36 deletions(-) diff --git a/DDUtilityApp/LOGPARSER/FrmEqSelector.cs b/DDUtilityApp/LOGPARSER/FrmEqSelector.cs index 5ea3612..cd7845f 100644 --- a/DDUtilityApp/LOGPARSER/FrmEqSelector.cs +++ b/DDUtilityApp/LOGPARSER/FrmEqSelector.cs @@ -80,7 +80,8 @@ namespace DDUtilityApp.LOGPARSER this.tboxName.ImeMode = ImeMode.Hangul; this.tboxEquipmentID.ImeMode = ImeMode.Alpha; this.chkAllEquipment.Checked = GlobalVariable.Instance.FrmEqSelector_AllEquipment; - this.chkUseSMB.Checked = GlobalVariable.Instance.FrmEqSelector_UseSMB; + this.chkUseSMB.Checked = true; // GlobalVariable.Instance.FrmEqSelector_UseSMB + this.chkUseSMB.Visible = false; this.tabControl1.SelectedIndex = 0; this.tboxModelDescription.Font = font; diff --git a/DDUtilityApp/MONGO/FDCMongoDB.cs b/DDUtilityApp/MONGO/FDCMongoDB.cs index 9d58701..6404df6 100644 --- a/DDUtilityApp/MONGO/FDCMongoDB.cs +++ b/DDUtilityApp/MONGO/FDCMongoDB.cs @@ -28,38 +28,71 @@ namespace JWH.MONGODB return item; } - public static List GetCollectionData(string collectionName, DateTime dtStart, DateTime dtEnd, TraceCollection condition = null) + public static async void GetCollectionColumns(string collectionName) { MongoClient client = new MongoClient(ConnectionString); IMongoDatabase database = client.GetDatabase(DatabaseName); - IMongoCollection collection = database.GetCollection(collectionName); + var collection = database.GetCollection(collectionName); - // # ALL Data - //var lst = collection.Find(_ => true).ToList(); - // # Use BsonDocument - //var filter = new BsonDocument("LotID", "13089570006B"); - // # Use Builders.Filter - //var filterBuilder = Builders.Filter; - //var filter = filterBuilder.Eq(x => x.LotID, "13109360026B"); + var pipeline = new[] +{ + new BsonDocument("$project", new BsonDocument("fields", new BsonDocument("$objectToArray", "$$ROOT"))), + new BsonDocument("$unwind", "$fields"), + new BsonDocument("$group", new BsonDocument("_id", BsonNull.Value).Add("uniqueFields", new BsonDocument("$addToSet", "$fields.k"))) + }; - FilterDefinitionBuilder filterBuilder = Builders.Filter; - FilterDefinition filter = filterBuilder.Gte(x => x.EVENTTIME, dtStart) & filterBuilder.Lt(x => x.EVENTTIME, dtEnd); - if (condition != null) + var result = await collection.Aggregate(pipeline).FirstOrDefaultAsync(); + + if (result != null && result.Contains("uniqueFields")) { - string[] SkipPropertys = new string[] { "_id", "EVENTTIME" }; - foreach (PropertyInfo property in condition.GetType().GetProperties()) + var fields = result["uniqueFields"].AsBsonArray.Select(f => f.AsString); + Console.WriteLine("컬렉션의 필드 목록:"); + foreach (var field in fields) { - object value = property.GetValue(condition); - if (value != null) - { - if (property.Name.Equals("LotID")) filter &= filterBuilder.Eq(x => x.LotID, value); - continue; - } + Console.WriteLine(field); } } - List document = collection.Find(filter).ToList(); + } - return document; + public static List GetCollectionData(string collectionName, DateTime dtStart, DateTime dtEnd, TraceCollection condition = null) + { + try + { + MongoClient client = new MongoClient(ConnectionString); + IMongoDatabase database = client.GetDatabase(DatabaseName); + IMongoCollection collection = database.GetCollection(collectionName); + + // # ALL Data + //var lst = collection.Find(_ => true).ToList(); + // # Use BsonDocument + //var filter = new BsonDocument("LotID", "13089570006B"); + // # Use Builders.Filter + //var filterBuilder = Builders.Filter; + //var filter = filterBuilder.Eq(x => x.LotID, "13109360026B"); + + FilterDefinitionBuilder filterBuilder = Builders.Filter; + FilterDefinition filter = filterBuilder.Gte(x => x.EVENTTIME, dtStart) & filterBuilder.Lt(x => x.EVENTTIME, dtEnd); + if (condition != null) + { + string[] SkipPropertys = new string[] { "_id", "EVENTTIME" }; + foreach (PropertyInfo property in condition.GetType().GetProperties()) + { + object value = property.GetValue(condition); + if (value != null) + { + if (property.Name.Equals("LotID")) filter &= filterBuilder.Eq(x => x.LotID, value); + continue; + } + } + } + List document = collection.Find(filter).ToList(); + + return document; + } + catch (Exception ex) + { + throw ex; + } } public static bool GetCollectionSize_Flag = false; @@ -150,35 +183,52 @@ namespace JWH.MONGODB public ObjectId _id { get; set; } - public List LotList { get; set; } - [BsonDateTimeOptions(Kind = DateTimeKind.Local)] public DateTime EVENTTIME { get; set; } + public string ProcessID { get; set; } + + public string UnitState { get; set; } + + public string VIDName { get; set; } public object Value { get; set; } - public string LotID { get; set; } + public string Sign { get; set; } - public string MaterialID { get; set; } + public List LotList { get; set; } + + public string LotID { get; set; } public string ProductID { get; set; } - public object UnitNO { get; set; } - public string Recipe { get; set; } - public string ProcessID { get; set; } + public object UnitNO { get; set; } public string VORNR { get; set; } - public string UnitState { get; set; } + public string MaterialID { get; set; } - public string Sign { get; set; } + public string CarrierId { get; set; } + + public string PanelId { get; set; } + + public string Position { get; set; } + + public string MarkingId { get; set; } + + public string Step { get; set; } + + public double LowerSV { get; set; } + + public double UpperSV { get; set; } + + public string MongGoUnitName { get; set; } } - } + } diff --git a/DDUtilityApp/MONGO/FrmFDCMongo.cs b/DDUtilityApp/MONGO/FrmFDCMongo.cs index 5c8ee23..bfbdbd4 100644 --- a/DDUtilityApp/MONGO/FrmFDCMongo.cs +++ b/DDUtilityApp/MONGO/FrmFDCMongo.cs @@ -10,6 +10,7 @@ using System.Text; using System.Threading.Tasks; using System.Web; using System.Windows.Forms; +using System.Windows.Forms.DataVisualization.Charting; using JWH; using JWH.MONGODB; using MongoDB.Bson; @@ -101,19 +102,22 @@ namespace DDUtilityApp.MONGO List data = null; try { + string collectionName = $"{this.EquipmentID}.{this.VID}"; + //FDCMongoDB.GetCollectionColumns(collectionName); + this.Cursor = Cursors.WaitCursor; this.ssName.Text = "GRID"; DateTime dtStart = this.DateTimeStart; DateTime dtEnd = this.DateTimeEnd; - data = FDCMongoDB.GetCollectionData($"{this.EquipmentID}.{this.VID}", dtStart, dtEnd); + data = FDCMongoDB.GetCollectionData(collectionName, dtStart, dtEnd); timeStart = this.StatusLabelDisplay(this.ssStatus01, "수집", timeStart, DateTime.Now); this.grid.AutoBinding(data.ToArray()); } catch (Exception ex) { - throw ex; + XLogger.Instance.Fatal(ex, true); } finally { @@ -369,6 +373,7 @@ namespace DDUtilityApp.MONGO this.grid.AddColumn("EVENTTIME", "EventTime"); this.grid.AddColumn("VIDName"); this.grid.AddColumn("Value"); + this.grid.AddColumn("Sign"); this.grid.AddColumn("LotID"); this.grid.AddColumn("MaterialID"); this.grid.AddColumn("ProductID"); @@ -377,7 +382,14 @@ namespace DDUtilityApp.MONGO this.grid.AddColumn("ProcessID"); this.grid.AddColumn("VORNR"); this.grid.AddColumn("UnitState"); - this.grid.AddColumn("Sign"); + this.grid.AddColumn("Step"); + this.grid.AddColumn("LowerSV"); + this.grid.AddColumn("UpperSV"); + this.grid.AddColumn("CarrierId"); + this.grid.AddColumn("PanelId"); + this.grid.AddColumn("Position"); + this.grid.AddColumn("MarkingId"); + this.grid.AddColumn("MongGoUnitName"); } #endregion