From 5dc3cc86f5835369cd830f2a83318b9a8d69cf69 Mon Sep 17 00:00:00 2001 From: 啊鑫 <t2856754968@163.com> Date: 星期二, 15 七月 2025 16:20:19 +0800 Subject: [PATCH] 11 --- MESApplication/Controllers/PLM/PLMController.cs | 266 ++++++++++++++++++++++++++-------------------------- 1 files changed, 132 insertions(+), 134 deletions(-) diff --git a/MESApplication/Controllers/PLM/PLMController.cs b/MESApplication/Controllers/PLM/PLMController.cs index 4021a4f..404c901 100644 --- a/MESApplication/Controllers/PLM/PLMController.cs +++ b/MESApplication/Controllers/PLM/PLMController.cs @@ -1,162 +1,160 @@ -锘縰sing ConsoleApp1; +锘縰sing System.Dynamic; +using System.Text.RegularExpressions; +using MES.Service.Dto.service; using MES.Service.service.PLM; using MES.Service.util; using Microsoft.AspNetCore.Mvc; -using System.Dynamic; -using System.IO; -using PdfiumViewer; -using MES.Service.Dto.service; -using System.Drawing; -using System.Collections.Generic; -using System.Threading.Tasks; using Oracle.ManagedDataAccess.Client; -using Microsoft.Extensions.Configuration; -using System; -using System.Text.RegularExpressions; -using IronSoftware.Drawing; -namespace MESApplication.Controllers.PLM +namespace MESApplication.Controllers.PLM; + +[ApiController] +[Route("api/PLM")] +public class PLMController : ControllerBase { - [ApiController] - [Route("api/PLM")] - public class PLMController : ControllerBase + private readonly IConfiguration _configuration; + private readonly PLMManager m = new(); + private readonly WarehouseDownloadDoc wdd = new(); + + public PLMController(IConfiguration configuration) { - private readonly PLMManager m = new(); - private readonly WarehouseDownloadDoc wdd = new(); - private readonly IConfiguration _configuration; + _configuration = configuration; + } // RetrieveDrawings 璋冨彇鍥剧焊 - public PLMController(IConfiguration configuration) + [HttpPost("RetrieveDrawings")] + public async Task<ResponseResult> RetrieveDrawings(PurchaseInventory dto) + { + try { - _configuration = configuration; - } // RetrieveDrawings 璋冨彇鍥剧焊 + dynamic resultInfos = new ExpandoObject(); + var retrieveDrawings = + m.RetrieveDrawings(dto.ItemNo); // 鑷畾涔変繚瀛樻牴鐩綍 + // string saveRootDirectory = @"D:\LTSMES\PLM"; + var saveRootDirectory = @"E:\SOPimage"; + var + saveDirectory = + Path.Combine(saveRootDirectory, + dto.ItemNo); // 鍦ㄥ惊鐜鐞嗘墍鏈� PDF 鏂囦欢涔嬪墠锛屽鏋滆 itemNo 宸插瓨鍦ㄨ〃涓紝鍒欒繘琛屽垹闄ゆ搷浣� + await DeleteRecordsByItemNo(dto.ItemNo); + // 鍦ㄥ惊鐜鐞嗘墍鏈� PDF 鏂囦欢涔嬪墠锛屾鏌ュ苟鍒犻櫎鏃ф枃浠跺す锛堝鏋滃瓨鍦級锛岀劧鍚庨噸鏂板垱寤� + if (Directory.Exists(saveDirectory)) + Directory.Delete(saveDirectory, true); - [HttpPost("RetrieveDrawings")] - public async Task<ResponseResult> RetrieveDrawings(PurchaseInventory dto) + Directory.CreateDirectory(saveDirectory); + foreach (var retrieveDrawing in retrieveDrawings) + { + 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); + } + + return new ResponseResult + { status = 0, message = "OK", data = resultInfos }; + } + catch (Exception ex) { - try - { - dynamic resultInfos = new ExpandoObject(); - var retrieveDrawings = - m.RetrieveDrawings(dto.ItemNo); // 鑷畾涔変繚瀛樻牴鐩綍 - // string saveRootDirectory = @"D:\LTSMES\PLM"; - string saveRootDirectory = @"E:\SOPimage"; - string - saveDirectory = - Path.Combine(saveRootDirectory, - dto.ItemNo); // 鍦ㄥ惊鐜鐞嗘墍鏈� PDF 鏂囦欢涔嬪墠锛屽鏋滆 itemNo 宸插瓨鍦ㄨ〃涓紝鍒欒繘琛屽垹闄ゆ搷浣� - await DeleteRecordsByItemNo(dto.ItemNo); - // 鍦ㄥ惊鐜鐞嗘墍鏈� PDF 鏂囦欢涔嬪墠锛屾鏌ュ苟鍒犻櫎鏃ф枃浠跺す锛堝鏋滃瓨鍦級锛岀劧鍚庨噸鏂板垱寤� - if (Directory.Exists(saveDirectory)) - { - Directory.Delete(saveDirectory, true); - } + return ResponseResult.ResponseError(ex); + } + } // 鉁� 鐩存帴淇濆瓨 PDF锛屼笉鍐嶈浆鎹负鍥剧墖 - Directory.CreateDirectory(saveDirectory); - foreach (var retrieveDrawing in retrieveDrawings) - { - 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); - } - - 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 fPhysicalFileName) + { + try { - try + // 纭繚鐩綍瀛樺湪 + var saveDirectory = Path.Combine(saveRootDirectory, itemNo); + if (!Directory.Exists(saveDirectory)) + Directory.CreateDirectory(saveDirectory); // 淇濆瓨 PDF 鏂囦欢 + + var outputFilePath = Path.Combine(saveDirectory, + $"{Path.GetFileNameWithoutExtension(fPhysicalFileName)}.pdf"); + using (var fileStream = new FileStream(outputFilePath, + FileMode.Create, FileAccess.Write)) { - // 纭繚鐩綍瀛樺湪 - string saveDirectory = Path.Combine(saveRootDirectory, itemNo); - if (!Directory.Exists(saveDirectory)) - { - Directory.CreateDirectory(saveDirectory); - } // 淇濆瓨 PDF 鏂囦欢 - - string outputFilePath = Path.Combine(saveDirectory, - $"{Path.GetFileNameWithoutExtension(fPhysicalFileName)}.pdf"); - using (var fileStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write)) - { - await fileStreamResult.FileStream.CopyToAsync(fileStream); - } - - Console.WriteLine( - $"PDF 鏂囦欢宸蹭繚瀛�: {outputFilePath}"); // 鐢熸垚鏂扮殑 URL锛堟寚鍚� PDF 鏂囦欢锛� - string - url = - $"http://192.168.1.92:89/{itemNo}/{Path.GetFileName(outputFilePath)}"; // 鎻愬彇鏂囦欢鍚嶄腑鐨勬渶鍚庝竴涓�'_'鍒�'.pdf'涔嬮棿鐨勫瓧姣嶆暟瀛楅儴鍒嗭紝骞跺姞涓娾�滃伐搴忊�濆墠缂� - string extractedNumber = ExtractNumberFromFileName(fPhysicalFileName); - string - process = string.IsNullOrEmpty(extractedNumber) - ? string.Empty - : $"宸ュ簭{extractedNumber}"; // 鉁� 鎻掑叆鏁版嵁搴擄紙URL 鎸囧悜 PDF锛屽苟鏇存柊宸ュ簭瀛楁锛� - await InsertUrlIntoDatabase(url, itemNo, cx, process); - return new { PdfFilePath = outputFilePath }; + await fileStreamResult.FileStream.CopyToAsync(fileStream); } - catch (Exception ex) - { - Console.WriteLine($"PDF 淇濆瓨澶辫触: {ex.Message}"); - return new { ErrorMessage = "PDF 淇濆瓨澶辫触", Exception = ex.Message }; - } - } // 鎻愬彇鏂囦欢鍚嶄腑鐨勬渶鍚庝竴涓�'_'鍒�'.pdf'涔嬮棿鐨勫瓧姣嶆暟瀛楅儴鍒嗭紝蹇界暐鎷彿绛夊唴瀹� - private string ExtractNumberFromFileName(string fileName) + 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); + return new { PdfFilePath = outputFilePath }; + } + catch (Exception ex) { - // 浣跨敤姝e垯琛ㄨ揪寮忔彁鍙栨渶鍚庝竴涓�'_'鍒�'.pdf'涔嬮棿鐨勫瓧姣嶆暟瀛楅儴鍒嗭紝蹇界暐鎷彿绛夊瓧绗� - var match = Regex.Match(fileName, @"_([A-Za-z0-9]+)(?=\(?\.pdf$)"); - if (match.Success) - { - // 濡傛灉鍖归厤鎴愬姛锛岃繑鍥炴彁鍙栫殑閮ㄥ垎 - return match.Groups[1].Value; - } - else - { - // 濡傛灉娌℃湁鎵惧埌绗﹀悎鏉′欢鐨勯儴鍒嗭紝杩斿洖绌哄瓧绗︿覆 - return string.Empty; - } - } // 灏� URL銆乮temNo銆乧x 鍜屽伐搴忓瓧娈垫彃鍏ュ埌鏁版嵁搴撲腑 + 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 string.Empty; + } // 灏� URL銆乮temNo銆乧x 鍜屽伐搴忓瓧娈垫彃鍏ュ埌鏁版嵁搴撲腑 - private async Task InsertUrlIntoDatabase(string url, string itemNo, string cx, string gx) + private async Task InsertUrlIntoDatabase(string url, string itemNo, + string cx, string gx) + { + var connectionString = _configuration["AppSettings:DataBaseConn"]; + using (var connection = new OracleConnection(connectionString)) { - string connectionString = _configuration["AppSettings:DataBaseConn"]; - using (OracleConnection 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)) { - await connection.OpenAsync(); - string 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 (OracleCommand insertCommand = new OracleCommand(insertQuery, connection)) - { - // 浣跨敤 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(); - } + // 浣跨敤 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(); } - } // 鍒犻櫎鎸囧畾 itemNo 鐨勮褰� + } + } // 鍒犻櫎鎸囧畾 itemNo 鐨勮褰� - private async Task DeleteRecordsByItemNo(string itemNo) + private async Task DeleteRecordsByItemNo(string itemNo) + { + var connectionString = _configuration["AppSettings:DataBaseConn"]; + using (var connection = new OracleConnection(connectionString)) { - string connectionString = _configuration["AppSettings:DataBaseConn"]; - using (OracleConnection 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)) { - await connection.OpenAsync(); - string deleteQuery = "DELETE FROM MES_SOP_URL_TABLE WHERE ITEM_NO = :item_no"; - using (OracleCommand deleteCommand = new OracleCommand(deleteQuery, connection)) - { - deleteCommand.Parameters.Add("item_no", OracleDbType.Varchar2).Value = itemNo; - await deleteCommand.ExecuteNonQueryAsync(); - } + deleteCommand.Parameters.Add("item_no", OracleDbType.Varchar2) + .Value = itemNo; + await deleteCommand.ExecuteNonQueryAsync(); } } } -- Gitblit v1.9.3