From 6b3c4d87c500442f9774904c6a1117fe7cee5b5f Mon Sep 17 00:00:00 2001
From: 如洲 陈 <1278080563@qq.com>
Date: 星期三, 24 九月 2025 17:50:40 +0800
Subject: [PATCH] 退货检验平板优化、任务单加序列号

---
 MES.Service/service/WomcaaManager.cs |   80 +++++++++++++++++++++++++++++++++------
 1 files changed, 67 insertions(+), 13 deletions(-)

diff --git a/MES.Service/service/WomcaaManager.cs b/MES.Service/service/WomcaaManager.cs
index cc348ef..36a9a6a 100644
--- a/MES.Service/service/WomcaaManager.cs
+++ b/MES.Service/service/WomcaaManager.cs
@@ -17,6 +17,31 @@
 
     private readonly WomcabManager _womcabManager = new();
 
+    /// <summary>
+    /// 楠岃瘉BOM鏄惁涓虹┖
+    /// </summary>
+    /// <param name="erpCabs">BOM鏄庣粏鍒楄〃</param>
+    /// <param name="billNo">鐢熶骇浠诲姟鍗曞彿</param>
+    /// <exception cref="Exception">褰揃OM涓虹┖鏃舵姏鍑哄紓甯�</exception>
+    private void ValidateBomNotEmpty(List<ErpCAB> erpCabs, string billNo)
+    {
+        if (erpCabs == null || erpCabs.Count == 0)
+        {
+            throw new Exception($"鐢熶骇浠诲姟鍗� {billNo} 鐨凚OM涓虹┖锛屼笉鍏佽鎺ㄩ�佸埌MES绯荤粺");
+        }
+
+        // 妫�鏌ユ槸鍚︽湁鏈夋晥鐨凚OM鏄庣粏锛堢墿鏂欑紪鐮佷笉涓虹┖涓旈渶棰嗙敤閲忓ぇ浜�0锛�
+        var validBomItems = erpCabs.Where(cab => 
+            !string.IsNullOrWhiteSpace(cab.FMaterialID2) && 
+            !string.IsNullOrWhiteSpace(cab.FNeedQty2) &&
+            decimal.TryParse(cab.FNeedQty2, out decimal qty) && qty > 0).ToList();
+
+        if (validBomItems.Count == 0)
+        {
+            throw new Exception($"鐢熶骇浠诲姟鍗� {billNo} 鐨凚OM鏄庣粏鏃犳晥锛堢墿鏂欑紪鐮佷负绌烘垨闇�棰嗙敤閲忎负0锛夛紝涓嶅厑璁告帹閫佸埌MES绯荤粺");
+        }
+    }
+
     public bool SaveList(List<ErpWOM> rohIns)
     {
         var result = rohIns.Select(Save).ToList();
@@ -25,9 +50,12 @@
 
     public bool Save(ErpWOM wom)
     {
-        var womErpCaa = wom.ErpCaa;
+        var womErpCaa = wom. ErpCaa;
         var mesWomcaa = MapErpCAAtoWomcaa(womErpCaa);
         var mesWomcabs =  MapErpCABtoWomcab(wom.ErpCabs);
+
+        // 楠岃瘉BOM鏄惁涓虹┖
+        ValidateBomNotEmpty(wom.ErpCabs, womErpCaa.FBillNo);
 
         return UseTransaction(db =>
         {
@@ -241,27 +269,53 @@
 
     public bool Delete(YFDelete data)
     {
+        if (data == null)
+            throw new ArgumentNullException(nameof(data));
 
+        if (string.IsNullOrWhiteSpace(data.FBillNo))
+            throw new ArgumentException("FBillNo 涓嶈兘涓虹┖", nameof(data.FBillNo));
+
+        if (string.IsNullOrWhiteSpace(data.FBillTypeID))
+            throw new ArgumentException("FBillTypeID 涓嶈兘涓虹┖", nameof(data.FBillTypeID));
 
         return UseTransaction(db =>
         {
-            var update = db.Deleteable<Womcaa>()
-                   .Where(it => it.Caa001 == data.FBillNo &&
-                                it.SrcBillType == data.FBillTypeID)
-                   .ExecuteCommand() > 0;
+            // 鍒犻櫎涓昏〃鏁版嵁
+            var deleteMain = db.Deleteable<Womcaa>()
+                .Where(it => it.Caa001 == data.FBillNo && it.SrcBillType == data.FBillTypeID)
+                .ExecuteCommand() > 0;
 
-            var insertOrUpdate = db.Deleteable<Womcab>()
-                  .Where(it => it.Cab001 == data.FBillNo &&
-                               it.Cab002 == data.FBillTypeID)
-                  .ExecuteCommand() > 0;
+            // 鍒犻櫎瀛愯〃鏁版嵁
+            var deleteDetail = db.Deleteable<Womcab>()
+                .Where(it => it.Cab001 == data.FBillNo && it.Cab002 == data.FBillTypeID)
+                .ExecuteCommand() > 0;
 
+            if (!deleteMain || !deleteDetail)
+                throw new Exception("鍒犻櫎澶辫触锛氫富琛ㄦ垨瀛愯〃璁板綍涓嶅瓨鍦�");
 
+            // 璋冪敤瀛樺偍杩囩▼杩涜鍚庣画澶勭悊
+            var inputParam1 = new SugarParameter("P_WORK_NO", data.FBillNo);
+            var inputParam2 = new SugarParameter("P_WORK_TYPE", data.FBillTypeID);
+            var outParam1 = new SugarParameter("C_RESULT", null, true); // 杈撳嚭鍙傛暟
+            var outParam2 = new SugarParameter("C_MSG", null, true);   // 杈撳嚭鍙傛暟
 
-            if (update && insertOrUpdate) return 1;
-            throw new NotImplementedException("鍒犻櫎澶辫触");
+            db.Ado.ExecuteCommand(
+                "BEGIN PRC_DELETE_DAA(:P_WORK_NO, :P_WORK_TYPE, :C_RESULT, :C_MSG); END;",
+                inputParam1, inputParam2, outParam1, outParam2);
+
+            int result = int.Parse((string)outParam1.Value);
+            string message = outParam2.Value == DBNull.Value ? string.Empty : (string)outParam2.Value;
+
+            if (result == 1)
+            {
+                //瀛樺偍杩囩▼澶辫触鍒欎簨鍔¤繘琛屽洖婊�
+                db.Ado.RollbackTran();
+                throw new Exception(message);
+
+            }
+
+            return 1;
         }) > 0;
-
-
     }
 
 

--
Gitblit v1.9.3