GP12第一轮查询优化(30S->15S)
This commit is contained in:
@@ -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}";
|
||||
dto.AddDynamicProperty(propertyName, defect.DefectNum);
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user