From ed655574fc9dc7c6c67dceddcdebb7a25c16d244 Mon Sep 17 00:00:00 2001
From: song.jun <lion0756@qq.com>
Date: 星期一, 13 四月 2026 13:07:21 +0800
Subject: [PATCH] 优化 SaveLabList 路径的 DB 查询次数(P2.5)
---
sbcLabSystem/Models/Backstage/QCDistributionRegisterInfoViewModel.cs | 8 +++++++-
sbcLabSystem/Models/Backstage/QCDistributionInfoViewModel.cs | 35 ++++++++++++++++++++++-------------
2 files changed, 29 insertions(+), 14 deletions(-)
diff --git a/sbcLabSystem/Models/Backstage/QCDistributionInfoViewModel.cs b/sbcLabSystem/Models/Backstage/QCDistributionInfoViewModel.cs
index f9adb82..a5c5311 100644
--- a/sbcLabSystem/Models/Backstage/QCDistributionInfoViewModel.cs
+++ b/sbcLabSystem/Models/Backstage/QCDistributionInfoViewModel.cs
@@ -136,9 +136,23 @@
if (viewModel.LabList != null && viewModel.LabList.Count > 0)
{
var qcService = PalGainEngine.Instance.Resolve<QCService>();
+ var existingRegisters = qcService.GetQcDistributionRegisters()
+ .Where(p => p.QCDistributionId == viewModel.Id)
+ .ToList();
+ var byId = existingRegisters.ToDictionary(p => p.Id, p => p);
+ var byLabProject = existingRegisters
+ .GroupBy(p => Tuple.Create(p.LabId, p.ProjectId))
+ .ToDictionary(g => g.Key, g => g.First());
+
viewModel.LabList.ForEach(x =>
{
- QCDistributionRegisterInfo registerInfo = QCDistributionRegisterInfoViewModel.ToEntity(x);
+ QCDistributionRegisterInfo cachedExisting = null;
+ if (x.Id > 0 && !byId.TryGetValue(x.Id, out cachedExisting))
+ {
+ cachedExisting = qcService.GetQcDistributionRegisters()
+ .FirstOrDefault(p => p.Id == x.Id);
+ }
+ QCDistributionRegisterInfo registerInfo = QCDistributionRegisterInfoViewModel.ToEntity(x, cachedExisting);
registerInfo.QCDistributionId = viewModel.Id;
registerInfo.LabId = x.LabId;
registerInfo.ProjectId = x.ProjectId;
@@ -146,15 +160,12 @@
{
if (registerInfo.Id == 0)
{
- var existing = qcService.GetQcDistributionRegisters()
- .FirstOrDefault(p => p.QCDistributionId == viewModel.Id
- && p.LabId == x.LabId
- && p.ProjectId == x.ProjectId);
- if (existing != null)
+ QCDistributionRegisterInfo dup;
+ if (byLabProject.TryGetValue(Tuple.Create(x.LabId, x.ProjectId), out dup))
{
- existing.IsCharged = x.IsCharged;
- existing.ModifyTime = DateTime.Now;
- qcService.SaveQcDistributionRegister(existing);
+ dup.IsCharged = x.IsCharged;
+ dup.ModifyTime = DateTime.Now;
+ qcService.SaveQcDistributionRegister(dup);
return;
}
}
@@ -163,11 +174,9 @@
}
else
{
- var entity = qcService.GetQcDistributionRegisters()
- .FirstOrDefault(p => p.Id == x.Id);
- if (entity != null)
+ if (cachedExisting != null)
{
- qcService.DeleteQcDistributionRegister(entity);
+ qcService.DeleteQcDistributionRegister(cachedExisting);
}
}
});
diff --git a/sbcLabSystem/Models/Backstage/QCDistributionRegisterInfoViewModel.cs b/sbcLabSystem/Models/Backstage/QCDistributionRegisterInfoViewModel.cs
index 087fb47..8c70dd9 100644
--- a/sbcLabSystem/Models/Backstage/QCDistributionRegisterInfoViewModel.cs
+++ b/sbcLabSystem/Models/Backstage/QCDistributionRegisterInfoViewModel.cs
@@ -610,8 +610,14 @@
}
public static QCDistributionRegisterInfo ToEntity(QCDistributionRegisterInfoViewModel viewModel)
{
- QCDistributionRegisterInfo entity = PalGainEngine.Instance.Resolve<QCService>()
+ QCDistributionRegisterInfo existing = PalGainEngine.Instance.Resolve<QCService>()
.GetQcDistributionRegisters().FirstOrDefault(p => p.Id == viewModel.Id);
+ return ToEntity(viewModel, existing);
+ }
+
+ public static QCDistributionRegisterInfo ToEntity(QCDistributionRegisterInfoViewModel viewModel, QCDistributionRegisterInfo preloadedExisting)
+ {
+ QCDistributionRegisterInfo entity = preloadedExisting;
if (entity == null)
{
entity = new QCDistributionRegisterInfo();
--
Gitblit v1.8.0