From 0eb0e1b30e8d48edece2cd87cd4664d1a00e6c3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E6=AD=A3=E6=98=93?= Date: Mon, 16 Jun 2025 17:11:04 +0800 Subject: [PATCH] =?UTF-8?q?GP12=E7=AC=AC=E4=B8=80=E8=BD=AE=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=BC=98=E5=8C=96=EF=BC=8830S->15S=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qc/gp12/QcGp12ServiceStatisticsService.cs | 65 ++++++++++++------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/ZR.Service/mes/qc/gp12/QcGp12ServiceStatisticsService.cs b/ZR.Service/mes/qc/gp12/QcGp12ServiceStatisticsService.cs index 2dc65cf3..cee4f45a 100644 --- a/ZR.Service/mes/qc/gp12/QcGp12ServiceStatisticsService.cs +++ b/ZR.Service/mes/qc/gp12/QcGp12ServiceStatisticsService.cs @@ -107,19 +107,21 @@ namespace ZR.Service.Business public List GetReviseList(QcGp12ServiceStatisticsQueryDto parm) { + const string ActiveStatus = "1"; + var predicate = Expressionable .Create() .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().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 defectList = Context.Queryable().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().ToList(); + var defectDict = defectList.ToDictionary(d => d.Code, d => d); + var resultList = new List(); 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); }