From e3355fba66b7f23bfca7dc213b27ad5f6721763e Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期五, 27 十二月 2024 12:58:03 +0800
Subject: [PATCH] 111

---
 service/Wom/MesWorkProdManager.cs |  121 +++++++++++++++++++++++++++------------
 1 files changed, 83 insertions(+), 38 deletions(-)

diff --git a/service/Wom/MesWorkProdManager.cs b/service/Wom/MesWorkProdManager.cs
index 04a170c..3d88cb7 100644
--- a/service/Wom/MesWorkProdManager.cs
+++ b/service/Wom/MesWorkProdManager.cs
@@ -11,49 +11,76 @@
     //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
 
     /// <summary>
-    /// PDA鎵弿鐢熶骇鎶ュ伐
+    ///     PDA鎵弿鐢熶骇鎶ュ伐
     /// </summary>
+    /// <param name="request">
+    ///     鎶ュ伐璇锋眰鍙傛暟锛屽寘鍚�:
+    ///     - StaffNo: 鍛樺伐宸ュ彿锛屽繀濉�
+    ///     - ItemBarcode: 鐗╂枡鏉$爜锛屽繀濉�
+    ///     - UserNo: 鎿嶄綔鐢ㄦ埛璐﹀彿锛屽繀濉�
+    /// </param>
+    /// <returns>
+    ///     杩斿洖鎶ュ伐缁撴灉瀵硅薄锛屽寘鍚�:
+    ///     - TaskNo: 宸ュ崟鍙�
+    ///     - ItemNo: 鐗╂枡缂栧彿
+    ///     - PlanQty: 璁″垝鏁伴噺
+    ///     - ReportedQty: 宸叉姤宸ユ暟閲�
+    ///     - CurrentQty: 鏈鎶ュ伐鏁伴噺
+    ///     - BarcodeQty: 鏉$爜鏁伴噺
+    ///     - ItemName: 鐗╂枡鍚嶇О
+    ///     - ItemModel: 鐗╂枡鍨嬪彿
+    ///     - Message: 澶勭悊缁撴灉娑堟伅
+    /// </returns>
+    /// <exception cref="Exception">
+    ///     - 褰撳憳宸ヤ笉瀛樺湪鏃舵姏鍑哄紓甯�
+    ///     - 褰撴潯鐮佷笉瀛樺湪鏃舵姏鍑哄紓甯�
+    ///     - 褰撶墿鏂欎笉瀛樺湪鏃舵姏鍑哄紓甯�
+    ///     - 褰撴潯鐮侀噸澶嶆壂鎻忔椂鎶涘嚭寮傚父
+    ///     - 褰撳伐鍗曚笉瀛樺湪鏃舵姏鍑哄紓甯�
+    ///     - 褰撴姤宸ユ暟閲忓皬浜庣瓑浜�0鏃舵姏鍑哄紓甯�
+    ///     - 褰撴姤宸ユ�绘暟閲忚秴杩囪鍒掓暟閲忔椂鎶涘嚭寮傚父
+    /// </exception>
     public ScanWorkResult ScanWorkAsync(ScanWorkRequest request)
     {
-        // 鏌ヨ浜哄憳淇℃伅
+        // 1. 楠岃瘉鍛樺伐淇℃伅
         var staff = Db.Queryable<MesStaff>()
             .Where(x => x.StaffNo == request.StaffNo)
             .First();
         if (staff == null)
             throw new Exception("璇峰厛閫夋嫨浜哄憳");
 
-        // 鏌ヨ鏉$爜淇℃伅
+        // 2. 楠岃瘉鏉$爜淇℃伅
         var barcode = Db.Queryable<MesInvItemBarcodes>()
             .Where(x => x.ItemBarcode == request.ItemBarcode)
             .First();
         if (barcode == null)
             throw new Exception($"鏃犳鏉$爜锛岃鏍稿锛亄request.ItemBarcode}");
 
-        // 鏌ヨ鐗╂枡淇℃伅
+        // 3. 楠岃瘉鐗╂枡淇℃伅
         var item = Db.Queryable<MesItems>()
             .Where(x => x.Id == barcode.ItemId)
             .First();
         if (item == null)
             throw new Exception($"鏃犳鐗╂枡锛岃鏍稿锛亄request.ItemBarcode}");
 
-        // 纭畾鍗曟嵁绫诲瀷
-        int billTypeId = 900;
-        int transactionNo = 902;
+        // 4. 鏍规嵁鏉$爜澶囨敞纭畾鍗曟嵁绫诲瀷鍜屼氦鏄撳彿
+        var billTypeId = 900; // 榛樿鍗曟嵁绫诲瀷
+        var transactionNo = 902; // 榛樿浜ゆ槗鍙�
         switch (barcode.Memo?.Trim() ?? "0")
         {
             case "涓濆嵃":
-                transactionNo = 901;
+                transactionNo = 901; // 涓濆嵃宸ュ簭
                 break;
             case "鍗婃垚鍝�":
-                transactionNo = 902;
+                transactionNo = 902; // 鍗婃垚鍝佸伐搴�
                 break;
             case "鍖呰":
             case "鎴愬搧":
-                transactionNo = 903;
+                transactionNo = 903; // 鎴愬搧/鍖呰宸ュ簭
                 break;
         }
 
-        // 妫�鏌ユ潯鐮佹槸鍚﹂噸澶嶆壂鎻�
+        // 5. 妫�鏌ユ潯鐮佹槸鍚﹂噸澶嶆壂鎻�
         var exists = Db.Queryable<MesWorkProd, MesWorkProdCDetails>(
                 (a, b) =>
                     new JoinQueryInfos(JoinType.Inner,
@@ -66,7 +93,7 @@
         if (exists)
             throw new Exception("鏉$爜閲嶅鎵弿锛岃鏍稿锛�");
 
-        // 鑾峰彇宸叉姤宸ユ暟閲�
+        // 6. 鑾峰彇宸叉姤宸ユ暟閲�
         var reportedQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>(
                 (a, b) =>
                     new JoinQueryInfos(JoinType.Inner,
@@ -76,7 +103,7 @@
                              && a.TaskNo == barcode.BillNo)
             .Sum((a, b) => b.Quantity);
 
-        // 鑾峰彇宸ュ崟璁″垝鏁伴噺鍜屽瀷鍙�
+        // 7. 鑾峰彇宸ュ崟璁″垝鏁伴噺鍜屽瀷鍙�
         var workOrder = Db.Queryable<Womdaa>()
             .Where(x => x.Daa001 == barcode.BillNo)
             .First();
@@ -86,9 +113,10 @@
         var planQty = workOrder.Daa008;
         var itemModel = workOrder.Daa004;
 
+        // 8. 浣跨敤浜嬪姟澶勭悊鎶ュ伐鏁版嵁
         UseTransaction(db =>
         {
-            // 鏈夋暟閲忔潯鐮佽嚜鍔ㄦ姤宸�
+            // 9. 澶勭悊鏈夋暟閲忔潯鐮佺殑鑷姩鎶ュ伐
             if (barcode.Quantity > 0)
             {
                 var reportQty = barcode.Quantity;
@@ -101,7 +129,7 @@
                     throw new Exception(
                         $"鏈鎶ュ伐鏁伴噺锛歿reportQty} 澶т簬鍓╀綑鎶ュ伐鏁伴噺锛歿workOrder.Daa008 - reportedQty ?? 0}锛岃鏍稿锛�");
 
-                // 鏇存柊鏉$爜鐘舵��
+                // 10. 鏇存柊鏉$爜鐘舵��
                 db.Updateable<MesInvItemBarcodes>()
                     .SetColumns(x => new MesInvItemBarcodes
                     {
@@ -111,7 +139,7 @@
                     .Where(x => x.Guid == barcode.Guid)
                     .ExecuteCommandAsync();
 
-                // 鑾峰彇鎴栧垱寤烘姤宸ュ崟
+                // 11. 鑾峰彇鎴栧垱寤烘姤宸ュ崟
                 var workProd = db.Queryable<MesWorkProd>()
                     .Where(x => x.TaskNo == barcode.BillNo
                                 && x.CreateDate.Value.Date.ToString(
@@ -125,7 +153,7 @@
                 if (workProd == null)
                 {
                     var id = Guid.NewGuid();
-                    var billNo = BillNo.GetBillNo("MES_WORK");
+                    var billNo = BillNo.GetBillNo("BG(鎶ュ伐缂栧彿)");
 
                     workProd = new MesWorkProd
                     {
@@ -147,7 +175,7 @@
                         .ExecuteCommand();
                 }
 
-                // 鎻掑叆鎶ュ伐鏄庣粏
+                // 12. 鎻掑叆鎶ュ伐鏄庣粏
                 var detailId = Guid.NewGuid();
                 db.Insertable(new MesWorkProdCDetails
                 {
@@ -169,7 +197,7 @@
                     BgYg = staff.Id
                 }).IgnoreColumns(true).ExecuteCommand();
 
-                // 鏇存柊宸ュ崟宸叉姤宸ユ暟閲�
+                // 13. 鏇存柊宸ュ崟宸叉姤宸ユ暟閲�
                 db.Updateable<Womdaa>()
                     .SetColumns(x =>
                         x.Daa011 == (x.Daa011 ?? 0) + (int)barcode.Quantity
@@ -177,7 +205,7 @@
                     .Where(x => x.Daa001 == barcode.BillNo)
                     .ExecuteCommandAsync();
 
-                // 閲嶆柊鑾峰彇宸叉姤宸ユ暟閲�
+                // 14. 閲嶆柊鑾峰彇鏈�鏂板凡鎶ュ伐鏁伴噺
                 reportedQty = db.Queryable<MesWorkProd, MesWorkProdCDetails>(
                         (a, b) =>
                             new JoinQueryInfos(JoinType.Inner,
@@ -191,6 +219,7 @@
             return 1;
         });
 
+        // 15. 杩斿洖澶勭悊缁撴灉
         return new ScanWorkResult
         {
             TaskNo = barcode.TaskNo,
@@ -207,45 +236,59 @@
 
 
     /// <summary>
-    /// PDA鎵弿鐢熶骇鎶ュ伐  prc_rf_pda_scan_work_prod
+    ///     PDA鎵弿鐢熶骇鎶ュ伐 prc_rf_pda_scan_work_prod
     /// </summary>
+    /// <param name="request">
+    ///     鎶ュ伐璇锋眰鍙傛暟锛屽寘鍚�:
+    ///     - ItemBarcode: 鐗╂枡鏉$爜锛屽繀濉�
+    ///     - Quantity: 鎶ュ伐鏁伴噺锛屽繀濉笖澶т簬0
+    ///     - UserNo: 鎿嶄綔鐢ㄦ埛璐﹀彿锛屽繀濉�
+    /// </param>
+    /// <returns>杩斿洖甯冨皵鍊硷紝true琛ㄧず鎶ュ伐鎴愬姛锛宖alse琛ㄧず鎶ュ伐澶辫触</returns>
+    /// <exception cref="Exception">
+    ///     - 褰撴姤宸ユ暟閲忓皬浜庣瓑浜�0鏃舵姏鍑哄紓甯�
+    ///     - 褰撴潯鐮佷笉瀛樺湪鏃舵姏鍑哄紓甯�
+    ///     - 褰撳伐鍗曚笉瀛樺湪鏃舵姏鍑哄紓甯�
+    ///     - 褰撴姤宸ユ�绘暟閲忚秴杩囪鍒掓暟閲忔椂鎶涘嚭寮傚父
+    /// </exception>
     public bool ScanWorkProdAsync(ScanWorkRequest request)
     {
+        // 1. 楠岃瘉鎶ュ伐鏁伴噺鏄惁澶т簬0
         if (request.Quantity <= 0)
             throw new Exception("鎶ュ伐鏁伴噺涓嶈兘灏忎簬绛変簬 0锛岃鏍稿锛�");
 
-        // 鏌ヨ鏉$爜淇℃伅
+        // 2. 鏌ヨ鏉$爜淇℃伅锛岄獙璇佹潯鐮佹槸鍚﹀瓨鍦�
         var barcode = Db.Queryable<MesInvItemBarcodes>()
             .Where(x => x.ItemBarcode == request.ItemBarcode)
             .First();
         if (barcode == null)
             throw new Exception($"搴撳瓨涓棤姝ゆ潯鐮侊紝璇锋牳瀵癸紒{request.ItemBarcode}");
 
-        // 鏌ヨ宸ュ崟淇℃伅
+        // 3. 鏌ヨ宸ュ崟淇℃伅锛岄獙璇佸伐鍗曟槸鍚﹀瓨鍦�
         var womdaa = Db.Queryable<Womdaa>()
             .Where(x => x.Daa001 == barcode.BillNo)
             .First();
         if (womdaa == null)
             throw new Exception($"鏉$爜涓嶆槸鎶ュ伐鏉$爜/鏃犲搴斿伐鍗曪紝璇锋牳瀵癸紒{request.ItemBarcode}");
 
-        // 纭畾鍗曟嵁绫诲瀷
-        int billTypeId = 900;
-        int transactionNo = 902;
+        // 4. 鏍规嵁鏉$爜澶囨敞纭畾鍗曟嵁绫诲瀷鍜屼氦鏄撳彿
+        var billTypeId = 900; // 榛樿鍗曟嵁绫诲瀷
+        var transactionNo = 902; // 榛樿浜ゆ槗鍙�(鍗婃垚鍝佸伐搴�)
         switch (barcode.Memo?.Trim() ?? "0")
         {
             case "涓濆嵃":
-                transactionNo = 901;
+                transactionNo = 901; // 涓濆嵃宸ュ簭
                 break;
             case "鍗婃垚鍝�":
-                transactionNo = 902;
+                transactionNo = 902; // 鍗婃垚鍝佸伐搴�
                 break;
             case "鎴愬搧":
             case "鍖呰":
-                transactionNo = 903;
+                transactionNo = 903; // 鎴愬搧/鍖呰宸ュ簭
                 break;
         }
 
-        // 姹囨�诲凡鎵潯鐮佹暟閲�
+        // 5. 姹囨�诲凡鎵潯鐮佹暟閲忥紝楠岃瘉鏄惁瓒呭嚭璁″垝鏁伴噺
         var sumQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>((a, b) =>
                 new JoinQueryInfos(JoinType.Inner, a.BillNo == b.BillNo))
             .Where((a, b) => a.BillTypeId == billTypeId
@@ -260,16 +303,17 @@
             throw new Exception(
                 $"鏈鎶ュ伐鏁伴噺锛歿request.Quantity} 澶т簬鍓╀綑鎶ュ伐鏁伴噺锛歿womdaa.Daa008 - (sumQty - request.Quantity)}锛岃鏍稿锛�");
 
+        // 6. 寮�鍚簨鍔″鐞嗘姤宸ユ暟鎹�
         return UseTransaction(db =>
         {
-            // 鏇存柊鏉$爜淇℃伅
+            // 6.1 鏇存柊鏉$爜淇℃伅锛岃缃凡鎶ュ伐鏍囪鍜屾暟閲�
             db.Updateable<MesInvItemBarcodes>()
                 .SetColumns(x => x.WorkFlg == true)
                 .SetColumns(x => x.Quantity == request.Quantity)
                 .Where(x => x.Guid == barcode.Guid)
                 .ExecuteCommand();
 
-            // 鑾峰彇鎴栧垱寤烘姤宸ュ崟
+            // 6.2 鑾峰彇鎴栧垱寤烘姤宸ュ崟
             var workProd = db.Queryable<MesWorkProd>()
                 .Where(x => x.TaskNo == barcode.BillNo
                             && x.CreateDate.Value.Date.ToString("yyyy-MM-dd") ==
@@ -279,12 +323,13 @@
                             && x.Status == 0)
                 .First();
 
+            // 6.3 濡傛灉鎶ュ伐鍗曚笉瀛樺湪鍒欏垱寤烘柊鐨勬姤宸ュ崟
             if (workProd == null)
             {
-                var billNo = BillNo.GetBillNo("MES_WORK");
+                var billNo = BillNo.GetBillNo("BG(鎶ュ伐缂栧彿)");
                 workProd = new MesWorkProd
                 {
-                    Id = Guid.NewGuid(), 
+                    Id = Guid.NewGuid(),
                     BillNo = billNo,
                     LineNo = barcode.LineNo,
                     Company = barcode.Company,
@@ -293,7 +338,7 @@
                     CreateDate = DateTime.Now,
                     LastupdateBy = request.UserNo,
                     LastupdateDate = DateTime.Now,
-                    PbillNo = barcode.BillNo, // Added PbillNo field
+                    PbillNo = barcode.BillNo,
                     BillTypeId = billTypeId,
                     TransactionNo = transactionNo,
                     TaskNo = barcode.BillNo
@@ -302,10 +347,10 @@
                 db.Insertable(workProd).IgnoreColumns(true).ExecuteCommand();
             }
 
-            // 鎻掑叆鎶ュ伐鏄庣粏
+            // 6.4 鎻掑叆鎶ュ伐鏄庣粏璁板綍
             var detail = new MesWorkProdCDetails
             {
-                Id = Guid.NewGuid(), 
+                Id = Guid.NewGuid(),
                 BillNo = workProd.BillNo,
                 ItemBarcode = request.ItemBarcode,
                 Quantity = (int)request.Quantity,
@@ -316,7 +361,7 @@
                 LastupdateBy = request.UserNo,
                 LastupdateDate = DateTime.Now,
                 ItemNo = barcode.ItemNo,
-                PbillNo = barcode.BillNo, // Added PbillNo from barcode
+                PbillNo = barcode.BillNo,
                 WorkLast = barcode.WorkLast,
                 SilkPqty = barcode.SilkPqty,
                 SilkId = barcode.SilkId,

--
Gitblit v1.9.3