From 367979de838ec3655d37dc618d98924c6b43b324 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期三, 24 十二月 2025 09:46:05 +0800
Subject: [PATCH] 111

---
 StandardPda/MES.Service/service/Warehouse/MesInvItemStocksManager.cs |  159 +++++++++++++---------------------------------------
 1 files changed, 40 insertions(+), 119 deletions(-)

diff --git a/StandardPda/MES.Service/service/Warehouse/MesInvItemStocksManager.cs b/StandardPda/MES.Service/service/Warehouse/MesInvItemStocksManager.cs
index aa3c577..b14bd2d 100644
--- a/StandardPda/MES.Service/service/Warehouse/MesInvItemStocksManager.cs
+++ b/StandardPda/MES.Service/service/Warehouse/MesInvItemStocksManager.cs
@@ -26,9 +26,9 @@
 
         // 浼樺寲鐐�1: 浣跨敤鍘熺敓SQL ROW_NUMBER()鍦ㄦ暟鎹簱绔畬鎴愬幓閲嶅拰鎺掑簭
         var rackingTaskSql = @"
-            SELECT ITEM_BARCODE AS ItemBarcode, PALLETCODE AS PalletCode, CODE AS Code
+            SELECT ITEM_BARCODE AS ItemBarcode, PALLETCODE AS PalletCode, CODE AS Code, TASKTYPE AS TaskType
             FROM (
-                SELECT ITEM_BARCODE, PALLETCODE, CODE,
+                SELECT ITEM_BARCODE, PALLETCODE, CODE, TASKTYPE,
                        ROW_NUMBER() OVER (PARTITION BY ITEM_BARCODE ORDER BY ID DESC) AS RN
                 FROM XB_RACKING_TASK_SYXT_LOG
                 WHERE ITEM_BARCODE IS NOT NULL AND (CODE IS NULL OR CODE != '500')
@@ -204,6 +204,7 @@
             .Select((stock, item, depot, org, unit) => new
             {
                 stock.IqcStatus,
+                stock.Visible,
                 DepotCode = stock.DepotsCode,
                 depot.DepotName,
                 stock.DepotSectionsCode,
@@ -230,15 +231,27 @@
             
             rackingTaskDict.TryGetValue(barcodeToMatch, out var rackingTask);
 
-            string stockStatus = "杩涘叆绔嬪簱鐨勮矾涓�";
-            if (rackingTask?.Code != null)
+            string stockStatus;
+            if (rackingTask?.TaskType == "绔嬪簱鍑哄簱璇锋眰")
             {
-                stockStatus = rackingTask.Code == "200" ? "宸插湪绔嬪簱涓�" : "杩涘叆绔嬪簱鐨勮矾涓�";
+                // 鍑哄簱璇锋眰锛欳ode=200琛ㄧず宸插嚭搴擄紝Code=null琛ㄧず鍑哄簱璺笂
+                stockStatus = rackingTask.Code == "200" ? "宸插嚭绔嬪簱" : "鍑虹珛搴撹矾涓�";
             }
+            else
+            {
+                // 鍥炲簱璇锋眰锛堥粯璁わ級锛欳ode=200琛ㄧず宸插湪绔嬪簱涓紝Code=null琛ㄧず杩涘叆绔嬪簱鐨勮矾涓�
+                stockStatus = rackingTask?.Code == "200" ? "宸插湪绔嬪簱涓�" : "杩涘叆绔嬪簱鐨勮矾涓�";
+            }
+
+            // 鍐荤粨鏍囪瘑锛歏isible涓�1琛ㄧず宸插喕缁�
+            var frozenValue = x.Visible == 1 ? "1" : "0";
+            // 鑹搧鐘舵�侊細鏍规嵁IqcStatus鍒ゆ柇锛堢嫭绔嬩簬鍐荤粨鏍囪瘑锛�
+            var iqcStatusValue = x.IqcStatus == "鐗归噰鐩存帴浣跨敤" || x.IqcStatus == "宸叉" || x.IqcStatus == "鍏嶆" ? "1" : "0";
 
             return new
             {
-                IqcStatus = x.IqcStatus == "宸叉" ? "1" : "0",
+                IqcStatus = iqcStatusValue,
+                Frozen = frozenValue,
                 ItemType = x.DepotName == "鍘熸潗鏂欎粨" ? "0" : "1",
                 StackCode = rackingTask?.PalletCode,
                 x.DepotCode,
@@ -278,6 +291,7 @@
             .GroupBy(x => new
             {
                 x.IqcStatus,
+                x.Frozen,
                 x.ItemType,
                 x.StackCode,
                 x.DepotCode,
@@ -296,6 +310,7 @@
             .Select(g => new ReturnableStockDto
             {
                 IqcStatus = g.Key.IqcStatus,
+                Frozen = g.Key.Frozen,
                 ItemType = g.Key.ItemType,
                 StackCode = g.Key.StackCode,
                 DepotCode = g.Key.DepotCode,
@@ -340,109 +355,13 @@
             }
         };
     }
-
-    /// <summary>
-    ///     鏌ヨ鍙互閫�璐х殑鐗╂枡(鏃х増鏈�,淇濈暀鍏煎)
-    /// </summary>
-    /// <returns>鍙��璐х墿鏂欏簱瀛樺垪琛�</returns>
-    public List<ReturnableStockDto> GetReturnableStocks()
-    {
-        // 浼樺寲鐐�1: 浣跨敤鍘熺敓SQL鍦ㄦ暟鎹簱绔畬鎴愬幓閲嶅拰鎺掑簭锛岄伩鍏嶅叏琛ㄥ姞杞藉埌鍐呭瓨
-        // Oracle 11g浣跨敤ROW_NUMBER()绐楀彛鍑芥暟鑾峰彇姣忎釜鏉$爜鐨勬渶鏂拌褰�
-        var rackingTaskSql = @"
-            SELECT ITEM_BARCODE AS ItemBarcode, PALLETCODE AS PalletCode, CODE AS Code
-            FROM (
-                SELECT ITEM_BARCODE, PALLETCODE, CODE,
-                       ROW_NUMBER() OVER (PARTITION BY ITEM_BARCODE ORDER BY ID DESC) AS RN
-                FROM XB_RACKING_TASK_SYXT_LOG
-                WHERE ITEM_BARCODE IS NOT NULL AND (CODE IS NULL OR CODE != '500')
-            ) WHERE RN = 1";
-
-        var rackingTaskData = Db.Ado.SqlQuery<RackingTaskDto>(rackingTaskSql);
-        
-        if (rackingTaskData == null || !rackingTaskData.Any())
-        {
-            return new List<ReturnableStockDto>();
-        }
-
-        // 浼樺寲鐐�2: 杩囨护null鍊煎苟浣跨敤瀛楀吀鎻愰珮鏉$爜鍖归厤鏁堢巼锛屼粠O(n)闄嶄綆鍒癘(1)
-        var validRackingData = rackingTaskData.Where(x => !string.IsNullOrEmpty(x.ItemBarcode)).ToList();
-        var rackingTaskDict = validRackingData.ToDictionary(x => x.ItemBarcode);
-        var distinctBarcodes = validRackingData.Select(x => x.ItemBarcode).ToList();
-
-        // 浼樺寲鐐�3: 鍦ㄦ暟鎹簱灞傞潰瀹屾垚鍏宠仈鏌ヨ锛屼竴娆℃�ц幏鍙栨墍鏈夐渶瑕佺殑鏁版嵁
-        var queryResult = Db.Queryable<MesInvItemStocks>()
-            .LeftJoin<MesItems>((stock, item) => stock.ItemId == item.Id)
-            .LeftJoin<MesDepots>((stock, item, depot) =>
-                stock.DepotsCode == depot.DepotCode)
-            .LeftJoin<Organize>((stock, item, depot, org) =>
-                item.UseOrg == org.Id.ToString())
-            .LeftJoin<MesUnit>((stock, item, depot, org, unit) =>
-                item.ItemUnit == unit.Id.ToString())
-            .Where((stock, item, depot, org, unit) =>
-                distinctBarcodes.Contains(stock.ItemBarcode) &&
-                stock.Quantity > 0)
-            .Select((stock, item, depot, org, unit) => new
-            {
-                stock.IqcStatus,
-                stock.StackCode,
-                DepotCode = stock.DepotsCode,
-                depot.DepotName,
-                stock.DepotSectionsCode,
-                item.ItemNo,
-                item.ItemName,
-                item.ItemModel,
-                stock.Quantity,
-                item.ItemUnit,
-                ItemUnitName = unit.Fname,
-                stock.IndepDate,
-                OrgCode = org.Fnumber,
-                OrgName = org.Fname,
-                stock.ItemBarcode
-            })
-            .ToList();
-
-        // 浼樺寲鐐�4: 浣跨敤瀛楀吀鏌ユ壘鏇夸唬Where().FirstOrDefault()锛屾彁楂樺尮閰嶆�ц兘
-        var result = queryResult.Select(x =>
-        {
-            rackingTaskDict.TryGetValue(x.ItemBarcode, out var rackingTask);
-
-            string stockStatus = "0";
-            if (rackingTask?.Code != null)
-            {
-                stockStatus = rackingTask.Code == "200" ? "1" : "2";
-            }
-
-            return new ReturnableStockDto
-            {
-                IqcStatus = x.IqcStatus == "宸叉" ? "1" : "0",
-                ItemType = x.DepotName == "鍘熸潗鏂欎粨" ? "0" : "1",
-                StackCode = x.StackCode,
-                DepotCode = x.DepotCode,
-                DepotName = x.DepotName,
-                DepotSectionsCode = x.DepotSectionsCode,
-                ItemNo = x.ItemNo,
-                ItemName = x.ItemName,
-                ItemModel = x.ItemModel,
-                Quantity = x.Quantity,
-                ItemUnit = x.ItemUnit,
-                ItemUnitName = x.ItemUnitName,
-                IndepDate = x.IndepDate,
-                OrgCode = x.OrgCode,
-                OrgName = x.OrgName,
-                ItemBarcode = x.ItemBarcode,
-                StockStatus = stockStatus
-            };
-        }).ToList();
-
-        return result;
-    }
-
+    
     private class RackingTaskDto
     {
         public string ItemBarcode { get; set; }
         public string PalletCode { get; set; }
         public string Code { get; set; }
+        public string TaskType { get; set; }
     }
 
     /// <summary>
@@ -715,6 +634,7 @@
         var headers = new[]
         {
             "鑹搧鐘舵��",
+            "鍐荤粨鏍囪瘑",
             "鏄惁鎴愬搧",
             "姣嶆墭鐩樼紪鍙�",
             "浠撳簱缂栫爜",
@@ -751,22 +671,23 @@
         {
             worksheet.Cells[row, 1].Value =
                 item.IqcStatus == "1" ? "鑹搧" : "涓嶈壇鍝�";
-            worksheet.Cells[row, 2].Value = item.ItemType == "1" ? "鎴愬搧" : "闈炴垚鍝�";
-            worksheet.Cells[row, 3].Value = item.StackCode;
-            worksheet.Cells[row, 4].Value = item.DepotCode;
-            worksheet.Cells[row, 5].Value = item.DepotName;
-            worksheet.Cells[row, 6].Value = item.DepotSectionsCode;
-            worksheet.Cells[row, 7].Value = item.ItemNo;
-            worksheet.Cells[row, 8].Value = item.ItemName;
-            worksheet.Cells[row, 9].Value = item.ItemModel;
-            worksheet.Cells[row, 10].Value = item.Quantity;
-            worksheet.Cells[row, 11].Value = item.ItemUnitName;
-            worksheet.Cells[row, 12].Value =
+            worksheet.Cells[row, 2].Value = item.Frozen == "1" ? "宸插喕缁�" : "鏈喕缁�";
+            worksheet.Cells[row, 3].Value = item.ItemType == "1" ? "鎴愬搧" : "闈炴垚鍝�";
+            worksheet.Cells[row, 4].Value = item.StackCode;
+            worksheet.Cells[row, 5].Value = item.DepotCode;
+            worksheet.Cells[row, 6].Value = item.DepotName;
+            worksheet.Cells[row, 7].Value = item.DepotSectionsCode;
+            worksheet.Cells[row, 8].Value = item.ItemNo;
+            worksheet.Cells[row, 9].Value = item.ItemName;
+            worksheet.Cells[row, 10].Value = item.ItemModel;
+            worksheet.Cells[row, 11].Value = item.Quantity;
+            worksheet.Cells[row, 12].Value = item.ItemUnitName;
+            worksheet.Cells[row, 13].Value =
                 item.IndepDate?.ToString("yyyy-MM-dd HH:mm:ss");
-            worksheet.Cells[row, 13].Value = item.OrgCode;
-            worksheet.Cells[row, 14].Value = item.OrgName;
-            worksheet.Cells[row, 15].Value = item.ItemBarcode;
-            worksheet.Cells[row, 16].Value = item.StockStatus;
+            worksheet.Cells[row, 14].Value = item.OrgCode;
+            worksheet.Cells[row, 15].Value = item.OrgName;
+            worksheet.Cells[row, 16].Value = item.ItemBarcode;
+            worksheet.Cells[row, 17].Value = item.StockStatus;
             row++;
         }
 

--
Gitblit v1.9.3