[성현모] Overview Merged 추가

This commit is contained in:
SHM
2025-09-03 10:32:20 +09:00
parent 978e4faadc
commit 02f170db5f
5 changed files with 193 additions and 14 deletions

View File

@ -5,7 +5,7 @@
<RadzenDataGrid Style="height:calc(100vh - 23rem); font-size: 20px;" TItem="TDataModel" Data="@DataList" AllowPaging PageSize="100"
AllowFiltering FilterMode="FilterMode.Advanced" CellRender="@CellRender"
SelectionMode="DataGridSelectionMode.Single" @bind-Value="@SelectedRow"
CellContextMenu="@OnCellContextMenu" RowSelect="@SelectRow">
CellContextMenu="@OnCellContextMenu" RowSelect="@SelectRow" RowDoubleClick="@OnRowDoublClick">
<Columns>
@if (VisibleRowNo == true)
@ -185,4 +185,9 @@
await OnSelectRow.InvokeAsync(data);
StateHasChanged();
}
private async Task OnRowDoublClick<T>(DataGridRowMouseEventArgs<T> args)
{
}
}

View File

@ -8,13 +8,13 @@
<RadzenStack Style="height:10rem; width:fit-content;" class="rz-border-right rz-pr-5" Orientation="Orientation.Horizontal" AlignItems="AlignItems.Start" JustifyContent="JustifyContent.Start">
<!--Date Picker Block-->
<RadzenStack Style="font-size:1.5rem;" Orientation="Orientation.Vertical" AlignItems="AlignItems.Start" JustifyContent="JustifyContent.Center">
<RadzenStack Style="width: 25rem; margin-bottom:0.5rem;" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.SpaceBetween">
<RadzenStack Style="width: 25rem; margin-bottom:0.3rem;" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.SpaceBetween">
<RadzenLabel Text="Begin"></RadzenLabel>
<RadzenDatePicker @bind-Value=@RequestSearch.SearchStart TValue="DateOnly"></RadzenDatePicker>
</RadzenStack>
<RadzenStack Style="width:25rem; margin-bottom: 0.5rem;" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.SpaceBetween">
<RadzenStack Style="width:25rem; margin-bottom: 0.3rem;" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.SpaceBetween">
<RadzenLabel Text="End"></RadzenLabel>
<RadzenDatePicker Style="font-size: 1.5rem !important; color:red;" @bind-Value=@RequestSearch.SearchEnd TValue="DateOnly"></RadzenDatePicker>
<RadzenDatePicker Style="font-size: 1.5rem !important;" @bind-Value=@RequestSearch.SearchEnd TValue="DateOnly"></RadzenDatePicker>
</RadzenStack>
</RadzenStack>
@ -24,6 +24,49 @@
</RadzenStack>
</RadzenStack>
<!--Selected Data Block-->
<RadzenStack Style="height:10rem; width:fit-content;" class="rz-border-right rz-pr-5" Orientation="Orientation.Horizontal" AlignItems="AlignItems.Start" JustifyContent="JustifyContent.Start">
<!--left-->
<RadzenStack Style="font-size:1.5rem;" Orientation="Orientation.Vertical" AlignItems="AlignItems.Start" JustifyContent="JustifyContent.Center">
<RadzenStack Style="width: 29rem;" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.SpaceBetween">
<RadzenLabel Text="Station Name"></RadzenLabel>
<RadzenTextBox @bind-Value=@SelectionStationName></RadzenTextBox>
</RadzenStack>
<RadzenStack Style="width: 29rem;" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.SpaceBetween">
<RadzenLabel Text="Product No"></RadzenLabel>
<RadzenTextBox @bind-Value=@SelectionProductNO></RadzenTextBox>
</RadzenStack>
<RadzenStack Style="width: 29rem;" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.SpaceBetween">
<RadzenLabel Text="Parent Info"></RadzenLabel>
<RadzenTextBox @bind-Value=@SelectionParentInfo></RadzenTextBox>
</RadzenStack>
</RadzenStack>
<!--right-->
<RadzenStack Style="font-size:1.5rem;" Orientation="Orientation.Vertical" AlignItems="AlignItems.Start" JustifyContent="JustifyContent.Center">
<RadzenStack Style="width: 29rem;" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.SpaceBetween">
<RadzenLabel Text="Search Begin"></RadzenLabel>
<RadzenTextBox @bind-Value=@SelectionSearchBegin></RadzenTextBox>
</RadzenStack>
<RadzenStack Style="width: 29rem;" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.SpaceBetween">
<RadzenLabel Text="Search End"></RadzenLabel>
<RadzenTextBox @bind-Value=@SelectionSearchEnd></RadzenTextBox>
</RadzenStack>
<RadzenStack Style="width: 29rem;" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.SpaceBetween">
<RadzenLabel Text="Step Version"></RadzenLabel>
<RadzenTextBox @bind-Value=@SelectionStepVersion></RadzenTextBox>
</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">
<RadzenStack Style="width: 18rem;" Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.SpaceBetween">
<RadzenLabel Text="Merge By PartNumber"></RadzenLabel>
<RadzenSwitch @bind-Value=@IsMergePartNumberOption></RadzenSwitch>
</RadzenStack>
</RadzenStack>
</RadzenStack>
</RadzenStack>
<RadzenTabs @ref="@tabs" Style="width:100%; height:100%;" RenderMode="TabRenderMode.Client" @bind-SelectedIndex=@SelectedTabIndex>
@ -38,16 +81,16 @@
<ChildContent>
@if (tab.Key == EnumTabs.OverviewC1.ToString())
{
<TraGrid TDataModel="Overview" DataList="@Overviews" OnClickContextMenu="@OnClickDetailOverviewContextMenu"
<TraGrid TDataModel="OverviewMerged" DataList="@Overviews" OnClickContextMenu="@OnClickDetailOverviewContextMenu"
OnSelectRow="@OnSelectRowOverview">
</TraGrid>
}
@if (tab.Key == EnumTabs.OverviewC1Detail.ToString())
{
<TraGrid TDataModel="Overview" DataList="@DetailOverviews" OnClickContextMenu="@OnClickHistoryContextMenu"
@* <TraGrid TDataModel="Overview" DataList="@DetailOverviews" OnClickContextMenu="@OnClickHistoryContextMenu"
OnSelectRow="@OnSelectRowOverview" HostColumnMerge="true">
</TraGrid>
</TraGrid> *@
}
@*
@if (tab.Key.Contains(EnumTabs.TestHistoryC1.ToString()))
@ -64,10 +107,19 @@
@code {
private RequestSearch RequestSearch = new RequestSearch();
private string SelectionStationName = string.Empty;
private string SelectionProductNO = string.Empty;
private string SelectionParentInfo = string.Empty;
private string SelectionSearchBegin = string.Empty;
private string SelectionSearchEnd = string.Empty;
private string SelectionStepVersion = string.Empty;
private bool IsMergePartNumberOption = false;
RadzenTabs tabs;
int SelectedTabIndex = 0;
Dictionary<string, EnumTabs> ListTabs = new Dictionary<string, EnumTabs>();
List<Overview> Overviews = new List<Overview>();
List<OverviewMerged> Overviews = new List<OverviewMerged>();
List<Overview> DetailOverviews = new List<Overview>();
// List<TestHistory> TestHistories = new List<TestHistory>();
@ -86,7 +138,7 @@
PopupService.OpenIndicator("Search Data");
Overviews = await CPXV2LogService.GetOverview(RequestSearch);
Overviews = await CPXV2LogService.GetOverviewMerged(RequestSearch);
if (ListTabs.ContainsKey(EnumTabs.OverviewC1.ToString()) == false)
ListTabs.Add($"{EnumTabs.OverviewC1}", EnumTabs.OverviewC1);
@ -113,12 +165,15 @@
// ListTabs.Add($"{EnumTabs.OverviewC1}", EnumTabs.OverviewC1);
}
private void OnSelectRowOverview(Overview overview)
private void OnSelectRowOverview(OverviewMerged overview)
{
// if (SelectedTabIndex < 0)
// SelectedTabIndex = 0;
// SelectionStationName = $"{overview.StationName} ({overview.Host},{overview.Section})";
// SelectionProductNO = $"{overview.ProductNo} ({overview.TestCode})";
// SelectionParentInfo = $"{overview.ParentNo} ({overview.FileVersion},{overview.FileCode})";
// SelectedDataService.SetSelectedOverview(overview);
// SelectionSearchBegin = $"{overview.TestDate?.ToString("yyyy-MM-dd")} {overview.FirstTestTime}";
// SelectionSearchEnd = $"{overview.TestDate?.ToString("yyyy-MM-dd")} {overview.FinalTestTime}";
// SelectionStepVersion = $"{overview.StepVersion}";
}
private void OnClickDetailOverviewContextMenu()

