From 5ad77f8491b3137238bafe30c2e2d83c60558bdb Mon Sep 17 00:00:00 2001
From: kyy <3283105747@qq.com>
Date: 星期四, 31 七月 2025 16:23:14 +0800
Subject: [PATCH] 修改sop获取数据

---
 MESApplication/Controllers/PLM/PLMController.cs |  225 ++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 147 insertions(+), 78 deletions(-)

diff --git a/MESApplication/Controllers/PLM/PLMController.cs b/MESApplication/Controllers/PLM/PLMController.cs
index 404c901..cc87770 100644
--- a/MESApplication/Controllers/PLM/PLMController.cs
+++ b/MESApplication/Controllers/PLM/PLMController.cs
@@ -13,13 +13,13 @@
 public class PLMController : ControllerBase
 {
     private readonly IConfiguration _configuration;
-    private readonly PLMManager m = new();
-    private readonly WarehouseDownloadDoc wdd = new();
+    private readonly PLMManager _plmManager = new();
+    private readonly WarehouseDownloadDoc _warehouseDownloadDoc = new();
 
     public PLMController(IConfiguration configuration)
     {
         _configuration = configuration;
-    } // RetrieveDrawings 璋冨彇鍥剧焊
+    }
 
     [HttpPost("RetrieveDrawings")]
     public async Task<ResponseResult> RetrieveDrawings(PurchaseInventory dto)
@@ -27,70 +27,66 @@
         try
         {
             dynamic resultInfos = new ExpandoObject();
-            var retrieveDrawings =
-                m.RetrieveDrawings(dto.ItemNo); // 鑷畾涔変繚瀛樻牴鐩綍
-            // string saveRootDirectory = @"D:\LTSMES\PLM";                
+            var drawings = _plmManager.RetrieveDrawings(dto.ItemNo);
             var saveRootDirectory = @"E:\SOPimage";
-            var
-                saveDirectory =
-                    Path.Combine(saveRootDirectory,
-                        dto.ItemNo); // 鍦ㄥ惊鐜鐞嗘墍鏈� PDF 鏂囦欢涔嬪墠锛屽鏋滆 itemNo 宸插瓨鍦ㄨ〃涓紝鍒欒繘琛屽垹闄ゆ搷浣�
-            await DeleteRecordsByItemNo(dto.ItemNo);
-            // 鍦ㄥ惊鐜鐞嗘墍鏈� PDF 鏂囦欢涔嬪墠锛屾鏌ュ苟鍒犻櫎鏃ф枃浠跺す锛堝鏋滃瓨鍦級锛岀劧鍚庨噸鏂板垱寤�
+            var saveDirectory = Path.Combine(saveRootDirectory, dto.ItemNo);
+            
+            // 鍏堝垹闄ゅ綋鍓嶄骇绾�(cx)鐨勬暟鎹拰瀵瑰簲鏂囦欢澶�
+            await DeleteRecordsByProductionLine(dto.Cx); // 鏂板锛氭寜浜х嚎鍒犻櫎璁板綍
+            
             if (Directory.Exists(saveDirectory))
                 Directory.Delete(saveDirectory, true);
 
             Directory.CreateDirectory(saveDirectory);
-            foreach (var retrieveDrawing in retrieveDrawings)
+            
+            // 澶勭悊姣忎釜鍥剧焊
+            foreach (var drawing in drawings)
             {
-                var streamFile = wdd.SendRequest("Download",
-                    retrieveDrawing.FRelevantObject);
-                var fileStreamResult = File(streamFile,
-                    "application/octet-stream", retrieveDrawing.FName);
-                var saveResult = await SavePdfAsync(fileStreamResult,
-                    saveRootDirectory, dto.ItemNo, dto.Cx,
-                    retrieveDrawing.FName);
+                var streamFile = _warehouseDownloadDoc.SendRequest("Download", drawing.FRelevantObject);
+                var fileStreamResult = File(streamFile, "application/octet-stream", drawing.FName);
+                await SavePdfAsync(fileStreamResult, saveRootDirectory, dto.ItemNo, dto.Cx, drawing.FName);
             }
 
-            return new ResponseResult
-                { status = 0, message = "OK", data = resultInfos };
+            return new ResponseResult { status = 0, message = "OK", data = resultInfos };
         }
         catch (Exception ex)
         {
             return ResponseResult.ResponseError(ex);
         }
