diff --git a/MasstransferExporter/ImageExporter/ImageService.cs b/MasstransferExporter/ImageExporter/ImageService.cs index 8ab1a19..ac4ebfc 100644 --- a/MasstransferExporter/ImageExporter/ImageService.cs +++ b/MasstransferExporter/ImageExporter/ImageService.cs @@ -1,5 +1,6 @@ using System.Drawing; using MasstransferCommon.Model.Constant; +using MasstransferCommon.Utils; using MasstransferCommunicate.Minio; using MasstransferCommunicate.Mqtt.Client; using MasstransferExporter.DataExporter.Model; @@ -16,6 +17,103 @@ public class ImageService private const string BasePath = "masstransfer"; + + /// + /// 监听图片查询事件 + /// + public static async Task ListenImageQueryEvent() + { + await MessageQueueHelper.Subscribe(Topics.UpdateLicenseEvent, HandleImageQueryEvent); + } + + /// + /// 处理图片查询请求 + /// + private static async Task HandleImageQueryEvent(string topic, string payload) + { + if (payload == null) return; + + var queryDto = JsonUtil.FromJson(payload); + + if (queryDto == null) return; + + var batchNumber = queryDto.batchNumber; + var bizNumber = queryDto.bizNumber; + var imageType = queryDto.imageType; + var picType = queryDto.picType; + + var isThumbnail = "thumbnail".Equals(imageType); + + var bucket = isThumbnail ? "thumbnail" : "image"; + + var systemParams = GetSystemParams(); + var imageStoragePath = + systemParams!.ImageStoragePath ?? Environment.GetEnvironmentVariable("USERPROFILE"); + + var dir = Path.Combine(imageStoragePath, BasePath); + + if (!Directory.Exists(dir)) return; + + var dirInfo = new DirectoryInfo(dir); + + var batchDirs = dirInfo.GetDirectories().Where(d => d.Name.Equals(batchNumber)); + + foreach (var batchDir in batchDirs) + { + var dateDirs = batchDir.GetDirectories(); + foreach (var dateDir in dateDirs) + { + var typeDirs = dateDir.GetDirectories(); + foreach (var typeDir in typeDirs) + { + if (!typeDir.Name.Equals(picType.ToLower())) continue; + var codeDirs = typeDir.GetDirectories(); + foreach (var codeDir in codeDirs) + { + if (!codeDir.Name.Equals(bizNumber)) continue; + var files = codeDir.GetFiles(); + foreach (var file in files) + { + var path = file.FullName; + var name = file.Name; + if (isThumbnail) + { + // 先生成缩略图 + if (file.Name.EndsWith(".bmp") && !file.Name.Contains("_thumbnail")) + { + // 判断是否已经存在缩略图,如果存在的话,则跳过生成过程 + name = file.Name.Replace(".bmp", "_thumbnail.bmp"); + path = file.FullName.Replace(".bmp", "_thumbnail.bmp"); + if (!File.Exists(path)) + { + GenerateThumbnail(file.FullName); + } + } + } + + // 上传文件 + var fileName = $"{Constants.SN}/{codeDir.Name}/{batchDir.Name}/{imageType}/{name}"; + + await Minio.UploadFileAsync(bucket, fileName, path); + + var data = new ImageExportData() + { + BatchNumber = batchDir.Name, + BizNumber = codeDir.Name, + ImageType = imageType, + PicType = isThumbnail ? "thumbnail" : "raw" + }; + + // 上传完成后发布通知 + await MessageQueueHelper.Publish(Topics.ImageUpload, data); + } + } + } + } + } + } + + private static SystemParams? GetSystemParams() { return Helper.Query("select * from system_params limit 1") @@ -105,24 +203,22 @@ public class ImageService var imageStoragePath = systemParams!.ImageStoragePath ?? Environment.GetEnvironmentVariable("USERPROFILE"); - var date = dateTime.ToString("yyyyMMdd"); - - var dir = Path.Combine(imageStoragePath, BasePath, date); + var dir = Path.Combine(imageStoragePath, BasePath); if (!Directory.Exists(dir)) return; var dirInfo = new DirectoryInfo(dir); - if (isThumbnail) - { - // 对图片进行压缩 - GenerateThumbnail(dirInfo); - } - - // 文件保存路径的规则是 {user BasePath}/masstransfer/images/{yyyyMMdd}/{batchCode}/wafer/{waferCode}/{timestamp}.bmp - var files = dirInfo.GetDirectories(); + // 文件保存路径的规则是 {user BasePath}/masstransfer/images/{batchCode}/{yyyyMMdd}/wafer/{waferCode}/{timestamp}.bmp + var files = dirInfo.GetDirectories().Where(d => d.CreationTime.Date == dateTime); foreach (var batchDir in files) { + if (isThumbnail) + { + // 对图片进行压缩 + GenerateThumbnail(batchDir); + } + var types = batchDir.GetDirectories(); foreach (var type in types) { diff --git a/MasstransferExporter/ImageExporter/Model/ImageQueryDTO.cs b/MasstransferExporter/ImageExporter/Model/ImageQueryDTO.cs new file mode 100644 index 0000000..99a68a4 --- /dev/null +++ b/MasstransferExporter/ImageExporter/Model/ImageQueryDTO.cs @@ -0,0 +1,12 @@ +namespace MasstransferExporter.ImageExporter.Model; + +public class ImageQueryDTO +{ + public string picType { get; set; } + + public string bizNumber { get; set; } + + public string batchNumber { get; set; } + + public string imageType { get; set; } +} \ No newline at end of file diff --git a/TestProject1/TestProject1.csproj b/TestProject1/TestProject1.csproj index 126bdb4..580874e 100644 --- a/TestProject1/TestProject1.csproj +++ b/TestProject1/TestProject1.csproj @@ -1,7 +1,7 @@ - net8.0 + net7.0 enable enable