[성현모] 테스트리스트 조회 기능 추가

This commit is contained in:
SHM
2025-09-17 15:12:10 +09:00
parent 89fe237e52
commit bdde95386f
8 changed files with 131 additions and 77 deletions

View File

@ -1,6 +1,4 @@
@typeparam TDataModel where TDataModel : IDataModel @typeparam TDataModel
@inject ContextMenuService ContextMenuService
<RadzenDataGrid class="rz-shadow-1" TItem="TDataModel" Data="@DataList" GridLines="DataGridGridLines.Both" <RadzenDataGrid class="rz-shadow-1" TItem="TDataModel" Data="@DataList" GridLines="DataGridGridLines.Both"
AllowFiltering FilterMode="FilterMode.Advanced" CellRender="@CellRender" AllowColumnResize AllowVirtualization AllowFiltering FilterMode="FilterMode.Advanced" CellRender="@CellRender" AllowColumnResize AllowVirtualization
@ -97,9 +95,6 @@
[Parameter] [Parameter]
public EventCallback<TDataModel> OnDoubleClickRow{ get; set; } public EventCallback<TDataModel> OnDoubleClickRow{ get; set; }
[Parameter]
public EventCallback OnClickContextMenu { get; set; }
[Parameter] [Parameter]
public bool VisibleRowNo { get; set; } public bool VisibleRowNo { get; set; }

View File