-    } // 鉁� 鐩存帴淇濆瓨 PDF锛屼笉鍐嶈浆鎹负鍥剧墖
+    }
 
-    private async Task<dynamic> SavePdfAsync(FileStreamResult fileStreamResult,
-        string saveRootDirectory,
-        string itemNo, string cx, string fPhysicalFileName)
+    private async Task<dynamic> SavePdfAsync(FileStreamResult fileStreamResult, string saveRootDirectory,
+        string itemNo, string cx, string fileName)
     {
         try
         {
-            // 纭繚鐩綍瀛樺湪
             var saveDirectory = Path.Combine(saveRootDirectory, itemNo);
             if (!Directory.Exists(saveDirectory))
-                Directory.CreateDirectory(saveDirectory); // 淇濆瓨 PDF 鏂囦欢
+                Directory.CreateDirectory(saveDirectory);
 
             var outputFilePath = Path.Combine(saveDirectory,
-                $"{Path.GetFileNameWithoutExtension(fPhysicalFileName)}.pdf");
-            using (var fileStream = new FileStream(outputFilePath,
-                       FileMode.Create, FileAccess.Write))
+                $"{Path.GetFileNameWithoutExtension(fileName)}.pdf");
+            
+            using (var fileStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write))
             {
                 await fileStreamResult.FileStream.CopyToAsync(fileStream);
             }
 
-            Console.WriteLine(
-                $"PDF 鏂囦欢宸蹭繚瀛�: {outputFilePath}"); // 鐢熸垚鏂扮殑 URL锛堟寚鍚� PDF 鏂囦欢锛�
-            var
-                url =
-                    $"http://192.168.1.92:89/{itemNo}/{Path.GetFileName(outputFilePath)}"; // 鎻愬彇鏂囦欢鍚嶄腑鐨勬渶鍚庝竴涓�'_'鍒�'.pdf'涔嬮棿鐨勫瓧姣嶆暟瀛楅儴鍒嗭紝骞跺姞涓娾�滃伐搴忊�濆墠缂�
-            var extractedNumber = ExtractNumberFromFileName(fPhysicalFileName);
-            var
-                process = string.IsNullOrEmpty(extractedNumber)
-                    ? string.Empty
-                    : $"宸ュ簭{extractedNumber}"; // 鉁� 鎻掑叆鏁版嵁搴擄紙URL 鎸囧悜 PDF锛屽苟鏇存柊宸ュ簭瀛楁锛�
-            await InsertUrlIntoDatabase(url, itemNo, cx, process);
+            Console.WriteLine($"PDF 鏂囦欢宸蹭繚瀛�: {outputFilePath}");
+            
+            var url = $"http://192.168.1.92:89/{itemNo}/{Path.GetFileName(outputFilePath)}";
+            var extractedNumber = ExtractNumberFromFileName(fileName);
+            var process = string.IsNullOrEmpty(extractedNumber) ? string.Empty : $"宸ュ簭{extractedNumber}";
+            
+            // 鎻掑叆璁板綍骞惰幏鍙朓D
+            var newRecordId = await InsertUrlIntoDatabase(url, itemNo, cx, process);
+            
+            // 濡傛灉鎻掑叆鎴愬姛锛屾煡璇㈠苟鏇存柊MAC鍦板潃
+            if (newRecordId > 0)
+            {
+                await UpdateMacAddress(newRecordId, cx, process);
+            }
+
             return new { PdfFilePath = outputFilePath };
         }
         catch (Exception ex)
@@ -98,64 +94,137 @@
             Console.WriteLine($"PDF 淇濆瓨澶辫触: {ex.Message}");
             return new { ErrorMessage = "PDF 淇濆瓨澶辫触", Exception = ex.Message };
         }
