diff --git a/Projects/WebClient/Web.Tra/Components/Module/TraGrid.razor b/Projects/WebClient/Web.Tra/Components/Module/TraGrid.razor index 47a5e61..a198854 100644 --- a/Projects/WebClient/Web.Tra/Components/Module/TraGrid.razor +++ b/Projects/WebClient/Web.Tra/Components/Module/TraGrid.razor @@ -2,9 +2,9 @@ @inject ContextMenuService ContextMenuService - @if (VisibleRowNo == true) @@ -20,8 +20,8 @@ @foreach (var col in typeof(TDataModel).GetProperties()) { - if(DisableColums?.Contains(col.Name.ToLower()) == true) - continue; + @* if(DisableColums?.Contains(col.Name.ToLower()) == true) + continue; *@ if (col.Name.ToLower().Equals("testdate")) { @@ -33,6 +33,16 @@ } + else if (col.Name.ToLower().Equals("testdatetime")) + { + + + + } else if (col.Name.ToLower().Equals("ok")) { @@ -52,17 +62,7 @@ - } - else if (col.Name.ToLower().Equals("testdatetime")) - { - - - - } + } else if (col.Name.ToLower().Contains("cntid") || col.Name.ToLower().Contains("reqid")) { @@ -106,25 +106,20 @@ [Parameter] public bool HostColumnMerge { get; set; } - [Parameter] - public bool AllowPaging { get; set; } = true; - - [Parameter] - public int PageSize { get; set; } = 30; - - [Parameter] - public List DisableColums { get; set; } - private IList SelectedRow; private string SummaryTestResult = string.Empty; private string SummaryTestTime = string.Empty; - + private void CellRender(DataGridCellRenderEventArgs args) { if (args.Column.Property == null) return; + var cellData = args.Data as Overview; + if (cellData is null) + return; + if ((args.Column.Property.ToLower().Equals("testdate") || args.Column.Property.ToLower().Equals("host")) == false) return; @@ -134,12 +129,12 @@ if (args.Column.Property.ToLower().Equals("testdate")) { int rowCount = 0; - var take = DataList.Skip(index).Take(((index / PageSize) + 1) * PageSize - index); + var take = DataList.Skip(index).Cast(); foreach (var r in take) { - if (r.TestDate.Value.Date == args.Data.TestDate.Value.Date) + if (r.TestDate.Value.Date == cellData.TestDate.Value.Date) { - if (r.ModelName == args.Data.ModelName) + if (r.ModelName == cellData.ModelName) { rowCount += 1; } @@ -160,10 +155,10 @@ return; int rowCount = 0; - var take = DataList.Skip(index).Take(((index / PageSize) + 1) * PageSize - index); + var take = DataList.Skip(index).Cast(); foreach (var r in take) { - if (r.Host == args.Data.Host) + if (r.Host == cellData.Host) { rowCount += 1; } diff --git a/Projects/WebClient/Web.Tra/Components/Pages/TRA.razor b/Projects/WebClient/Web.Tra/Components/Pages/TRA.razor index e898eca..d33b528 100644 --- a/Projects/WebClient/Web.Tra/Components/Pages/TRA.razor +++ b/Projects/WebClient/Web.Tra/Components/Pages/TRA.razor @@ -69,10 +69,6 @@ - - - - @@ -108,24 +104,21 @@ @if (tab.Key.EnumTab == EnumTabs.OverviewC1) { + OnSelectRow="@OnSelectRowOverview" OnDoubleClickRow="@OnDoubleClickRowOverview" HostColumnMerge> } @if (tab.Key.EnumTab == EnumTabs.OverviewC1Detail) { + OnSelectRow="@OnSelectRowOverview" OnDoubleClickRow="@OnDoubleClickRowDetailOverview" HostColumnMerge> } @if (tab.Key.EnumTab == EnumTabs.TestHistoryC1) { + OnSelectRow="@OnSelectRowOverview" OnDoubleClickRow="@OnDoubleClickRowHistory" VisibleRowNo HostColumnMerge="false"> } @@ -169,8 +162,8 @@ - + @@ -196,9 +189,7 @@ //options private bool IsMergePartNumberOption = false; - private int PageSize = 30; - private List OverviewDisableColums = new List(); - private List HistoryDisableColums = new List { "testdate", "modelname", "firsttesttime", "finaltesttime", "testlistcntid" }; + private int PageSize = 30; //tab RadzenTabs tabs; @@ -227,11 +218,7 @@ private async Task GetOverviews() { - List overviews = new(); - - OverviewDisableColums.Clear(); - OverviewDisableColums.Add("rn"); - OverviewDisableColums.Add("stepversion"); + List overviews = new(); if (IsMergePartNumberOption == false) { @@ -239,10 +226,6 @@ } else { - OverviewDisableColums.Add("stationname"); - OverviewDisableColums.Add("host"); - OverviewDisableColums.Add("section"); - OverviewDisableColums.Add("testlistcntid"); overviews = await CPXV2LogService.GetOverviewMerged(SearchDataOverviews); } @@ -323,12 +306,19 @@ private async Task OnDoubleClickRowHistory(IDataModel row) { - var s = await CPXV2LogService.GetTestResult(row); + var selectRow = row as TestHistory; + int testStepVersion = selectRow.StepVersion; + if(Int32.TryParse(SelectionStepVersion, out var inputStepVersion) == true) + { + testStepVersion = inputStepVersion; + } + + var s = await CPXV2LogService.GetTestResult(row, testStepVersion); int tabId = Tabs.Max(x => x.Key.Id) + 1; Tabs.AddOrUpdate( new OrderdTab { Id = tabId, TabName = $"{EnumTabs.TestResultC1}({tabId})", EnumTab = EnumTabs.TestResultC1, Parent = row }, - key => s.DecompressTestResult.Cast().ToList(), (key, oldValue) => s.DecompressTestResult.Cast().ToList()); + key => s.ParseTestResult.Cast().ToList(), (key, oldValue) => s.ParseTestResult.Cast().ToList()); tabs.Reload(); SelectedTabIndex = Tabs.Count - 1; diff --git a/Projects/WebClient/Web.Tra/Extended/ObjectExtended.cs b/Projects/WebClient/Web.Tra/Extended/ObjectExtended.cs index 902445b..566c9e3 100644 --- a/Projects/WebClient/Web.Tra/Extended/ObjectExtended.cs +++ b/Projects/WebClient/Web.Tra/Extended/ObjectExtended.cs @@ -28,7 +28,6 @@ public static class ObjectExtend Total = data.GroupBy(x => (x.Summary.TestListCntID, x.Summary.TestDT.Date)).Last().Count(), OK = data.GroupBy(x => (x.Summary.TestListCntID, x.Summary.TestDT.Date)).Last().Count(y => y.Summary.Result.ToLower().Equals("ok")), NG = data.GroupBy(x => (x.Summary.TestListCntID, x.Summary.TestDT.Date)).Last().Count(y => !y.Summary.Result.ToLower().Equals("ok")), - RN = 0, TestListCntID = data.Last().Summary.TestListCntID }; } @@ -52,8 +51,7 @@ public static class ObjectExtend FinalTestTime = data.Max(y => y.Summary.TestDT).ToString("HH:mm:ss"), Total = data.Count(), OK = data.Count(y => y.Summary.Result.ToLower().Equals("ok")), - NG = data.Count(y => !y.Summary.Result.ToLower().Equals("ok")), - RN = 0 + NG = data.Count(y => !y.Summary.Result.ToLower().Equals("ok")), }; } @@ -67,7 +65,6 @@ public static class ObjectExtend return new TestHistory { No = data.Summary.No, - TestDate = data.Summary.TestDT, TestDateTime = data.Summary.TestDT, StationName = data.Summary.StationName, Host = data.Summary.HostID, @@ -79,29 +76,87 @@ public static class ObjectExtend ParentNo = data.Summary.ProdNo_P, FileCode = data.Summary.ProdCode, FileVersion = data.Summary.Version, - StepVersion = data.Summary.StepVersion, + StepVersion = Convert.ToInt32(data.Summary.StepVersion), Duration = data.Summary.Duration, TestResult = data.Summary.Result, - TestListCntID = data.Summary.TestListCntID, TestListReqID = data.Summary.TestListCntID }; } - public static List ToTestResult(this HIST_TestResult histTestResult) + public static TestResult ToTestResult(this HIST_TestResult histTestResult, TestList testList = null) { + TestResult testResult = new TestResult(); + testResult.TestList = testList; + + //decompress var decompStr = histTestResult?.LogData.GzipDecompress(); var logData = JsonConvert.DeserializeObject>(decompStr); - foreach (var log in logData) - { - if (string.IsNullOrEmpty(log.Message) == false) - log.MesauredValue = log.Message; - else if (string.IsNullOrEmpty(log.MeasValStr) == false) - log.MesauredValue = log.MeasValStr; - else - log.MesauredValue = log.MeasVal.ToString(); - } + testResult.DecompressTestResult = logData; - return logData; + //parse + var parse = logData.Select(x=>x.ParseTestResult(testList)).Where(x=> x is not null && string.IsNullOrEmpty(x.MeasuredValue) == false).ToList(); + testResult.ParseTestResult = parse; + + return testResult; + } + + public static ParseTestResult ParseTestResult(this DecompressTestResult logData, TestList testList = null) + { + var selectData = testList.TestListFile.Where(x => x.StepID == logData.StepID)?.FirstOrDefault(); + if (selectData is not null) + { + var parseTestResult = new ParseTestResult + { + StepNo = logData.StepID, + Position = (long)selectData?.Position, + Variant = selectData?.Variant, + Gate = selectData?.Gate, + MO = selectData?.StepDesc, + Function = selectData?.UseFunction, + Min = logData?.GlobalMin, + MeasuredValue = logData.MeasuredValue, + Max = logData.GlobalMax, + Dimension = selectData?.Dim, + Result = logData.Result, + Duration = logData.SpentTime + }; + + //min,max + if (selectData.IsGlobal == true) + { + parseTestResult.Min = logData.GlobalMin; + parseTestResult.Max = logData.GlobalMax; + } + else + { + parseTestResult.Min = selectData.SpecMin; + parseTestResult.Max = selectData.SpecMax; + } + + //meas val + if (string.IsNullOrEmpty(logData.Message) == false) + { + parseTestResult.MeasuredValue = logData.Message; + } + else if (string.IsNullOrEmpty(logData.MeasValStr) == false) + { + parseTestResult.MeasuredValue = logData.MeasValStr; + } + else if (string.IsNullOrEmpty(parseTestResult.Min) == true && + string.IsNullOrEmpty(parseTestResult.Max) == true && + logData.MeasVal == 0) + { + parseTestResult.MeasuredValue = logData.MeasVal.ToString("F1"); + } + else + { + parseTestResult.MeasuredValue = logData.MeasVal.ToString(); + } + + return parseTestResult; + } + + return null; } } \ No newline at end of file diff --git a/Projects/WebClient/Web.Tra/Model/IDataModel.cs b/Projects/WebClient/Web.Tra/Model/IDataModel.cs index 3c7b75b..bcf6c91 100644 --- a/Projects/WebClient/Web.Tra/Model/IDataModel.cs +++ b/Projects/WebClient/Web.Tra/Model/IDataModel.cs @@ -1,9 +1,6 @@ namespace Web.Tra.Model { public interface IDataModel - { - public DateTime? TestDate { get; set; } - public string Host { get; set; } - public string ModelName { get; set; } + { } } diff --git a/Projects/WebClient/Web.Tra/Model/IOverviewModel.cs b/Projects/WebClient/Web.Tra/Model/IOverviewModel.cs index 8dda12e..397c293 100644 --- a/Projects/WebClient/Web.Tra/Model/IOverviewModel.cs +++ b/Projects/WebClient/Web.Tra/Model/IOverviewModel.cs @@ -1,20 +1,6 @@ namespace Web.Tra.Model { public interface IOverviewModel : IDataModel - { - public DateTime? TestDate { get; set; } - public string StationName { get; set; } - public string Host { get; set; } - public string Section { get; set; } - public string ModelName { get; set; } - public string ProductNo { get; set; } - public string TestCode { get; set; } - public string ParentNo { get; set; } - public string FileCode { get; set; } - public string FileVersion { get; set; } - public int? StepVersion { get; set; } - public string FirstTestTime { get; set; } - public string FinalTestTime { get; set; } - public string TestListCntID { get; set; } + { } } diff --git a/Projects/WebClient/Web.Tra/Model/ITestResultModel.cs b/Projects/WebClient/Web.Tra/Model/ITestResultModel.cs index caf5d37..296fae7 100644 --- a/Projects/WebClient/Web.Tra/Model/ITestResultModel.cs +++ b/Projects/WebClient/Web.Tra/Model/ITestResultModel.cs @@ -1,7 +1,6 @@ namespace Web.Tra.Model { public interface ITestResultModel : IDataModel - { - public long No { get; set; } + { } } diff --git a/Projects/WebClient/Web.Tra/Model/Overview.cs b/Projects/WebClient/Web.Tra/Model/Overview.cs index caf7473..1da55cc 100644 --- a/Projects/WebClient/Web.Tra/Model/Overview.cs +++ b/Projects/WebClient/Web.Tra/Model/Overview.cs @@ -20,8 +20,7 @@ public string FinalTestTime { get; set; } public int Total { get; set; } public int OK { get; set; } - public int NG { get; set; } - public int RN { get; set; } + public int NG { get; set; } public string TestListCntID { get; set; } } } diff --git a/Projects/WebClient/Web.Tra/Model/TestHistory.cs b/Projects/WebClient/Web.Tra/Model/TestHistory.cs index 647ca63..a7344c1 100644 --- a/Projects/WebClient/Web.Tra/Model/TestHistory.cs +++ b/Projects/WebClient/Web.Tra/Model/TestHistory.cs @@ -2,12 +2,10 @@ { public class TestHistory : IOverviewModel { - public long No { get; set; } - public DateTime? TestDate { get; set; } - public DateTime? TestDateTime { get; set; } - public string ModelName { get; set; } //no use + public long No { get; set; } + public DateTime? TestDateTime { get; set; } public string StationName { get; set; } - public string Host { get; set; } + public string Host { get; set; } public string Section { get; set; } public string ProductID { get; set; } public string TestType { get; set; } @@ -16,12 +14,9 @@ public string ParentNo { get; set; } public string FileCode { get; set; } public string FileVersion { get; set; } - public int? StepVersion { get; set; } + public int StepVersion { get; set; } public string Duration { get; set; } - public string TestResult { get; set; } - public string FirstTestTime { get; set; } - public string FinalTestTime { get; set; } - public string TestListCntID { get; set; } + public string TestResult { get; set; } public string TestListReqID { get; set; } } } diff --git a/Projects/WebClient/Web.Tra/Model/TestResult.cs b/Projects/WebClient/Web.Tra/Model/TestResult.cs index b491b71..9323c21 100644 --- a/Projects/WebClient/Web.Tra/Model/TestResult.cs +++ b/Projects/WebClient/Web.Tra/Model/TestResult.cs @@ -1,45 +1,57 @@  +using SystemX.Core.DB; + namespace Web.Tra.Model { public class TestResult : ITestResultModel { - public long No { get; set; } - - public DateTime? TestDate { get; set; } - public string StationName { get; set; } - public string Host { get; set; } - public string Section { get; set; } - public string ModelName { get; set; } - public string ProductNo { get; set; } - public string TestCode { get; set; } - public string ParentNo { get; set; } - public string FileCode { get; set; } - public string FileVersion { get; set; } - public int? StepVersion { get; set; } - public string FirstTestTime { get; set; } - public string FinalTestTime { get; set; } - public string TestListCntID { get; set; } - - + //log data public List DecompressTestResult { get; set; } + public List ParseTestResult { get; set; } + + //test list data + public TestList? TestList { get; set; } } public class DecompressTestResult : ITestResultModel { - public long No { get; set; } - public DateTime? TestDate { get; set; } - public string StationName { get; set; } - public string Host { get; set; } - public string ModelName { get; set; } - public int StepID { get; set; } public double MeasVal { get; set; } public string MeasValStr { get; set; } public string Message { get; set; } public string GlobalMin { get; set; } - public string MesauredValue { get; set; } + public string MeasuredValue { get; set; } public string GlobalMax { get; set; } public string Result { get; set; } public string SpentTime { get; set; } } + + public class ParseTestResult : ITestResultModel + { + public int StepNo { get; set; } + public long Position { get; set; } + public string Variant { get; set; } + public string Gate { get; set; } + public string MO { get; set; } + public string Function { get; set; } + public string Min { get; set; } + public string MeasuredValue { get; set; } + public string Max { get; set; } + public string Dimension { get; set; } + public string Result { get; set; } + public string Duration { get; set; } + } + + public class TestList + { + public PROD_Group ProdGroup { get; set; } + public PROD_Release ProdRelease { get; set; } + public PROD_Variant ProdVariant { get; set; } + + public STAT_TestCode StatTestCode { get; set; } + + public STOR_TestListFile StorTestListFile { get; set; } + + public List TestListFile { get; set; } + } } diff --git a/Projects/WebClient/Web.Tra/Services/CPXV2LogService.cs b/Projects/WebClient/Web.Tra/Services/CPXV2LogService.cs index 47ddbeb..636622e 100644 --- a/Projects/WebClient/Web.Tra/Services/CPXV2LogService.cs +++ b/Projects/WebClient/Web.Tra/Services/CPXV2LogService.cs @@ -1,5 +1,6 @@ using Azure.Core; using Microsoft.EntityFrameworkCore; +using System.Collections.Generic; using System.Data; using SystemX.Core.DB; using SystemX.Core.Services; @@ -116,95 +117,170 @@ namespace Web.Tra.Services public async Task> GetDetailOverview(List request, IOverviewModel row) { - var detailOverview = request - .Where(x => x.Summary.HostID == row.Host && - x.Summary.Section == row.Section && - x.Summary.Testcode == row.TestCode - ) - .OrderByDescending(x=>x.Summary.TestDT.Date) - .GroupBy(x => ( - DateOnly.FromDateTime(x.Summary.TestDT.Date), - x.Summary.TestListCntID, - x.Summary.StepVersion - )) - .Select(x => x.ToOverview()) - .OrderBy(x=>x.TestDate); + var selectRow = row as Overview; + List detailOverview = new List(); + + if (selectRow is not null) + { + detailOverview = request + .Where(x => x.Summary.HostID == selectRow.Host && + x.Summary.Section == selectRow.Section && + x.Summary.Testcode == selectRow.TestCode + ) + .OrderByDescending(x => x.Summary.TestDT.Date) + .GroupBy(x => ( + DateOnly.FromDateTime(x.Summary.TestDT.Date), + x.Summary.TestListCntID, + x.Summary.StepVersion + )) + .Select(x => x.ToOverview()) + .OrderBy(x => x.TestDate) + .ToList(); + } await Task.CompletedTask; - return detailOverview.ToList(); + return detailOverview; } public async Task> GetDetailOverviewMerged(List request, IOverviewModel row) { - var detailOverview = request - .Where(x => x.Summary.Testcode == row.TestCode && - x.Summary.ProdNo_C == row.ProductNo && - x.Summary.ProdNo_P == row.ParentNo) - .GroupBy(x => ( - DateOnly.FromDateTime(x.Summary.TestDT.Date), - x.Summary.StepVersion - )) - .Select(x => x.ToOverviewMerged()) - .OrderBy(x => x.TestDate); + var selectRow = row as Overview; + List detailOverview = new List(); + + if (selectRow is not null) + { + detailOverview = request + .Where(x => x.Summary.Testcode == selectRow.TestCode && + x.Summary.ProdNo_C == selectRow.ProductNo && + x.Summary.ProdNo_P == selectRow.ParentNo) + .GroupBy(x => ( + DateOnly.FromDateTime(x.Summary.TestDT.Date), + x.Summary.StepVersion + )) + .Select(x => x.ToOverviewMerged()) + .OrderBy(x => x.TestDate) + .ToList(); + } await Task.CompletedTask; - return detailOverview.ToList(); + return detailOverview; } public async Task> GetTestHistory(List request, IOverviewModel row) { - var testHistory = request - .Where(x => x.Summary.TestDT.Date == row.TestDate.Value.Date && - x.Summary.HostID == row.Host && - x.Summary.Section == row.Section && - x.Summary.ProdNo_C == row.ProductNo && - x.Summary.ProdNo_P == row.ParentNo && - x.Summary.TestListCntID == row.TestListCntID) - .Select(x=>x.ToTestHistory()) - .OrderBy(x => x.No); + var selectRow = row as Overview; + List testHistory = new List(); + + if (selectRow is not null) + { + testHistory = request + .Where(x => x.Summary.TestDT.Date == selectRow.TestDate.Value.Date && + x.Summary.HostID == selectRow.Host && + x.Summary.Section == selectRow.Section && + x.Summary.ProdNo_C == selectRow.ProductNo && + x.Summary.ProdNo_P == selectRow.ParentNo && + x.Summary.TestListCntID == selectRow.TestListCntID) + .Select(x => x.ToTestHistory()) + .OrderBy(x => x.No) + .ToList(); + } + await Task.CompletedTask; - return testHistory.ToList(); + return testHistory; } public async Task> GetTestHistoryMerged(List request, IOverviewModel row) { - var testHistory = request - .Where(x => x.Summary.TestDT.Date == row.TestDate.Value.Date && - x.Summary.Testcode == row.TestCode&& - x.Summary.ProdNo_C == row.ProductNo && - x.Summary.ProdNo_P == row.ParentNo) - .Select(x => x.ToTestHistory()) - .OrderBy(x => (x.TestListReqID, x.No)); + var selectRow = row as Overview; + List testHistory = new List(); + + if(selectRow is not null) + { + testHistory = request + .Where(x => x.Summary.TestDT.Date == selectRow.TestDate.Value.Date && + x.Summary.Testcode == selectRow.TestCode && + x.Summary.ProdNo_C == selectRow.ProductNo && + x.Summary.ProdNo_P == selectRow.ParentNo) + .Select(x => x.ToTestHistory()) + .OrderBy(x => (x.TestListReqID, x.No)) + .ToList(); + } + await Task.CompletedTask; return testHistory.ToList(); } - public async Task GetTestResult(IDataModel row) + public async Task GetTestResult(IDataModel row, int stepVersion) { TestResult result = new TestResult(); var selectRow = row as TestHistory; if(selectRow is not null) - { - int year = selectRow.TestDate.Value.Year; + { + TestList testList = new TestList(); + //cpxv2 using (var scope = _scopeFactory.CreateScope()) { var provider = scope.ServiceProvider.GetRequiredService(); - using (var context = GetDBContext(provider, year)) + using (var context = GetDBContext(provider, 1)) { if (context is not null) { - var testResult = context.HIST_TestResults.Where(x => x.No == selectRow.No)?.First(); - var decompressTestResult = testResult.ToTestResult(); + int testCode = (int)context.STAT_TestCodes.Where(x => x.TestCode == selectRow.TestCode)?.First()?.No; - result.DecompressTestResult = decompressTestResult; + var prodRelease = context.PROD_Releases.Where(x => x.ProdNo_C == selectRow.ProductNo && x.TestCodeNo == testCode)?.FirstOrDefault(); + var prodVariant = context.PROD_Variants.Where(x => x.No == prodRelease.VariantNo)?.FirstOrDefault(); + var prodGroup = context.PROD_Groups.Where(x => x.No == prodVariant.GroupNo)?.FirstOrDefault(); + var statTestCode = context.STAT_TestCodes.Where(x => x.No == prodRelease.TestCodeNo)?.FirstOrDefault(); + var storTestListFile = context.STOR_TestListFiles.Where(x => x.No == prodVariant.TestListFileNo)?.FirstOrDefault(); + var maxStepVersion = context.HIST_TestListFileLatestStepVersions.Where(x => x.TestListFileNo == prodVariant.TestListFileNo)?.FirstOrDefault(); + + //max version보다 크면 max로 + if (stepVersion > maxStepVersion.LatestStepVersion) + { + stepVersion = maxStepVersion.LatestStepVersion; + } + else if(stepVersion < 0) + { + stepVersion = 0; + } + + var findTestList = context.VRFY_TestListFileReleases + .Where(x => x.TestListFileNo == prodVariant.TestListFileNo && x.StepVersion <= stepVersion) + .OrderBy(x => x.StepID) + .ThenByDescending(x=>x.StepVersion) + .AsEnumerable() + .DistinctBy(x=>x.StepID) + .ToList(); + + testList.ProdRelease = prodRelease; + testList.ProdVariant = prodVariant; + testList.ProdGroup = prodGroup; + testList.StatTestCode = statTestCode; + testList.StorTestListFile = storTestListFile; + testList.TestListFile = findTestList; } } } - result.No = selectRow.No; - } + //log + if (Int32.TryParse(selectRow.TestDateTime?.Year.ToString(), out var year) == true) + { + using (var scope = _scopeFactory.CreateScope()) + { + var provider = scope.ServiceProvider.GetRequiredService(); + using (var context = GetDBContext(provider, year)) + { + if (context is not null) + { + var testResult = context.HIST_TestResults.Where(x => x.No == selectRow.No)?.First(); + result = testResult.ToTestResult(testList); + } + } + } + } + } await Task.CompletedTask; return result;