From b6b20da09e72e9e287b252348e7700641d9745e8 Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期一, 11 八月 2025 18:31:14 +0800
Subject: [PATCH] 11

---
 MES.Service/service/QC/XJService.cs |  196 ++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 170 insertions(+), 26 deletions(-)

diff --git a/MES.Service/service/QC/XJService.cs b/MES.Service/service/QC/XJService.cs
index 52fe9bc..d4c8dc3 100644
--- a/MES.Service/service/QC/XJService.cs
+++ b/MES.Service/service/QC/XJService.cs
@@ -134,11 +134,11 @@
             .WhereIF(
                 StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                 "鏈畬鎴�".Equals(queryObj.result),
-                (s, a, c, b) => s.FcheckResu == null)
+                (s, a, c, b) => s.SubmitStatus == 0 || s.SubmitStatus == null)
             .WhereIF(
                 StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                 !"鏈畬鎴�".Equals(queryObj.result),
-                (s, a, c, b) => s.FcheckResu != null)
+                (s, a, c, b) => s.SubmitStatus == 1)
             .WhereIF(id > 0, (s, a, c, b) => s.Id == id)
             .Select((s, a, c, b) => new QsQaItemXj
             {
@@ -152,8 +152,8 @@
                 BillNo = s.BillNo,
                 ItemName = b.ItemName,
                 ItemModel = b.ItemModel,
-                FcheckBy = s.FcheckBy,
-                FcheckResu = s.FcheckResu,
+                CheckBy = s.CheckBy,
+                CheckResult = s.CheckResult,
                 Remarks = s.Remarks
             }).OrderBy(s => s.CreateDate, OrderByType.Desc);
         var items = query.ToPageList(queryObj.PageIndex, queryObj.Limit,ref totalCount);
@@ -292,36 +292,180 @@
 
         return Convert.ToInt32(xj.Id);
     }
