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

---
 MESApplication/Controllers/QC/XJController.cs   |   22 +++
 MES.Service/Modes/VDab.cs                       |   56 ++++++++
 MES.Service/service/QC/XJService.cs             |  196 ++++++++++++++++++++++++---
 MES.Service/service/QC/BaseService.cs           |    9 +
 MES.Service/Modes/QsQaItemXj.cs                 |   78 +++++-----
 MESApplication/Controllers/QC/BaseController.cs |   26 +++
 6 files changed, 324 insertions(+), 63 deletions(-)

diff --git a/MES.Service/Modes/QsQaItemXj.cs b/MES.Service/Modes/QsQaItemXj.cs
index 28c435a..a54b53a 100644
--- a/MES.Service/Modes/QsQaItemXj.cs
+++ b/MES.Service/Modes/QsQaItemXj.cs
@@ -21,108 +21,112 @@
     public decimal? Id { get; set; }
 
     /// <summary>
-    ///     妫�楠屽崟鍙�
+    /// 妫�楠屽崟鍙� 
     /// </summary>
-    [SugarColumn(ColumnName = "RELEASE_NO")]
+    [SugarColumn(ColumnName = "RELEASE_NO", Length = 100)]
     public string? ReleaseNo { get; set; }
 
     /// <summary>
-    ///     妫�楠屾棩鏈�
+    /// 妫�楠屾棩鏈�
     /// </summary>
     [SugarColumn(ColumnName = "FCHECK_DATE")]
-    public DateTime? FcheckDate { get; set; }
+    public DateTime? CheckDate { get; set; }
 
     /// <summary>
-    ///     妫�楠屼汉鍛�
+    /// 妫�楠屼汉鍛� 
     /// </summary>
-    [SugarColumn(ColumnName = "FCHECK_BY")]
-    public string? FcheckBy { get; set; }
+    [SugarColumn(ColumnName = "FCHECK_BY", Length = 100)]
+    public string? CheckBy { get; set; }
 
     /// <summary>
-    ///     鐗╂枡缂栫爜
+    /// 鐗╂枡缂栫爜 
     /// </summary>
-    [SugarColumn(ColumnName = "ITEM_NO")]
+    [SugarColumn(ColumnName = "ITEM_NO", Length = 100)]
     public string? ItemNo { get; set; }
 
     /// <summary>
-    ///     妫�楠岀粨鏋�
+    /// 妫�楠岀粨鏋� 
     /// </summary>
-    [SugarColumn(ColumnName = "FCHECK_RESU")]
-    public string? FcheckResu { get; set; }
+    [SugarColumn(ColumnName = "FCHECK_RESU", Length = 100)]
+    public string? CheckResult { get; set; }
 
     /// <summary>
-    ///     鍒涘缓浜�
+    /// 鍒涘缓浜�
     /// </summary>
-    [SugarColumn(ColumnName = "CREATE_BY")]
+    [SugarColumn(ColumnName = "CREATE_BY", Length = 100)]
     public string? CreateBy { get; set; }
 
     /// <summary>
-    ///     鍒涘缓鏃ユ湡
+    /// 鍒涘缓鏃ユ湡 
     /// </summary>
     [SugarColumn(ColumnName = "CREATE_DATE")]
     public DateTime? CreateDate { get; set; }
 
     /// <summary>
-    ///     鏇存柊浜�
+    /// 鏇存柊浜� 
     /// </summary>
-    [SugarColumn(ColumnName = "LASTUPDATE_BY")]
-    public string? LastupdateBy { get; set; }
+    [SugarColumn(ColumnName = "LASTUPDATE_BY", Length = 100)]
+    public string? LastUpdateBy { get; set; }
 
     /// <summary>
-    ///     鏇存柊鏃ユ湡
+    /// 鏇存柊鏃ユ湡
     /// </summary>
     [SugarColumn(ColumnName = "LASTUPDATE_DATE")]
-    public DateTime? LastupdateDate { get; set; }
+    public DateTime? LastUpdateDate { get; set; }
 
     /// <summary>
+    /// 淇敼浜�
     /// </summary>
-    [SugarColumn(ColumnName = "MODIFY1_BY")]
-    public string? Modify1By { get; set; }
+    [SugarColumn(ColumnName = "MODIFY1_BY", Length = 100)]
+    public string? ModifyBy { get; set; }
 
     /// <summary>
-    ///     鍗曚綅
+    /// 鐗╂枡鍗曚綅 
     /// </summary>
-    [SugarColumn(ColumnName = "ITEM_UNIT")]
+    [SugarColumn(ColumnName = "ITEM_UNIT", Length = 100)]
     public string? ItemUnit { get; set; }
 
     /// <summary>
-    ///     宸ュ崟鍙�
+    /// 宸ュ崟鍙�
     /// </summary>
-    [SugarColumn(ColumnName = "BILL_NO")]
+    [SugarColumn(ColumnName = "BILL_NO", Length = 50)]
     public string? BillNo { get; set; }
 
     /// <summary>
-    ///     妯″叿鍙�
+    /// 妯″叿鍙� 
     /// </summary>
-    [SugarColumn(ColumnName = "MOID_NUM")]
-    public string? MoidNum { get; set; }
+    [SugarColumn(ColumnName = "MOID_NUM", Length = 50)]
+    public string? MoldNum { get; set; }
 
     /// <summary>
+    /// 鎻愪氦浜� 
     /// </summary>
-    [SugarColumn(ColumnName = "FSUBMIT_BY")]
-    public string? FsubmitBy { get; set; }
+    [SugarColumn(ColumnName = "FSUBMIT_BY", Length = 50)]
+    public string? SubmitBy { get; set; }
 
     /// <summary>
