[성현모] Summary 추가, GridFilter 컨피그 분리
This commit is contained in:
@ -14,5 +14,50 @@
|
||||
"UserID": "Alis",
|
||||
"Password": "Kefico!@34"
|
||||
}
|
||||
],
|
||||
"GridDisableFilter": [
|
||||
{
|
||||
"EnumTabs": 1,
|
||||
"Filter": [
|
||||
"Navigation",
|
||||
"StepVersion",
|
||||
"IsGlobal",
|
||||
"UpdateDT",
|
||||
"Enable",
|
||||
"testlistfilenonavigation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"EnumTabs": 11,
|
||||
"Filter": [
|
||||
"StationName",
|
||||
"Host",
|
||||
"Section",
|
||||
"TestListCntID"
|
||||
]
|
||||
},
|
||||
{
|
||||
"EnumTabs": 21,
|
||||
"Filter": [
|
||||
"StationName",
|
||||
"Host",
|
||||
"Section",
|
||||
"TestListCntID"
|
||||
]
|
||||
},
|
||||
{
|
||||
"EnumTabs": 30,
|
||||
"Filter": [
|
||||
"TestListFileName",
|
||||
"TestListFileNo",
|
||||
"TestListFVariantNo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"EnumTabs": 1000,
|
||||
"Filter": [
|
||||
"TestListFileNo"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,9 +1,4 @@
|
||||
@using SystemX.Core.Services
|
||||
@using WebClient.Library.Config
|
||||
|
||||
@inherits LayoutComponentBase
|
||||
@inject ConfigService<WebClientConfig> configService
|
||||
@inject NavigationManager NavigationManager
|
||||
@inherits LayoutComponentBase
|
||||
|
||||
<RadzenLayout>
|
||||
<RadzenHeader Style="height: 5rem; font-size: 2rem;" class="rz-px-5">
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
@typeparam TDataModel
|
||||
@using WebClient.Library.Model
|
||||
@typeparam TDataModel
|
||||
|
||||
<RadzenDataGrid class="rz-shadow-1" TItem="TDataModel" Data="@DataList" GridLines="DataGridGridLines.Both"
|
||||
AllowFiltering FilterMode="FilterMode.Advanced" CellRender="@CellRender" AllowColumnResize AllowVirtualization
|
||||
@ -18,8 +19,11 @@
|
||||
|
||||
@foreach (var col in typeof(TDataModel).GetProperties())
|
||||
{
|
||||
if (col.Name.ToLower().Contains("navigation") || col.Name.ToLower().Contains("stepversion") || col.Name.ToLower().Contains("isglobal")
|
||||
|| col.Name.ToLower().Contains("updatedt") || col.Name.ToLower().Contains("enable"))
|
||||
//disable filter
|
||||
if (GlobalGridDisableFilter?.Filter?.Exists(x => x.ToLower() == col.Name.ToLower()) == true)
|
||||
continue;
|
||||
|
||||
if (GridDisableFilter?.Filter?.Exists(x=>x.ToLower() == col.Name.ToLower()) == true)
|
||||
continue;
|
||||
|
||||
if (col.Name.ToLower().Equals("testdate"))
|
||||
@ -111,71 +115,82 @@
|
||||
[Parameter]
|
||||
public bool HostColumnMerge { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EnumTabs EnumTab { get; set; }
|
||||
private GridDisableFilter GlobalGridDisableFilter = new();
|
||||
private GridDisableFilter GridDisableFilter = new();
|
||||
|
||||
private IList<TDataModel> SelectedRow;
|
||||
|
||||
private string SummaryTestResult = string.Empty;
|
||||
private string SummaryTestTime = string.Empty;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
GlobalGridDisableFilter = configService?.GetConfig()?.GridDisableFilter.Where(x => x.EnumTabs == 1)?.FirstOrDefault();
|
||||
GridDisableFilter = configService?.GetConfig()?.GridDisableFilter.Where(x => x.EnumTabs == (int)EnumTab)?.FirstOrDefault();
|
||||
}
|
||||
|
||||
private void CellRender(DataGridCellRenderEventArgs<TDataModel> args)
|
||||
{
|
||||
if (args.Column.Property == null)
|
||||
return;
|
||||
// if (args.Column.Property == null)
|
||||
// return;
|
||||
|
||||
var cellData = args.Data as Overview;
|
||||
if (cellData is 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;
|
||||
// if ((args.Column.Property.ToLower().Equals("testdate") || args.Column.Property.ToLower().Equals("host")) == false)
|
||||
// return;
|
||||
|
||||
int index = DataList.ToList().FindIndex(x => x.Equals(args.Data));
|
||||
// int index = DataList.ToList().FindIndex(x => x.Equals(args.Data));
|
||||
|
||||
//testdate 컬럼일때 날짜 병합
|
||||
if (args.Column.Property.ToLower().Equals("testdate"))
|
||||
{
|
||||
int rowCount = 0;
|
||||
var take = DataList.Skip(index).Cast<Overview>();
|
||||
foreach (var r in take)
|
||||
{
|
||||
if (r.TestDate.Value.Date == cellData.TestDate.Value.Date)
|
||||
{
|
||||
if (r.ModelName == cellData.ModelName)
|
||||
{
|
||||
rowCount += 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
args.Attributes.Clear();
|
||||
if (rowCount > 0)
|
||||
args.Attributes.Add("rowspan", rowCount);
|
||||
}
|
||||
// //testdate 컬럼일때 날짜 병합
|
||||
// if (args.Column.Property.ToLower().Equals("testdate"))
|
||||
// {
|
||||
// int rowCount = 0;
|
||||
// var take = DataList.Skip(index).Cast<Overview>();
|
||||
// foreach (var r in take)
|
||||
// {
|
||||
// if (r.TestDate.Value.Date == cellData.TestDate.Value.Date)
|
||||
// {
|
||||
// if (r.ModelName == cellData.ModelName)
|
||||
// {
|
||||
// rowCount += 1;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// args.Attributes.Clear();
|
||||
// if (rowCount > 0)
|
||||
// args.Attributes.Add("rowspan", rowCount);
|
||||
// }
|
||||
|
||||
if (args.Column.Property.ToLower().Equals("host"))
|
||||
{
|
||||
if (HostColumnMerge == false)
|
||||
return;
|
||||
// if (args.Column.Property.ToLower().Equals("host"))
|
||||
// {
|
||||
// if (HostColumnMerge == false)
|
||||
// return;
|
||||
|
||||
int rowCount = 0;
|
||||
var take = DataList.Skip(index).Cast<Overview>();
|
||||
foreach (var r in take)
|
||||
{
|
||||
if (r.Host == cellData.Host)
|
||||
{
|
||||
rowCount += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
args.Attributes.Clear();
|
||||
if (rowCount > 0)
|
||||
args.Attributes.Add("rowspan", rowCount);
|
||||
}
|
||||
// int rowCount = 0;
|
||||
// var take = DataList.Skip(index).Cast<Overview>();
|
||||
// foreach (var r in take)
|
||||
// {
|
||||
// if (r.Host == cellData.Host)
|
||||
// {
|
||||
// rowCount += 1;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// args.Attributes.Clear();
|
||||
// if (rowCount > 0)
|
||||
// args.Attributes.Add("rowspan", rowCount);
|
||||
// }
|
||||
}
|
||||
|
||||
private async Task SelectRow(TDataModel data)
|
||||
|
||||
@ -65,6 +65,22 @@
|
||||
</RadzenStack>
|
||||
</RadzenStack>
|
||||
|
||||
<!--Function Block-->
|
||||
<RadzenStack Style="height:10rem; width:fit-content;" class="rz-border-right rz-pr-5" Orientation="Orientation.Horizontal" AlignItems="AlignItems.Start" JustifyContent="JustifyContent.Start">
|
||||
<RadzenStack Style="font-size:1.5rem;" Orientation="Orientation.Vertical" AlignItems="AlignItems.Start" JustifyContent="JustifyContent.Center">
|
||||
<RadzenStack Style="cursor: pointer;" class="" Orientation="Orientation.Vertical" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Start" @onclick="@OnSummary">
|
||||
<RadzenIcon Style="font-size: 3.5rem; font-weight:400; color:var(--rz-info)" Icon="ssid_chart"></RadzenIcon>
|
||||
<RadzenLabel Style="font-size: 1.5rem; cursor:pointer; color:var(--rz-info)" Text="Summary"></RadzenLabel>
|
||||
</RadzenStack>
|
||||
</RadzenStack>
|
||||
<RadzenStack Style="font-size:1.5rem;" Orientation="Orientation.Vertical" AlignItems="AlignItems.Start" JustifyContent="JustifyContent.Center">
|
||||
<RadzenStack Style="cursor: pointer;" class="" Orientation="Orientation.Vertical" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Start" @onclick="@OnExportExcel">
|
||||
<RadzenIcon Style="font-size: 3.5rem; font-weight:400; color:var(--rz-success)" Icon="file_export"></RadzenIcon>
|
||||
<RadzenLabel Style="font-size: 1.5rem; cursor:pointer; color:var(--rz-success)" Text="Export Excel"></RadzenLabel>
|
||||
</RadzenStack>
|
||||
</RadzenStack>
|
||||
</RadzenStack>
|
||||
|
||||
<!--Option Block-->
|
||||
<RadzenStack Style="height:10rem; width:fit-content;" class="rz-border-right rz-pr-5" Orientation="Orientation.Horizontal" AlignItems="AlignItems.Start" JustifyContent="JustifyContent.Start">
|
||||
<RadzenStack Style="font-size:1.5rem;" Orientation="Orientation.Vertical" AlignItems="AlignItems.Start" JustifyContent="JustifyContent.Center">
|
||||
@ -98,23 +114,23 @@
|
||||
</RadzenStack>
|
||||
|
||||
<RadzenStack Style="height:calc(100vh - 29rem);">
|
||||
@if (tab.Key.EnumTab == EnumTabs.OverviewC1)
|
||||
@if (tab.Key.EnumTab == EnumTabs.OverviewC1 || tab.Key.EnumTab == EnumTabs.OverviewC1Merged)
|
||||
{
|
||||
<TraGrid TDataModel="Overview" DataList="@(tab.Value.Cast<Overview>())"
|
||||
<TraGrid TDataModel="Overview" DataList="@(tab.Value.Cast<Overview>())" EnumTab="@tab.Key.EnumTab"
|
||||
OnSelectRow="@OnSelectRowOverview" OnDoubleClickRow="@OnDoubleClickRowOverview" HostColumnMerge>
|
||||
</TraGrid>
|
||||
}
|
||||
|
||||
@if (tab.Key.EnumTab == EnumTabs.OverviewC1Detail)
|
||||
@if (tab.Key.EnumTab == EnumTabs.OverviewC1Detail || tab.Key.EnumTab == EnumTabs.OverviewC1DetailMerged)
|
||||
{
|
||||
<TraGrid TDataModel="Overview" DataList="@(tab.Value.Cast<Overview>())"
|
||||
<TraGrid TDataModel="Overview" DataList="@(tab.Value.Cast<Overview>())" EnumTab="@tab.Key.EnumTab"
|
||||
OnSelectRow="@OnSelectRowOverview" OnDoubleClickRow="@OnDoubleClickRowDetailOverview" HostColumnMerge>
|
||||
</TraGrid>
|
||||
}
|
||||
|
||||
@if (tab.Key.EnumTab == EnumTabs.TestHistoryC1)
|
||||
{
|
||||
<TraGrid TDataModel="TestHistory" DataList="@(tab.Value.Cast<TestHistory>())"
|
||||
<TraGrid TDataModel="TestHistory" DataList="@(tab.Value.Cast<TestHistory>())" EnumTab="@tab.Key.EnumTab"
|
||||
OnSelectRow="@OnSelectRowOverview" OnDoubleClickRow="@OnDoubleClickRowHistory" VisibleRowNo HostColumnMerge="false">
|
||||
</TraGrid>
|
||||
}
|
||||
@ -157,7 +173,40 @@
|
||||
@if(tab.Value?.Count > 0)
|
||||
{
|
||||
<TraGrid TDataModel="ParseTestResult" DataList="@(tab.Value.Cast<ParseTestResult>())"
|
||||
HostColumnMerge="false">
|
||||
HostColumnMerge="false" EnumTab="@tab.Key.EnumTab">
|
||||
</TraGrid>
|
||||
}
|
||||
</RadzenStack>
|
||||
</RadzenStack>
|
||||
}
|
||||
|
||||
@if (tab.Key.EnumTab == EnumTabs.TestSummaryC1)
|
||||
{
|
||||
<RadzenStack Style="height:inherit;" Orientation="Orientation.Horizontal">
|
||||
<!--Test Info-->
|
||||
<RadzenStack Style="width:35rem; font-size: 1.5rem; height: inherit;">
|
||||
@{
|
||||
var history = tab.Key.Parent as TestSummaryInformation;
|
||||
<TitleCard HeaderText="Test Information" ContentsHeight="calc(100% - 5rem);" CardStyle="overflow:auto;">
|
||||
<RadzenStack Style="padding:1rem; color: var(--rz-grid-hover-color); overflow-y:auto; align-items:flex-start;">
|
||||
@foreach (var prop in history.GetType().GetProperties())
|
||||
{
|
||||
<RadzenStack Style="width:100%; background-color:transparent;" class="rz-border-bottom rz-p-1 rz-pb-2" Orientation="Orientation.Horizontal">
|
||||
<span style="width:12rem; min-width:12rem; font-size: 1.3rem;">@prop.Name</span>
|
||||
<BlockLabel Text="@prop.GetValue(history).ToString()" MaxWidth="20rem"></BlockLabel>
|
||||
</RadzenStack>
|
||||
}
|
||||
</RadzenStack>
|
||||
</TitleCard>
|
||||
}
|
||||
</RadzenStack>
|
||||
|
||||
<!--TestResult-->
|
||||
<RadzenStack Style="height:inherit;">
|
||||
@if (tab.Value?.Count > 0)
|
||||
{
|
||||
<TraGrid TDataModel="ParseTestSummary" DataList="@(tab.Value.Cast<ParseTestSummary>())"
|
||||
HostColumnMerge="false" EnumTab="@tab.Key.EnumTab">
|
||||
</TraGrid>
|
||||
}
|
||||
</RadzenStack>
|
||||
@ -215,24 +264,26 @@
|
||||
{
|
||||
List<Overview> overviews = new();
|
||||
|
||||
if (IsMergePartNumberOption == false)
|
||||
{
|
||||
overviews = await CPXV2LogService.GetOverviews(SearchDataOverviews);
|
||||
}
|
||||
else
|
||||
{
|
||||
overviews = await CPXV2LogService.GetOverviewMerged(SearchDataOverviews);
|
||||
}
|
||||
|
||||
int tabId = 0;
|
||||
if (Tabs.Count > 0)
|
||||
{
|
||||
tabId = Tabs.Max(x => x.Key.Id) + 1;
|
||||
}
|
||||
|
||||
if (IsMergePartNumberOption == false)
|
||||
{
|
||||
overviews = await CPXV2LogService.GetOverviews(SearchDataOverviews);
|
||||
Tabs.AddOrUpdate(
|
||||
new OrderdTab { Id = tabId, TabName = $"{EnumTabs.OverviewC1} ({tabId})", EnumTab = EnumTabs.OverviewC1, Parent = null },
|
||||
key => overviews.Cast<IDataModel>().ToList(), (key, oldValue) => overviews.Cast<IDataModel>().ToList());
|
||||
}
|
||||
else
|
||||
{
|
||||
overviews = await CPXV2LogService.GetOverviewMerged(SearchDataOverviews);
|
||||
Tabs.AddOrUpdate(
|
||||
new OrderdTab { Id = tabId, TabName = $"{EnumTabs.OverviewC1} ({tabId})", EnumTab = EnumTabs.OverviewC1Merged, Parent = null },
|
||||
key => overviews.Cast<IDataModel>().ToList(), (key, oldValue) => overviews.Cast<IDataModel>().ToList());
|
||||
}
|
||||
|
||||
SelectedTabIndex = Tabs.Count - 1;
|
||||
}
|
||||
@ -262,23 +313,28 @@
|
||||
if (IsMergePartNumberOption == false)
|
||||
{
|
||||
detailOverviews = await CPXV2LogService.GetDetailOverview(SearchDataOverviews, selectRow);
|
||||
}
|
||||
else
|
||||
{
|
||||
detailOverviews = await CPXV2LogService.GetDetailOverviewMerged(SearchDataOverviews, selectRow);
|
||||
}
|
||||
|
||||
int tabId = Tabs.Max(x => x.Key.Id) + 1;
|
||||
Tabs.AddOrUpdate(
|
||||
new OrderdTab { Id = tabId, TabName = $"{EnumTabs.OverviewC1Detail} ({tabId})", EnumTab = EnumTabs.OverviewC1Detail, Parent = row },
|
||||
key => detailOverviews.Cast<IDataModel>().ToList(), (key, oldValue) => detailOverviews.Cast<IDataModel>().ToList());
|
||||
}
|
||||
else
|
||||
{
|
||||
detailOverviews = await CPXV2LogService.GetDetailOverviewMerged(SearchDataOverviews, selectRow);
|
||||
|
||||
int tabId = Tabs.Max(x => x.Key.Id) + 1;
|
||||
Tabs.AddOrUpdate(
|
||||
new OrderdTab { Id = tabId, TabName = $"{EnumTabs.OverviewC1Detail} ({tabId})", EnumTab = EnumTabs.OverviewC1DetailMerged, Parent = row },
|
||||
key => detailOverviews.Cast<IDataModel>().ToList(), (key, oldValue) => detailOverviews.Cast<IDataModel>().ToList());
|
||||
}
|
||||
|
||||
tabs.Reload();
|
||||
SelectedTabIndex = Tabs.Count - 1;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task OnDoubleClickRowDetailOverview(IOverviewModel row)
|
||||
private async Task OnDoubleClickRowDetailOverview(IDataModel row)
|
||||
{
|
||||
List<TestHistory> histories = new();
|
||||
if (IsMergePartNumberOption == false)
|
||||
@ -319,12 +375,12 @@
|
||||
SelectedTabIndex = Tabs.Count - 1;
|
||||
}
|
||||
|
||||
void OnClickClose(int tabId)
|
||||
private void OnClickClose(int tabId)
|
||||
{
|
||||
CloseTab(tabId);
|
||||
}
|
||||
|
||||
void CloseTab(int tabId)
|
||||
private void CloseTab(int tabId)
|
||||
{
|
||||
var removeTab = Tabs.Where(x => x.Key.Id == tabId)?.First().Key;
|
||||
|
||||
@ -347,7 +403,7 @@
|
||||
tabs.Reload();
|
||||
}
|
||||
|
||||
async Task OnChangeMergePartNumberOption()
|
||||
private async Task OnChangeMergePartNumberOption()
|
||||
{
|
||||
PopupService.OpenIndicator("");
|
||||
await GetOverviews();
|
||||
@ -356,8 +412,52 @@
|
||||
PopupService.CloseIndicator();
|
||||
}
|
||||
|
||||
async Task OnClickDisplayTestList(TestHistory history)
|
||||
private async Task OnClickDisplayTestList(TestHistory history)
|
||||
{
|
||||
await JS.InvokeVoidAsync("open", $"/testlist/{history.ProductNo}/{history.TestCode}/{SelectionStepVersion}", "_blank");
|
||||
}
|
||||
|
||||
private async Task OnSummary()
|
||||
{
|
||||
var selectedTab = Tabs.Select(x => x.Key)?.FirstOrDefault(x=>x.Id == SelectedTabIndex);
|
||||
if(selectedTab is not null)
|
||||
{
|
||||
//history에서만 summary 사용
|
||||
if(selectedTab.EnumTab == EnumTabs.TestHistoryC1)
|
||||
{
|
||||
if(Tabs.TryGetValue(selectedTab, out var data) == true)
|
||||
{
|
||||
if(Int32.TryParse(SelectionStepVersion, out int stepVersion) == true)
|
||||
{
|
||||
var testHistories = data.Cast<TestHistory>().ToList();
|
||||
var summary = await CPXV2LogService.GetTestSummary(testHistories, stepVersion);
|
||||
var summaryInformation = testHistories.GetTestSummaryInformation();
|
||||
|
||||
if(summary is not null && summaryInformation is not null)
|
||||
{
|
||||
summaryInformation.SearchRangeStart = (DateTime)new DateTime(RequestSearch.SearchStart, TimeOnly.MinValue);
|
||||
summaryInformation.SearchRangeEnd = (DateTime)new DateTime(RequestSearch.SearchEnd, TimeOnly.MaxValue);
|
||||
|
||||
int tabId = Tabs.Max(x => x.Key.Id) + 1;
|
||||
Tabs.AddOrUpdate(
|
||||
new OrderdTab { Id = tabId, TabName = $"{EnumTabs.TestSummaryC1}({tabId})", EnumTab = EnumTabs.TestSummaryC1, Parent = summaryInformation },
|
||||
key => summary?.ParseTestSummary?.Cast<IDataModel>()?.ToList(), (key, oldValue) => summary?.ParseTestSummary?.Cast<IDataModel>()?.ToList());
|
||||
|
||||
tabs.Reload();
|
||||
SelectedTabIndex = Tabs.Count - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LogXnet.WriteLine("Not history",LogXLabel.Warning);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task OnExportExcel()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@ -96,7 +96,7 @@
|
||||
|
||||
<RadzenStack Style="height:90vh;" class="rz-pb-3">
|
||||
<TraGrid TDataModel="VRFY_TestListFileRelease" DataList="@GetTestList.TestListFile"
|
||||
HostColumnMerge="false">
|
||||
HostColumnMerge="false" EnumTab="EnumTabs.TestListFile">
|
||||
</TraGrid>
|
||||
|
||||
</RadzenStack>
|
||||
|
||||
@ -14,3 +14,9 @@
|
||||
|
||||
@using Radzen
|
||||
@using Radzen.Blazor
|
||||
|
||||
@using SystemX.Core.Services
|
||||
@using WebClient.Library.Config
|
||||
|
||||
@inject ConfigService<WebClientConfig> configService
|
||||
@inject NavigationManager NavigationManager
|
||||
|
||||
@ -105,7 +105,7 @@ public static class ObjectExtend
|
||||
return testResult;
|
||||
}
|
||||
|
||||
public static ParseTestResult ParseTestResult(this DecompressTestResult logData, TestList testList = null)
|
||||
private 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)
|
||||
@ -163,4 +163,72 @@ public static class ObjectExtend
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static TestSummary ToTestSummary(this List<TestResult> testResults)
|
||||
{
|
||||
TestSummary testSummary = new TestSummary();
|
||||
testSummary.ParseTestSummary = new List<ParseTestSummary>();
|
||||
|
||||
if(testResults?.Count > 0)
|
||||
{
|
||||
var parseTestResults = testResults.SelectMany(x => x.ParseTestResult??=new()).ToList();
|
||||
var rowGroup = parseTestResults.GroupBy(x => x.StepNo).ToList().OrderBy(x => x.Key);
|
||||
foreach(var rows in rowGroup)
|
||||
{
|
||||
var summary = new ParseTestSummary
|
||||
{
|
||||
StepNo = rows.First().StepNo,
|
||||
Variant = rows.First().Variant,
|
||||
Gate = rows.First().Gate,
|
||||
MO = rows.First().MO,
|
||||
Function = rows.First().Function,
|
||||
Min = rows.First().Min,
|
||||
Average = rows.First().MeasuredValue,
|
||||
Max = rows.First().Max,
|
||||
Dimension = rows.First().Dimension,
|
||||
Total = rows.Count(),
|
||||
OK = rows.Count(x => x.Result.ToLower().Equals("ok") || x.Result.ToLower().Equals("none")),
|
||||
NG = rows.Count(x => !(x.Result.ToLower().Equals("ok") || x.Result.ToLower().Equals("none"))),
|
||||
};
|
||||
|
||||
//calculate dim
|
||||
if (rows.FirstOrDefault().Dimension.ToLower() == "dez" || rows.FirstOrDefault().Dimension.ToLower() == "v" ||
|
||||
rows.FirstOrDefault().Dimension.ToLower() == "float" || rows.FirstOrDefault().Dimension.ToLower() == "int")
|
||||
{
|
||||
summary.Average = rows.Average(x => Convert.ToDouble(x.MeasuredValue)).ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (summary.Average == "0.0")
|
||||
summary.Average = string.Empty;
|
||||
}
|
||||
|
||||
testSummary.ParseTestSummary.Add(summary);
|
||||
}
|
||||
}
|
||||
|
||||
return testSummary;
|
||||
}
|
||||
|
||||
public static TestSummaryInformation GetTestSummaryInformation(this List<TestHistory> testHistories)
|
||||
{
|
||||
return new TestSummaryInformation
|
||||
{
|
||||
StartTime = (DateTime)testHistories.Min(x => x.TestDateTime),
|
||||
EndTime = (DateTime)testHistories.Max(x => x.TestDateTime),
|
||||
StationName = testHistories.GroupBy(x=>x.StationName)?.Count() > 1 ? string.Empty : testHistories.FirstOrDefault().StationName,
|
||||
HostID = testHistories.GroupBy(x => x.Host)?.Count() > 1 ? string.Empty : testHistories.FirstOrDefault().Host,
|
||||
SectionID = testHistories.GroupBy(x => x.Section)?.Count() > 1 ? string.Empty : testHistories.FirstOrDefault().Section,
|
||||
TestType = testHistories.FirstOrDefault().TestType,
|
||||
ProductNo = testHistories.FirstOrDefault().ProductNo,
|
||||
TestCode = testHistories.FirstOrDefault().TestCode,
|
||||
ParentNo = testHistories.FirstOrDefault().ParentNo,
|
||||
TestListFileNo = Convert.ToInt32(testHistories.FirstOrDefault().TestListFileNo),
|
||||
TestListVariantNo = Convert.ToInt32(testHistories.FirstOrDefault().TestListVariantNo),
|
||||
ProductionCode = testHistories.FirstOrDefault().FileCode,
|
||||
FileVersion = testHistories.FirstOrDefault().FileVersion,
|
||||
StepVersion = testHistories.FirstOrDefault().StepVersion,
|
||||
TestRequestsID = testHistories.FirstOrDefault().TestListReqID,
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -3,10 +3,21 @@
|
||||
public enum EnumTabs
|
||||
{
|
||||
None = 0,
|
||||
|
||||
OverviewC1 = 10,
|
||||
OverviewC1Merged = 11,
|
||||
|
||||
OverviewC1Detail = 20,
|
||||
OverviewC1DetailMerged = 21,
|
||||
|
||||
TestHistoryC1 = 30,
|
||||
|
||||
TestResultC1 = 40,
|
||||
|
||||
TestSummaryC1 = 50,
|
||||
|
||||
TestListFile = 1000,
|
||||
|
||||
End = 10000
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +0,0 @@
|
||||
namespace Web.Tra.Model
|
||||
{
|
||||
public interface IOverviewModel : IDataModel
|
||||
{
|
||||
}
|
||||
}
|
||||
@ -1,6 +0,0 @@
|
||||
namespace Web.Tra.Model
|
||||
{
|
||||
public interface ITestResultModel : IDataModel
|
||||
{
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
namespace Web.Tra.Model
|
||||
{
|
||||
public class Overview : IOverviewModel
|
||||
public class Overview : IDataModel
|
||||
{
|
||||
public DateTime? TestDate { get; set; }
|
||||
public string StationName { get; set; }
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
namespace Web.Tra.Model
|
||||
{
|
||||
public class TestHistory : IOverviewModel
|
||||
public class TestHistory : IDataModel
|
||||
{
|
||||
public long No { get; set; }
|
||||
public DateTime? TestDateTime { get; set; }
|
||||
|
||||
@ -3,7 +3,7 @@ using SystemX.Core.DB;
|
||||
|
||||
namespace Web.Tra.Model
|
||||
{
|
||||
public class TestResult : ITestResultModel
|
||||
public class TestResult : IDataModel
|
||||
{
|
||||
//log data
|
||||
public List<DecompressTestResult> DecompressTestResult { get; set; }
|
||||
@ -13,7 +13,7 @@ namespace Web.Tra.Model
|
||||
public TestList? TestList { get; set; }
|
||||
}
|
||||
|
||||
public class DecompressTestResult : ITestResultModel
|
||||
public class DecompressTestResult : IDataModel
|
||||
{
|
||||
public int StepID { get; set; }
|
||||
public double MeasVal { get; set; }
|
||||
@ -26,7 +26,7 @@ namespace Web.Tra.Model
|
||||
public string SpentTime { get; set; }
|
||||
}
|
||||
|
||||
public class ParseTestResult : ITestResultModel
|
||||
public class ParseTestResult : IDataModel
|
||||
{
|
||||
public int StepNo { get; set; }
|
||||
public long Position { get; set; }
|
||||
|
||||
44
Projects/WebClient/Web.Tra/Model/TestSummary.cs
Normal file
44
Projects/WebClient/Web.Tra/Model/TestSummary.cs
Normal file
@ -0,0 +1,44 @@
|
||||
namespace Web.Tra.Model
|
||||
{
|
||||
public class TestSummary : IDataModel
|
||||
{
|
||||
public List<ParseTestSummary> ParseTestSummary { get; set; }
|
||||
}
|
||||
|
||||
public class ParseTestSummary : IDataModel
|
||||
{
|
||||
public int StepNo { 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 Average { get; set; }
|
||||
public string Max { get; set; }
|
||||
public string Dimension { get; set; }
|
||||
public int Total { get; set; }
|
||||
public int OK { get; set; }
|
||||
public int NG { get; set; }
|
||||
}
|
||||
|
||||
public class TestSummaryInformation : IDataModel
|
||||
{
|
||||
public DateTime SearchRangeStart { get; set; }
|
||||
public DateTime SearchRangeEnd { get; set; }
|
||||
public DateTime StartTime { get; set; }
|
||||
public DateTime EndTime { get; set; }
|
||||
public string StationName { get; set; }
|
||||
public string HostID { get; set; }
|
||||
public string SectionID { get; set; }
|
||||
public string TestType { get; set; }
|
||||
public string ProductNo { get; set; }
|
||||
public string TestCode { get; set; }
|
||||
public string ParentNo { get; set; }
|
||||
public int TestListFileNo { get; set; }
|
||||
public int TestListVariantNo { get; set; }
|
||||
public string ProductionCode { get; set; }
|
||||
public string FileVersion { get; set; }
|
||||
public int StepVersion { get; set; }
|
||||
public string TestRequestsID { get; set; }
|
||||
}
|
||||
}
|
||||
@ -115,7 +115,7 @@ namespace Web.Tra.Services
|
||||
return group.ToList();
|
||||
}
|
||||
|
||||
public async Task<List<Overview>> GetDetailOverview(List<SearchData> request, IOverviewModel row)
|
||||
public async Task<List<Overview>> GetDetailOverview(List<SearchData> request, IDataModel row)
|
||||
{
|
||||
var selectRow = row as Overview;
|
||||
List<Overview> detailOverview = new List<Overview>();
|
||||
@ -142,7 +142,7 @@ namespace Web.Tra.Services
|
||||
return detailOverview;
|
||||
}
|
||||
|
||||
public async Task<List<Overview>> GetDetailOverviewMerged(List<SearchData> request, IOverviewModel row)
|
||||
public async Task<List<Overview>> GetDetailOverviewMerged(List<SearchData> request, IDataModel row)
|
||||
{
|
||||
var selectRow = row as Overview;
|
||||
List<Overview> detailOverview = new List<Overview>();
|
||||
@ -166,7 +166,7 @@ namespace Web.Tra.Services
|
||||
return detailOverview;
|
||||
}
|
||||
|
||||
public async Task<List<TestHistory>> GetTestHistory(List<SearchData> request, IOverviewModel row)
|
||||
public async Task<List<TestHistory>> GetTestHistory(List<SearchData> request, IDataModel row)
|
||||
{
|
||||
var selectRow = row as Overview;
|
||||
List<TestHistory> testHistory = new List<TestHistory>();
|
||||
@ -189,7 +189,7 @@ namespace Web.Tra.Services
|
||||
return testHistory;
|
||||
}
|
||||
|
||||
public async Task<List<TestHistory>> GetTestHistoryMerged(List<SearchData> request, IOverviewModel row)
|
||||
public async Task<List<TestHistory>> GetTestHistoryMerged(List<SearchData> request, IDataModel row)
|
||||
{
|
||||
var selectRow = row as Overview;
|
||||
List<TestHistory> testHistory = new List<TestHistory>();
|
||||
@ -200,7 +200,8 @@ namespace Web.Tra.Services
|
||||
.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)
|
||||
x.Summary.ProdNo_P == selectRow.ParentNo &&
|
||||
x.Summary.StepVersion == selectRow.StepVersion)
|
||||
.Select(x => x.ToTestHistory())
|
||||
.OrderBy(x => (x.TestListReqID, x.No))
|
||||
.ToList();
|
||||
@ -306,6 +307,28 @@ namespace Web.Tra.Services
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<TestSummary> GetTestSummary(List<TestHistory> histories, int stepVersion)
|
||||
{
|
||||
TestSummary result = new TestSummary();
|
||||
|
||||
if (histories?.Count() > 0)
|
||||
{
|
||||
List<TestResult> getTestResults = new List<TestResult>();
|
||||
|
||||
//test result parse
|
||||
foreach (var hist in histories)
|
||||
{
|
||||
getTestResults.Add(await GetTestResult(hist, stepVersion));
|
||||
}
|
||||
|
||||
result = getTestResults.ToTestSummary();
|
||||
|
||||
}
|
||||
|
||||
await Task.CompletedTask;
|
||||
return result;
|
||||
}
|
||||
|
||||
public bool TryParseTestCode(string testCode, out int outValue)
|
||||
{
|
||||
bool result = false;
|
||||
|
||||
@ -6,6 +6,7 @@ using System.Text.Json.Serialization;
|
||||
using System.Threading.Tasks;
|
||||
using SystemX.Core.Config;
|
||||
using SystemX.Core.Config.Model;
|
||||
using WebClient.Library.Model;
|
||||
|
||||
namespace WebClient.Library.Config
|
||||
{
|
||||
@ -16,5 +17,8 @@ namespace WebClient.Library.Config
|
||||
|
||||
[JsonPropertyName("ApplicationName")]
|
||||
public string? ApplicationName { get; set; }
|
||||
|
||||
[JsonPropertyName("GridDisableFilter")]
|
||||
public List<GridDisableFilter>? GridDisableFilter { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace WebClient.Library.Model
|
||||
{
|
||||
public class GridDisableFilter
|
||||
{
|
||||
public int EnumTabs { get; set; }
|
||||
public List<string> Filter { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user