From 36fdf1c876e5b9daa4446b9c33e9c532d725798b Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期二, 08 七月 2025 16:50:53 +0800
Subject: [PATCH] 重构代码质量和安全性改进

---
 MES.Service/service/QC/LljService.cs |  271 +++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 195 insertions(+), 76 deletions(-)

diff --git a/MES.Service/service/QC/LljService.cs b/MES.Service/service/QC/LljService.cs
index 7eef5e6..790f525 100644
--- a/MES.Service/service/QC/LljService.cs
+++ b/MES.Service/service/QC/LljService.cs
@@ -14,11 +14,19 @@
 {
     public (List<LtsLlj> item, int TotalCount) GetPage(XJPageResult queryObj)
     {
+        if (queryObj == null)
+            throw new ArgumentNullException(nameof(queryObj));
+
+        if (string.IsNullOrEmpty(queryObj.createUser))
+            return (new List<LtsLlj>(), 0);
+
         if (queryObj.createUser.IsNullOrEmpty()) return ([], 0);
 
         var db = SqlSugarHelper.GetInstance();
 
-        var id = Convert.ToDecimal(queryObj.id);
+        //瀹夊叏鐨勭被鍨嬭浆鎹�
+        if (!decimal.TryParse(queryObj.id, out var id))
+            id = 0;
 
         var totalCount = 0;
 
@@ -37,13 +45,26 @@
 
             //鍔犵瓫閫夋潯浠�,鏍规嵁渚涘簲鍟嗭紝鐗╂枡缂栫爜锛岀墿鏂欏悕绉版悳绱�
             //.WhereIF(queryObj.SearchValue!=null && queryObj.SearchValue!="", (a) => a.SuppName == queryObj.SearchValue|| a.ItemName == queryObj.SearchValue || a.ItemNo == queryObj.SearchValue )
-            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue),
-                a => a.SuppName.ToLower()
-                         .Contains(queryObj.SearchValue.ToLower())
-                     || a.ItemName.ToLower()
-                         .Contains(queryObj.SearchValue.ToLower())
-                     || a.ItemNo.ToLower()
-                         .Contains(queryObj.SearchValue.ToLower()))
+            .WhereIF(
+                queryObj.SelectedIndex == "0" &&
+                !string.IsNullOrEmpty(queryObj.SearchValue),
+                a => (a.ItemNo.ToLower()
+                    .Contains(queryObj.SearchValue.ToLower())))
+            .WhereIF(
+                queryObj.SelectedIndex == "1" &&
+                !string.IsNullOrEmpty(queryObj.SearchValue),
+                a => (a.ItemName.ToLower()
+                    .Contains(queryObj.SearchValue.ToLower())))
+            .WhereIF(
+                queryObj.SelectedIndex == "2" &&
+                !string.IsNullOrEmpty(queryObj.SearchValue),
+                a => (a.SuppName.ToLower()
+                    .Contains(queryObj.SearchValue.ToLower())))
+            .WhereIF(queryObj.result == "宸插畬鎴�",
+                a => (a.IqcDate >= queryObj.startDate.ToDateTime() &&
+                      a.IqcDate <= queryObj.endDate.ToDateTime().AddDays(1)))
+            .WhereIF(queryObj.result == "宸插畬鎴�" && queryObj.state != "鎵�鏈夌姸鎬�",
+                a => a.FcheckResu == queryObj.state)
             .OrderByDescending(a => a.Id)
             .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
 
@@ -74,7 +95,7 @@
     //                 FcheckItem = b.FcheckItem,
     //                 FdownAllow = b.FdownAllow,
     //                 FcheckLevel = b.Frequency,
-    //                 Fstand = b.Fstand,
+    //                 Fstand = decimal.Parse(b.Fstand),
     //                 FupAllow = b.FupAllow,
     //                 SampleSizeNo = b.SampleSizeNo,
     //                 FenterQty = 0,
