[성현모] Grid 성능 개선

This commit is contained in:
SHM
2025-09-17 09:32:33 +09:00
parent a57734308f
commit 89fe237e52
10 changed files with 287 additions and 183 deletions

View File

@ -2,9 +2,9 @@
@inject ContextMenuService ContextMenuService @inject ContextMenuService ContextMenuService
<RadzenDataGrid class="rz-shadow-1" TItem="TDataModel" Data="@DataList" AllowPaging="@AllowPaging" PageSize="@PageSize" <RadzenDataGrid class="rz-shadow-1" TItem="TDataModel" Data="@DataList" GridLines="DataGridGridLines.Both"
AllowFiltering FilterMode="FilterMode.Advanced" CellRender="@CellRender" AllowColumnResize AllowFiltering FilterMode="FilterMode.Advanced" CellRender="@CellRender" AllowColumnResize AllowVirtualization
SelectionMode="DataGridSelectionMode.Single" @bind-Value="@SelectedRow" SelectionMode="DataGridSelectionMode.Single" @bind-Value="@SelectedRow" Density="@Density.Default"
RowSelect="@SelectRow" RowDoubleClick="@OnRowDoublClick"> RowSelect="@SelectRow" RowDoubleClick="@OnRowDoublClick">
<Columns> <Columns>
@if (VisibleRowNo == true) @if (VisibleRowNo == true)
@ -20,8 +20,8 @@
@foreach (var col in typeof(TDataModel).GetProperties()) @foreach (var col in typeof(TDataModel).GetProperties())
{ {
if(DisableColums?.Contains(col.Name.ToLower()) == true) @* if(DisableColums?.Contains(col.Name.ToLower()) == true)
continue; continue; *@
if (col.Name.ToLower().Equals("testdate")) if (col.Name.ToLower().Equals("testdate"))
{ {
@ -33,6 +33,16 @@
</Template> </Template>
</RadzenDataGridColumn> </RadzenDataGridColumn>
} }
else if (col.Name.ToLower().Equals("testdatetime"))
{
<RadzenDataGridColumn Property="@col.Name" Title="@col.Name" Width="20rem">
<Template>
<span>
@Convert.ToDateTime(col.GetValue(context)).ToString("yyyy-MM-dd HH:mm:ss")
</span>
</Template>
</RadzenDataGridColumn>
}
else if (col.Name.ToLower().Equals("ok")) else if (col.Name.ToLower().Equals("ok"))
{ {
<RadzenDataGridColumn Property="@col.Name" Title="@col.Name"> <RadzenDataGridColumn Property="@col.Name" Title="@col.Name">
@ -52,17 +62,7 @@
</span> </span>
</Template> </Template>
</RadzenDataGridColumn> </RadzenDataGridColumn>
} }
else if (col.Name.ToLower().Equals("testdatetime"))
{
<RadzenDataGridColumn Property="@col.Name" Title="@col.Name" Width="20rem">
<Template>
<span>
@col.GetValue(context)
</span>
</Template>
</RadzenDataGridColumn>
}
else if (col.Name.ToLower().Contains("cntid") || col.Name.ToLower().Contains("reqid")) else if (col.Name.ToLower().Contains("cntid") || col.Name.ToLower().Contains("reqid"))
{ {
<RadzenDataGridColumn Property="@col.Name" Title="@col.Name" Width="20rem"> <RadzenDataGridColumn Property="@col.Name" Title="@col.Name" Width="20rem">
@ -106,25 +106,20 @@
[Parameter] [Parameter]
public bool HostColumnMerge { get; set; } public bool HostColumnMerge { get; set; }
[Parameter]
public bool AllowPaging { get; set; } = true;
[Parameter]
public int PageSize { get; set; } = 30;
[Parameter]
public List<string> DisableColums { get; set; }
private IList<TDataModel> SelectedRow; private IList<TDataModel> SelectedRow;
private string SummaryTestResult = string.Empty; private string SummaryTestResult = string.Empty;
private string SummaryTestTime = string.Empty; private string SummaryTestTime = string.Empty;
private void CellRender(DataGridCellRenderEventArgs<TDataModel> args) private void CellRender(DataGridCellRenderEventArgs<TDataModel> args)
{ {
if (args.Column.Property == null) if (args.Column.Property == null)
return; 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) if ((args.Column.Property.ToLower().Equals("testdate") || args.Column.Property.ToLower().Equals("host")) == false)
return; return;
@ -134,12 +129,12 @@
if (args.Column.Property.ToLower().Equals("testdate")) if (args.Column.Property.ToLower().Equals("testdate"))
{ {
int rowCount = 0; int rowCount = 0;
var take = DataList.Skip(index).Take(((index / PageSize) + 1) * PageSize - index); var take = DataList.Skip(index).Cast<Overview>();
foreach (var r in take) 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; rowCount += 1;
} }
@ -160,10 +155,10 @@
return; return;
int rowCount = 0; int rowCount = 0;
var take = DataList.Skip(index).Take(((index / PageSize) + 1) * PageSize - index); var take = DataList.Skip(index).Cast<Overview>();
foreach (var r in take) foreach (var r in take)
{ {
if (r.Host == args.Data.Host) if (r.Host == cellData.Host)
{ {
rowCount += 1; rowCount += 1;
} }

View File

@ -69,10 +69,6 @@
<RadzenStack Style="width: 18rem;" Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.SpaceBetween"> <RadzenStack Style="width: 18rem;" Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.SpaceBetween">
<RadzenLabel Text="Merge By PartNumber"></RadzenLabel> <RadzenLabel Text="Merge By PartNumber"></RadzenLabel>
<RadzenSwitch @bind-Value=@IsMergePartNumberOption Change="@OnChangeMergePartNumberOption"></RadzenSwitch> <RadzenSwitch @bind-Value=@IsMergePartNumberOption Change="@OnChangeMergePartNumberOption"></RadzenSwitch>
</RadzenStack>
<RadzenStack Style="width: 18rem;" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.SpaceBetween">
<RadzenLabel Text="Page Size"></RadzenLabel>
<RadzenNumeric Style="width: 8rem;" @bind-Value=@PageSize Min="10" Max="200"></RadzenNumeric>
</RadzenStack> </RadzenStack>
</RadzenStack> </RadzenStack>
</RadzenStack> </RadzenStack>
@ -108,24 +104,21 @@
@if (tab.Key.EnumTab == EnumTabs.OverviewC1) @if (tab.Key.EnumTab == EnumTabs.OverviewC1)
{ {
<TraGrid TDataModel="Overview" DataList="@(tab.Value.Cast<Overview>())" OnClickContextMenu="@OnClickDetailOverviewContextMenu" <TraGrid TDataModel="Overview" DataList="@(tab.Value.Cast<Overview>())" OnClickContextMenu="@OnClickDetailOverviewContextMenu"
OnSelectRow="@OnSelectRowOverview" PageSize="@PageSize" DisableColums="@OverviewDisableColums" OnSelectRow="@OnSelectRowOverview" OnDoubleClickRow="@OnDoubleClickRowOverview" HostColumnMerge>
OnDoubleClickRow="@OnDoubleClickRowOverview" HostColumnMerge>
</TraGrid> </TraGrid>
} }
@if (tab.Key.EnumTab == EnumTabs.OverviewC1Detail) @if (tab.Key.EnumTab == EnumTabs.OverviewC1Detail)
{ {
<TraGrid TDataModel="Overview" DataList="@(tab.Value.Cast<Overview>())" OnClickContextMenu="@OnClickDetailOverviewContextMenu" <TraGrid TDataModel="Overview" DataList="@(tab.Value.Cast<Overview>())" OnClickContextMenu="@OnClickDetailOverviewContextMenu"
OnSelectRow="@OnSelectRowOverview" PageSize="@PageSize" DisableColums="@OverviewDisableColums" OnSelectRow="@OnSelectRowOverview" OnDoubleClickRow="@OnDoubleClickRowDetailOverview" HostColumnMerge>
OnDoubleClickRow="@OnDoubleClickRowDetailOverview" HostColumnMerge>
</TraGrid> </TraGrid>
} }
@if (tab.Key.EnumTab == EnumTabs.TestHistoryC1) @if (tab.Key.EnumTab == EnumTabs.TestHistoryC1)
{ {
<TraGrid TDataModel="TestHistory" DataList="@(tab.Value.Cast<TestHistory>())" OnClickContextMenu="@OnClickDetailOverviewContextMenu" <TraGrid TDataModel="TestHistory" DataList="@(tab.Value.Cast<TestHistory>())" OnClickContextMenu="@OnClickDetailOverviewContextMenu"
OnSelectRow="@OnSelectRowOverview" PageSize="@PageSize" DisableColums="@HistoryDisableColums" OnSelectRow="@OnSelectRowOverview" OnDoubleClickRow="@OnDoubleClickRowHistory" VisibleRowNo HostColumnMerge="false">
OnDoubleClickRow="@OnDoubleClickRowHistory" VisibleRowNo HostColumnMerge="false">
</TraGrid> </TraGrid>
} }
@ -169,8 +162,8 @@
<!--TestResult--> <!--TestResult-->
<RadzenStack Style="height:inherit;"> <RadzenStack Style="height:inherit;">
<TraGrid TDataModel="DecompressTestResult" DataList="@(tab.Value.Cast<DecompressTestResult>())" OnClickContextMenu="@OnClickDetailOverviewContextMenu" <TraGrid TDataModel="ParseTestResult" DataList="@(tab.Value.Cast<ParseTestResult>())" OnClickContextMenu="@OnClickDetailOverviewContextMenu"
AllowPaging="false" DisableColums="@HistoryDisableColums" VisibleRowNo HostColumnMerge="false"> HostColumnMerge="false">
</TraGrid> </TraGrid>
</RadzenStack> </RadzenStack>
</RadzenStack> </RadzenStack>
@ -196,9 +189,7 @@
//options //options
private bool IsMergePartNumberOption = false; private bool IsMergePartNumberOption = false;
private int PageSize = 30; private int PageSize = 30;
private List<string> OverviewDisableColums = new List<string>();
private List<string> HistoryDisableColums = new List<string> { "testdate", "modelname", "firsttesttime", "finaltesttime", "testlistcntid" };
//tab //tab
RadzenTabs tabs; RadzenTabs tabs;
@ -227,11 +218,7 @@
private async Task GetOverviews() private async Task GetOverviews()
{ {
List<Overview> overviews = new(); List<Overview> overviews = new();
OverviewDisableColums.Clear();
OverviewDisableColums.Add("rn");
OverviewDisableColums.Add("stepversion");
if (IsMergePartNumberOption == false) if (IsMergePartNumberOption == false)
{ {
@ -239,10 +226,6 @@
} }
else else
{ {
OverviewDisableColums.Add("stationname");
OverviewDisableColums.Add("host");
OverviewDisableColums.Add("section");
OverviewDisableColums.Add("testlistcntid");
overviews = await CPXV2LogService.GetOverviewMerged(SearchDataOverviews); overviews = await CPXV2LogService.GetOverviewMerged(SearchDataOverviews);
} }
@ -323,12 +306,19 @@
private async Task OnDoubleClickRowHistory(IDataModel row) 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; int tabId = Tabs.Max(x => x.Key.Id) + 1;
Tabs.AddOrUpdate( Tabs.AddOrUpdate(
new OrderdTab { Id = tabId, TabName = $"{EnumTabs.TestResultC1}({tabId})", EnumTab = EnumTabs.TestResultC1, Parent = row }, new OrderdTab { Id = tabId, TabName = $"{EnumTabs.TestResultC1}({tabId})", EnumTab = EnumTabs.TestResultC1, Parent = row },
key => s.DecompressTestResult.Cast<IDataModel>().ToList(), (key, oldValue) => s.DecompressTestResult.Cast<IDataModel>().ToList()); key => s.ParseTestResult.Cast<IDataModel>().ToList(), (key, oldValue) => s.ParseTestResult.Cast<IDataModel>().ToList());
tabs.Reload(); tabs.Reload();
SelectedTabIndex = Tabs.Count - 1; SelectedTabIndex = Tabs.Count - 1;

View File

@ -28,7 +28,6 @@ public static class ObjectExtend
Total = data.GroupBy(x => (x.Summary.TestListCntID, x.Summary.TestDT.Date)).Last().Count(), 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")), 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")), 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 TestListCntID = data.Last().Summary.TestListCntID
}; };
} }
@ -52,8 +51,7 @@ public static class ObjectExtend
FinalTestTime = data.Max(y => y.Summary.TestDT).ToString("HH:mm:ss"), FinalTestTime = data.Max(y => y.Summary.TestDT).ToString("HH:mm:ss"),
Total = data.Count(), Total = data.Count(),
OK = data.Count(y => y.Summary.Result.ToLower().Equals("ok")), OK = data.Count(y => y.Summary.Result.ToLower().Equals("ok")),
NG = data.Count(y => !y.Summary.Result.ToLower().Equals("ok")), NG = data.Count(y => !y.Summary.Result.ToLower().Equals("ok")),
RN = 0
}; };
} }
@ -67,7 +65,6 @@ public static class ObjectExtend
return new TestHistory return new TestHistory
{ {
No = data.Summary.No, No = data.Summary.No,
TestDate = data.Summary.TestDT,
TestDateTime = data.Summary.TestDT, TestDateTime = data.Summary.TestDT,
StationName = data.Summary.StationName, StationName = data.Summary.StationName,
Host = data.Summary.HostID, Host = data.Summary.HostID,
@ -79,29 +76,87 @@ public static class ObjectExtend
ParentNo = data.Summary.ProdNo_P, ParentNo = data.Summary.ProdNo_P,
FileCode = data.Summary.ProdCode, FileCode = data.Summary.ProdCode,
FileVersion = data.Summary.Version, FileVersion = data.Summary.Version,
StepVersion = data.Summary.StepVersion, StepVersion = Convert.ToInt32(data.Summary.StepVersion),
Duration = data.Summary.Duration, Duration = data.Summary.Duration,
TestResult = data.Summary.Result, TestResult = data.Summary.Result,
TestListCntID = data.Summary.TestListCntID,
TestListReqID = data.Summary.TestListCntID TestListReqID = data.Summary.TestListCntID
}; };
} }
public static List<DecompressTestResult> 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 decompStr = histTestResult?.LogData.GzipDecompress();
var logData = JsonConvert.DeserializeObject<List<DecompressTestResult>>(decompStr); var logData = JsonConvert.DeserializeObject<List<DecompressTestResult>>(decompStr);
foreach (var log in logData) testResult.DecompressTestResult = 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();
}
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;
} }
} }