+    
+    public bool XJQaSubmit(LLJDto rkjDto)
+    {
+        var useTransactionWithOracle =
+            SqlSugarHelper.UseTransactionWithOracle(db =>
+            {
+                return db.Updateable<QsQaItemXj>()
+                    .SetColumns(s => s.SubmitStatus == 1)
+                    .SetColumns(s => s.SubmitBy == rkjDto.userNo)
+                    .SetColumns(s => s.SubmitDate == DateTime.Now)
+                    .Where(s => s.Id == rkjDto.gid)
+                    .ExecuteCommand();
+            });
 
+        return useTransactionWithOracle > 0;
+    }
+
+    // public int saveItem(XJDto xjDto)
+    // {
+    //     var items = xjDto.items;
+    //     var userNo = xjDto.userNo;
+    //
+    //     SqlSugarHelper.UseTransactionWithOracle(db =>
+    //     {
+    //         foreach (var item in items) item.Pid = xjDto.gid;
+    //
+    //         return db.Insertable(items).ExecuteCommand();
+    //     });
+    //
+    //     xjDto.items = getJYItem(xjDto.gid, null);
+    //
+    //     xjDto.items.ForEach(s =>
+    //     {
+    //         if (s.MaxValue != null || s.StandardValue != null ||
+    //             s.MinValue != null) return;
+    //         var detail = new QsQaItemXj02();
+    //         detail.Pid = s.Id;
+    //         detail.Gid = xjDto.gid;
+    //         detail.Fstand = "鈭�";
+    //         detail.FcheckResu = "1";
+    //         detail.UpdateBy = xjDto.userNo;
+    //         detail.count = (int?)s.LevelNum;
+    //         SetQSItemDetail(detail);
+    //     });
+    //
+    //     return Convert.ToInt32(xjDto.gid);
+    // }
     public int saveItem(XJDto xjDto)
     {
         var items = xjDto.items;
         var userNo = xjDto.userNo;
 
-        SqlSugarHelper.UseTransactionWithOracle(db =>
+        // 鏁版嵁楠岃瘉
+        var validationResult = ValidateItemsData(items);
+        if (!validationResult.isValid)
+            throw new Exception($"妫�楠岄」鐩獙璇佸け璐�: {validationResult.errorMsg}");
+
+        return SqlSugarHelper.UseTransactionWithOracle(db =>
         {
+            // 璁剧疆澶栭敭鍏宠仈骞舵壒閲忔彃鍏ュ瓙琛�
             foreach (var item in items) item.Pid = xjDto.gid;
+            db.Insertable(items).ExecuteCommand();
 
-            return db.Insertable(items).ExecuteCommand();
+            // 鑾峰彇妫�楠岄」鐩暟鎹�
+            var jyItems = getJYItemOptimized(db, xjDto.gid.Value);
+            
+            if (jyItems.Any())
+            {
+                // 澶勭悊涓氬姟閫昏緫璁$畻
+                var allDetails = PrepareDetailsData(jyItems, xjDto.gid.Value, userNo);
+
+                if (allDetails.Count > 0)
+                {
+                    // 鎵归噺鎻掑叆妫�楠岃鎯�
+                    db.Insertable(allDetails).ExecuteCommand();
+                    
+                    // 璁$畻缁撴灉
+                    var (pidResults, fcheckResu) = CalculateResults(allDetails, jyItems);
+                    
+                    // 鎵归噺鏇存柊妫�楠岄」鐩粨鏋�
+                    foreach (var (pidValue, result) in pidResults)
+                    {
+                        db.Updateable<QsQaItemXj01>()
+                            .SetColumns(s => s.IsPass == result)
+                            .Where(s => s.Id == pidValue)
+                            .ExecuteCommand();
+                    }
+
+                    // 鏇存柊涓昏〃妫�楠岀粨鏋�
+                    var totalSum = jyItems.Where(x => x.MaxValue == null && x.StandardValue == null && x.MinValue == null)
+                        .Sum(x => x.LevelNum);
+                    if (totalSum == allDetails.Count)
+                    {
+                        db.Updateable<QsQaItemXj>()
+                            .SetColumns(s => s.CheckResult == fcheckResu)
+                            .SetColumns(s => s.CheckDate == DateTime.Now)
+                            .SetColumns(s => s.CheckBy == userNo)
+                            .SetColumns(s => s.LastUpdateBy == userNo)
+                            .SetColumns(s => s.LastUpdateDate == DateTime.Now)
+                            .Where(s => s.Id == xjDto.gid)
+                            .ExecuteCommand();
+                    }
+                }
+            }
+
+            return Convert.ToInt32(xjDto.gid);
         });
+    }
+    
+    private List<QsQaItemXj01> getJYItemOptimized(ISqlSugarClient db, decimal xjId)
+    {
+        return db.Queryable<QsQaItemXj01>()
+            .Where(a => a.Pid == xjId)
+            .ToList();
+    }
+    
+    private (bool isValid, string errorMsg) ValidateItemsData(List<QsQaItemXj01> items)
+    {
+        if (items == null || !items.Any()) return (false, "妫�楠岄」鐩笉鑳戒负绌�");
+        
+        var invalidItems = items.Where(x => x.LevelNum <= 0 || string.IsNullOrEmpty(x.ProjName)).ToList();
+        if (invalidItems.Any()) 
+            return (false, $"瀛樺湪{invalidItems.Count}涓棤鏁堢殑妫�楠岄」鐩�");
+        
+        return (true, "");
+    }
 
-        xjDto.items = getJYItem(xjDto.gid, null);
-
-        xjDto.items.ForEach(s =>
+    private List<QsQaItemXj02> PrepareDetailsData(List<QsQaItemXj01> jyItems, decimal gid, string userNo)
+    {
+        var allDetails = new List<QsQaItemXj02>();
+        var now = DateTime.Now;
+        
+        foreach (var s in jyItems)
         {
-            if (s.MaxValue != null || s.StandardValue != null ||
-                s.MinValue != null) return;
-            var detail = new QsQaItemXj02();
-            detail.Pid = s.Id;
-            detail.Gid = xjDto.gid;
-            detail.Fstand = "鈭�";
-            detail.FcheckResu = "1";
-            detail.UpdateBy = xjDto.userNo;
-            detail.count = (int?)s.LevelNum;
-            SetQSItemDetail(detail);
-        });
+            if (s.MaxValue != null || s.StandardValue != null || s.MinValue != null)
+                continue;
 
-        return Convert.ToInt32(xjDto.gid);
+            for (var i = 0; i < s.LevelNum; i++)
+            {
+                allDetails.Add(new QsQaItemXj02
+                {
+                    Gid = gid,
+                    Pid = s.Id,
+                    Fstand = "鈭�",
+                    FcheckResu = "1",
+                    CreateBy = userNo,
+                    CreateDate = now
+                });
+            }
+        }
+        return allDetails;
+    }
+
+    private (List<(decimal pid, int result)> pidResults, string fcheckResu) CalculateResults(
+        List<QsQaItemXj02> allDetails, List<QsQaItemXj01> jyItems)
+    {
+        var pidGroups = allDetails.GroupBy(x => x.Pid).ToList();
+        var pidResults = new List<(decimal pid, int result)>();
+        
+        foreach (var group in pidGroups)
+        {
+            var count = group.Count();
+            var passCount = group.Count(x => x.Fstand == "鈭�");
+            var result = (count == passCount) ? 1 : 0;
+            pidResults.Add((group.Key.Value, result));
+        }
+
+        var totalSum = jyItems.Where(x => x.MaxValue == null && x.StandardValue == null && x.MinValue == null)
+            .Sum(x => x.LevelNum);
+        var totalCount = allDetails.Count;
+        var totalPassCount = allDetails.Count(x => x.Fstand == "鈭�");
+        var fcheckResu = (totalSum == totalCount && totalCount == totalPassCount) ? "鍚堟牸" : "涓嶅悎鏍�";
+
+        return (pidResults, fcheckResu);
     }
 
 
@@ -442,11 +586,11 @@
             SqlSugarHelper.UseTransactionWithOracle(db =>
             {
                 return db.Updateable<QsQaItemXj>()
-                    .SetColumns(s => s.FcheckResu == FcheckResu)
-                    .SetColumns(s => s.FcheckDate == DateTime.Now)
-                    .SetColumns(s => s.FcheckBy == detail.CreateBy)
-                    .SetColumns(s => s.LastupdateBy == detail.CreateBy)
-                    .SetColumns(s => s.LastupdateDate == DateTime.Now)
+                    .SetColumns(s => s.CheckResult == FcheckResu)
+                    .SetColumns(s => s.CheckDate == DateTime.Now)
+                    .SetColumns(s => s.CheckBy == detail.CreateBy)
+                    .SetColumns(s => s.LastUpdateBy == detail.CreateBy)
+                    .SetColumns(s => s.LastUpdateDate == DateTime.Now)
                     .Where(s => s.Id == detail.Gid)
                     .ExecuteCommand();
             });

--
Gitblit v1.9.3