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