[성현모] Grid 성능 개선

This commit is contained in:
SHM
2025-09-17 09:32:33 +09:00
parent a57734308f
commit 89fe237e52
10 changed files with 287 additions and 183 deletions

View File

@ -1,5 +1,6 @@
using Azure.Core;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Data;
using SystemX.Core.DB;
using SystemX.Core.Services;
@ -116,95 +117,170 @@ namespace Web.Tra.Services
public async Task<List<Overview>> GetDetailOverview(List<SearchData> request, IOverviewModel row)
{
var detailOverview = request
.Where(x => x.Summary.HostID == row.Host &&
x.Summary.Section == row.Section &&
x.Summary.Testcode == row.TestCode
)
.OrderByDescending(x=>x.Summary.TestDT.Date)
.GroupBy(x => (
DateOnly.FromDateTime(x.Summary.TestDT.Date),
x.Summary.TestListCntID,
x.Summary.StepVersion
))
.Select(x => x.ToOverview())
.OrderBy(x=>x.TestDate);
var selectRow = row as Overview;
List<Overview> detailOverview = new List<Overview>();
if (selectRow is not null)
{
detailOverview = request
.Where(x => x.Summary.HostID == selectRow.Host &&
x.Summary.Section == selectRow.Section &&
x.Summary.Testcode == selectRow.TestCode
)
.OrderByDescending(x => x.Summary.TestDT.Date)
.GroupBy(x => (
DateOnly.FromDateTime(x.Summary.TestDT.Date),
x.Summary.TestListCntID,
x.Summary.StepVersion
))
.Select(x => x.ToOverview())
.OrderBy(x => x.TestDate)
.ToList();
}
await Task.CompletedTask;
return detailOverview.ToList();
return detailOverview;
}
public async Task<List<Overview>> GetDetailOverviewMerged(List<SearchData> request, IOverviewModel row)
{
var detailOverview = request
.Where(x => x.Summary.Testcode == row.TestCode &&
x.Summary.ProdNo_C == row.ProductNo &&
x.Summary.ProdNo_P == row.ParentNo)
.GroupBy(x => (
DateOnly.FromDateTime(x.Summary.TestDT.Date),
x.Summary.StepVersion
))
.Select(x => x.ToOverviewMerged())
.OrderBy(x => x.TestDate);
var selectRow = row as Overview;
List<Overview> detailOverview = new List<Overview>();
if (selectRow is not null)
{
detailOverview = request
.Where(x => x.Summary.Testcode == selectRow.TestCode &&
x.Summary.ProdNo_C == selectRow.ProductNo &&
x.Summary.ProdNo_P == selectRow.ParentNo)
.GroupBy(x => (
DateOnly.FromDateTime(x.Summary.TestDT.Date),
x.Summary.StepVersion
))
.Select(x => x.ToOverviewMerged())
.OrderBy(x => x.TestDate)
.ToList();
}
await Task.CompletedTask;
return detailOverview.ToList();
return detailOverview;
}
public async Task<List<TestHistory>> GetTestHistory(List<SearchData> request, IOverviewModel row)
{
var testHistory = request
.Where(x => x.Summary.TestDT.Date == row.TestDate.Value.Date &&
x.Summary.HostID == row.Host &&
x.Summary.Section == row.Section &&
x.Summary.ProdNo_C == row.ProductNo &&
x.Summary.ProdNo_P == row.ParentNo &&
x.Summary.TestListCntID == row.TestListCntID)
.Select(x=>x.ToTestHistory())
.OrderBy(x => x.No);
var selectRow = row as Overview;
List<TestHistory> testHistory = new List<TestHistory>();
if (selectRow is not null)
{
testHistory = request
.Where(x => x.Summary.TestDT.Date == selectRow.TestDate.Value.Date &&
x.Summary.HostID == selectRow.Host &&
x.Summary.Section == selectRow.Section &&
x.Summary.ProdNo_C == selectRow.ProductNo &&
x.Summary.ProdNo_P == selectRow.ParentNo &&
x.Summary.TestListCntID == selectRow.TestListCntID)
.Select(x => x.ToTestHistory())
.OrderBy(x => x.No)
.ToList();
}
await Task.CompletedTask;
return testHistory.ToList();
return testHistory;
}
public async Task<List<TestHistory>> GetTestHistoryMerged(List<SearchData> request, IOverviewModel row)
{
var testHistory = request
.Where(x => x.Summary.TestDT.Date == row.TestDate.Value.Date &&
x.Summary.Testcode == row.TestCode&&
x.Summary.ProdNo_C == row.ProductNo &&
x.Summary.ProdNo_P == row.ParentNo)
.Select(x => x.ToTestHistory())
.OrderBy(x => (x.TestListReqID, x.No));
var selectRow = row as Overview;
List<TestHistory> testHistory = new List<TestHistory>();
if(selectRow is not null)
{
testHistory = request
.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)
.Select(x => x.ToTestHistory())
.OrderBy(x => (x.TestListReqID, x.No))
.ToList();
}
await Task.CompletedTask;
return testHistory.ToList();
}
public async Task<TestResult> GetTestResult(IDataModel row)
public async Task<TestResult> GetTestResult(IDataModel row, int stepVersion)
{
TestResult result = new TestResult();
var selectRow = row as TestHistory;
if(selectRow is not null)
{
int year = selectRow.TestDate.Value.Year;
{
TestList testList = new TestList();
//cpxv2
using (var scope = _scopeFactory.CreateScope())
{
var provider = scope.ServiceProvider.GetRequiredService<DbContextProvider>();
using (var context = GetDBContext<CPXV2Log>(provider, year))
using (var context = GetDBContext<CPXV2>(provider, 1))
{
if (context is not null)
{
var testResult = context.HIST_TestResults.Where(x => x.No == selectRow.No)?.First();
var decompressTestResult = testResult.ToTestResult();
int testCode = (int)context.STAT_TestCodes.Where(x => x.TestCode == selectRow.TestCode)?.First()?.No;
result.DecompressTestResult = decompressTestResult;
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 prodGroup = context.PROD_Groups.Where(x => x.No == prodVariant.GroupNo)?.FirstOrDefault();
var statTestCode = context.STAT_TestCodes.Where(x => x.No == prodRelease.TestCodeNo)?.FirstOrDefault();
var storTestListFile = context.STOR_TestListFiles.Where(x => x.No == prodVariant.TestListFileNo)?.FirstOrDefault();
var maxStepVersion = context.HIST_TestListFileLatestStepVersions.Where(x => x.TestListFileNo == prodVariant.TestListFileNo)?.FirstOrDefault();
//max version보다 크면 max로
if (stepVersion > maxStepVersion.LatestStepVersion)
{
stepVersion = maxStepVersion.LatestStepVersion;
}
else if(stepVersion < 0)
{
stepVersion = 0;
}
var findTestList = context.VRFY_TestListFileReleases
.Where(x => x.TestListFileNo == prodVariant.TestListFileNo && x.StepVersion <= stepVersion)
.OrderBy(x => x.StepID)
.ThenByDescending(x=>x.StepVersion)
.AsEnumerable()
.DistinctBy(x=>x.StepID)
.ToList();
testList.ProdRelease = prodRelease;
testList.ProdVariant = prodVariant;
testList.ProdGroup = prodGroup;
testList.StatTestCode = statTestCode;
testList.StorTestListFile = storTestListFile;
testList.TestListFile = findTestList;
}
}
}
result.No = selectRow.No;
}
//log
if (Int32.TryParse(selectRow.TestDateTime?.Year.ToString(), out var year) == true)
{
using (var scope = _scopeFactory.CreateScope())
{
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(testList);
}
}
}
}
}
await Task.CompletedTask;
return result;