@ -7,6 +7,8 @@
@using Web.Tra.Services @using Web.Tra.Services
@inject CPXV2LogService CPXV2LogService @inject CPXV2LogService CPXV2LogService
@inject PopupService PopupService @inject PopupService PopupService
@inject NavigationManager Navigation
@inject IJSRuntime JS
<RadzenStack Style="width:100%; background-color:var(--rz-primary-lighter);" class="rz-border-bottom rz-p-3" Orientation="Orientation.Horizontal" AlignItems="AlignItems.Start" JustifyContent="JustifyContent.Start"> <RadzenStack Style="width:100%; background-color:var(--rz-primary-lighter);" class="rz-border-bottom rz-p-3" Orientation="Orientation.Horizontal" AlignItems="AlignItems.Start" JustifyContent="JustifyContent.Start">
<!--Search Block--> <!--Search Block-->
@ -103,21 +105,21 @@
<RadzenStack Style="height:calc(100vh - 29rem);"> <RadzenStack Style="height:calc(100vh - 29rem);">
@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>())"
OnSelectRow="@OnSelectRowOverview" OnDoubleClickRow="@OnDoubleClickRowOverview" HostColumnMerge> OnSelectRow="@OnSelectRowOverview" 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>())"
OnSelectRow="@OnSelectRowOverview" OnDoubleClickRow="@OnDoubleClickRowDetailOverview" HostColumnMerge> OnSelectRow="@OnSelectRowOverview" 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>())"
OnSelectRow="@OnSelectRowOverview" OnDoubleClickRow="@OnDoubleClickRowHistory" VisibleRowNo HostColumnMerge="false"> OnSelectRow="@OnSelectRowOverview" OnDoubleClickRow="@OnDoubleClickRowHistory" VisibleRowNo HostColumnMerge="false">
</TraGrid> </TraGrid>
} }
@ -149,22 +151,27 @@
<RadzenStack Style="padding:1rem; color: var(--rz-grid-hover-color); overflow-y:auto;"> <RadzenStack Style="padding:1rem; color: var(--rz-grid-hover-color); overflow-y:auto;">
@foreach (var prop in history.GetType().GetProperties()) @foreach (var prop in history.GetType().GetProperties())
{ {
<RadzenStack Style="width:31rem; background-color:transparent;" class="rz-border-bottom rz-p-1 rz-pb-2" Orientation="Orientation.Horizontal"> <RadzenStack Style="width:100%; background-color:transparent;" class="rz-border-bottom rz-p-1 rz-pb-2" Orientation="Orientation.Horizontal">
<span style="width:12rem;">@prop.Name</span> <span style="width:12rem; min-width:12rem; font-size: 1.3rem;">@prop.Name</span>
<span>@prop.GetValue(history)</span> <span style="font-size:1.3rem; width:20rem; max-width:20rem; display:inline-block;white-space:normal;word-wrap:break-word;">@prop.GetValue(history)</span>
</RadzenStack> </RadzenStack>
} }
</RadzenStack> </RadzenStack>
</RadzenStack> </RadzenStack>
</RadzenCard> </RadzenCard>
<!--display TestList-->
<RadzenButton ButtonStyle="ButtonStyle.Warning" Text="Display TestList" Click="@(() => OnClickDisplayTestList(history))"></RadzenButton>
} }
</RadzenStack> </RadzenStack>
<!--TestResult--> <!--TestResult-->
<RadzenStack Style="height:inherit;"> <RadzenStack Style="height:inherit;">
<TraGrid TDataModel="ParseTestResult" DataList="@(tab.Value.Cast<ParseTestResult>())" OnClickContextMenu="@OnClickDetailOverviewContextMenu" @if(tab.Value?.Count > 0)
{
<TraGrid TDataModel="ParseTestResult" DataList="@(tab.Value.Cast<ParseTestResult>())"
HostColumnMerge="false"> HostColumnMerge="false">
</TraGrid> </TraGrid>
}
</RadzenStack> </RadzenStack>
</RadzenStack> </RadzenStack>
} }
@ -318,35 +325,12 @@
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.ParseTestResult.Cast<IDataModel>().ToList(), (key, oldValue) => s.ParseTestResult.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;
} }
private void OnClickDetailOverviewContextMenu()
{
// DetailOverviews = OverviewService.SearchDetailOverview(SelectedDataService.SelectedOverview);
// if (ListTabs.ContainsKey(EnumTabs.OverviewC1Detail.ToString()) == false)
// ListTabs.Add($"{EnumTabs.OverviewC1Detail.ToString()}", EnumTabs.OverviewC1Detail);
// tabs.Reload();
// SelectedTabIndex = ListTabs.Keys.ToList().IndexOf(EnumTabs.OverviewC1Detail.ToString());
}
private void OnClickHistoryContextMenu()
{
// TestHistories = OverviewService.SearchTestHistory(SelectedDataService.SelectedOverview);
// int index = ListTabs.Count(x => x.Key.Contains(EnumTabs.TestHistoryC1.ToString())) + 1;
// ListTabs.Add($"{EnumTabs.TestHistoryC1}({index})", EnumTabs.TestHistoryC1);
// tabs.Reload();
// SelectedTabIndex = ListTabs.Keys.ToList().IndexOf($"{EnumTabs.TestHistoryC1}({index})");
}
void OnClickClose(int tabId) void OnClickClose(int tabId)
{ {
CloseTab(tabId); CloseTab(tabId);
@ -372,26 +356,20 @@
{ {
SelectedTabIndex = Tabs.Count - 1; SelectedTabIndex = Tabs.Count - 1;
} }
tabs.Reload(); tabs.Reload();
} }
async Task OnChangeMergePartNumberOption() async Task OnChangeMergePartNumberOption()
{ {
PopupService.OpenIndicator(""); PopupService.OpenIndicator("");
// foreach(var tab in Tabs)
// {
// if (tab.Value == EnumTabs.OverviewC1)
// continue;
// CloseTab(tab.Key.ToString());
// }
await GetOverviews(); await GetOverviews();
await Task.Delay(300); await Task.Delay(300);
PopupService.CloseIndicator(); PopupService.CloseIndicator();
} }
async Task OnClickDisplayTestList(TestHistory history)
{
await JS.InvokeVoidAsync("open", $"/testlist/{history.ProductNo}/{history.TestCode}/{SelectionStepVersion}", "_blank");
}
} }

View File

@ -0,0 +1,29 @@
@using SystemX.Core.DB
@using Web.Tra.Services
@page "/testlist/{ProductNo}/{TestCode}/{StepVersion}"
@inject CPXV2LogService CPXV2LogService
<RadzenStack Style="height:80vh;">
<TraGrid TDataModel="VRFY_TestListFileRelease" DataList="@GetTestList.TestListFile"
HostColumnMerge="false">
</TraGrid>
</RadzenStack>
@code {
[Parameter]
public string ProductNo { get; set; }
[Parameter]
public string TestCode { get; set; }
[Parameter]
public string StepVersion { get; set; }
private TestList GetTestList = new TestList();
protected override async Task OnParametersSetAsync()
{
GetTestList = await CPXV2LogService?.GetTestList(ProductNo, TestCode, Convert.ToInt32(StepVersion));
}
}

View File

@ -79,7 +79,11 @@ public static class ObjectExtend
StepVersion = Convert.ToInt32(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,
TestListReqID = data.Summary.TestListCntID TestListReqID = data.Summary.TestListCntID,
TestListFileName = data.Summary.TestListFileName,
TestListFileNo = data.Summary.TestListFileNo.ToString(),
TestListVariantNo = data.Summary.TestListVariantNo.ToString()
}; };
} }

View File

@ -18,5 +18,9 @@
public string Duration { get; set; } public string Duration { get; set; }
public string TestResult { get; set; } public string TestResult { get; set; }
public string TestListReqID { get; set; } public string TestListReqID { get; set; }
public string TestListFileName { get; set; }
public string TestListFileNo { get; set; }
public string TestListVariantNo { get; set; }
} }
} }

View File

@ -1,4 +1,5 @@
using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.JSInterop;
using Radzen; using Radzen;
using SystemX.Core.Config.Model; using SystemX.Core.Config.Model;
using SystemX.Core.DB; using SystemX.Core.DB;

View File

@ -210,15 +210,12 @@ namespace Web.Tra.Services
return testHistory.ToList(); return testHistory.ToList();
} }
public async Task<TestResult> GetTestResult(IDataModel row, int stepVersion) public async Task<TestList> GetTestList(string productNo, string testCode, int stepVersion)
{
TestResult result = new TestResult();
var selectRow = row as TestHistory;
if(selectRow is not null)
{ {
TestList testList = new TestList(); TestList testList = new TestList();
if (TryParseTestCode(testCode, out var outTestCode) == true)
{
//cpxv2 //cpxv2
using (var scope = _scopeFactory.CreateScope()) using (var scope = _scopeFactory.CreateScope())
{ {
@ -227,9 +224,7 @@ namespace Web.Tra.Services
{ {
if (context is not null) if (context is not null)
{ {
int testCode = (int)context.STAT_TestCodes.Where(x => x.TestCode == selectRow.TestCode)?.First()?.No; var prodRelease = context.PROD_Releases.Where(x => x.ProdNo_C == productNo && x.TestCodeNo == outTestCode)?.FirstOrDefault();
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 prodVariant = context.PROD_Variants.Where(x => x.No == prodRelease.VariantNo)?.FirstOrDefault();
var prodGroup = context.PROD_Groups.Where(x => x.No == prodVariant.GroupNo)?.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 statTestCode = context.STAT_TestCodes.Where(x => x.No == prodRelease.TestCodeNo)?.FirstOrDefault();
@ -263,8 +258,28 @@ namespace Web.Tra.Services
} }
} }
} }
}
return testList;
}
public async Task<TestResult> GetTestResult(IDataModel row, int stepVersion)
{
TestResult result = new TestResult();
var selectRow = row as TestHistory;
if(selectRow is not null)
{
TestList testList = new TestList();
//if (TryParseTestCode(selectRow.TestCode, out var testCode) == true)
{
//testlist info
var testListInfo = await GetTestList(selectRow.ProductNo, selectRow.TestCode, stepVersion);
//log //log
if(testListInfo?.TestListFile is not null)
{
if (Int32.TryParse(selectRow.TestDateTime?.Year.ToString(), out var year) == true) if (Int32.TryParse(selectRow.TestDateTime?.Year.ToString(), out var year) == true)
{ {
using (var scope = _scopeFactory.CreateScope()) using (var scope = _scopeFactory.CreateScope())
@ -275,7 +290,9 @@ namespace Web.Tra.Services
if (context is not null) if (context is not null)
{ {
var testResult = context.HIST_TestResults.Where(x => x.No == selectRow.No)?.First(); var testResult = context.HIST_TestResults.Where(x => x.No == selectRow.No)?.First();
result = testResult.ToTestResult(testList); result = testResult.ToTestResult(testListInfo);
}
}
} }
} }
} }
@ -286,6 +303,32 @@ namespace Web.Tra.Services
return result; return result;
} }
public bool TryParseTestCode(string testCode, out int outValue)
{
bool result = false;
outValue = -1;
//search testlist
using (var scope = _scopeFactory.CreateScope())
{
var provider = scope.ServiceProvider.GetRequiredService<DbContextProvider>();
using (var context = GetDBContext<CPXV2>(provider, 1))
{
if (context is not null)
{
var selectTestCode = context.STAT_TestCodes.Where(x => x.TestCode == testCode)?.FirstOrDefault();
if(selectTestCode is not null)
{
outValue = selectTestCode.No;
result = true;
}
}
}
}
return result;
}
//Get DBContext //Get DBContext
private T? GetDBContext<T>(DbContextProvider provider, int dbID) where T : DbContext private T? GetDBContext<T>(DbContextProvider provider, int dbID) where T : DbContext
{ {