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