@@ -248,9 +269,10 @@
     {
         var db = SqlSugarHelper.GetInstance();
 
-        return db.Queryable<MesQaItemsDetectDetail5, MesQaItemsDetectDetail12>(
-                (a, b) =>
-                    new JoinQueryInfos(JoinType.Left, a.Id == b.MainId))
+        return db
+            .Queryable<MesQaItemsDetectDetail5,
+                MesQaItemsDetectDetail12>((a, b) =>
+                new JoinQueryInfos(JoinType.Left, a.Id == b.MainId))
             .Where((a, b) => a.ReleaseNo == releaseNo)
             // .WhereIF(id > 0, (a, b) => a.Id == id)
             .GroupBy((a, b) => new
@@ -325,96 +347,193 @@
     }
 
 
+    /// <summary>
+    /// 鑷姩澶勭悊妫�楠岀粨鏋滅殑涓绘柟娉�
+    /// </summary>
     private int autoResult(MesQaItemsDetectDetail12 detail)
     {
-        var db = SqlSugarHelper.GetInstance();
+        // 鑾峰彇妫�楠岄」鐩俊鎭�
+        var inspectionItem = GetInspectionItem(detail.MainId);
+        if (inspectionItem == null) return 0;
 
-        // Single 娌℃湁鏌ヨ鍒扮粨鏋滄椂杩斿洖Null锛屽鏋滅粨鏋滃ぇ浜�1鏉′細鎶涘嚭閿欒
-        var QsItemOqcItem = db.Queryable<MesQaItemsDetectDetail5>()
-            .Single(s => s.Id == detail.MainId);
-
-        if (QsItemOqcItem == null) return 0;
-
-        //鏌ヨ杩欎釜妫�楠岄」鐩笅鐨勬楠岀粨鏋�
-        var count = db.Queryable<MesQaItemsDetectDetail12>()
-            .Where(s => s.MainId == detail.MainId).Count();
-
+        // 鑾峰彇妫�楠岃鏁颁俊鎭�
+        var inspectionCounts = GetInspectionCounts(detail.MainId);
+        
+        // 鏇存柊妫�楠屾槑缁�
         updateDetail5(detail);
-        var result = "";
 
-        //妫�楠屽疄闄呯粨鏋滀笉绛変簬搴旇妫�楠岀殑涓暟鏃剁洿鎺ユ帹鍑�
-        if (QsItemOqcItem.CheckQyt != count) return 0;
+        // 妫�鏌ユ槸鍚︽楠屽畬鎴�
+        if (!IsInspectionItemComplete(inspectionItem, inspectionCounts.TotalCount))
+            return 0;
 
-        //鍚堟牸鐨勬湁澶氬皯涓�
+        // 纭畾妫�楠岀粨鏋�
+        var itemResult = DetermineInspectionItemResult(inspectionCounts, inspectionItem);
+        
+        // 鏇存柊妫�楠岄」鐩粨鏋�
+        var updateResult = UpdateInspectionItemResult(detail.MainId, itemResult, inspectionCounts.TotalCount);
+
+        // 妫�鏌ユ暣涓楠屽崟鏄惁瀹屾垚
+        if (IsInspectionOrderComplete(detail.ReleaseNo))
+        {
+            ProcessCompleteInspectionOrder(detail);
+        }
+
+        return updateResult;
+    }
+
+    /// <summary>
+    /// 鑾峰彇妫�楠岄」鐩俊鎭�
+    /// </summary>
+    private MesQaItemsDetectDetail5? GetInspectionItem(decimal? mainId)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        return db.Queryable<MesQaItemsDetectDetail5>()
+            .Single(s => s.Id == mainId);
+    }
+
+    /// <summary>
+    /// 鑾峰彇妫�楠岃鏁颁俊鎭�
+    /// </summary>
+    private (int TotalCount, int PassCount, int FailCount) GetInspectionCounts(decimal? mainId)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        
+        var totalCount = db.Queryable<MesQaItemsDetectDetail12>()
+            .Where(s => s.MainId == mainId).Count();
+            
         var passCount = db.Queryable<MesQaItemsDetectDetail12>()
-            .Where(s => s.MainId == detail.MainId && s.Fstand == "鈭�").Count();
-        //涓嶅悎鏍肩殑鏈夊灏戜釜
-        var noCount = db.Queryable<MesQaItemsDetectDetail12>()
-            .Where(s => s.MainId == detail.MainId && s.Fstand == "脳").Count();
+            .Where(s => s.MainId == mainId && s.Fstand == "鈭�").Count();
+            
+        var failCount = db.Queryable<MesQaItemsDetectDetail12>()
+            .Where(s => s.MainId == mainId && s.Fstand == "脳").Count();
 