View File

@ -30,6 +30,30 @@ public static class ObjectExtend
};
}
public static OverviewMerged ToOverviewMerged(this IEnumerable<SearchData> data)
{
return new OverviewMerged
{
TestDate = data.Max(x => x.Summary.TestDT.Date),
ModelName = data.Last().TestInfo?.PROD_Group?.ModelName,
TestType = data.Last().Summary.TestType,
ProductNo = data.Last().Summary.ProdNo_C,
TestCode = data.Last().Summary.Testcode,
ParentNo = data.Last().Summary.ProdNo_P,
TestListFileNo = data.Last().Summary.TestListFileNo,
TestListVariantNo = data.Last().Summary.TestListVariantNo,
FileCode = data.Last().Summary.ProdCode,
FileVersion = data.Last().Summary.Version,
StepVersion = data.Last().Summary.StepVersion,
FirstTestTime = data.Min(y => y.Summary.TestDT).ToString("HH:mm:ss"),
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
};
}
public static Overview ToDetailOverview(this IEnumerable<SearchData> data)
{
return data.ToOverview();

View File

@ -24,4 +24,25 @@
public int RN { get; set; }
public string TestListCntID { get; set; }
}
public class OverviewMerged : IDataModel
{
public DateTime? TestDate { get; set; }
public string ModelName { 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 FileCode { get; set; }
public string FileVersion { get; set; }
public int? StepVersion { get; set; }
public string FirstTestTime { get; set; }
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; }
}
}

