[성현모] Overview Merged 추가
This commit is contained in:
@ -5,7 +5,7 @@
|
|||||||
<RadzenDataGrid Style="height:calc(100vh - 23rem); font-size: 20px;" TItem="TDataModel" Data="@DataList" AllowPaging PageSize="100"
|
<RadzenDataGrid Style="height:calc(100vh - 23rem); font-size: 20px;" TItem="TDataModel" Data="@DataList" AllowPaging PageSize="100"
|
||||||
AllowFiltering FilterMode="FilterMode.Advanced" CellRender="@CellRender"
|
AllowFiltering FilterMode="FilterMode.Advanced" CellRender="@CellRender"
|
||||||
SelectionMode="DataGridSelectionMode.Single" @bind-Value="@SelectedRow"
|
SelectionMode="DataGridSelectionMode.Single" @bind-Value="@SelectedRow"
|
||||||
CellContextMenu="@OnCellContextMenu" RowSelect="@SelectRow">
|
CellContextMenu="@OnCellContextMenu" RowSelect="@SelectRow" RowDoubleClick="@OnRowDoublClick">
|
||||||
<Columns>
|
<Columns>
|
||||||
|
|
||||||
@if (VisibleRowNo == true)
|
@if (VisibleRowNo == true)
|
||||||
@ -185,4 +185,9 @@
|
|||||||
await OnSelectRow.InvokeAsync(data);
|
await OnSelectRow.InvokeAsync(data);
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task OnRowDoublClick<T>(DataGridRowMouseEventArgs<T> args)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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">
|
<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-->
|
<!--Date Picker Block-->
|
||||||
<RadzenStack Style="font-size:1.5rem;" Orientation="Orientation.Vertical" AlignItems="AlignItems.Start" JustifyContent="JustifyContent.Center">
|
<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>
|
<RadzenLabel Text="Begin"></RadzenLabel>
|
||||||
<RadzenDatePicker @bind-Value=@RequestSearch.SearchStart TValue="DateOnly"></RadzenDatePicker>
|
<RadzenDatePicker @bind-Value=@RequestSearch.SearchStart TValue="DateOnly"></RadzenDatePicker>
|
||||||
</RadzenStack>
|
</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>
|
<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>
|
||||||
</RadzenStack>
|
</RadzenStack>
|
||||||
|
|
||||||
@ -24,6 +24,49 @@
|
|||||||
</RadzenStack>
|
</RadzenStack>
|
||||||
</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>
|
</RadzenStack>
|
||||||
|
|
||||||
<RadzenTabs @ref="@tabs" Style="width:100%; height:100%;" RenderMode="TabRenderMode.Client" @bind-SelectedIndex=@SelectedTabIndex>
|
<RadzenTabs @ref="@tabs" Style="width:100%; height:100%;" RenderMode="TabRenderMode.Client" @bind-SelectedIndex=@SelectedTabIndex>
|
||||||
@ -38,16 +81,16 @@
|
|||||||
<ChildContent>
|
<ChildContent>
|
||||||
@if (tab.Key == EnumTabs.OverviewC1.ToString())
|
@if (tab.Key == EnumTabs.OverviewC1.ToString())
|
||||||
{
|
{
|
||||||
<TraGrid TDataModel="Overview" DataList="@Overviews" OnClickContextMenu="@OnClickDetailOverviewContextMenu"
|
<TraGrid TDataModel="OverviewMerged" DataList="@Overviews" OnClickContextMenu="@OnClickDetailOverviewContextMenu"
|
||||||
OnSelectRow="@OnSelectRowOverview">
|
OnSelectRow="@OnSelectRowOverview">
|
||||||
</TraGrid>
|
</TraGrid>
|
||||||
}
|
}
|
||||||
|
|
||||||
@if (tab.Key == EnumTabs.OverviewC1Detail.ToString())
|
@if (tab.Key == EnumTabs.OverviewC1Detail.ToString())
|
||||||
{
|
{
|
||||||
<TraGrid TDataModel="Overview" DataList="@DetailOverviews" OnClickContextMenu="@OnClickHistoryContextMenu"
|
@* <TraGrid TDataModel="Overview" DataList="@DetailOverviews" OnClickContextMenu="@OnClickHistoryContextMenu"
|
||||||
OnSelectRow="@OnSelectRowOverview" HostColumnMerge="true">
|
OnSelectRow="@OnSelectRowOverview" HostColumnMerge="true">
|
||||||
</TraGrid>
|
</TraGrid> *@
|
||||||
}
|
}
|
||||||
@*
|
@*
|
||||||
@if (tab.Key.Contains(EnumTabs.TestHistoryC1.ToString()))
|
@if (tab.Key.Contains(EnumTabs.TestHistoryC1.ToString()))
|
||||||
@ -64,10 +107,19 @@
|
|||||||
@code {
|
@code {
|
||||||
private RequestSearch RequestSearch = new RequestSearch();
|
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;
|
RadzenTabs tabs;
|
||||||
int SelectedTabIndex = 0;
|
int SelectedTabIndex = 0;
|
||||||
Dictionary<string, EnumTabs> ListTabs = new Dictionary<string, EnumTabs>();
|
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<Overview> DetailOverviews = new List<Overview>();
|
||||||
// List<TestHistory> TestHistories = new List<TestHistory>();
|
// List<TestHistory> TestHistories = new List<TestHistory>();
|
||||||
|
|
||||||
@ -86,7 +138,7 @@
|
|||||||
|
|
||||||
PopupService.OpenIndicator("Search Data");
|
PopupService.OpenIndicator("Search Data");
|
||||||
|
|
||||||
Overviews = await CPXV2LogService.GetOverview(RequestSearch);
|
Overviews = await CPXV2LogService.GetOverviewMerged(RequestSearch);
|
||||||
if (ListTabs.ContainsKey(EnumTabs.OverviewC1.ToString()) == false)
|
if (ListTabs.ContainsKey(EnumTabs.OverviewC1.ToString()) == false)
|
||||||
ListTabs.Add($"{EnumTabs.OverviewC1}", EnumTabs.OverviewC1);
|
ListTabs.Add($"{EnumTabs.OverviewC1}", EnumTabs.OverviewC1);
|
||||||
|
|
||||||
@ -113,12 +165,15 @@
|
|||||||
// ListTabs.Add($"{EnumTabs.OverviewC1}", EnumTabs.OverviewC1);
|
// ListTabs.Add($"{EnumTabs.OverviewC1}", EnumTabs.OverviewC1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnSelectRowOverview(Overview overview)
|
private void OnSelectRowOverview(OverviewMerged overview)
|
||||||
{
|
{
|
||||||
// if (SelectedTabIndex < 0)
|
// SelectionStationName = $"{overview.StationName} ({overview.Host},{overview.Section})";
|
||||||
// SelectedTabIndex = 0;
|
// 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()
|
private void OnClickDetailOverviewContextMenu()
|
||||||
|
|||||||
@ -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)
|
public static Overview ToDetailOverview(this IEnumerable<SearchData> data)
|
||||||
{
|
{
|
||||||
return data.ToOverview();
|
return data.ToOverview();
|
||||||
|
|||||||
@ -24,4 +24,25 @@
|
|||||||
public int RN { get; set; }
|
public int RN { get; set; }
|
||||||
public string TestListCntID { 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; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -83,6 +83,80 @@ namespace Web.Tra.Services
|
|||||||
return overview.OrderBy(x=>x.TestDate).ToList();
|
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
|
//Get DBContext
|
||||||
private T? GetDBContext<T>(DbContextProvider provider, int dbID) where T : DbContext
|
private T? GetDBContext<T>(DbContextProvider provider, int dbID) where T : DbContext
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user