GP12第一轮查询优化(30S->15S)

This commit is contained in:
2025-06-16 17:11:04 +08:00
parent 3514e17bb7
commit 0eb0e1b30e

View File

@@ -107,19 +107,21 @@ namespace ZR.Service.Business
public List<QcGp12ServiceStatisticsDto> GetReviseList(QcGp12ServiceStatisticsQueryDto parm)
{
const string ActiveStatus = "1";
var predicate = Expressionable
.Create<QcGp12ServiceStatistics>()
.AndIF(
!string.IsNullOrEmpty(parm.WorkOrder),
x => x.WorkOrder.Contains(parm.WorkOrder)
x => SqlFunc.Like(x.WorkOrder, parm.WorkOrder + "%")
)
.AndIF(
!string.IsNullOrEmpty(parm.PartNumber),
x => x.PartNumber.Contains(parm.PartNumber)
x => SqlFunc.Like(x.PartNumber, parm.PartNumber + "%")
)
.AndIF(
!string.IsNullOrEmpty(parm.Description),
x => x.Description.Contains(parm.Description)
x => SqlFunc.Like(x.Description, parm.Description + "%")
)
.AndIF(!string.IsNullOrEmpty(parm.Team), x => x.Team == parm.Team)
.AndIF(!string.IsNullOrEmpty(parm.SiteNo), x => x.SiteNo == parm.SiteNo)
@@ -132,18 +134,34 @@ namespace ZR.Service.Business
parm.StartTime.HasValue && parm.EndTime.HasValue,
x => x.StartTime >= parm.StartTime.Value && x.StartTime <= parm.EndTime.Value
)
.And(x => x.Status == "1")
.And(x => x.Status == ActiveStatus)
.ToExpression();
// 预处理排序条件
var query = Context.Queryable<QcGp12ServiceStatistics>().Where(predicate);
var result = query
.OrderByIF(parm.StatisticsOrderType == 1, it => it.WorkOrder)
.OrderByIF(parm.StatisticsOrderType == 2, it => it.PartNumber)
.OrderByIF(parm.StatisticsOrderType == 3, it => it.QualifiedRate, OrderByType.Desc)
.OrderByIF(parm.StatisticsOrderType == 4, it => it.StartTime)
.OrderBy(it => it.GroupCode)
.OrderBy(it => it.GroupSort)
.ToList();
List<QcGp12BaseDefect> defectList = Context.Queryable<QcGp12BaseDefect>().ToList();
switch (parm.StatisticsOrderType)
{
case 1:
query = query.OrderBy(it => it.WorkOrder);
break;
case 2:
query = query.OrderBy(it => it.PartNumber);
break;
case 3:
query = query.OrderBy(it => it.QualifiedRate, OrderByType.Desc);
break;
case 4:
query = query.OrderBy(it => it.StartTime);
break;
}
query = query.OrderBy(it => it.GroupCode).OrderBy(it => it.GroupSort);
var result = query.ToList();
// 将 defectList 转换为字典以优化查找
var defectList = Context.Queryable<QcGp12BaseDefect>().ToList();
var defectDict = defectList.ToDictionary(d => d.Code, d => d);
var resultList = new List<QcGp12ServiceStatisticsDto>();
foreach (var item in result)
{
@@ -182,7 +200,7 @@ namespace ZR.Service.Business
UpdatedBy = item.UpdatedBy,
UpdatedTime = item.UpdatedTime
};
// 解析 GroupDefectJson
if (!string.IsNullOrEmpty(item.GroupDefectJson))
{
try
@@ -192,26 +210,23 @@ namespace ZR.Service.Business
>(item.GroupDefectJson);
foreach (var defect in defects)
{
var baseDefect = defectList.FirstOrDefault(d =>
d.Code == defect.DefectCode
);
if (baseDefect != null)
if (defectDict.TryGetValue(defect.DefectCode, out var baseDefect))
{
// 取得第一个和最后一个字符
string code = defect.DefectCode;
char firstChar = code[0];
char lastChar = code[code.Length - 1];
// 组合第一个和最后一个字符
string propertyName = $"{firstChar}{lastChar}";
if (code.Length >= 2)
{
string propertyName = $"{code[0]}{code[^1]}";
dto.AddDynamicProperty(propertyName, defect.DefectNum);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error parsing GroupDefectJson: {ex.Message}");
// 实际应用中应使用日志框架(如 ILogger
}
}
resultList.Add(dto);
}