-        if (count == passCount)
-            result = "鍚堟牸";
-        //else if (count - passCount < QsItemOqcItem.FreQty) 
-        //    result = "涓嶅悎鏍�";
-        else if (noCount >= QsItemOqcItem.FreQty)
-            result = "涓嶅悎鏍�";
-        var useTransactionWithOracle = SqlSugarHelper.UseTransactionWithOracle(
-            db =>
-            {
-                var commit = 0;
-                commit += db.Updateable<MesQaItemsDetectDetail5>()
-                    .SetColumns(s => s.FcheckResu == result)
-                    .SetColumns(s => s.FenterQty == count)
-                    .Where(s => s.Id == detail.MainId)
-                    .ExecuteCommand();
+        return (totalCount, passCount, failCount);
+    }
 
-                return commit;
-            });
+    /// <summary>
+    /// 妫�鏌ユ楠岄」鐩槸鍚﹀畬鎴�
+    /// </summary>
+    private bool IsInspectionItemComplete(MesQaItemsDetectDetail5 inspectionItem, int actualCount)
+    {
+        return inspectionItem.CheckQyt == actualCount;
+    }
 
-        var isNull = db.Queryable<MesQaItemsDetectDetail5>()
-            .Where(s => s.ReleaseNo == detail.ReleaseNo && s.FcheckResu == null)
+    /// <summary>
+    /// 纭畾妫�楠岄」鐩粨鏋�
+    /// </summary>
+    private string DetermineInspectionItemResult((int TotalCount, int PassCount, int FailCount) counts, 
+        MesQaItemsDetectDetail5 inspectionItem)
+    {
+        if (counts.TotalCount == counts.PassCount)
+            return "鍚堟牸";
+        else if (counts.FailCount >= inspectionItem.FreQty)
+            return "涓嶅悎鏍�";
+        else
+            return string.Empty; // 鏈畬鎴愮姸鎬�
+    }
+
+    /// <summary>
+    /// 鏇存柊妫�楠岄」鐩粨鏋�
+    /// </summary>
+    private int UpdateInspectionItemResult(decimal? mainId, string result, int count)
+    {
+        return SqlSugarHelper.UseTransactionWithOracle(db =>
+        {
+            return db.Updateable<MesQaItemsDetectDetail5>()
+                .SetColumns(s => s.FcheckResu == result)
+                .SetColumns(s => s.FenterQty == count)
+                .Where(s => s.Id == mainId)
+                .ExecuteCommand();
+        });
+    }
+
+    /// <summary>
+    /// 妫�鏌ユ暣涓楠屽崟鏄惁瀹屾垚
+    /// </summary>
+    private bool IsInspectionOrderComplete(string? releaseNo)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        
+        // 妫�鏌ユ槸鍚﹁繕鏈夋湭瀹屾垚鐨勬楠岄」鐩�
+        var incompleteCount = db.Queryable<MesQaItemsDetectDetail5>()
+            .Where(s => s.ReleaseNo == releaseNo && s.FcheckResu == null)
             .Count();
 
-        if (isNull > 0) return 1;
+        return incompleteCount == 0;
+    }
 
+    /// <summary>
+    /// 澶勭悊瀹屾垚鐨勬楠屽崟
+    /// </summary>
+    private void ProcessCompleteInspectionOrder(MesQaItemsDetectDetail12 detail)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        
+        // 鑾峰彇妫�楠屽崟涓嬬殑鎵�鏈夋楠岄」鐩�
+        var inspectionCounts = GetInspectionOrderCounts(detail.ReleaseNo);
+        
+        // 纭畾鏁翠釜妫�楠屽崟鐨勭粨鏋�
+        var orderResult = DetermineInspectionOrderResult(inspectionCounts);
+        
+        // 鑾峰彇鐢ㄦ埛淇℃伅
+        var sysUser = GetUserInfo(detail.CreateBy);
+        
+        // 鏇存柊妫�楠屽崟缁撴灉
+        UpdateInspectionOrderResult(detail.ReleaseNo, orderResult, sysUser?.Fname, detail.CreateBy);
+    }
 
