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