View File

@ -1,9 +1,6 @@
namespace Web.Tra.Model namespace Web.Tra.Model
{ {
public interface IDataModel public interface IDataModel
{ {
public DateTime? TestDate { get; set; }
public string Host { get; set; }
public string ModelName { get; set; }
} }
} }

View File

@ -1,20 +1,6 @@
namespace Web.Tra.Model namespace Web.Tra.Model
{ {
public interface IOverviewModel : IDataModel 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; }
} }
} }

View File

@ -1,7 +1,6 @@
namespace Web.Tra.Model namespace Web.Tra.Model
{ {
public interface ITestResultModel : IDataModel public interface ITestResultModel : IDataModel
{ {
public long No { get; set; }
} }
} }

View File

@ -20,8 +20,7 @@
public string FinalTestTime { get; set; } public string FinalTestTime { get; set; }
public int Total { get; set; } public int Total { get; set; }
public int OK { get; set; } public int OK { get; set; }
public int NG { get; set; } public int NG { get; set; }
public int RN { get; set; }
public string TestListCntID { get; set; } public string TestListCntID { get; set; }
} }
} }

View File

@ -2,12 +2,10 @@
{ {
public class TestHistory : IOverviewModel public class TestHistory : IOverviewModel
{ {
public long No { get; set; } public long No { get; set; }
public DateTime? TestDate { get; set; } public DateTime? TestDateTime { get; set; }
public DateTime? TestDateTime { get; set; }
public string ModelName { get; set; } //no use
public string StationName { get; set; } public string StationName { get; set; }
public string Host { get; set; } public string Host { get; set; }
public string Section { get; set; } public string Section { get; set; }
public string ProductID { get; set; } public string ProductID { get; set; }
public string TestType { get; set; } public string TestType { get; set; }
@ -16,12 +14,9 @@
public string ParentNo { get; set; } public string ParentNo { get; set; }
public string FileCode { get; set; } public string FileCode { get; set; }
public string FileVersion { get; set; } public string FileVersion { get; set; }
public int? StepVersion { get; set; } public int StepVersion { get; set; }
public string Duration { get; set; } public string Duration { get; set; }
public string TestResult { get; set; } public string TestResult { get; set; }
public string FirstTestTime { get; set; }
public string FinalTestTime { get; set; }
public string TestListCntID { get; set; }
public string TestListReqID { get; set; } public string TestListReqID { get; set; }
} }
} }

