From d6cc926b4bf627ce5a24ea2a16a86a842b760f75 Mon Sep 17 00:00:00 2001
From: song.jun <lion0756@qq.com>
Date: 星期一, 13 四月 2026 14:23:19 +0800
Subject: [PATCH] CLAUDE.md 红线章节补充 Excel 导出数组对齐陷阱

---
 sbcLabSystem/Models/Backstage/QCDistributionInfoViewModel.cs |   35 ++++++++++++++++++++++-------------
 1 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/sbcLabSystem/Models/Backstage/QCDistributionInfoViewModel.cs b/sbcLabSystem/Models/Backstage/QCDistributionInfoViewModel.cs
index f9adb82..11af829 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.OrderByDescending(p => p.Id).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);
                         }
                     }
                 });

--
Gitblit v1.8.0