-    } // 鎻愬彇鏂囦欢鍚嶄腑鐨勬渶鍚庝竴涓�'_'鍒�'.pdf'涔嬮棿鐨勫瓧姣嶆暟瀛楅儴鍒嗭紝蹇界暐鎷彿绛夊唴瀹�
+    }
 
     private string ExtractNumberFromFileName(string fileName)
     {
-        // 浣跨敤姝e垯琛ㄨ揪寮忔彁鍙栨渶鍚庝竴涓�'_'鍒�'.pdf'涔嬮棿鐨勫瓧姣嶆暟瀛楅儴鍒嗭紝蹇界暐鎷彿绛夊瓧绗�
         var match = Regex.Match(fileName, @"_([A-Za-z0-9]+)(?=\(?\.pdf$)");
-        if (match.Success)
-            // 濡傛灉鍖归厤鎴愬姛锛岃繑鍥炴彁鍙栫殑閮ㄥ垎
-            return match.Groups[1].Value;
+        return match.Success ? match.Groups[1].Value : string.Empty;
+    }
 
-        // 濡傛灉娌℃湁鎵惧埌绗﹀悎鏉′欢鐨勯儴鍒嗭紝杩斿洖绌哄瓧绗︿覆
-        return string.Empty;
-    } // 灏� URL銆乮temNo銆乧x 鍜屽伐搴忓瓧娈垫彃鍏ュ埌鏁版嵁搴撲腑 
-
-
-    private async Task InsertUrlIntoDatabase(string url, string itemNo,
-        string cx, string gx)
+    private async Task<long> InsertUrlIntoDatabase(string url, string itemNo, string cx, string gx)
     {
         var connectionString = _configuration["AppSettings:DataBaseConn"];
         using (var connection = new OracleConnection(connectionString))
         {
             await connection.OpenAsync();
-            var insertQuery =
-                "INSERT INTO MES_SOP_URL_TABLE (id, URL, ITEM_NO, CX, GX, CREATE_DATE) VALUES (SEQ_SOP_URL.NEXTVAL, :url, :item_no, :cx, :gx, :create_date)";
-            using (var insertCommand =
-                   new OracleCommand(insertQuery, connection))
+            
+            // 浣跨敤浜嬪姟纭繚鏁版嵁涓�鑷存��
+            using (var transaction = connection.BeginTransaction())
             {
-                // 浣跨敤 Parameters.Add 鏂规硶娣诲姞鍙傛暟
-                insertCommand.Parameters.Add("url", OracleDbType.Varchar2)
-                    .Value = url;
-                insertCommand.Parameters.Add("item_no", OracleDbType.Varchar2)
-                    .Value = itemNo;
-                insertCommand.Parameters.Add("cx", OracleDbType.Varchar2)
-                    .Value = cx;
-                insertCommand.Parameters.Add("gx", OracleDbType.Varchar2)
-                    .Value = gx;
-                insertCommand.Parameters.Add("create_date", OracleDbType.Date)
-                    .Value = DateTime.Now;
-                await insertCommand.ExecuteNonQueryAsync();
+                try
+                {
+                    // 鍏堣幏鍙栧簭鍒楀��
+                    var getSeqQuery = "SELECT SEQ_SOP_URL.NEXTVAL FROM DUAL";
+                    using (var seqCommand = new OracleCommand(getSeqQuery, connection))
+                    {
+                        seqCommand.Transaction = transaction;
+                        var newId = Convert.ToInt64(await seqCommand.ExecuteScalarAsync());
+                        
+                        // 鎻掑叆璁板綍
+                        var insertQuery = @"INSERT INTO MES_SOP_URL_TABLE 
+                                            (id, URL, ITEM_NO, CX, GX, CREATE_DATE, MAC) 
+                                            VALUES (:id, :url, :item_no, :cx, :gx, :create_date, null)";
+                        
+                        using (var insertCommand = new OracleCommand(insertQuery, connection))
+                        {
+                            insertCommand.Transaction = transaction;
+                            insertCommand.Parameters.Add("id", OracleDbType.Int64).Value = newId;
+                            insertCommand.Parameters.Add("url", OracleDbType.Varchar2).Value = url;
+                            insertCommand.Parameters.Add("item_no", OracleDbType.Varchar2).Value = itemNo;
+                            insertCommand.Parameters.Add("cx", OracleDbType.Varchar2).Value = cx;
+                            insertCommand.Parameters.Add("gx", OracleDbType.Varchar2).Value = gx;
+                            insertCommand.Parameters.Add("create_date", OracleDbType.Date).Value = DateTime.Now;
+                            
+                            await insertCommand.ExecuteNonQueryAsync();
+                        }
+                        
+                        transaction.Commit();
+                        return newId;
+                    }
+                }
+                catch (Exception)
+                {
+                    transaction.Rollback();
+                    throw;
+                }
             }
         }
-    } // 鍒犻櫎鎸囧畾 itemNo 鐨勮褰�      
+    }
 