+    /// 鎻愪氦鏃ユ湡 
     /// </summary>
     [SugarColumn(ColumnName = "FSUBMIT_DATE")]
-    public DateTime? FsubmitDate { get; set; }
+    public DateTime? SubmitDate { get; set; }
 
     /// <summary>
+    /// 鎻愪氦鐘舵�侊紙0/1锛�
     /// </summary>
     [SugarColumn(ColumnName = "FSUBMIT")]
-    public decimal? Fsubmit { get; set; }
+    public int? SubmitStatus { get; set; }
 
     /// <summary>
-    ///     澶囨敞
+    /// 澶囨敞 
     /// </summary>
-    [SugarColumn(ColumnName = "REMARKS")]
+    [SugarColumn(ColumnName = "REMARKS", Length = 200)]
     public string? Remarks { get; set; }
 
     /// <summary>
-    ///     鐗╂枡ID
+    /// 鐗╂枡ID
     /// </summary>
     [SugarColumn(ColumnName = "ITEM_ID")]
-    public decimal? ItemId { get; set; }
+    public long? ItemId { get; set; }
 
     [SugarColumn(IsIgnore = true)] public string? Daa020 { get; set; }
     [SugarColumn(IsIgnore = true)] public decimal? PlanQty { get; set; }
diff --git a/MES.Service/Modes/VDab.cs b/MES.Service/Modes/VDab.cs
new file mode 100644
index 0000000..96de544
--- /dev/null
+++ b/MES.Service/Modes/VDab.cs
@@ -0,0 +1,56 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+[SugarTable("V_DAB")]
+public class VDab
+{
+    
+    /// <summary>
+    /// 宸ュ崟 瀛楁
+    /// </summary>
+    [SugarColumn(ColumnName = "DAB001")]
+    public string? Dab001 { get; set; }
+    
+    /// <summary>
+    /// 搴忓彿 瀛楁
+    /// </summary>
+    [SugarColumn(ColumnName = "DAB002")]
+    public decimal? Dab002 { get; set; }
+    
+    /// <summary>
+    /// 闇�棰嗙敤閲� 瀛楁
+    /// </summary>
+    [SugarColumn(ColumnName = "DAB006")]
+    public string? Dab006 { get; set; }
+
+    /// <summary>
+    /// 鏉愭枡鍚嶇О 瀛楁
+    /// </summary>
+    [SugarColumn(ColumnName = "DAB004")]
+    public string? Dab004 { get; set; }
+
+    /// <summary>
+    /// 鏉愭枡瑙勬牸 瀛楁
+    /// </summary>
+    [SugarColumn(ColumnName = "DAB005")]
+    public string? Dab005 { get; set; }
+
+    /// <summary>
+    /// PID 瀛楁
+    /// </summary>
+    [SugarColumn(ColumnName = "PID")]
+    public string? Pid { get; set; }
+
+    /// <summary>
+    /// 鐗╂枡缂栧彿 瀛楁
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_NO")]
+    public string? ItemNo { get; set; }
+
+    /// <summary>
+    /// 鍗曚綅 瀛楁
+    /// </summary>
+    [SugarColumn(ColumnName = "FNUMBER")]
+    public string? FNumber { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/service/QC/BaseService.cs b/MES.Service/service/QC/BaseService.cs
index a827168..4d25386 100644
--- a/MES.Service/service/QC/BaseService.cs
+++ b/MES.Service/service/QC/BaseService.cs
@@ -49,4 +49,13 @@
         });
         return mesQsImages;
     }
+
+    public List<VDab> GetDabs(VDab queryObj)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        return db.Queryable<VDab>()
+            .Where(s => s.Dab001 == queryObj.Dab001)
+            .OrderBy(s => s.Dab002)
+            .ToList();
+    }
 }
\ No newline at end of file
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();
             });
diff --git a/MESApplication/Controllers/QC/BaseController.cs b/MESApplication/Controllers/QC/BaseController.cs
index dd54e7f..122d0df 100644
--- a/MESApplication/Controllers/QC/BaseController.cs
+++ b/MESApplication/Controllers/QC/BaseController.cs
@@ -1,5 +1,6 @@
 锘縰sing System.Dynamic;
 using MES.Service.Dto.service;
+using MES.Service.Modes;
 using MES.Service.service.QC;
 using MES.Service.util;
 using Microsoft.AspNetCore.Mvc;
@@ -81,4 +82,29 @@
             return ResponseResult.ResponseError(ex);
         }
     }
+    
+    
+    // GetDabs(VDab queryObj)
+    [HttpPost("getDabs")]
+    public ResponseResult GetDabs(VDab queryObj)
+    {
+         
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var tbBillList =
+                new BaseService().GetDabs(queryObj);
+            resultInfos.tbBillList = tbBillList;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
 }
\ No newline at end of file
diff --git a/MESApplication/Controllers/QC/XJController.cs b/MESApplication/Controllers/QC/XJController.cs
index 6ae5b7b..6e3a36d 100644
--- a/MESApplication/Controllers/QC/XJController.cs
+++ b/MESApplication/Controllers/QC/XJController.cs
@@ -442,4 +442,26 @@
             return ResponseResult.ResponseError(ex);
         }
     }
+
+    [HttpPost("XJQaSubmit")]
+    public ResponseResult XJQaSubmit(LLJDto rkjDto)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var tbBillList =
+                new XJService().XJQaSubmit(rkjDto);
+            resultInfos.tbBillList = tbBillList;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3