-        //鑾峰彇妫�楠屽崟鐨勬楠岄」鐩殑涓暟
-        var sum = db.Queryable<MesQaItemsDetectDetail5>()
-            .Where(s => s.ReleaseNo == detail.ReleaseNo).Count();
-
-        if (sum == 0) return 1;
-
-        //鑾峰彇妫�楠屽崟涓嬬殑鍚堟牸鐨勬楠岄」鐩釜鏁�
-        var icount = db.Queryable<MesQaItemsDetectDetail5>()
-            .Where(s => s.ReleaseNo == detail.ReleaseNo && s.FcheckResu == "鍚堟牸")
+    /// <summary>
+    /// 鑾峰彇妫�楠屽崟缁熻淇℃伅
+    /// </summary>
+    private (int TotalItems, int PassedItems) GetInspectionOrderCounts(string? releaseNo)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        
+        var totalItems = db.Queryable<MesQaItemsDetectDetail5>()
+            .Where(s => s.ReleaseNo == releaseNo).Count();
+            
+        var passedItems = db.Queryable<MesQaItemsDetectDetail5>()
+            .Where(s => s.ReleaseNo == releaseNo && s.FcheckResu == "鍚堟牸")
             .Count();
 
-        var FcheckResu = "涓嶅悎鏍�";
+        return (totalItems, passedItems);
+    }
 
-        //瀹為檯涓暟绛変簬鐞嗚涓暟鏃跺妫�楠屽崟杩涜鍒ゅ畾
-        if (sum == icount)
-            //鍚堟牸鐨勬楠岀粨鏋滅瓑浜庢�绘楠屾暟瑙嗕负鍚堟牸
-            FcheckResu = "鍚堟牸";
+    /// <summary>
+    /// 纭畾妫�楠屽崟缁撴灉
+    /// </summary>
+    private string DetermineInspectionOrderResult((int TotalItems, int PassedItems) counts)
+    {
+        // 鎵�鏈夋楠岄」鐩兘鍚堟牸鏃讹紝鏁翠釜妫�楠屽崟鎵嶅悎鏍�
+        return counts.TotalItems == counts.PassedItems ? "鍚堟牸" : "涓嶅悎鏍�";
+    }
 
-        var sysUser = db.Queryable<SysUser>()
-            .Where(s => s.Fcode == detail.CreateBy).First();
+    /// <summary>
+    /// 鑾峰彇鐢ㄦ埛淇℃伅
+    /// </summary>
+    private SysUser? GetUserInfo(string? userCode)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        return db.Queryable<SysUser>()
+            .Where(s => s.Fcode == userCode).First();
+    }
 
+    /// <summary>
+    /// 鏇存柊妫�楠屽崟缁撴灉
+    /// </summary>
+    private void UpdateInspectionOrderResult(string? releaseNo, string result, string? checkedBy, string? updatedBy)
+    {
         SqlSugarHelper.UseTransactionWithOracle(db =>
         {
             return db.Updateable<MesQaItemsDetect01>()
-                .SetColumns(s => s.FcheckResu == FcheckResu)
+                .SetColumns(s => s.FcheckResu == result)
                 .SetColumns(s => s.FcheckDate == DateTime.Now)
-                .SetColumns(s => s.FcheckBy == sysUser.Fname)
-                .SetColumns(s => s.LastupdateBy == detail.CreateBy)
+                .SetColumns(s => s.FcheckBy == checkedBy)
+                .SetColumns(s => s.LastupdateBy == updatedBy)
                 .SetColumns(s => s.LastupdateDate == DateTime.Now)
-                .Where(s => s.ReleaseNo == detail.ReleaseNo)
+                .Where(s => s.ReleaseNo == releaseNo)
                 .ExecuteCommand();
         });
-        //  if (FcheckResu.Equals("涓嶅悎鏍�"))
-        //鑷姩鐢熸垚鍏ュ簱妫�寮傚父瀵圭瓥
-        ///     saveDetect02(detail.Id, detail.CreateBy);
-
-        return useTransactionWithOracle;
     }
     /*  public int saveDetect02(decimal? gid, string? createBy)
      {

--
Gitblit v1.9.3