+    private async Task UpdateMacAddress(long recordId, string cx, string gx)
+    {
+        var connectionString = _configuration["AppSettings:DataBaseConn"];
+        using (var connection = new OracleConnection(connectionString))
+        {
+            await connection.OpenAsync();
+            
+            // 浠庢瘮杈冭〃鏌ヨMAC鍦板潃
+            var selectQuery = @"SELECT MAC FROM MES_SOP_URL_TABLE_COMPARE 
+                               WHERE CX = :cx AND GX = :gx";
+            
+            using (var selectCommand = new OracleCommand(selectQuery, connection))
+            {
+                selectCommand.Parameters.Add("cx", OracleDbType.Varchar2).Value = cx;
+                selectCommand.Parameters.Add("gx", OracleDbType.Varchar2).Value = gx;
+                
+                var macAddress = await selectCommand.ExecuteScalarAsync() as string;
+                
+                // 濡傛灉鎵惧埌MAC鍦板潃锛屽垯鏇存柊鍒颁富琛�
+                if (!string.IsNullOrEmpty(macAddress))
+                {
+                    var updateQuery = @"UPDATE MES_SOP_URL_TABLE 
+                                       SET MAC = :mac 
+                                       WHERE id = :id";
+                    
+                    using (var updateCommand = new OracleCommand(updateQuery, connection))
+                    {
+                        updateCommand.Parameters.Add("mac", OracleDbType.Varchar2).Value = macAddress;
+                        updateCommand.Parameters.Add("id", OracleDbType.Int64).Value = recordId;
+                        
+                        await updateCommand.ExecuteNonQueryAsync();
+                        Console.WriteLine($"宸叉洿鏂癐D涓� {recordId} 鐨勮褰曠殑MAC鍦板潃: {macAddress}");
+                    }
+                }
+                else
+                {
+                    Console.WriteLine($"鏈壘鍒癈X={cx}, GX={gx}瀵瑰簲鐨凪AC鍦板潃");
+                }
+            }
+        }
+    }
+
+    // 鏂板锛氭寜浜х嚎(cx)鍒犻櫎璁板綍
+    private async Task DeleteRecordsByProductionLine(string cx)
+    {
+        var connectionString = _configuration["AppSettings:DataBaseConn"];
+        using (var connection = new OracleConnection(connectionString))
+        {
+            await connection.OpenAsync();
+            var deleteQuery = "DELETE FROM MES_SOP_URL_TABLE WHERE CX = :cx";
+            using (var deleteCommand = new OracleCommand(deleteQuery, connection))
+            {
+                deleteCommand.Parameters.Add("cx", OracleDbType.Varchar2).Value = cx;
+                int deletedCount = await deleteCommand.ExecuteNonQueryAsync();
+                Console.WriteLine($"宸插垹闄や骇绾� {cx} 鐨� {deletedCount} 鏉¤褰�");
+            }
+        }
+    }
+
+    // 淇濈暀鍘熸寜ItemNo鍒犻櫎鐨勬柟娉曪紝浠ュ涓嶆椂涔嬮渶
     private async Task DeleteRecordsByItemNo(string itemNo)
     {
         var connectionString = _configuration["AppSettings:DataBaseConn"];
         using (var connection = new OracleConnection(connectionString))
         {
             await connection.OpenAsync();
-            var deleteQuery =
-                "DELETE FROM MES_SOP_URL_TABLE WHERE ITEM_NO = :item_no";
-            using (var deleteCommand =
-                   new OracleCommand(deleteQuery, connection))
+            var deleteQuery = "DELETE FROM MES_SOP_URL_TABLE WHERE ITEM_NO = :item_no";
+            using (var deleteCommand = new OracleCommand(deleteQuery, connection))
             {
-                deleteCommand.Parameters.Add("item_no", OracleDbType.Varchar2)
-                    .Value = itemNo;
+                deleteCommand.Parameters.Add("item_no", OracleDbType.Varchar2).Value = itemNo;
                 await deleteCommand.ExecuteNonQueryAsync();
             }
         }
     }
-}
\ No newline at end of file
+}
+    
\ No newline at end of file

--
Gitblit v1.9.3