View File

@ -1,45 +1,57 @@
 
using SystemX.Core.DB;
namespace Web.Tra.Model namespace Web.Tra.Model
{ {
public class TestResult : ITestResultModel public class TestResult : ITestResultModel
{ {
public long No { get; set; } //log data
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; }
public List<DecompressTestResult> DecompressTestResult { get; set; } public List<DecompressTestResult> DecompressTestResult { get; set; }
public List<ParseTestResult> ParseTestResult { get; set; }
//test list data
public TestList? TestList { get; set; }
} }
public class DecompressTestResult : ITestResultModel 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 int StepID { get; set; }
public double MeasVal { get; set; } public double MeasVal { get; set; }
public string MeasValStr { get; set; } public string MeasValStr { get; set; }
public string Message { get; set; } public string Message { get; set; }
public string GlobalMin { get; set; } public string GlobalMin { get; set; }
public string MesauredValue { get; set; } public string MeasuredValue { get; set; }
public string GlobalMax { get; set; } public string GlobalMax { get; set; }
public string Result { get; set; } public string Result { get; set; }
public string SpentTime { 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<VRFY_TestListFileRelease> TestListFile { get; set; }
}
} }

View File

@ -1,5 +1,6 @@
using Azure.Core; using Azure.Core;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Data; using System.Data;
using SystemX.Core.DB; using SystemX.Core.DB;
using SystemX.Core.Services; using SystemX.Core.Services;
@ -116,95 +117,170 @@ namespace Web.Tra.Services
public async Task<List<Overview>> GetDetailOverview(List<SearchData> request, IOverviewModel row) public async Task<List<Overview>> GetDetailOverview(List<SearchData> request, IOverviewModel row)
{ {
var detailOverview = request var selectRow = row as Overview;
.Where(x => x.Summary.HostID == row.Host && List<Overview> detailOverview = new List<Overview>();
x.Summary.Section == row.Section &&
x.Summary.Testcode == row.TestCode if (selectRow is not null)
) {
.OrderByDescending(x=>x.Summary.TestDT.Date) detailOverview = request
.GroupBy(x => ( .Where(x => x.Summary.HostID == selectRow.Host &&
DateOnly.FromDateTime(x.Summary.TestDT.Date), x.Summary.Section == selectRow.Section &&
x.Summary.TestListCntID, x.Summary.Testcode == selectRow.TestCode
x.Summary.StepVersion )
)) .OrderByDescending(x => x.Summary.TestDT.Date)
.Select(x => x.ToOverview()) .GroupBy(x => (
.OrderBy(x=>x.TestDate); DateOnly.FromDateTime(x.Summary.TestDT.Date),
x.Summary.TestListCntID,
x.Summary.StepVersion
))
.Select(x => x.ToOverview())
.OrderBy(x => x.TestDate)
.ToList();
}
await Task.CompletedTask; await Task.CompletedTask;
return detailOverview.ToList(); return detailOverview;
} }
public async Task<List<Overview>> GetDetailOverviewMerged(List<SearchData> request, IOverviewModel row) public async Task<List<Overview>> GetDetailOverviewMerged(List<SearchData> request, IOverviewModel row)
{ {
var detailOverview = request var selectRow = row as Overview;
.Where(x => x.Summary.Testcode == row.TestCode && List<Overview> detailOverview = new List<Overview>();
x.Summary.ProdNo_C == row.ProductNo &&
x.Summary.ProdNo_P == row.ParentNo) if (selectRow is not null)
.GroupBy(x => ( {
DateOnly.FromDateTime(x.Summary.TestDT.Date), detailOverview = request
x.Summary.StepVersion .Where(x => x.Summary.Testcode == selectRow.TestCode &&
)) x.Summary.ProdNo_C == selectRow.ProductNo &&
.Select(x => x.ToOverviewMerged()) x.Summary.ProdNo_P == selectRow.ParentNo)
.OrderBy(x => x.TestDate); .GroupBy(x => (
DateOnly.FromDateTime(x.Summary.TestDT.Date),
x.Summary.StepVersion
))
.Select(x => x.ToOverviewMerged())
.OrderBy(x => x.TestDate)
.ToList();
}
await Task.CompletedTask; await Task.CompletedTask;
return detailOverview.ToList(); return detailOverview;
} }
public async Task<List<TestHistory>> GetTestHistory(List<SearchData> request, IOverviewModel row) public async Task<List<TestHistory>> GetTestHistory(List<SearchData> request, IOverviewModel row)
{ {
var testHistory = request var selectRow = row as Overview;
.Where(x => x.Summary.TestDT.Date == row.TestDate.Value.Date && List<TestHistory> testHistory = new List<TestHistory>();
x.Summary.HostID == row.Host &&
x.Summary.Section == row.Section && if (selectRow is not null)
x.Summary.ProdNo_C == row.ProductNo && {
x.Summary.ProdNo_P == row.ParentNo && testHistory = request
x.Summary.TestListCntID == row.TestListCntID) .Where(x => x.Summary.TestDT.Date == selectRow.TestDate.Value.Date &&
.Select(x=>x.ToTestHistory()) x.Summary.HostID == selectRow.Host &&
.OrderBy(x => x.No); 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; await Task.CompletedTask;
return testHistory.ToList(); return testHistory;
} }
public async Task<List<TestHistory>> GetTestHistoryMerged(List<SearchData> request, IOverviewModel row) public async Task<List<TestHistory>> GetTestHistoryMerged(List<SearchData> request, IOverviewModel row)
{ {
var testHistory = request var selectRow = row as Overview;
.Where(x => x.Summary.TestDT.Date == row.TestDate.Value.Date && List<TestHistory> testHistory = new List<TestHistory>();
x.Summary.Testcode == row.TestCode&&
x.Summary.ProdNo_C == row.ProductNo && if(selectRow is not null)
x.Summary.ProdNo_P == row.ParentNo) {
.Select(x => x.ToTestHistory()) testHistory = request
.OrderBy(x => (x.TestListReqID, x.No)); .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; await Task.CompletedTask;
return testHistory.ToList(); return testHistory.ToList();
} }
public async Task<TestResult> GetTestResult(IDataModel row) public async Task<TestResult> GetTestResult(IDataModel row, int stepVersion)
{ {
TestResult result = new TestResult(); TestResult result = new TestResult();
var selectRow = row as TestHistory; var selectRow = row as TestHistory;
if(selectRow is not null) if(selectRow is not null)
{ {
int year = selectRow.TestDate.Value.Year; TestList testList = new TestList();
//cpxv2
using (var scope = _scopeFactory.CreateScope()) using (var scope = _scopeFactory.CreateScope())
{ {
var provider = scope.ServiceProvider.GetRequiredService<DbContextProvider>(); var provider = scope.ServiceProvider.GetRequiredService<DbContextProvider>();
using (var context = GetDBContext<CPXV2Log>(provider, year)) using (var context = GetDBContext<CPXV2>(provider, 1))
{ {
if (context is not null) if (context is not null)
{ {
var testResult = context.HIST_TestResults.Where(x => x.No == selectRow.No)?.First(); int testCode = (int)context.STAT_TestCodes.Where(x => x.TestCode == selectRow.TestCode)?.First()?.No;
var decompressTestResult = testResult.ToTestResult();
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<DbContextProvider>();
using (var context = GetDBContext<CPXV2Log>(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; await Task.CompletedTask;
return result; return result;