From 082bc9bf1548494fd900f8dc067925d713441c44 Mon Sep 17 00:00:00 2001 From: Mikhail Kuznetsov Date: Mon, 19 May 2025 10:16:09 +1000 Subject: [PATCH] =?UTF-8?q?feat(aititMainLoader):=20=D0=A1=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BD=D0=B0=20=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B3=D1=80=D1=83=D1=89=D0=BA=D0=B8=20=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D0=B8=D0=B7=20=D0=90=D0=98=D0=A5=20=D0=98?= =?UTF-8?q?=D0=A2=20=D0=B2=20=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4=D1=8C=20?= =?UTF-8?q?=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PARR.AIHITLoaderWorker/Program.cs | 8 +- PARR.AIHITLoaderWorker/Worker.cs | 22 +- PARR.AIHITMainLoader/AihitMainLoader.cs | 101 +++++++++ .../AihitMainLoaderInstaller.cs | 40 ++++ PARR.AIHITMainLoader/Context/AIHITContext.cs | 14 ++ PARR.AIHITMainLoader/IAihitMainLoader.cs | 7 + PARR.AIHITMainLoader/Models/CvkData.cs | 83 +++++++ PARR.AIHITMainLoader/Models/IMainData.cs | 9 + PARR.AIHITMainLoader/Models/PtkData.cs | 204 ++++++++++++++++++ .../PARR.AIHITMainLoader.csproj | 8 + PARR.AIHITMainLoader/Services/AihitService.cs | 71 ++++++ .../Services/IAihitService.cs | 10 + .../Settings/LoaderSettings.cs | 9 + PARR.AIHITMainLoader/Settings/MqSettings.cs | 15 ++ .../Settings/WorkerSettings.cs | 7 + PARR.BLL/Domain/Mq/AihitMainDataMq.cs | 2 +- 16 files changed, 600 insertions(+), 10 deletions(-) create mode 100644 PARR.AIHITMainLoader/AihitMainLoader.cs create mode 100644 PARR.AIHITMainLoader/AihitMainLoaderInstaller.cs create mode 100644 PARR.AIHITMainLoader/Context/AIHITContext.cs create mode 100644 PARR.AIHITMainLoader/IAihitMainLoader.cs create mode 100644 PARR.AIHITMainLoader/Models/CvkData.cs create mode 100644 PARR.AIHITMainLoader/Models/IMainData.cs create mode 100644 PARR.AIHITMainLoader/Models/PtkData.cs create mode 100644 PARR.AIHITMainLoader/Services/AihitService.cs create mode 100644 PARR.AIHITMainLoader/Services/IAihitService.cs create mode 100644 PARR.AIHITMainLoader/Settings/LoaderSettings.cs create mode 100644 PARR.AIHITMainLoader/Settings/MqSettings.cs create mode 100644 PARR.AIHITMainLoader/Settings/WorkerSettings.cs diff --git a/PARR.AIHITLoaderWorker/Program.cs b/PARR.AIHITLoaderWorker/Program.cs index eeec0d37..248531de 100644 --- a/PARR.AIHITLoaderWorker/Program.cs +++ b/PARR.AIHITLoaderWorker/Program.cs @@ -1,7 +1,7 @@ -using PARR.AIHITLoader; -using Serilog; -using PARR.AIHITLoaderWorker; using Elastic.CommonSchema.Serilog; +using PARR.AIHITLoaderWorker; +using PARR.AIHITMainLoader; +using Serilog; var builder = Host.CreateApplicationBuilder(); @@ -22,7 +22,7 @@ builder.Services.AddLogging(config => config.AddSerilog(logger.CreateLogger()); }); -builder.Services.InstallAihitLoaderServices(builder.Configuration); +builder.Services.InstallAihitMainLoaderServices(builder.Configuration); builder.Services.AddHostedService(); diff --git a/PARR.AIHITLoaderWorker/Worker.cs b/PARR.AIHITLoaderWorker/Worker.cs index 71cfc89f..b343b356 100644 --- a/PARR.AIHITLoaderWorker/Worker.cs +++ b/PARR.AIHITLoaderWorker/Worker.cs @@ -1,21 +1,33 @@ -using PARR.AIHITLoader; +using PARR.AIHITMainLoader; namespace PARR.AIHITLoaderWorker { public class Worker : BackgroundService { private readonly ILogger _logger; - private readonly IAihitLoader aihitLoader; + private readonly IServiceProvider serviceProvider; - public Worker(ILogger logger, IAihitLoader aihitLoader) + public Worker( + ILogger logger, + IServiceProvider serviceProvider + ) { _logger = logger; - this.aihitLoader = aihitLoader; + this.serviceProvider = serviceProvider; } + protected override async Task ExecuteAsync(CancellationToken stoppingToken) { - await aihitLoader.StartAsync(); + using (var scope = serviceProvider.CreateScope()) + { + var aihitLoader = scope.ServiceProvider.GetService(); + + if (aihitLoader == null) + throw new Exception("湾 耢钽 镱塍麒螯 皴痂怦 IAihitMainLoader, scope.ServiceProvider.GetService()"); + + await aihitLoader.StartAsync(); + } } } } diff --git a/PARR.AIHITMainLoader/AihitMainLoader.cs b/PARR.AIHITMainLoader/AihitMainLoader.cs new file mode 100644 index 00000000..5f6d5118 --- /dev/null +++ b/PARR.AIHITMainLoader/AihitMainLoader.cs @@ -0,0 +1,101 @@ +锘縰sing Microsoft.Extensions.Logging; +using PARR.AIHITMainLoader.Models; +using PARR.AIHITMainLoader.Services; +using PARR.AIHITMainLoader.Settings; +using PARR.BLL.Domain.Mq; +using PARR.BLL.Services.Interfaces; +using System.Text.Json; + +namespace PARR.AIHITMainLoader +{ + internal class AihitMainLoader : IAihitMainLoader + { + private readonly ILogger logger; + private readonly IIntervalService intervalService; + private readonly WorkerSettings workerSettings; + private readonly LoaderSettings loaderSettings; + private readonly MqSettings mqSettings; + private readonly IAihitService aihitService; + private readonly IMqService mqService; + + public AihitMainLoader( + ILogger logger, + IIntervalService intervalService, + WorkerSettings workerSettings, + LoaderSettings loaderSettings, + MqSettings mqSettings, + IAihitService aihitService, + IMqService mqService + ) + { + this.logger = logger; + this.intervalService = intervalService; + this.workerSettings = workerSettings; + this.loaderSettings = loaderSettings; + this.mqSettings = mqSettings; + this.aihitService = aihitService; + this.mqService = mqService; + } + + + public async Task StartAsync() + { + logger.LogInformation("袟邪锌褍褋泻 褋械褉胁懈褋邪 蟹邪谐褉褍蟹泻懈 写邪薪薪褘褏 懈蟹 袗袠啸 袠孝."); + + await intervalService.IntervalInitAsync(LoadDataAsync, workerSettings.RepeatEvery); + } + + + private async Task LoadDataAsync() + { + logger.LogInformation("袟邪锌褍褋泻 蟹邪谐褉褍蟹泻懈 写邪薪薪褘褏 懈蟹 袗袠啸 袠孝."); + + var services = GetServices(); + + var listToMq = new List(); + + services.ForEach(service => + { + loaderSettings.ResponseAreas.ForEach(responseArea => + { + var EKs = service.Invoke(responseArea); + EKs.ToList().ForEach(item => + { + listToMq.Add(item.ToMainData()); + }); + }); + }); + + var preparedData = listToMq.Select(d => JsonSerializer.Serialize(d)); + + var parts = listToMq.Count() / loaderSettings.PackageSize; + parts++; + + for (var i = 0; i < parts; i++) + { + var batch = preparedData.Skip(i * loaderSettings.PackageSize).Take(loaderSettings.PackageSize).ToList(); + var sendResult = mqService.Send(mqSettings, batch.ToArray()); + if (sendResult.IsSuccess) + { + logger.LogInformation($"袛邪薪薪褘械 锌械褉械写邪薪褘 胁 RabbitMQ: {batch.Count()}"); + logger.LogDebug($"小锌懈褋芯泻 协袣 锌械褉械写邪薪薪褘褏 胁 RabbitMQ: {string.Join(", ", batch)}"); + } + else + logger.LogError($"袨褕懈斜泻邪 锌褉懈 锌械褉械写邪褔械 写邪薪薪褘褏 胁 Rabbit, 薪械 锌械褉械写邪薪薪褘械 褋芯芯斜褖械薪懈褟: {string.Join(", ", sendResult.NotSendMessages!)}"); + } + + await Task.CompletedTask; + } + + + private List>> GetServices() + { + var serviceList = new List>>(); + + serviceList.Add(aihitService.GetCvkData); + serviceList.Add(aihitService.GetPtkData); + + return serviceList; + } + } +} diff --git a/PARR.AIHITMainLoader/AihitMainLoaderInstaller.cs b/PARR.AIHITMainLoader/AihitMainLoaderInstaller.cs new file mode 100644 index 00000000..43028fba --- /dev/null +++ b/PARR.AIHITMainLoader/AihitMainLoaderInstaller.cs @@ -0,0 +1,40 @@ +锘縰sing Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using PARR.AIHITMainLoader.Context; +using PARR.AIHITMainLoader.Services; +using PARR.AIHITMainLoader.Settings; +using PARR.BLL; + +namespace PARR.AIHITMainLoader +{ + public static class AihitMainLoaderInstaller + { + public static void InstallAihitMainLoaderServices(this IServiceCollection services, IConfiguration configuration) + { + services.InstallBllServices(configuration); + + var settings = new WorkerSettings(); + configuration.GetSection(nameof(WorkerSettings)).Bind(settings); + services.AddSingleton(settings); + + var loaderSettings = new LoaderSettings(); + configuration.GetSection(nameof(LoaderSettings)).Bind(loaderSettings); + services.AddSingleton(loaderSettings); + + var mqSettings = new MqSettings(); + configuration.GetSection(nameof(MqSettings)).Bind(mqSettings); + services.AddSingleton(mqSettings); + + services.AddDbContext(options => + options.UseSqlServer( + configuration.GetConnectionString("AihitConnection"), + sqlServerOptions => sqlServerOptions.CommandTimeout(1800) + )); + + services.AddTransient(); + services.AddTransient(); + } + } +} + diff --git a/PARR.AIHITMainLoader/Context/AIHITContext.cs b/PARR.AIHITMainLoader/Context/AIHITContext.cs new file mode 100644 index 00000000..771a1b2b --- /dev/null +++ b/PARR.AIHITMainLoader/Context/AIHITContext.cs @@ -0,0 +1,14 @@ +锘縰sing Microsoft.EntityFrameworkCore; +using PARR.AIHITMainLoader.Models; + +namespace PARR.AIHITMainLoader.Context +{ + internal class AIHITContext : DbContext + { + public AIHITContext(DbContextOptions options) : base(options) { } + + + public DbSet CvkDatas { get; set; } + public DbSet PtkDatas { get; set; } + } +} diff --git a/PARR.AIHITMainLoader/IAihitMainLoader.cs b/PARR.AIHITMainLoader/IAihitMainLoader.cs new file mode 100644 index 00000000..59ae0e98 --- /dev/null +++ b/PARR.AIHITMainLoader/IAihitMainLoader.cs @@ -0,0 +1,7 @@ +锘縩amespace PARR.AIHITMainLoader +{ + public interface IAihitMainLoader + { + Task StartAsync(); + } +} diff --git a/PARR.AIHITMainLoader/Models/CvkData.cs b/PARR.AIHITMainLoader/Models/CvkData.cs new file mode 100644 index 00000000..6b8aa26f --- /dev/null +++ b/PARR.AIHITMainLoader/Models/CvkData.cs @@ -0,0 +1,83 @@ +锘縰sing PARR.BLL.Domain.Mq; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace PARR.AIHITMainLoader.Models +{ + public class CvkData : IMainData + { + [Column("袟袨袧袗_袨孝袙袝孝小孝袙袝袧袧袨小孝袠")] + public string? ResponseArea { get; set; } + + [Column("袣袗孝袝袚袨袪袠携_协袣")] + public string? EKCategory { get; set; } + + [Key] + [Column("袣袨袛_袩袨袠小袣袗_协袣")] + public string? EKFindCode { get; set; } + + [Column("袣袪袗孝袣袨袝_袧袗袠袦袝袧袨袙袗袧袠袝")] + public string? ShortName { get; set; } + + [Column("袦袙袟")] + public string? MVZ { get; set; } + + [Column("袦袨袛袝袥鞋")] + public string? Model { get; set; } + + [Column("袨孝袙袝孝小孝袙袝袧袧蝎袡_袟袗_协袣")] + public string? ResponsibleByEK { get; set; } + + [Column("袩袨袛袣袗孝袝袚袨袪袠携_协袣")] + public string? EKSubCategory { get; set; } + + [Column("袩袪袨袠袟袙袨袛袠孝袝袥鞋_袪袗袟袪袗袘袨孝效袠袣")] + public string? Developer { get; set; } + + [Column("袪袗袘袨效袗携_袚袪_袨孝袙_袟袗_协袣")] + public string? WorkGroup { get; set; } + + [Column("小孝袗孝校小")] + public string? Status { get; set; } + + [Column("孝袠袩_协袣")] + public string? EKType { get; set; } + + [Column("袪袚_褋屑械薪褘")] + public string? ShiftWorkGroup { get; set; } + + [Column("小械褉胁械褉 小袩袛")] + public string? SPDServerType { get; set; } + + [Column("小械褉胁械褉 袘袠袪")] + public string? BIRServerType { get; set; } + + + public AihitMainDataMq ToMainData() + { + return new AihitMainDataMq + { + Name = EKFindCode!,//TODO 孝褘 锌褉褟屑 褍胁械褉械薪??? + Properties = new Dictionary + { + {"袟袨袧袗_袨孝袙袝孝小孝袙袝袧袧袨小孝袠", ResponseArea }, + {"袣袗孝袝袚袨袪袠携_协袣", EKCategory }, + {"袣袪袗孝袣袨袝_袧袗袠袦袝袧袨袙袗袧袠袝", ShortName }, + {"MVZ", MVZ }, + {"袦袨袛袝袥鞋", Model }, + {"袨孝袙袝孝小孝袙袝袧袧蝎袡_袟袗_协袣", ResponsibleByEK }, + {"袩袨袛袣袗孝袝袚袨袪袠携_协袣", EKSubCategory }, + {"袩袪袨袠袟袙袨袛袠孝袝袥鞋_袪袗袟袪袗袘袨孝效袠袣", Developer }, + {"袪袗袘袨效袗携_袚袪_袨孝袙_袟袗_协袣", WorkGroup }, + {"小孝袗孝校小", Status }, + {"孝袠袩_协袣", EKType }, + {"袪袚_褋屑械薪褘", ShiftWorkGroup }, + {"小械褉胁械褉 小袩袛", SPDServerType }, + {"小械褉胁械褉 袘袠袪", BIRServerType }, + } + }; + } + + + } +} diff --git a/PARR.AIHITMainLoader/Models/IMainData.cs b/PARR.AIHITMainLoader/Models/IMainData.cs new file mode 100644 index 00000000..071dfc6f --- /dev/null +++ b/PARR.AIHITMainLoader/Models/IMainData.cs @@ -0,0 +1,9 @@ +锘縰sing PARR.BLL.Domain.Mq; + +namespace PARR.AIHITMainLoader.Models +{ + internal interface IMainData + { + AihitMainDataMq ToMainData(); + } +} diff --git a/PARR.AIHITMainLoader/Models/PtkData.cs b/PARR.AIHITMainLoader/Models/PtkData.cs new file mode 100644 index 00000000..b3223da8 --- /dev/null +++ b/PARR.AIHITMainLoader/Models/PtkData.cs @@ -0,0 +1,204 @@ +锘縰sing PARR.BLL.Domain.Mq; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace PARR.AIHITMainLoader.Models +{ + internal class PtkData : IMainData + { + [Column("IP_袗袛袪袝小")] + public string? IP { get; set; } + + [Column("袦袝孝袣袗")] + public string? Metka { get; set; } + + [Column("袗袣孝袠袙袝袧")] + public string? IsActive { get; set; } + + [Column("袙袗袞袧蝎袡_协袣")] + public string? IsImportant { get; set; } + + [Column("袙袪袝袦携_小袨袟袛袗袧袠携")] + public DateTime? CreateTime { get; set; } + + [Column("袛袨袩袨袥袧袠孝袝袥鞋袧袗携_袠袧肖袨袪袦袗笑袠携")] + public string? AdditionalInfo { get; set; } + + [Column("袟袨袧袗_袨孝袙袝孝小孝袙袝袧袧袨小孝袠")] + public string? ResponseArea { get; set; } + + [Column("袣袗孝袝袚袨袪袠携_协袣")] + public string? EKCategory { get; set; } + + [Column("袣袨袛_袩袨袠小袣袗_协袣")] + public string? EKFindCode { get; set; } + + [Column("袣袨袛_袩袪袨袛校袣孝袗")] + public string? ProductCode { get; set; } + + [Column("袣袨袛_校小袥校袚袠")] + public string? ServiceCode { get; set; } + + [Column("袣袪袗孝袣袨袝_袧袗袠袦袝袧袨袙袗袧袠袝")] + public string? ShortName { get; set; } + + [Column("袨孝袙袝孝小孝袙袝袧袧蝎袡_袟袗_协袣")] + public string? ResponsibleByEK { get; set; } + + [Column("袩袥袗袧袨袙袨袝_袙袪袝袦携_袙袨小小孝袗袧袨袙袥袝袧袠携")] + public DateTime? PlannedTimeToRepair { get; set; } + + [Column("袩袨袛袣袗孝袝袚袨袪袠携_协袣")] + public string? EKSubCategory { get; set; } + + [Column("袩袨袥袧袨袝_袧袗袠袦袝袧袨袙袗袧袠袝")] + public string? FullName { get; set; } + + [Column("袩袪袝袛袩袠小袗袧袠袝")] + public string? Prescription { get; set; } + + [Column("袩袪袝袛袩袪袠携孝袠袝")] + public string? Company { get; set; } + + [Column("袪袗袘袨效袗携_袚袪_袨孝袙_袟袗_协袣")] + public string? WorkGroup { get; set; } + + [Column("袪袗小袩袨袥袨袞袝袧袠袝")] + public string? Location { get; set; } + + [Column("袪袝袙袠袟袨袪_协袣")] + public string? EKRevizor { get; set; } + + [Column("袪袝袚袠小孝袪袗孝袨袪_协袣")] + public string? EKRegister { get; set; } + + [Column("小袝孝袝袙袨袝_袠袦携")] + public string? NetworkName { get; set; } + + [Column("小孝袗孝校小")] + public string? Status { get; set; } + + [Column("孝袠袩_协袣")] + public string? EKType { get; set; } + + [Column("肖袗袣孝袠效袝小袣袨袝_袟袗袙袝袪楔袝袧袠袝_协袣小袩袥校袗孝袗笑袠袠")] + public DateTime? EndExplotationDate { get; set; } + + [Column("肖袗袣孝袠效袝小袣袨袝_袧袗效袗袥袨_协袣小袩袥校袗孝袗笑袠袠")] + public DateTime? StartExplotationDate { get; set; } + + [Column("笑袝袥袝袙袨袝_袙袪袝袦携_袙袨小小孝袗袧袨袙袥袝袧袠携")] + public string? TargetRepairTime { get; set; } + + [Column("SYSMODTIME")] + public DateTime? SysModTime { get; set; } + + [Column("SYSMODUSER")] + public string? SysModUser { get; set; } + + [Column("袧袨袙蝎袡_袣袨袛_袩袨袠小袣袗")] + public string? NewEKFindCode { get; set; } + + [Column("小孝袗袪蝎袡_袣袨袛_袩袨袠小袣袗")] + public string? OldEKFindCode { get; set; } + + [Column("袧袗袩袪袗袙袥袝袧袠袝_笑孝小_笑袣")] + public string? CTSDirection { get; set; } + + [Key] + [Column("ID")] + public int? AIHID { get; set; } + + [Column("薪械写芯褋褌芯胁械褉薪褘械_写邪薪薪褘械")] + public char? IsUnreliableData { get; set; } + + [Column("袪袚_褋屑械薪褘")] + public string? ShiftWorkGroup { get; set; } + + [Column("袣谢懈械薪褌褋泻芯械_袩袨")] + public string? ClientSoftware { get; set; } + + [Column("袣谢懈械薪褌褋泻邪褟_袨小")] + public string? ClientOS { get; set; } + + [Column("孝懈锌 小校袘袛")] + public string? DBType { get; set; } + + [Column("孝懈锌 褋械褉胁械褉邪 锌褉懈谢芯卸械薪懈泄")] + public string? APPType { get; set; } + + [Column("孝懈锌 褋械褉胁械褉邪 笑袣 袘小")] + public string? CKBSServerType { get; set; } + + [Column("孝懈锌 褋械褉胁械褉邪 袠袘")] + public string? IBServerType { get; set; } + + [Column("孝懈锌 褋械褉胁械褉邪 懈薪褎褉邪褋褌褉褍泻褌褍褉褘")] + public string? InfrastructureServerType { get; set; } + + [Column("孝懈锌 褋械褉胁械褉邪 屑芯薪懈褌芯褉懈薪谐邪")] + public string? MonitoringServerType { get; set; } + + [Column("袨小")] + public string? OSType { get; set; } + + [Column("袟袨_袪袚")] + public string? WorkGroupResponseArea { get; set; } + + + public AihitMainDataMq ToMainData() + { + return new AihitMainDataMq + { + Name = EKFindCode!,//TODO 孝褘 锌褉褟屑 褍胁械褉械薪??? + Properties = new Dictionary + { + {"IP_袗袛袪袝小", IP }, + {"袦袝孝袣袗", Metka }, + {"袗袣孝袠袙袝袧", IsActive }, + {"袙袗袞袧蝎袡_协袣", IsImportant }, + {"袙袪袝袦携_小袨袟袛袗袧袠携", CreateTime.ToString() ?? null}, + {"袛袨袩袨袥袧袠孝袝袥鞋袧袗携_袠袧肖袨袪袦袗笑袠携", AdditionalInfo }, + {"袣袗孝袝袚袨袪袠携_协袣", EKCategory }, + {"袣袨袛_袩袪袨袛校袣孝袗", EKFindCode }, + {"袣袨袛_校小袥校袚袠", ProductCode }, + {"袣袪袗孝袣袨袝_袧袗袠袦袝袧袨袙袗袧袠袝", ShortName }, + {"袨孝袙袝孝小孝袙袝袧袧蝎袡_袟袗_协袣", ResponsibleByEK }, + {"袩袥袗袧袨袙袨袝_袙袪袝袦携_袙袨小小孝袗袧袨袙袥袝袧袠携", PlannedTimeToRepair.ToString() ?? null }, + {"袩袨袛袣袗孝袝袚袨袪袠携_协袣", EKSubCategory }, + {"袩袨袥袧袨袝_袧袗袠袦袝袧袨袙袗袧袠袝", FullName }, + {"袩袪袝袛袩袠小袗袧袠袝", Prescription }, + {"袩袪袝袛袩袪袠携孝袠袝", Company }, + {"袪袗袘袨效袗携_袚袪_袨孝袙_袟袗_协袣", WorkGroup }, + {"袪袗小袩袨袥袨袞袝袧袠袝", Location }, + {"袪袝袙袠袟袨袪_协袣", EKRevizor }, + {"袪袝袚袠小孝袪袗孝袨袪_协袣", EKRegister }, + {"小袝孝袝袙袨袝_袠袦携", NetworkName }, + {"小孝袗孝校小", Status }, + {"孝袠袩_协袣", EKType }, + {"肖袗袣孝袠效袝小袣袨袝_袟袗袙袝袪楔袝袧袠袝_协袣小袩袥校袗孝袗笑袠袠", EndExplotationDate.ToString() ?? null }, + {"肖袗袣孝袠效袝小袣袨袝_袧袗效袗袥袨_协袣小袩袥校袗孝袗笑袠袠", StartExplotationDate.ToString() ?? null }, + {"笑袝袥袝袙袨袝_袙袪袝袦携_袙袨小小孝袗袧袨袙袥袝袧袠携", TargetRepairTime }, + {"SYSMODTIME", SysModTime.ToString() ?? null }, + {"SYSMODUSER", SysModUser }, + {"袧袨袙蝎袡_袣袨袛_袩袨袠小袣袗", NewEKFindCode }, + {"小孝袗袪蝎袡_袣袨袛_袩袨袠小袣袗", OldEKFindCode }, + {"袧袗袩袪袗袙袥袝袧袠袝_笑孝小_笑袣", CTSDirection }, + {"ID", AIHID.ToString() }, + {"薪械写芯褋褌芯胁械褉薪褘械_写邪薪薪褘械", IsUnreliableData.ToString() }, + {"袪袚_褋屑械薪褘", ShiftWorkGroup }, + {"袣谢懈械薪褌褋泻芯械_袩袨", ClientSoftware }, + {"袣谢懈械薪褌褋泻邪褟_袨小", ClientOS }, + {"孝懈锌 小校袘袛", DBType }, + {"孝懈锌 褋械褉胁械褉邪 锌褉懈谢芯卸械薪懈泄", APPType }, + {"孝懈锌 褋械褉胁械褉邪 笑袣 袘小", CKBSServerType }, + {"孝懈锌 褋械褉胁械褉邪 袠袘", IBServerType }, + {"孝懈锌 褋械褉胁械褉邪 懈薪褎褉邪褋褌褉褍泻褌褍褉褘", InfrastructureServerType }, + {"孝懈锌 褋械褉胁械褉邪 屑芯薪懈褌芯褉懈薪谐邪", MonitoringServerType }, + {"袨小", OSType }, + {"袟袨_袪袚", WorkGroupResponseArea } + } + }; + } + } +} diff --git a/PARR.AIHITMainLoader/PARR.AIHITMainLoader.csproj b/PARR.AIHITMainLoader/PARR.AIHITMainLoader.csproj index cfadb03d..7fb31cbc 100644 --- a/PARR.AIHITMainLoader/PARR.AIHITMainLoader.csproj +++ b/PARR.AIHITMainLoader/PARR.AIHITMainLoader.csproj @@ -6,4 +6,12 @@ enable + + + + + + + + diff --git a/PARR.AIHITMainLoader/Services/AihitService.cs b/PARR.AIHITMainLoader/Services/AihitService.cs new file mode 100644 index 00000000..dfd2e9fe --- /dev/null +++ b/PARR.AIHITMainLoader/Services/AihitService.cs @@ -0,0 +1,71 @@ +锘縰sing Microsoft.Data.SqlClient; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; +using PARR.AIHITMainLoader.Context; +using PARR.AIHITMainLoader.Models; + +namespace PARR.AIHITMainLoader.Services +{ + internal class AihitService : IAihitService + { + private readonly AIHITContext context; + private readonly ILogger logger; + + public AihitService( + AIHITContext context, + ILogger logger + ) + { + this.context = context; + this.logger = logger; + } + + + public IEnumerable GetPtkData(string respArea) + { + var parameters = new List() { new SqlParameter("@蟹芯", respArea) }; + + try + { + var result = context.Set().FromSqlRaw($"EXEC mao2.dbo.sp_IPP_PARR_PTK_get_EK @蟹芯", parameters.ToArray()).AsEnumerable(); + + if (result == null || !result.Any()) + { + logger.LogWarning($"袩褉芯褑械写褍褉邪 sp_IPP_PARR_PTK_get_EK 胁械褉薪褍谢邪 锌褍褋褌芯泄 褋锌懈褋芯泻 协袣"); + } + + return result; + } + catch (Exception ex) + { + logger.LogError(ex, $"袨褕懈斜泻邪 锌褉懈 胁褘锌芯谢薪械薪懈懈 啸袩 sp_IPP_PARR_PTK_get_EK({respArea})"); + } + + return new List(); + } + + + public IEnumerable GetCvkData(string respArea) + { + var parameters = new List() { new SqlParameter("@蟹芯", respArea) }; + + try + { + var result = context.Set().FromSqlRaw($"EXEC mao2.dbo.sp_IPP_PARR_PTK_get_EK_CVK @蟹芯", parameters.ToArray()).AsEnumerable(); + + if (result == null || !result.Any()) + { + logger.LogWarning($"袩褉芯褑械写褍褉邪 sp_IPP_PARR_PTK_get_EK_CVK 胁械褉薪褍谢邪 锌褍褋褌芯泄 褋锌懈褋芯泻 协袣"); + } + + return result; + } + catch (Exception ex) + { + logger.LogError(ex, $"袨褕懈斜泻邪 锌褉懈 胁褘锌芯谢薪械薪懈懈 啸袩 sp_IPP_PARR_PTK_get_EK_CVK({respArea})"); + } + + return new List(); + } + } +} diff --git a/PARR.AIHITMainLoader/Services/IAihitService.cs b/PARR.AIHITMainLoader/Services/IAihitService.cs new file mode 100644 index 00000000..c6b420f4 --- /dev/null +++ b/PARR.AIHITMainLoader/Services/IAihitService.cs @@ -0,0 +1,10 @@ +锘縰sing PARR.AIHITMainLoader.Models; + +namespace PARR.AIHITMainLoader.Services +{ + internal interface IAihitService + { + IEnumerable GetPtkData(string respArea); + IEnumerable GetCvkData(string respArea); + } +} diff --git a/PARR.AIHITMainLoader/Settings/LoaderSettings.cs b/PARR.AIHITMainLoader/Settings/LoaderSettings.cs new file mode 100644 index 00000000..bb5271b7 --- /dev/null +++ b/PARR.AIHITMainLoader/Settings/LoaderSettings.cs @@ -0,0 +1,9 @@ +锘縩amespace PARR.AIHITMainLoader.Settings +{ + internal class LoaderSettings + { + public List ResponseAreas { get; set; } = new List(); + + public int PackageSize { get; set; } = 100; + } +} diff --git a/PARR.AIHITMainLoader/Settings/MqSettings.cs b/PARR.AIHITMainLoader/Settings/MqSettings.cs new file mode 100644 index 00000000..984822c9 --- /dev/null +++ b/PARR.AIHITMainLoader/Settings/MqSettings.cs @@ -0,0 +1,15 @@ +锘縰sing PARR.BLL.Contracts.Interfaces; + +namespace PARR.AIHITMainLoader.Settings +{ + internal class MqSettings : IMqSettings + { + public string HostName { get; set; } = string.Empty; + + public string QueueName { get; set; } = string.Empty; + + public string User { get; set; } = string.Empty; + + public string Password { get; set; } = string.Empty; + } +} diff --git a/PARR.AIHITMainLoader/Settings/WorkerSettings.cs b/PARR.AIHITMainLoader/Settings/WorkerSettings.cs new file mode 100644 index 00000000..a673aba1 --- /dev/null +++ b/PARR.AIHITMainLoader/Settings/WorkerSettings.cs @@ -0,0 +1,7 @@ +锘縩amespace PARR.AIHITMainLoader.Settings +{ + internal class WorkerSettings + { + public TimeSpan RepeatEvery { get; set; } + } +} diff --git a/PARR.BLL/Domain/Mq/AihitMainDataMq.cs b/PARR.BLL/Domain/Mq/AihitMainDataMq.cs index 86f92030..0ae64cff 100644 --- a/PARR.BLL/Domain/Mq/AihitMainDataMq.cs +++ b/PARR.BLL/Domain/Mq/AihitMainDataMq.cs @@ -13,6 +13,6 @@ /// /// 小锌懈褋芯泻 锌芯谢械泄 协袣, 胁 褎芯褉屑邪褌械 - 懈屑褟 锌芯谢褟 / 蟹薪邪褔械薪懈械 /// - public Dictionary Properties { get; set; } = new Dictionary(); + public Dictionary Properties { get; set; } = new Dictionary(); } }