Compare commits
No commits in common. "e20129a4c1e366d5b6c7d2b9f8f03876cd7424a6" and "0daf08eb3d2008ef3e1b76cb8a0b004a126ce6f7" have entirely different histories.
e20129a4c1
...
0daf08eb3d
|
@ -1,60 +0,0 @@
|
||||||
using Serilog;
|
|
||||||
using Serilog.Core;
|
|
||||||
using Serilog.Events;
|
|
||||||
|
|
||||||
namespace MasstransferCommon.Config;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 日志配置类
|
|
||||||
/// </summary>
|
|
||||||
public class LogConfiguration
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 获取日志配置对象
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static Logger GetLogger()
|
|
||||||
{
|
|
||||||
// 日志输出目录
|
|
||||||
var basePath = AppDomain.CurrentDomain.BaseDirectory;
|
|
||||||
|
|
||||||
return new LoggerConfiguration()
|
|
||||||
.MinimumLevel.Debug()
|
|
||||||
.Enrich.FromLogContext()
|
|
||||||
.WriteTo.Logger(
|
|
||||||
l =>
|
|
||||||
l.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Debug)
|
|
||||||
.WriteTo.File(
|
|
||||||
Path.Combine(basePath, "logs", "debug", "debug-.log"),
|
|
||||||
rollingInterval: RollingInterval.Hour,
|
|
||||||
retainedFileCountLimit: 24
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.WriteTo.Logger(
|
|
||||||
l => l.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Information)
|
|
||||||
.WriteTo.File(
|
|
||||||
Path.Combine(basePath, "logs", "info", "info-.log"),
|
|
||||||
rollingInterval: RollingInterval.Hour,
|
|
||||||
retainedFileCountLimit: 72
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.WriteTo.Logger(
|
|
||||||
l => l.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Warning)
|
|
||||||
.WriteTo.File(
|
|
||||||
Path.Combine(basePath, "logs", "warning", "warning-.log"),
|
|
||||||
rollingInterval: RollingInterval.Day,
|
|
||||||
retainedFileCountLimit: 30
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.WriteTo.Logger(
|
|
||||||
l => l.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Error)
|
|
||||||
.WriteTo.File(
|
|
||||||
Path.Combine(basePath, "logs", "error", "error-.log"),
|
|
||||||
rollingInterval: RollingInterval.Day,
|
|
||||||
retainedFileCountLimit: 90
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.WriteTo.Console()
|
|
||||||
.CreateLogger();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -12,11 +12,6 @@
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="7.0.15" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="7.0.15" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"/>
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"/>
|
||||||
<PackageReference Include="Quartz" Version="3.10.0" />
|
<PackageReference Include="Quartz" Version="3.10.0" />
|
||||||
<PackageReference Include="Serilog.Enrichers.Environment" Version="3.0.1" />
|
|
||||||
<PackageReference Include="Serilog.Extensions.Logging" Version="3.1.0" />
|
|
||||||
<PackageReference Include="Serilog.Extensions.Logging.File" Version="3.0.1-dev-00077" />
|
|
||||||
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
|
|
||||||
<PackageReference Include="Serilog.Sinks.RollingFile" Version="3.3.1-dev-00771" />
|
|
||||||
<PackageReference Include="sqlite-net-sqlcipher" Version="1.9.172" />
|
<PackageReference Include="sqlite-net-sqlcipher" Version="1.9.172" />
|
||||||
<PackageReference Include="System.Management" Version="8.0.0"/>
|
<PackageReference Include="System.Management" Version="8.0.0"/>
|
||||||
<PackageReference Include="Serilog" Version="4.0.0"/>
|
<PackageReference Include="Serilog" Version="4.0.0"/>
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
namespace MasstransferCommon.Model.Enum;
|
|
||||||
|
|
||||||
public enum ExceptionLevel : int
|
|
||||||
{
|
|
||||||
NORMAL,
|
|
||||||
WARN,
|
|
||||||
ERROR,
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
using MasstransferCommon.Model.Constant;
|
|
||||||
using MasstransferCommunicate.Mqtt.Client;
|
|
||||||
using MasstransferExporter.DataExporter.Model;
|
|
||||||
using MasstransferInfrastructure.Database.Sqlite;
|
|
||||||
|
|
||||||
namespace MasstransferExporter.DataExporter;
|
|
||||||
|
|
||||||
public class FaultRecordService
|
|
||||||
{
|
|
||||||
private static readonly SqliteHelper Db = SqliteHelper.GetInstance();
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 每5分钟上传一次故障数据
|
|
||||||
/// </summary>
|
|
||||||
public static async Task FaultRecordDataExporter()
|
|
||||||
{
|
|
||||||
var endTime = DateTime.Now;
|
|
||||||
var startTime = endTime.AddMinutes(-30);
|
|
||||||
|
|
||||||
// 查询5分钟内的故障记录
|
|
||||||
var sql = "SELECT * FROM fault_records WHERE update_time >= ? AND update_time <= ?";
|
|
||||||
var records = Db.Query<FaultRecord>(sql, startTime, endTime);
|
|
||||||
foreach (var record in records)
|
|
||||||
{
|
|
||||||
var dto = new FaultRecordDTO()
|
|
||||||
{
|
|
||||||
ErrorCode = record.FaultCode,
|
|
||||||
Timestamp = record.UpdateTime,
|
|
||||||
Status = record.Solved ? 0 : 1
|
|
||||||
};
|
|
||||||
|
|
||||||
await MessageQueueHelper.Publish(Topics.ReportFaultRecord, dto);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
using System.ComponentModel;
|
|
||||||
using MasstransferCommon.Model.Entity;
|
|
||||||
using MasstransferCommon.Model.Enum;
|
|
||||||
using SQLite;
|
|
||||||
|
|
||||||
namespace MasstransferExporter.DataExporter.Model;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 故障记录
|
|
||||||
/// </summary>
|
|
||||||
[Table("fault_records"), Description("故障记录")]
|
|
||||||
public class FaultRecord : Entity
|
|
||||||
{
|
|
||||||
[Column("source"), Description("故障来源")]
|
|
||||||
public string? Source { get; set; }
|
|
||||||
|
|
||||||
[Column("fault_code"), Description("故障编码")]
|
|
||||||
public string? FaultCode { get; set; }
|
|
||||||
|
|
||||||
[Column("fault_desc"), Description("故障描述")]
|
|
||||||
public string? FaultDesc { get; set; }
|
|
||||||
|
|
||||||
[Column("fault_time"), Description("故障时间")]
|
|
||||||
public DateTime FaultTime { get; set; }
|
|
||||||
|
|
||||||
[Column("fault_level"), Description("故障级别")]
|
|
||||||
public ExceptionLevel Level { get; set; }
|
|
||||||
|
|
||||||
[Column("fault_message"), Description("故障信息")]
|
|
||||||
public string? FaultMessage { get; set; }
|
|
||||||
|
|
||||||
[Column("solved"), Description("是否已处理")]
|
|
||||||
public bool Solved { get; set; }
|
|
||||||
|
|
||||||
[Column("solved_time"), Description("处理时间")]
|
|
||||||
public DateTime? SolvedTime { get; set; }
|
|
||||||
|
|
||||||
[Column("solved_by_user_id"), Description("处理人Id")]
|
|
||||||
public string? SolvedByUserId { get; set; }
|
|
||||||
|
|
||||||
[Column("solved_by_user_name"), Description("处理人名称")]
|
|
||||||
public string? SolvedByUserName { get; set; }
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
using Newtonsoft.Json;
|
|
||||||
|
|
||||||
namespace MasstransferExporter.DataExporter.Model;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 上报的故障信息
|
|
||||||
/// </summary>
|
|
||||||
public class FaultRecordDTO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 错误码
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("errorCode")]
|
|
||||||
public string? ErrorCode { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("timestamp")] public DateTime Timestamp { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 故障状态项
|
|
||||||
/// 0:解除故障
|
|
||||||
/// 1:发生故障
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("status")]
|
|
||||||
public int Status { get; set; }
|
|
||||||
}
|
|
|
@ -181,7 +181,7 @@ public class ImageService : Instant
|
||||||
{
|
{
|
||||||
var yesterday = DateTime.Today.AddDays(-2);
|
var yesterday = DateTime.Today.AddDays(-2);
|
||||||
|
|
||||||
await ImageExporter(new DateTime(2024, 9, 9), false);
|
await ImageExporter(yesterday, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -205,20 +205,17 @@ public class ImageService : Instant
|
||||||
|
|
||||||
var dirInfo = new DirectoryInfo(dir);
|
var dirInfo = new DirectoryInfo(dir);
|
||||||
|
|
||||||
var batchCodes = dirInfo.GetDirectories();
|
|
||||||
foreach (var batchCode in batchCodes)
|
|
||||||
{
|
|
||||||
// 文件保存路径的规则是 {user BasePath}/masstransfer/images/{batchCode}/{yyyyMMdd}/wafer/{waferCode}/{timestamp}.bmp
|
// 文件保存路径的规则是 {user BasePath}/masstransfer/images/{batchCode}/{yyyyMMdd}/wafer/{waferCode}/{timestamp}.bmp
|
||||||
var dates = batchCode.GetDirectories().Where(d => d.CreationTime.Date == dateTime);
|
var files = dirInfo.GetDirectories().Where(d => d.CreationTime.Date == dateTime);
|
||||||
foreach (var dateDir in dates)
|
foreach (var batchDir in files)
|
||||||
{
|
{
|
||||||
if (isThumbnail)
|
if (isThumbnail)
|
||||||
{
|
{
|
||||||
// 对图片进行压缩
|
// 对图片进行压缩
|
||||||
GenerateThumbnail(dateDir);
|
GenerateThumbnail(batchDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
var types = dateDir.GetDirectories();
|
var types = batchDir.GetDirectories();
|
||||||
foreach (var type in types)
|
foreach (var type in types)
|
||||||
{
|
{
|
||||||
var codeDirs = type.GetDirectories();
|
var codeDirs = type.GetDirectories();
|
||||||
|
@ -232,8 +229,7 @@ public class ImageService : Instant
|
||||||
|
|
||||||
foreach (var image in images)
|
foreach (var image in images)
|
||||||
{
|
{
|
||||||
var fileName =
|
var fileName = $"{Constants.SN}/{codeDir.Name}/{batchDir.Name}/{type.Name}/{image.Name}";
|
||||||
$"{Constants.SN}/{codeDir.Name}/{batchCode.Name}/{type.Name}/{image.Name}";
|
|
||||||
|
|
||||||
var path = image.FullName;
|
var path = image.FullName;
|
||||||
|
|
||||||
|
@ -242,7 +238,7 @@ public class ImageService : Instant
|
||||||
|
|
||||||
var data = new ImageExportData()
|
var data = new ImageExportData()
|
||||||
{
|
{
|
||||||
BatchNumber = batchCode.Name,
|
BatchNumber = batchDir.Name,
|
||||||
BizNumber = codeDir.Name,
|
BizNumber = codeDir.Name,
|
||||||
ImageType = type.Name,
|
ImageType = type.Name,
|
||||||
PicType = isThumbnail ? "thumbnail" : "raw"
|
PicType = isThumbnail ? "thumbnail" : "raw"
|
||||||
|
@ -254,7 +250,6 @@ public class ImageService : Instant
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"图片导出失败,{e}");
|
Console.WriteLine($"图片导出失败,{e}");
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
<PackageReference Include="M2Mqtt" Version="4.3.0" />
|
<PackageReference Include="M2Mqtt" Version="4.3.0" />
|
||||||
<PackageReference Include="MQTTnet.Extensions.ManagedClient" Version="4.3.6.1152" />
|
<PackageReference Include="MQTTnet.Extensions.ManagedClient" Version="4.3.6.1152" />
|
||||||
<PackageReference Include="Serilog" Version="4.0.0" />
|
<PackageReference Include="Serilog" Version="4.0.0" />
|
||||||
<PackageReference Include="Serilog.Extensions.Logging.File" Version="3.0.1-dev-00077" />
|
|
||||||
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
|
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
|
||||||
<PackageReference Include="System.Diagnostics.Process" Version="4.3.0" />
|
<PackageReference Include="System.Diagnostics.Process" Version="4.3.0" />
|
||||||
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />
|
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
using MasstransferCommon.Config;
|
using MasstransferCommon.Events;
|
||||||
using MasstransferCommon.Events;
|
|
||||||
using MasstransferCommon.Model.Entity;
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using MasstransferCommon.Scheduler;
|
||||||
using MasstransferCommunicate.Mqtt.Client;
|
using MasstransferCommunicate.Mqtt.Client;
|
||||||
|
using MasstransferCommunicate.Process.Client;
|
||||||
|
using MasstransferExporter.DataExporter;
|
||||||
using MasstransferExporter.Init;
|
using MasstransferExporter.Init;
|
||||||
using MasstransferInfrastructure.Database.Sqlite;
|
using MasstransferInfrastructure.Database.Sqlite;
|
||||||
using MasstransferInfrastructure.Mqtt.Model;
|
using MasstransferInfrastructure.Mqtt.Model;
|
||||||
using Serilog;
|
|
||||||
|
|
||||||
namespace MasstransferExporter;
|
namespace MasstransferExporter;
|
||||||
|
|
||||||
|
@ -18,10 +19,6 @@ class Program
|
||||||
// 进行初始化调用
|
// 进行初始化调用
|
||||||
InstantUtil.Init();
|
InstantUtil.Init();
|
||||||
|
|
||||||
Log.Logger = LogConfiguration.GetLogger();
|
|
||||||
|
|
||||||
Log.Error("Masstransfer Exporter Startup");
|
|
||||||
|
|
||||||
var mqttParams = Db.Query<MqttParams>("select * from mqtt_params").FirstOrDefault();
|
var mqttParams = Db.Query<MqttParams>("select * from mqtt_params").FirstOrDefault();
|
||||||
|
|
||||||
// 启动mqtt连接
|
// 启动mqtt连接
|
||||||
|
@ -38,11 +35,11 @@ class Program
|
||||||
// 启动完成后,广播启动通知
|
// 启动完成后,广播启动通知
|
||||||
EventBus<bool>.Publish(EventType.StartUp, true);
|
EventBus<bool>.Publish(EventType.StartUp, true);
|
||||||
|
|
||||||
// DelayScheduler.Delay(async () => ImageService.ImageExporter(),
|
DelayScheduler.Delay(async () => await FormulaService.FormulaDataExporter(),
|
||||||
// TimeSpan.FromSeconds(5));
|
TimeSpan.FromSeconds(5));
|
||||||
|
|
||||||
// 启动与主程序的通信
|
// 启动与主程序的通信
|
||||||
// ProcessHelper.Init();
|
ProcessHelper.Init();
|
||||||
|
|
||||||
// SystemStatExporter.Collect();
|
// SystemStatExporter.Collect();
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
<PackageReference Include="MQTTnet" Version="4.3.6.1152"/>
|
<PackageReference Include="MQTTnet" Version="4.3.6.1152"/>
|
||||||
<PackageReference Include="Serilog" Version="4.0.0"/>
|
<PackageReference Include="Serilog" Version="4.0.0"/>
|
||||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.0-preview.2.24128.4"/>
|
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.0-preview.2.24128.4"/>
|
||||||
<PackageReference Include="Serilog.Extensions.Logging.File" Version="3.0.1-dev-00077" />
|
|
||||||
<PackageReference Include="sqlite-net" Version="1.6.292"/>
|
<PackageReference Include="sqlite-net" Version="1.6.292"/>
|
||||||
<PackageReference Include="sqlite-net-sqlcipher" Version="1.9.172"/>
|
<PackageReference Include="sqlite-net-sqlcipher" Version="1.9.172"/>
|
||||||
<PackageReference Include="Stateless" Version="5.15.0"/>
|
<PackageReference Include="Stateless" Version="5.15.0"/>
|
||||||
|
|
|
@ -63,14 +63,12 @@ public class MinioHelper
|
||||||
await _client.MakeBucketAsync(new MakeBucketArgs().WithBucket(bucketName));
|
await _client.MakeBucketAsync(new MakeBucketArgs().WithBucket(bucketName));
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine($"正在上传文件: {fileName} 到 bucket: {bucketName}");
|
|
||||||
|
|
||||||
await _client.PutObjectAsync(new PutObjectArgs()
|
await _client.PutObjectAsync(new PutObjectArgs()
|
||||||
.WithBucket(bucketName)
|
.WithBucket(bucketName)
|
||||||
.WithObject(fileName)
|
.WithObject(fileName)
|
||||||
.WithFileName(filePath));
|
.WithFileName(filePath));
|
||||||
|
|
||||||
Console.WriteLine($"文件 {fileName} 上传成功");
|
Console.WriteLine("文件上传成功");
|
||||||
|
|
||||||
return $"{bucketName}/{fileName}";
|
return $"{bucketName}/{fileName}";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue