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

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

View File

@ -7,6 +7,8 @@
@using Web.Tra.Services
@inject CPXV2LogService CPXV2LogService
@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">
<!--Search Block-->
@ -103,21 +105,21 @@
<RadzenStack Style="height:calc(100vh - 29rem);">
@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>
</TraGrid>
}
@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>
</TraGrid>
}
@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">
</TraGrid>
}
@ -131,12 +133,12 @@
var history = tab.Key.Parent as TestHistory;
if(history.TestResult.ToLower().Contains("ok") == true)
{
<RadzenLabel Style="width:inherit; height: 5rem; min-height:5rem; background:var(--rz-success); border: solid 2px var(--rz-grid-hover-color); overflow:auto;" class="rz-shadow-1" />
<RadzenLabel Style="width:inherit; height: 5rem; min-height:5rem; background:var(--rz-success); border: solid 2px var(--rz-grid-hover-color); overflow:auto;" class="rz-shadow-1"/>
}
else
{
<RadzenLabel Style="width:inherit; height: 5rem; min-height:5rem; background:var(--rz-danger); border: solid 2px var(--rz-grid-hover-color); overflow:auto;" class="rz-shadow-1" />
}
}
<RadzenCard Style="height: calc(100% - 5rem); overflow:hidden;" class="rz-p-0 rz-pb-2">
<RadzenStack Style="height:100%;">
@ -149,22 +151,27 @@
<RadzenStack Style="padding:1rem; color: var(--rz-grid-hover-color); overflow-y:auto;">
@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">
<span style="width:12rem;">@prop.Name</span>
<span>@prop.GetValue(history)</span>
<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>
<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>
</RadzenCard>
<!--display TestList-->
<RadzenButton ButtonStyle="ButtonStyle.Warning" Text="Display TestList" Click="@(() => OnClickDisplayTestList(history))"></RadzenButton>
}
</RadzenStack>
<!--TestResult-->
<RadzenStack Style="height:inherit;">
<TraGrid TDataModel="ParseTestResult" DataList="@(tab.Value.Cast<ParseTestResult>())" OnClickContextMenu="@OnClickDetailOverviewContextMenu"
HostColumnMerge="false">
@if(tab.Value?.Count > 0)
{
<TraGrid TDataModel="ParseTestResult" DataList="@(tab.Value.Cast<ParseTestResult>())"
HostColumnMerge="false">
</TraGrid>
}
</RadzenStack>
</RadzenStack>
}
@ -318,35 +325,12 @@
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.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();
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)
{
CloseTab(tabId);
@ -372,26 +356,20 @@
{
SelectedTabIndex = Tabs.Count - 1;
}
tabs.Reload();
}
async Task OnChangeMergePartNumberOption()
{
PopupService.OpenIndicator("");
// foreach(var tab in Tabs)
// {
// if (tab.Value == EnumTabs.OverviewC1)
// continue;
// CloseTab(tab.Key.ToString());
// }
await GetOverviews();
await Task.Delay(300);
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),
Duration = data.Summary.Duration,
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 TestResult { 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.JSInterop;
using Radzen;
using SystemX.Core.Config.Model;
using SystemX.Core.DB;

View File

@ -210,15 +210,12 @@ namespace Web.Tra.Services
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
using (var scope = _scopeFactory.CreateScope())
{
@ -227,9 +224,7 @@ namespace Web.Tra.Services
{
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 == selectRow.ProductNo && x.TestCodeNo == testCode)?.FirstOrDefault();
var prodRelease = context.PROD_Releases.Where(x => x.ProdNo_C == productNo && x.TestCodeNo == outTestCode)?.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();
@ -241,7 +236,7 @@ namespace Web.Tra.Services
{
stepVersion = maxStepVersion.LatestStepVersion;
}
else if(stepVersion < 0)
else if (stepVersion < 0)
{
stepVersion = 0;
}
@ -249,9 +244,9 @@ namespace Web.Tra.Services
var findTestList = context.VRFY_TestListFileReleases
.Where(x => x.TestListFileNo == prodVariant.TestListFileNo && x.StepVersion <= stepVersion)
.OrderBy(x => x.StepID)
.ThenByDescending(x=>x.StepVersion)
.ThenByDescending(x => x.StepVersion)
.AsEnumerable()
.DistinctBy(x=>x.StepID)
.DistinctBy(x => x.StepID)
.ToList();
testList.ProdRelease = prodRelease;
@ -263,22 +258,44 @@ namespace Web.Tra.Services
}
}
}
}
//log
if (Int32.TryParse(selectRow.TestDateTime?.Year.ToString(), out var year) == true)
{
using (var scope = _scopeFactory.CreateScope())
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
if(testListInfo?.TestListFile is not null)
{
var provider = scope.ServiceProvider.GetRequiredService<DbContextProvider>();
using (var context = GetDBContext<CPXV2Log>(provider, year))
if (Int32.TryParse(selectRow.TestDateTime?.Year.ToString(), out var year) == true)
{
if (context is not null)
using (var scope = _scopeFactory.CreateScope())
{
var testResult = context.HIST_TestResults.Where(x => x.No == selectRow.No)?.First();
result = testResult.ToTestResult(testList);
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(testListInfo);
}
}
}
}
}
}
}
}
@ -286,6 +303,32 @@ namespace Web.Tra.Services
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
private T? GetDBContext<T>(DbContextProvider provider, int dbID) where T : DbContext
{

View File

@ -102,6 +102,6 @@ h1:focus {
}
/*common*/
span{
font-size: 1.5rem;
span {
font-size: 1.5rem;
}