View File

@ -83,6 +83,80 @@ namespace Web.Tra.Services
return overview.OrderBy(x=>x.TestDate).ToList();
}
public async Task<List<OverviewMerged>> GetOverviewMerged(RequestSearch request)
{
List<OverviewMerged> overview = new List<OverviewMerged>();
int startYear = request.SearchStart.Year;
int endYear = request.SearchEnd.Year;
//search log
List<HIST_LogSummary> SearchLogList = new List<HIST_LogSummary>();
for (int i = startYear; i <= endYear; i++)
{
using (var scope = _scopeFactory.CreateScope())
{
var provider = scope.ServiceProvider.GetRequiredService<DbContextProvider>();
using (var context = GetDBContext<CPXV2Log>(provider, i))
{
if (context is not null)
{
SearchLogList.AddRange(await context.HIST_LogSummaries.Where(x => request.SearchStart <= DateOnly.FromDateTime(x.TestDT) && DateOnly.FromDateTime(x.TestDT) <= request.SearchEnd).ToListAsync());
}
}
}
}
//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 varProdVariant = context.PROD_Variants.ToList();
var varProudGroup = context.PROD_Groups.ToList();
var TesetInfoList = varProdVariant.Select(x => new TestInfo
{
PROD_Variant = x,
PROD_Group = varProudGroup.Find(y => y.No == x.GroupNo)
}).ToList();
var search = SearchLogList.Select(x => new SearchData
{
Summary = x,
TestInfo = TesetInfoList.Find(y => y.PROD_Variant.No == x.TestListVariantNo)
});
var ListSearchData = search
//.Where(x => x.Summary.TestListVariantNo > 0)
.OrderByDescending(x => x.Summary.TestDT).ToList();
var group = ListSearchData.GroupBy(x =>
(DateOnly.FromDateTime(x.Summary.TestDT.Date),
x.Summary.TestType,
x.Summary.ProdNo_C,
x.Summary.Testcode,
x.Summary.TestListFileNo,
x.Summary.TestListVariantNo,
x.Summary.ProdNo_P,
x.Summary.ProdCode,
x.Summary.Version,
x.Summary.StepVersion))
.Select(x => x.ToOverviewMerged())
.DistinctBy(x => (x.ModelName, x.TestType, x.ProductNo, x.TestCode, x.ParentNo,
x.TestListFileNo, x.TestListVariantNo, x.FileCode, x.FileVersion))
.OrderBy(x => (x.ProductNo, x.ParentNo, x.TestDate));
overview.AddRange(group);
}
}
}
return overview;
}
//Get DBContext
private T? GetDBContext<T>(DbContextProvider provider, int dbID) where T : DbContext
{