[AGRICOPER] Migliorate logiche di invio id ricetta in ordine cambiato

Rimossi log inutili di connessione macchina non riuscita tramite Socket.
This commit is contained in:
2025-12-10 11:14:05 +01:00
parent 4f5cc134b3
commit e40d6c0a27
25 changed files with 434 additions and 761 deletions

View File

@@ -4,7 +4,9 @@ using System.Linq;
using Integry_Smart_Gateway.Core.Event;
using Integry_Smart_Gateway.Core.ExternalCom.Contracts;
using Integry_Smart_Gateway.Core.Gateway.Core;
using Integry_Smart_Gateway.Core.Logger;
using Integry_Smart_Gateway.Core.Orders;
using Integry_Smart_Gateway.Core.Orders.Model;
using Integry_Smart_Gateway.Core.RestConsumer;
using ISG___Agricoper__L1_.Core.Model;
@@ -13,53 +15,69 @@ namespace ISG___Agricoper__L1_.Core.Event;
public class OrdineCambiatoExecutionEvent(
IOrdersHandlerService ordersHandlerService,
IHmiGatewayService hmiGatewayService,
IRestConsumerService restConsumerService)
IRestConsumerService restConsumerService,
ILoggerService loggerService)
: IExecutionEvent
{
public bool Check(IEnumerable<IMachineComModel>? prevExternalComModels, IEnumerable<IMachineComModel> externalComModels)
{
if (prevExternalComModels == null || externalComModels == null) return false;
var termosaldatriceCurrentModel =
externalComModels.SingleOrDefault(x => x is TermosaldatriceModel) as TermosaldatriceModel;
var currentOrdineLavorazione = ordersHandlerService.GetOpenedOrdineLavorazione();
var currentMachineOrdineLavorazione =
ordersHandlerService.GetOrdineLavorazione(termosaldatriceCurrentModel?.DescrizioneOrdineInCorso);
var nextMachineOrdineLavorazione =
ordersHandlerService.GetOrdineLavorazione(termosaldatriceCurrentModel?.DescrizioneOrdineProssimo);
public bool Check(IEnumerable<IMachineComModel>? prevExternalComModels,
IEnumerable<IMachineComModel> externalComModels)
{
if (prevExternalComModels == null || externalComModels == null) return false;
var termosaldatriceCurrentModel =
externalComModels.SingleOrDefault(x => x is TermosaldatriceModel) as TermosaldatriceModel;
if (termosaldatriceCurrentModel == null ||
(currentOrdineLavorazione == null && currentMachineOrdineLavorazione == null) ||
(currentMachineOrdineLavorazione != null && currentMachineOrdineLavorazione.Equals(currentOrdineLavorazione)) ||
(nextMachineOrdineLavorazione != null && nextMachineOrdineLavorazione.Equals(currentOrdineLavorazione)))
{
return false;
}
var currentOrdineLavorazione = ordersHandlerService.GetOpenedOrdineLavorazione();
return true;
}
var currentMachineOrdineLavorazione =
ordersHandlerService.GetOrdineLavorazione(termosaldatriceCurrentModel?.DescrizioneOrdineInCorso);
public void Execute()
{
var currentOrdineLavorazione = ordersHandlerService.GetOpenedOrdineLavorazione();
var nextMachineOrdineLavorazione =
ordersHandlerService.GetOrdineLavorazione(termosaldatriceCurrentModel?.DescrizioneOrdineProssimo);
ushort? idRicetta = null;
if (currentOrdineLavorazione != null)
{
var result = restConsumerService.ProcessSql<IList<dynamic>>($@"SELECT TOP 1 caratteristica1 FROM jtb_cicl
WHERE cod_prod = '{currentOrdineLavorazione.CodProd}'")
.Result;
if (result.Any() && !string.IsNullOrEmpty(result[0].caratteristica1.ToString()))
idRicetta = Convert.ToUInt16(result[0].caratteristica1.ToString());
if (termosaldatriceCurrentModel == null ||
(currentOrdineLavorazione == null && currentMachineOrdineLavorazione == null) ||
(currentMachineOrdineLavorazione != null &&
currentMachineOrdineLavorazione.Equals(currentOrdineLavorazione)) ||
(nextMachineOrdineLavorazione != null && nextMachineOrdineLavorazione.Equals(currentOrdineLavorazione)))
{
return false;
}
}
var idRicettaToSet = RetrieveIdRicetta(currentOrdineLavorazione.CodProd);
if (idRicetta != null)
{
hmiGatewayService.WriteData(new TermosaldatriceModel
{
DescrizioneOrdineProssimo = currentOrdineLavorazione.DescrizioneOrdine,
IDRicettaProssima = idRicetta
});
}
}
if (idRicettaToSet == null)
return false;
return true;
}
public void Execute()
{
loggerService.LogDebug("Rilevato ordine cambiato", nameof(OrdineCambiatoExecutionEvent));
var currentOrdineLavorazione = ordersHandlerService.GetOpenedOrdineLavorazione();
ushort? idRicetta = RetrieveIdRicetta(currentOrdineLavorazione.CodProd);
if (idRicetta != null)
{
hmiGatewayService.WriteData(new TermosaldatriceModel
{
DescrizioneOrdineProssimo = currentOrdineLavorazione.DescrizioneOrdine,
IDRicettaProssima = idRicetta
});
}
}
public ushort? RetrieveIdRicetta(string codProd)
{
var result = restConsumerService.ProcessSql<IList<dynamic>>($@"SELECT TOP 1 caratteristica1 FROM jtb_cicl
WHERE cod_prod = '{codProd}'")
.Result;
if (result.Any() && !string.IsNullOrEmpty(result[0].caratteristica1.ToString()))
return Convert.ToUInt16(result[0].caratteristica1.ToString());
return null;
}
}

View File

@@ -9,80 +9,80 @@ using Integry_Smart_Gateway.Core.Orders.Model;
namespace ISG___Biolevante__L1_.Core.Machine.Impl;
public class NimaxMarcatoreBottiglieCollectorService : SocketConnector, INimaxMarcatoreBottiglieCollectorService
public class NimaxMarcatoreBottiglieCollectorService // : SocketConnector, INimaxMarcatoreBottiglieCollectorService
{
private readonly ILoggerService _loggerService;
private readonly IOrdersHandlerService _ordersHandlerService;
private const string START_MESSAGE = "1B";
private const string END_MESSAGE = "04";
//private readonly ILoggerService _loggerService;
//private readonly IOrdersHandlerService _ordersHandlerService;
//private const string START_MESSAGE = "1B";
//private const string END_MESSAGE = "04";
public async Task<bool> Connect(bool autoReconnect = true)
{
return await base.Connect();
}
//public async Task<bool> Connect(bool autoReconnect = true)
//{
// return await base.Connect();
//}
protected override Task PostConnect()
{
return Task.CompletedTask;
}
//protected override Task PostConnect()
//{
// return Task.CompletedTask;
//}
protected override async Task OnConnected()
{
throw new NotImplementedException();
}
//protected override async Task OnConnected()
//{
// throw new NotImplementedException();
//}
protected override async Task OnDisconnected()
{
throw new NotImplementedException();
}
//protected override async Task OnDisconnected()
//{
// throw new NotImplementedException();
//}
public async Task<IList<IMachineComModel>> CollectData()
{
var externalMachineComModels = new List<IMachineComModel>();
await base.SendHex(START_MESSAGE);
await base.SendHex("4F31");
await base.SendHex(END_MESSAGE);
var response = await base.Receive('/');
ChangeOrder(null);
//public async Task<IList<IMachineComModel>> CollectData()
//{
// var externalMachineComModels = new List<IMachineComModel>();
// await base.SendHex(START_MESSAGE);
// await base.SendHex("4F31");
// await base.SendHex(END_MESSAGE);
// var response = await base.Receive('/');
// ChangeOrder(null);
return externalMachineComModels;
}
// return externalMachineComModels;
//}
public async void ChangeOrder(OrdineLavorazioneDTO ordineLavorazioneDto)
{
//CLEAR MESSAGE
await base.SendHex(START_MESSAGE);
await base.Send("R");
await base.SendHex(END_MESSAGE);
//public async void ChangeOrder(OrdineLavorazioneDTO ordineLavorazioneDto)
//{
// //CLEAR MESSAGE
// await base.SendHex(START_MESSAGE);
// await base.Send("R");
// await base.SendHex(END_MESSAGE);
var response = await base.Receive('/');
//SAVE NEW MESSAGE
await base.SendHex(START_MESSAGE);
await base.Send("S");
await base.Send("001");
await base.SendHex(START_MESSAGE);
await base.Send("LOTTO");
await base.SendHex(START_MESSAGE);
await base.Send("DATA SCAD");
await base.SendHex(END_MESSAGE);
// var response = await base.Receive('/');
// //SAVE NEW MESSAGE
// await base.SendHex(START_MESSAGE);
// await base.Send("S");
// await base.Send("001");
// await base.SendHex(START_MESSAGE);
// await base.Send("LOTTO");
// await base.SendHex(START_MESSAGE);
// await base.Send("DATA SCAD");
// await base.SendHex(END_MESSAGE);
response = await base.Receive('/');
// response = await base.Receive('/');
//PUT MESSAGE ONLINE
// //PUT MESSAGE ONLINE
await base.SendHex(START_MESSAGE);
await base.Send("P1001");
await base.SendHex(END_MESSAGE);
response = await base.Receive('/');
}
// await base.SendHex(START_MESSAGE);
// await base.Send("P1001");
// await base.SendHex(END_MESSAGE);
// response = await base.Receive('/');
//}
public NimaxMarcatoreBottiglieCollectorService(string uri, int port, ILoggerService loggerService, IOrdersHandlerService ordersHandlerService) : base(uri,
port,
(log) => loggerService.LogDebug(log, nameof(NimaxMarcatoreBottiglieCollectorService)))
{
_loggerService = loggerService;
_ordersHandlerService = ordersHandlerService;
}
//public NimaxMarcatoreBottiglieCollectorService(string uri, int port, ILoggerService loggerService, IOrdersHandlerService ordersHandlerService) : base(uri,
// port,
// (log) => loggerService.LogDebug(log, nameof(NimaxMarcatoreBottiglieCollectorService)))
//{
// _loggerService = loggerService;
// _ordersHandlerService = ordersHandlerService;
//}
}

View File

@@ -84,13 +84,14 @@ public class BiolevanteContext : SmartGatewayContext
{
var loggerService = provider.Resolve<ILoggerService>();
provider.TryResolve(out IMachineConnectionsService machineConnectionsService);
provider.TryResolve(out IMachineLoggerService machineLoggerService);
var keyenceReaderIP = "192.168.10.100";
var keyenceReaderPort = 9005;
var keyenceCodCmac = "L7_KEYENCE_1";
var keyenceBarcodeManager = new KeyenceBarcodeManager(keyenceReaderIP, keyenceReaderPort,
keyenceCodCmac, loggerService,
keyenceCodCmac, loggerService, machineLoggerService,
machineConnectionsService);
return keyenceBarcodeManager;
})

View File

@@ -4,6 +4,7 @@ using System.Threading.Tasks;
using Integry_Smart_Gateway.Core.ExternalCom.Protocols.Socket;
using Integry_Smart_Gateway.Core.Logger;
using Integry_Smart_Gateway.Core.Looper;
using Integry_Smart_Gateway.Core.Machine.Contracts;
using Integry_Smart_Gateway.Core.MachineConnections.Contracts;
using ISG___Biolevante.Core.Manager.Contracts;
@@ -14,8 +15,9 @@ public class KeyenceBarcodeManager(
int port,
string codCmac,
ILoggerService loggerService,
IMachineLoggerService machineLoggerService,
IMachineConnectionsService machineConnectionsService)
: SocketConnector(uri, port, log => loggerService.LogDebug(log, nameof(KeyenceBarcodeManager))),
: SocketConnector(codCmac, uri, port, loggerService, machineLoggerService),
IKeyenceBarcodeManager
{
private CancellationTokenSource _cancellationTokenSource;

View File

@@ -19,7 +19,7 @@ public class KeyenceBarcodeReaderManager : SocketConnector, IKeyenceBarcodeReade
ILoggerService loggerService,
IMachineConnectionsService? machineConnectionsService,
IMachineLoggerService? machineLoggerService)
: base(uri, port, log => loggerService.LogDebug(log, nameof(KeyenceBarcodeReaderManager)))
: base(codCmac, uri, port, loggerService, machineLoggerService)
{
_loggerService = loggerService;
_machineConnectionsService = machineConnectionsService;

View File

@@ -12,7 +12,16 @@ using ISG___Frudis__L01_.Core.Model.VideoJetCommandsModel;
namespace ISG___Frudis__L01_.Core.Service;
public class VideoJetMachineCollectorService : SocketConnector, IVideoJetInferioreCollectorService, IVideoJetSuperioreCollectorService
public class VideoJetMachineCollectorService(
ILoggerService loggerService,
IMachineLoggerService machineLoggerService,
IMachineConnectionsService machineConnectionsService,
string ip,
Type modelType,
string codCmac,
int port)
: SocketConnector(codCmac, ip, port, loggerService, machineLoggerService), IVideoJetInferioreCollectorService,
IVideoJetSuperioreCollectorService
{
private class Commands
@@ -21,40 +30,13 @@ public class VideoJetMachineCollectorService : SocketConnector, IVideoJetInferio
public const string GET_JOB_LIST = "GJL";
}
private readonly ILoggerService _loggerService;
private readonly IMachineConnectionsService _machineConnectionsService;
private readonly ILoggerService _loggerService = loggerService;
private string _ip;
private readonly Type _modelType;
public string CodCmac { get; private set; }
public string CodCmac { get; private set; } = codCmac;
private bool _connected;
public VideoJetMachineCollectorService(
ILoggerService loggerService,
IMachineLoggerService machineLoggerService,
IMachineConnectionsService machineConnectionsService,
string ip, Type modelType, string codCmac,int port)
: base(ip, port, log =>
{
loggerService.LogDebug(log, nameof(VideoJetMachineCollectorService));
machineLoggerService.Log(codCmac,
null,
"Socket",
log,
log);
})
{
_loggerService = loggerService;
_machineConnectionsService = machineConnectionsService;
this._modelType = modelType;
this.CodCmac = codCmac;
}
public async Task<bool> Connect(bool autoReconnect = true)
{
@@ -68,12 +50,12 @@ public class VideoJetMachineCollectorService : SocketConnector, IVideoJetInferio
protected override async Task OnConnected()
{
await _machineConnectionsService.RegisterMachineConnection(CodCmac, true);
await machineConnectionsService.RegisterMachineConnection(CodCmac, true);
}
protected override async Task OnDisconnected()
{
await _machineConnectionsService.RegisterMachineConnection(CodCmac, false);
await machineConnectionsService.RegisterMachineConnection(CodCmac, false);
}
public async Task<IList<IMachineComModel>> CollectData()
@@ -82,7 +64,7 @@ public class VideoJetMachineCollectorService : SocketConnector, IVideoJetInferio
try
{
var etichettatriceModel = (IEtichettatriceModel) Activator.CreateInstance(_modelType);
var etichettatriceModel = (IEtichettatriceModel) Activator.CreateInstance(modelType);
await getPrinterState(etichettatriceModel);
await GetJobList(etichettatriceModel);

View File

@@ -10,7 +10,14 @@ using ISG___Gramm__L6_.Core.Service.Contracts;
namespace ISG___Gramm__L6_.Core.Service;
public class EidosPrinterCollectorService : SocketConnector, IEidosPrinterCollectorService
public class EidosPrinterCollectorService(
ILoggerService loggerService,
IMachineLoggerService machineLoggerService,
IMachineConnectionsService machineConnectionsService,
string uri,
int port,
string codCmac)
: SocketConnector(codCmac, uri, port, loggerService, machineLoggerService), IEidosPrinterCollectorService
{
public const string GET_PRINTER_STATE_COMMAND = "^?\r\n";
public const string RESET_BUFFER_COMMAND = "^@\r\n";
@@ -19,30 +26,9 @@ public class EidosPrinterCollectorService : SocketConnector, IEidosPrinterCollec
public const string PROCESS_VAR_COMMAND = "^V\r\n";
public const string CONFIRM_LABEL_COMMAND = "^!\r\n";
private readonly ILoggerService _loggerService;
private readonly IMachineLoggerService _machineLoggerService;
private IMachineConnectionsService _machineConnectionsService;
private readonly string _codCmac;
public EidosPrinterCollectorService(ILoggerService loggerService,
IMachineLoggerService machineLoggerService,
IMachineConnectionsService machineConnectionsService,
string uri, int port, string codCmac) : base(uri, port, (log) =>
{
loggerService.LogDebug(log, nameof(EidosPrinterCollectorService));
machineLoggerService.Log(codCmac,
null,
"Socket",
log,
log);
})
{
_loggerService = loggerService;
_machineLoggerService = machineLoggerService;
_machineConnectionsService = machineConnectionsService;
_codCmac = codCmac;
}
private readonly ILoggerService _loggerService = loggerService;
private readonly IMachineLoggerService _machineLoggerService = machineLoggerService;
private readonly string _codCmac = codCmac;
public Task<bool> Connect(bool autoReconnect = true)
@@ -204,13 +190,13 @@ public class EidosPrinterCollectorService : SocketConnector, IEidosPrinterCollec
protected async override Task OnConnected()
{
var model = new EidosPrinterModel();
await _machineConnectionsService.RegisterMachineConnection(model.GetCodCmac(), true);
await machineConnectionsService.RegisterMachineConnection(model.GetCodCmac(), true);
}
protected override async Task OnDisconnected()
{
var model = new EidosPrinterModel();
await _machineConnectionsService.RegisterMachineConnection(model.GetCodCmac(), false);
await machineConnectionsService.RegisterMachineConnection(model.GetCodCmac(), false);
}

View File

@@ -10,7 +10,14 @@ using ISG___Gramm__L7_.Core.Service.Contracts;
namespace ISG___Gramm__L7_.Core.Service;
public class EidosPrinterCollectorService : SocketConnector, IEidosPrinterCollectorService
public class EidosPrinterCollectorService(
ILoggerService loggerService,
IMachineLoggerService machineLoggerService,
IMachineConnectionsService machineConnectionsService,
string uri,
int port,
string codCmac)
: SocketConnector(codCmac, uri, port, loggerService, machineLoggerService), IEidosPrinterCollectorService
{
public const string GET_PRINTER_STATE_COMMAND = "^?\r\n";
public const string RESET_BUFFER_COMMAND = "^@\r\n";
@@ -19,30 +26,9 @@ public class EidosPrinterCollectorService : SocketConnector, IEidosPrinterCollec
public const string PROCESS_VAR_COMMAND = "^V\r\n";
public const string CONFIRM_LABEL_COMMAND = "^!\r\n";
private readonly ILoggerService _loggerService;
private readonly IMachineLoggerService _machineLoggerService;
private IMachineConnectionsService _machineConnectionsService;
private readonly string _codCmac;
public EidosPrinterCollectorService(ILoggerService loggerService,
IMachineLoggerService machineLoggerService,
IMachineConnectionsService machineConnectionsService,
string uri, int port, string codCmac) : base(uri, port, (log) =>
{
loggerService.LogDebug(log, nameof(EidosPrinterCollectorService));
machineLoggerService.Log(codCmac,
null,
"Socket",
log,
log);
})
{
_loggerService = loggerService;
_machineLoggerService = machineLoggerService;
_machineConnectionsService = machineConnectionsService;
_codCmac = codCmac;
}
private readonly ILoggerService _loggerService = loggerService;
private readonly IMachineLoggerService _machineLoggerService = machineLoggerService;
private readonly string _codCmac = codCmac;
public Task<bool> Connect(bool autoReconnect = true)
@@ -204,13 +190,13 @@ public class EidosPrinterCollectorService : SocketConnector, IEidosPrinterCollec
protected async override Task OnConnected()
{
var model = new EidosPrinterModel();
await _machineConnectionsService.RegisterMachineConnection(model.GetCodCmac(), true);
await machineConnectionsService.RegisterMachineConnection(model.GetCodCmac(), true);
}
protected override async Task OnDisconnected()
{
var model = new EidosPrinterModel();
await _machineConnectionsService.RegisterMachineConnection(model.GetCodCmac(), false);
await machineConnectionsService.RegisterMachineConnection(model.GetCodCmac(), false);
}

View File

@@ -38,16 +38,7 @@ public class IdeconMachineCollectorService : SocketConnector, IIdeconMachineColl
IMachineLoggerService machineLoggerService,
IMachineConnectionsService machineConnectionsService,
string ip, Type modelType, string codCmac)
: base(ip, 50000, log =>
{
loggerService.LogDebug(log, nameof(IdeconMachineCollectorService));
machineLoggerService.Log(codCmac,
null,
"Socket",
log,
log);
})
: base(codCmac, ip, 50000, loggerService, machineLoggerService)
{
_loggerService = loggerService;

View File

@@ -20,16 +20,7 @@ public class VideoJetMachineCollectorService(
string ip,
Type modelType,
string codCmac)
: SocketConnector(ip, 3004, log =>
{
loggerService.LogDebug(log, nameof(VideoJetMachineCollectorService));
machineLoggerService.Log(codCmac,
null,
"Socket",
log,
log);
}), IVideoJetFronteCollectorService, IVideoJetRetroCollectorService, IVideoJetCartoniCollectorService
: SocketConnector(codCmac, ip, 3004, loggerService, machineLoggerService), IVideoJetFronteCollectorService, IVideoJetRetroCollectorService, IVideoJetCartoniCollectorService
{
private class Commands

View File

@@ -1,6 +0,0 @@
namespace ISG___Gramm__SL__Base.Core.Storage;
public interface ITrashDataCleanerService
{
}

View File

@@ -1,69 +0,0 @@
using System;
using Integry_Smart_Gateway.Core.ExternalCom.Contracts;
using Integry_Smart_Gateway.Core.Gateway.Model;
using Integry_Smart_Gateway.Core.Looper;
using Integry_Smart_Gateway.Core.Storage.DBMS;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MongoDB.Bson;
namespace ISG___Gramm__SL__Base.Core.Storage;
public class TrashDataCleanerService(IStorageDBMSService storageDbmsService, ILooperService looperService)
: ITrashDataCleanerService
{
public void Start()
{
looperService.Add(CleanUselessData, TimeSpan.FromHours(1));
}
private async Task CleanUselessData()
{
var nullModels = storageDbmsService
.AsQueryable<GatewayDataWrapper>()
.Where(x => x.Model == null)
.Select(x => x.Id)
.ToList();
var list = storageDbmsService
.AsQueryable<GatewayDataWrapper>()
.Where(x => x.Model is IProductionMachineComModel)
.Select(x =>
new
{
x.Id,
x.Model
})
.ToList()
.Where(x =>
string.IsNullOrEmpty(((IProductionMachineComModel)x.Model).DescrizioneOrdineInCorso) ||
!((IProductionMachineComModel)x.Model).DescrizioneOrdineInCorso.StartsWith("#"))
.Select(x => x.Id)
.ToList();
list.AddRange(nullModels);
await DeleteByChunks(list);
}
private async Task DeleteByChunks(IEnumerable<ObjectId> idsToDelete)
{
var chunks = idsToDelete
.Select((s, i) => new { Value = s, Index = i })
.GroupBy(x => x.Index / 10000)
.Select(grp => grp.Select(x => x.Value).ToArray())
.ToArray();
foreach (var chunk in chunks)
{
await storageDbmsService.RemoveRangeAsync<GatewayDataWrapper>(chunk);
}
}
}

View File

@@ -5,11 +5,6 @@
<RootNamespace>ISG___Gramm__SL__Base</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Client" Version="1.5.376.213" />
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Core" Version="1.5.376.213" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Integry Smart Gateway\Integry Smart Gateway.csproj" />
</ItemGroup>

View File

@@ -6,7 +6,6 @@ using Integry_Smart_Gateway.Core.Extra;
using Integry_Smart_Gateway.Core.Gateway.Core;
using Integry_Smart_Gateway.Core.Machine.Contracts;
using Integry_Smart_Gateway.Core.Settings;
using ISG___Gramm__SL__Base.Core.Storage;
using ISG___Gramm__SL01_.Core._Mockup;
using ISG___Gramm__SL01_.Core.Events;
using ISG___Gramm__SL01_.Core.Manager;
@@ -75,15 +74,6 @@ public class GrammSL01Context : SmartGatewayContext
#endregion
#if !DEBUG
containerBuilder
.RegisterType<TrashDataCleanerService>()
.As<ITrashDataCleanerService>()
.SingleInstance()
.AutoActivate()
.OnActivated(x => x.Instance.Start());
#endif
#if DEBUG
containerBuilder

View File

@@ -8,12 +8,6 @@
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Client" Version="1.5.376.213" />
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Core" Version="1.5.376.213" />
<PackageReference Include="Topshelf" Version="4.3.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Integry Smart Gateway\Integry Smart Gateway.csproj" />
<ProjectReference Include="..\ISG - Gramm (SL) Base\ISG - Gramm (SL) Base.csproj" />

View File

@@ -4,7 +4,6 @@ using Integry_Smart_Gateway.Core.Event;
using Integry_Smart_Gateway.Core.ExternalCom.Contracts;
using Integry_Smart_Gateway.Core.Extra;
using Integry_Smart_Gateway.Core.Settings;
using ISG___Gramm__SL__Base.Core.Storage;
using ISG___Gramm__SL02_.Core.Events;
using ISG___Gramm__SL02_.Core.Manager;
using ISG___Gramm__SL02_.Core.Manager.Implementation;
@@ -78,15 +77,6 @@ public class GrammSL02Context : SmartGatewayContext
#endregion
#if !DEBUG
containerBuilder
.RegisterType<TrashDataCleanerService>()
.As<ITrashDataCleanerService>()
.SingleInstance()
.AutoActivate()
.OnActivated(x => x.Instance.Start());
#endif
#region WorkFlows
containerBuilder

View File

@@ -9,8 +9,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Client" Version="1.5.376.213" />
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Core" Version="1.5.376.213" />
<PackageReference Include="Topshelf" Version="4.3.0" />
</ItemGroup>

View File

@@ -4,7 +4,6 @@ using Integry_Smart_Gateway.Core.Event;
using Integry_Smart_Gateway.Core.ExternalCom.Contracts;
using Integry_Smart_Gateway.Core.Extra;
using Integry_Smart_Gateway.Core.Settings;
using ISG___Gramm__SL__Base.Core.Storage;
using ISG___Gramm__SL03_.Core.Events;
using ISG___Gramm__SL03_.Core.Manager;
using ISG___Gramm__SL03_.Core.Manager.Implementation;
@@ -65,15 +64,6 @@ public class GrammSL03Context : SmartGatewayContext
#endregion
#if !DEBUG
containerBuilder
.RegisterType<TrashDataCleanerService>()
.As<ITrashDataCleanerService>()
.SingleInstance()
.AutoActivate()
.OnActivated(x => x.Instance.Start());
#endif
#region WorkFlows
containerBuilder
@@ -84,12 +74,5 @@ public class GrammSL03Context : SmartGatewayContext
#endregion
#if DEBUG
//containerBuilder
// .RegisterType<CaricoSemolaTester>()
// .AutoActivate()
// .SingleInstance()
// .OnActivated(x => x.Instance.Start());
#endif
}
}

View File

@@ -9,8 +9,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Client" Version="1.5.376.213" />
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Core" Version="1.5.376.213" />
<PackageReference Include="Topshelf" Version="4.3.0" />
</ItemGroup>

View File

@@ -15,127 +15,117 @@ namespace ISG___LaMonarca__L5_.Core.Machine;
public class Jet3MachineCollectorService : SocketConnector, IMachineCollectorService
{
private readonly ILoggerService _loggerService;
private readonly IOrdersHandlerService _ordersHandlerService;
private readonly IMachineConnectionsService _machineConnectionsService;
private readonly ILoggerService _loggerService;
private readonly IOrdersHandlerService _ordersHandlerService;
private readonly IMachineConnectionsService _machineConnectionsService;
private bool _connected;
private double? _lastCambioOrdineCounter;
private double? _lastReadValue;
private readonly string _codCmac;
private bool _connected;
private double? _lastCambioOrdineCounter;
private double? _lastReadValue;
private readonly string _codCmac;
public Jet3MachineCollectorService(
string ip,
string codCmac,
ILoggerService loggerService,
IOrdersHandlerService ordersHandlerService,
IRiempitriceManager riempitriceManager,
IMachineConnectionsService machineConnectionsService,
IMachineLoggerService machineLoggerService)
: base(ip, 3000,
log =>
{
loggerService.LogDebug(log, nameof(Jet3MachineCollectorService));
public Jet3MachineCollectorService(
string ip,
string codCmac,
ILoggerService loggerService,
IOrdersHandlerService ordersHandlerService,
IRiempitriceManager riempitriceManager,
IMachineConnectionsService machineConnectionsService,
IMachineLoggerService machineLoggerService)
: base(codCmac, ip, 3000, loggerService, machineLoggerService)
{
_loggerService = loggerService;
_ordersHandlerService = ordersHandlerService;
_machineConnectionsService = machineConnectionsService;
_codCmac = codCmac;
machineLoggerService.Log(codCmac,
null,
"Socket",
log,
log);
})
{
_loggerService = loggerService;
_ordersHandlerService = ordersHandlerService;
_machineConnectionsService = machineConnectionsService;
_codCmac = codCmac;
riempitriceManager.OnMachineOrderChanged += () => { _lastCambioOrdineCounter = _lastReadValue; };
}
riempitriceManager.OnMachineOrderChanged += () => { _lastCambioOrdineCounter = _lastReadValue; };
}
protected override Task PostConnect()
{
return Task.CompletedTask;
}
protected override Task PostConnect()
{
return Task.CompletedTask;
}
protected override async Task OnConnected()
{
await _machineConnectionsService.RegisterMachineConnection(_codCmac, true);
}
protected override async Task OnConnected()
{
await _machineConnectionsService.RegisterMachineConnection(_codCmac, true);
}
protected override async Task OnDisconnected()
{
await _machineConnectionsService.RegisterMachineConnection(_codCmac, false);
}
protected override async Task OnDisconnected()
{
await _machineConnectionsService.RegisterMachineConnection(_codCmac, false);
}
public async Task<bool> Connect(bool autoReconnect = true)
{
return await base.Connect();
}
public async Task<bool> Connect(bool autoReconnect = true)
{
return await base.Connect();
}
public async Task<IList<IMachineComModel>> CollectData()
{
var externalMachineComModels = new List<IMachineComModel>();
public async Task<IList<IMachineComModel>> CollectData()
{
var externalMachineComModels = new List<IMachineComModel>();
try
{
var stampanteJet3Model = await GetPrinterState(new StampanteJet3Model());
;
try
{
var stampanteJet3Model = await GetPrinterState(new StampanteJet3Model());
;
var ordineInCorso = _ordersHandlerService.GetOpenedOrdineLavorazione();
if (stampanteJet3Model != null)
{
if (ordineInCorso != null)
{
stampanteJet3Model.DescrizioneOrdineInCorso = ordineInCorso.DescrizioneOrdine;
stampanteJet3Model.LottoOrdineInCorso = ordineInCorso.PartitaMag;
stampanteJet3Model.ScadenzaOrdineInCorso = ordineInCorso.DataScad;
}
else
{
stampanteJet3Model.DescrizioneOrdineInCorso = null;
stampanteJet3Model.LottoOrdineInCorso = null;
stampanteJet3Model.LottoOrdineInCorso = null;
}
var ordineInCorso = _ordersHandlerService.GetOpenedOrdineLavorazione();
if (stampanteJet3Model != null)
{
if (ordineInCorso != null)
{
stampanteJet3Model.DescrizioneOrdineInCorso = ordineInCorso.DescrizioneOrdine;
stampanteJet3Model.LottoOrdineInCorso = ordineInCorso.PartitaMag;
stampanteJet3Model.ScadenzaOrdineInCorso = ordineInCorso.DataScad;
}
else
{
stampanteJet3Model.DescrizioneOrdineInCorso = null;
stampanteJet3Model.LottoOrdineInCorso = null;
stampanteJet3Model.LottoOrdineInCorso = null;
}
_lastReadValue = stampanteJet3Model.ContatoreParziale;
_lastCambioOrdineCounter ??= stampanteJet3Model.ContatoreParziale;
_lastReadValue = stampanteJet3Model.ContatoreParziale;
_lastCambioOrdineCounter ??= stampanteJet3Model.ContatoreParziale;
if (_lastReadValue < _lastCambioOrdineCounter) _lastCambioOrdineCounter = _lastReadValue;
if (_lastReadValue < _lastCambioOrdineCounter) _lastCambioOrdineCounter = _lastReadValue;
stampanteJet3Model.ContatoreParziale =
(double)_lastReadValue - (double)_lastCambioOrdineCounter;
stampanteJet3Model.ContatoreParziale =
(double)_lastReadValue - (double)_lastCambioOrdineCounter;
//stampanteJet3Model.Stato = MachineStatusEnum.MARCIA;
externalMachineComModels.Add(stampanteJet3Model);
}
}
catch (Exception ex)
{
this._loggerService.LogVerboseError(ex, nameof(Jet3MachineCollectorService));
}
//stampanteJet3Model.Stato = MachineStatusEnum.MARCIA;
externalMachineComModels.Add(stampanteJet3Model);
}
}
catch (Exception ex)
{
this._loggerService.LogVerboseError(ex, nameof(Jet3MachineCollectorService));
}
return externalMachineComModels;
}
return externalMachineComModels;
}
private async Task<StampanteJet3Model> GetPrinterState(StampanteJet3Model stampanteJet3Model)
{
await base.Send("^0?CC" + '\u000d');
private async Task<StampanteJet3Model> GetPrinterState(StampanteJet3Model stampanteJet3Model)
{
await base.Send("^0?CC" + '\u000d');
IList<string> statusDataList = await base.Receive('\t');
IList<string> statusDataList = await base.Receive('\t');
if (statusDataList == null || !statusDataList.Any())
{
return null;
}
if (statusDataList == null || !statusDataList.Any())
{
return null;
}
statusDataList[0] = statusDataList[0].Remove(0, 5);
statusDataList[0] = statusDataList[0].Remove(0, 5);
int totaleProdotti = Convert.ToInt32(statusDataList[2]);
int totaleProdotti = Convert.ToInt32(statusDataList[2]);
stampanteJet3Model.ContatoreParziale = Convert.ToInt64(statusDataList[0]);
//stampanteJet3Model.ContatoreTotale = Convert.ToInt64(statusDataList[2]);
//stampanteJet3Model.VelocitaEffettiva = Convert.ToInt32(statusDataList[2]);
stampanteJet3Model.ContatoreParziale = Convert.ToInt64(statusDataList[0]);
//stampanteJet3Model.ContatoreTotale = Convert.ToInt64(statusDataList[2]);
//stampanteJet3Model.VelocitaEffettiva = Convert.ToInt32(statusDataList[2]);
return stampanteJet3Model;
}
return stampanteJet3Model;
}
}

View File

@@ -5,12 +5,15 @@ using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using Integry_Smart_Gateway.Core.Logger;
using Integry_Smart_Gateway.Core.Machine.Contracts;
namespace Integry_Smart_Gateway.Core.ExternalCom.Protocols.Socket;
public abstract class SocketConnector : IDisposable
{
private readonly Action<string> _logAction;
private readonly Action<string> _logDebugAction;
private readonly Action<string> _logErrorAction;
private System.Net.Sockets.Socket _client;
@@ -21,9 +24,21 @@ public abstract class SocketConnector : IDisposable
private bool _connected = false;
protected SocketConnector(string uri, int port, Action<string> logAction)
protected SocketConnector(string codCmac, string uri, int port,
ILoggerService loggerService,
IMachineLoggerService machineLoggerService)
{
this._logAction = log => logAction($"[{uri}] {log}");
this._logDebugAction = log =>
{
loggerService.LogDebug($"[{uri}] {log}");
machineLoggerService.Log(codCmac,
null,
"Socket",
log,
log);
};
this._logErrorAction= log => loggerService.LogError($"[{uri}] {log}");
// Establish the remote endpoint for the socket.
_ipAddress = IPAddress.Parse(uri);
@@ -36,7 +51,7 @@ public abstract class SocketConnector : IDisposable
ReceiveTimeout = 5 * 1000
};
this._logAction("Connessione");
loggerService.LogDebug("Connessione");
}
private async Task<bool> InternalConnect()
@@ -50,7 +65,7 @@ public abstract class SocketConnector : IDisposable
}
catch (Exception ex)
{
this._logAction(ex.Message);
this._logErrorAction(ex.Message);
isConnected = false;
await Task.Delay(TimeSpan.FromSeconds(15));
}
@@ -59,11 +74,11 @@ public abstract class SocketConnector : IDisposable
{
case true when !_connected:
await OnConnected();
//this._logAction("Connesso a " + _ipAddress);
//this._logDebugAction("Connesso a " + _ipAddress);
break;
case false when _connected:
await OnDisconnected();
//this._logAction("Disconnesso da " + _ipAddress);
//this._logDebugAction("Disconnesso da " + _ipAddress);
break;
}
@@ -149,7 +164,7 @@ public abstract class SocketConnector : IDisposable
}
catch (Exception e)
{
this._logAction(e.ToString());
this._logErrorAction(e.ToString());
return null;
}
}

View File

@@ -16,7 +16,7 @@ public interface IOrdersHandlerService
OrdineLavorazioneDTO? GetOrdineLavorazione(string? key, string codJfas = null, bool forceCodJfasMatch = true);
OrdineLavorazioneDTO GetOpenedOrdineLavorazione();
OrdineLavorazioneDTO? GetOpenedOrdineLavorazione();
OrdineLavorazioneDTO? GetNextOrdineLavorazione(OrdineLavorazioneKeyDTO ordineLavorazioneDto, bool checkFlagAvviabile = true);

View File

@@ -13,180 +13,180 @@ using Integry_Smart_Gateway.Core.Workflow.Model;
namespace Integry_Smart_Gateway.Core.Orders;
public class OrdersHandlerService : IOrdersHandlerService
public class OrdersHandlerService(
IOrderConsumerService orderService,
ILoggerService loggerService,
ILooperService looperService,
IRestConsumerService restConsumerService)
: IOrdersHandlerService
{
public Action OnOrderListChanged { get; set; }
public Action OnOrderListChanged { get; set; }
private static readonly TimeSpan POLL_DELAY_TIME = TimeSpan.FromSeconds(10);
private static readonly TimeSpan POLL_DELAY_TIME = TimeSpan.FromSeconds(10);
private readonly IOrderConsumerService _orderService;
private readonly ILoggerService _loggerService;
private readonly ILooperService _looperService;
private readonly IRestConsumerService _restConsumerService;
private readonly List<OrdineLavorazioneDTO>? _currentOrders = new();
private readonly List<OrdineLavorazioneDTO>? _currentOrders = new();
public void Init()
{
looperService.Add((Action)RefreshList, POLL_DELAY_TIME);
}
public OrdersHandlerService(
IOrderConsumerService orderService,
ILoggerService loggerService, ILooperService looperService, IRestConsumerService restConsumerService)
{
_orderService = orderService;
_loggerService = loggerService;
_looperService = looperService;
_restConsumerService = restConsumerService;
}
public OrdineLavorazioneDTO? GetOrdineLavorazione(OrdineLavorazioneKeyDTO ordineLavorazione)
{
//Implementare la chiamata ai servizi nel caso non si trova in locale
if (_currentOrders == null || _currentOrders.Count == 0) return null;
public void Init()
{
this._looperService.Add((Action)RefreshList, POLL_DELAY_TIME);
}
return _currentOrders.SingleOrDefault(dto => ordineLavorazione.Equals(dto, false));
}
public OrdineLavorazioneDTO? GetOrdineLavorazione(OrdineLavorazioneKeyDTO ordineLavorazione)
{
//Implementare la chiamata ai servizi nel caso non si trova in locale
if (_currentOrders == null || _currentOrders.Count == 0) return null;
public OrdineLavorazioneDTO? GetOpenedOrdineLavorazione()
{
//Implementare la chiamata ai servizi nel caso non si trova in locale
if (_currentOrders == null || _currentOrders.Count == 0) return null;
return _currentOrders.SingleOrDefault(dto => ordineLavorazione.Equals(dto, false));
}
var openedOrders = _currentOrders
.Where(x => x.Stato.Equals("IN CORSO", StringComparison.OrdinalIgnoreCase))
.ToList();
public OrdineLavorazioneDTO GetOpenedOrdineLavorazione()
{
//Implementare la chiamata ai servizi nel caso non si trova in locale
if (_currentOrders == null || _currentOrders.Count == 0) return null;
if (openedOrders.Count == 0)
return null;
return _currentOrders.SingleOrDefault(x => x.Stato.Equals("IN CORSO", StringComparison.OrdinalIgnoreCase));
}
if (openedOrders.Count > 1)
throw new Exception("Sono stati trovati più ordine in esecuzione");
public OrdineLavorazioneDTO? GetOrdineLavorazione(string key, string codJfas = null, bool forceCodJfasMatch = true)
{
if (string.IsNullOrEmpty(key)) return null;
return openedOrders[0];
}
//Implementare la chiamata ai servizi nel caso non si trova in locale
if (_currentOrders == null || _currentOrders.Count == 0) return null;
public OrdineLavorazioneDTO? GetOrdineLavorazione(string key, string codJfas = null, bool forceCodJfasMatch = true)
{
if (string.IsNullOrEmpty(key)) return null;
//Implementare la chiamata ai servizi nel caso non si trova in locale
if (_currentOrders == null || _currentOrders.Count == 0) return null;
OrdineLavorazioneDTO? orderToReturn = null;
OrdineLavorazioneDTO? orderToReturn = null;
var ordersWithoutCodJfasCheck = _currentOrders
.Where(x => x.DescrizioneOrdine.StartsWith(key, StringComparison.OrdinalIgnoreCase) ||
x.DescrizioneOrdine.Equals(key, StringComparison.OrdinalIgnoreCase))
.ToList();
var ordersWithoutCodJfasCheck = _currentOrders
.Where(x => x.DescrizioneOrdine.StartsWith(key, StringComparison.OrdinalIgnoreCase) ||
x.DescrizioneOrdine.Equals(key, StringComparison.OrdinalIgnoreCase))
.ToList();
if (forceCodJfasMatch && !string.IsNullOrEmpty(codJfas))
{
orderToReturn = ordersWithoutCodJfasCheck.FirstOrDefault(x => x.CodJfas.Equals(codJfas));
}
else
{
if (ordersWithoutCodJfasCheck.Count == 1) orderToReturn = ordersWithoutCodJfasCheck[0];
else if (ordersWithoutCodJfasCheck.Count > 1)
{
if (codJfas != null)
orderToReturn = ordersWithoutCodJfasCheck.FirstOrDefault(x => x.CodJfas.Equals(codJfas));
}
}
if (forceCodJfasMatch && !string.IsNullOrEmpty(codJfas))
{
orderToReturn = ordersWithoutCodJfasCheck.FirstOrDefault(x => x.CodJfas.Equals(codJfas));
}
else
{
if (ordersWithoutCodJfasCheck.Count == 1) orderToReturn = ordersWithoutCodJfasCheck[0];
else if (ordersWithoutCodJfasCheck.Count > 1)
{
if (codJfas != null)
orderToReturn = ordersWithoutCodJfasCheck.FirstOrDefault(x => x.CodJfas.Equals(codJfas));
}
}
return orderToReturn;
}
return orderToReturn;
}
public OrdineLavorazioneDTO? GetNextOrdineLavorazione(OrdineLavorazioneKeyDTO ordineLavorazioneDto,
bool checkFlagAvviabile = true)
{
if (_currentOrders == null || _currentOrders.Count == 0) return null;
public OrdineLavorazioneDTO? GetNextOrdineLavorazione(OrdineLavorazioneKeyDTO ordineLavorazioneDto,
bool checkFlagAvviabile = true)
{
if (_currentOrders == null || _currentOrders.Count == 0) return null;
OrdineLavorazioneDTO? orderToReturn = null;
OrdineLavorazioneDTO? orderToReturn = null;
var tempOrders = _currentOrders
.SkipWhile(ord => !ord.FlagAvviabile && checkFlagAvviabile)
.ToList();
var tempOrders = _currentOrders
.SkipWhile(ord => !ord.FlagAvviabile && checkFlagAvviabile)
.ToList();
if (tempOrders is { Count: > 0 })
{
if (ordineLavorazioneDto != null)
{
if (tempOrders[0] != null)
{
if (ordineLavorazioneDto.NumOrd == tempOrders[0].NumOrd)
{
orderToReturn = tempOrders.Count > 1 ? tempOrders[1] : null;
}
else
{
orderToReturn = tempOrders[0];
}
}
}
else
{
orderToReturn = tempOrders[0];
}
}
if (tempOrders is { Count: > 0 })
{
if (ordineLavorazioneDto != null)
{
if (tempOrders[0] != null)
{
if (ordineLavorazioneDto.NumOrd == tempOrders[0].NumOrd)
{
orderToReturn = tempOrders.Count > 1 ? tempOrders[1] : null;
}
else
{
orderToReturn = tempOrders[0];
}
}
}
else
{
orderToReturn = tempOrders[0];
}
}
if (orderToReturn != null)
{
orderToReturn = !string.IsNullOrEmpty(orderToReturn.PartitaMag) ? orderToReturn : null;
}
if (orderToReturn != null)
{
orderToReturn = !string.IsNullOrEmpty(orderToReturn.PartitaMag) ? orderToReturn : null;
}
return orderToReturn;
}
return orderToReturn;
}
public IList<StatoEventiMachineDTO> GetStatoEventiMachines(OrdineLavorazioneKeyDTO order, string codCmac)
{
var result = _restConsumerService
.Post<IList<StatoEventiMachineDTO>>($"production/machine/{codCmac}/order/status", null, order).Result;
return result.Dto;
}
public IList<StatoEventiMachineDTO> GetStatoEventiMachines(OrdineLavorazioneKeyDTO order, string codCmac)
{
var result = restConsumerService
.Post<IList<StatoEventiMachineDTO>>($"production/machine/{codCmac}/order/status", null, order).Result;
return result.Dto;
}
public DtbOrdt StartMachineOnOrder(OrdineLavorazioneKeyDTO order, string codCmac, string? causale)
{
return SaveMachineOrderEvent(order, codCmac, MachineStatusEnum.MARCIA.ToEventoString(),
string.IsNullOrEmpty(causale) ? MachineStatusEnum.MARCIA.ToDescrizioneEventoString() : causale);
}
public DtbOrdt StartMachineOnOrder(OrdineLavorazioneKeyDTO order, string codCmac, string? causale)
{
return SaveMachineOrderEvent(order, codCmac, MachineStatusEnum.MARCIA.ToEventoString(),
string.IsNullOrEmpty(causale) ? MachineStatusEnum.MARCIA.ToDescrizioneEventoString() : causale);
}
public DtbOrdt StopMachineOnOrder(OrdineLavorazioneKeyDTO order, string codCmac, string? causale)
{
return SaveMachineOrderEvent(order, codCmac, MachineStatusEnum.STOP.ToEventoString(),
string.IsNullOrEmpty(causale) ? MachineStatusEnum.STOP.ToDescrizioneEventoString() : causale);
}
public DtbOrdt StopMachineOnOrder(OrdineLavorazioneKeyDTO order, string codCmac, string? causale)
{
return SaveMachineOrderEvent(order, codCmac, MachineStatusEnum.STOP.ToEventoString(),
string.IsNullOrEmpty(causale) ? MachineStatusEnum.STOP.ToDescrizioneEventoString() : causale);
}
public DtbOrdt SaveMachineOrderEvent(OrdineLavorazioneKeyDTO order, string codCmac, string evento, string causale)
{
var model = new MachineOrderEventDTO()
{
Causale = causale,
CodCmac = codCmac,
Evento = evento,
DataOrd = order.DataOrd,
NumOrd = order.NumOrd,
Gestione = order.Gestione
};
public DtbOrdt SaveMachineOrderEvent(OrdineLavorazioneKeyDTO order, string codCmac, string evento, string causale)
{
var model = new MachineOrderEventDTO()
{
Causale = causale,
CodCmac = codCmac,
Evento = evento,
DataOrd = order.DataOrd,
NumOrd = order.NumOrd,
Gestione = order.Gestione
};
return _restConsumerService.Post<DtbOrdt>($"production/machine/{codCmac}/order/event/save", null, model).Result
.Dto;
}
return restConsumerService.Post<DtbOrdt>($"production/machine/{codCmac}/order/event/save", null, model).Result
.Dto;
}
public async void RefreshList()
{
try
{
var newList = await _orderService.RetrieveOrdiniLavorazione(true);
if (newList == null) return;
public async void RefreshList()
{
try
{
var newList = await orderService.RetrieveOrdiniLavorazione(true);
if (newList == null) return;
var equals = newList.SequenceEqual(_currentOrders);
var equals = newList.SequenceEqual(_currentOrders);
if (!equals)
{
_currentOrders.Clear();
_currentOrders.AddRange(newList);
if (!equals)
{
_currentOrders.Clear();
_currentOrders.AddRange(newList);
OnOrderListChanged?.Invoke();
}
}
catch (Exception ex)
{
_loggerService.LogError(ex, nameof(OrdersHandlerService));
}
}
OnOrderListChanged?.Invoke();
}
}
catch (Exception ex)
{
loggerService.LogError(ex, nameof(OrdersHandlerService));
}
}
}

View File

@@ -5,27 +5,19 @@ using Integry_Smart_Gateway.Core.Looper;
namespace Integry_Smart_Gateway.Core.Storage.DBMS.DataCleaner;
public class DataCleanerService : IDataCleanerService
public class DataCleanerService(
IStorageDBMSService storageDbmsService,
ILooperService looperService)
: IDataCleanerService
{
private readonly IStorageDBMSService _storageDbmsService;
private readonly ILooperService _looperService;
public DataCleanerService(IStorageDBMSService storageDbmsService,
ILooperService looperService)
public void Init()
{
_storageDbmsService = storageDbmsService;
_looperService = looperService;
}
public void Init()
{
_looperService.Add(Clean, TimeSpan.FromDays(1));
looperService.Add(Clean, TimeSpan.FromDays(1));
}
public async void Clean()
{
var itemsToDelete = _storageDbmsService
var itemsToDelete = storageDbmsService
.AsQueryable<GatewayDataWrapper>()
.Where(x =>
x.TimeStamp < DateTime.Now.AddMonths(-2) ||
@@ -42,7 +34,7 @@ public class DataCleanerService : IDataCleanerService
foreach (var chunk in chunks)
{
await _storageDbmsService.RemoveRangeAsync<GatewayDataWrapper>(chunk);
await storageDbmsService.RemoveRangeAsync<GatewayDataWrapper>(chunk);
}
}
}

View File

@@ -153,50 +153,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - Gramm (SL) Base", "IS
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Rosso Gargano", "Rosso Gargano", "{45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (Prod) Base", "ISG - RossoGargano (Prod) Base\ISG - RossoGargano (Prod) Base.csproj", "{07EF0422-0D0B-42F7-88BA-8614B8B29222}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (E01)", "ISG - RossoGargano (E01)\ISG - RossoGargano (E01).csproj", "{6C0D016D-3C9A-44D2-A382-8BC1C5A363F8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (E02)", "ISG - RossoGargano (E02)\ISG - RossoGargano (E02).csproj", "{9B85BA46-BEEC-4C58-8DDE-0F7786FD46A1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (E03)", "ISG - RossoGargano (E03)\ISG - RossoGargano (E03).csproj", "{49D4BCCF-CD60-42E2-9626-543EB275A59B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (E04)", "ISG - RossoGargano (E04)\ISG - RossoGargano (E04).csproj", "{6548A7FD-DC01-468D-AD87-4A0943F25510}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (E05)", "ISG - RossoGargano (E05)\ISG - RossoGargano (E05).csproj", "{673F2448-B6D9-4646-9F7A-4FE590ACBE37}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (E06)", "ISG - RossoGargano (E06)\ISG - RossoGargano (E06).csproj", "{0FDAE312-4873-4B99-B8DA-303632E5AE3C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (E07)", "ISG - RossoGargano (E07)\ISG - RossoGargano (E07).csproj", "{42F2C924-A855-4BED-85F1-4D66F5F0AC74}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (E08)", "ISG - RossoGargano (E08)\ISG - RossoGargano (E08).csproj", "{681E90A8-5384-436D-8A55-5835DD095798}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (E09)", "ISG - RossoGargano (E09)\ISG - RossoGargano (E09).csproj", "{17C897AE-5B86-4A24-BE2F-B24BEB344244}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (E10)", "ISG - RossoGargano (E10)\ISG - RossoGargano (E10).csproj", "{E19FEE58-F259-41F6-8119-0D2D669B5196}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (B01)", "ISG - RossoGargano (B01)\ISG - RossoGargano (B01).csproj", "{B0E13D28-64BB-4334-993F-B01DD504BD21}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (B02)", "ISG - RossoGargano (B02)\ISG - RossoGargano (B02).csproj", "{2AC80313-3520-4590-98D3-5C28C5D1358F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (B03)", "ISG - RossoGargano (B03)\ISG - RossoGargano (B03).csproj", "{5DDC9DF2-552B-4613-AA1C-E8D00258B626}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (B04)", "ISG - RossoGargano (B04)\ISG - RossoGargano (B04).csproj", "{4E97E875-5144-4072-834D-3FB3A91864E3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (B05)", "ISG - RossoGargano (B05)\ISG - RossoGargano (B05).csproj", "{77810C00-66BC-4C92-8132-8DEE5E7C451A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (B06)", "ISG - RossoGargano (B06)\ISG - RossoGargano (B06).csproj", "{3D638FD6-9F45-49B4-B550-CD3DBB612FEA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (B07)", "ISG - RossoGargano (B07)\ISG - RossoGargano (B07).csproj", "{AA3EBA09-8C6A-473C-B20F-248479B450AE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (A01)", "ISG - RossoGargano (A01)\ISG - RossoGargano (A01).csproj", "{5C912C54-B70E-450F-A446-FF1A4B64E32D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (A02)", "ISG - RossoGargano (A02)\ISG - RossoGargano (A02).csproj", "{2348F3F7-BA6A-4B02-94C7-C18284E7929C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (A03)", "ISG - RossoGargano (A03)\ISG - RossoGargano (A03).csproj", "{287CE8F6-B30B-4BAC-8BCB-79DEA4EFAFEB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ISG - RossoGargano (EA)", "ISG - RossoGargano (EA)\ISG - RossoGargano (EA).csproj", "{FA46FB57-61D2-4CA1-96AF-7F77B13C2038}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Connector - Biolevante (Eurofork)", "Connector - Biolevante (Eurofork)\Connector - Biolevante (Eurofork).csproj", "{35F66009-7D5D-4554-8E4C-D49F51391BB9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ISG - Gramm (L4)", "ISG - Gramm (L4)\ISG - Gramm (L4).csproj", "{49474236-41CE-49C7-A92D-B547C12C2F20}"
@@ -433,94 +389,6 @@ Global
{DE07E77A-A412-4C60-AFF3-FAE14F63BB54}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DE07E77A-A412-4C60-AFF3-FAE14F63BB54}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DE07E77A-A412-4C60-AFF3-FAE14F63BB54}.Release|Any CPU.Build.0 = Release|Any CPU
{07EF0422-0D0B-42F7-88BA-8614B8B29222}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{07EF0422-0D0B-42F7-88BA-8614B8B29222}.Debug|Any CPU.Build.0 = Debug|Any CPU
{07EF0422-0D0B-42F7-88BA-8614B8B29222}.Release|Any CPU.ActiveCfg = Release|Any CPU
{07EF0422-0D0B-42F7-88BA-8614B8B29222}.Release|Any CPU.Build.0 = Release|Any CPU
{6C0D016D-3C9A-44D2-A382-8BC1C5A363F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6C0D016D-3C9A-44D2-A382-8BC1C5A363F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6C0D016D-3C9A-44D2-A382-8BC1C5A363F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6C0D016D-3C9A-44D2-A382-8BC1C5A363F8}.Release|Any CPU.Build.0 = Release|Any CPU
{9B85BA46-BEEC-4C58-8DDE-0F7786FD46A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9B85BA46-BEEC-4C58-8DDE-0F7786FD46A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9B85BA46-BEEC-4C58-8DDE-0F7786FD46A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9B85BA46-BEEC-4C58-8DDE-0F7786FD46A1}.Release|Any CPU.Build.0 = Release|Any CPU
{49D4BCCF-CD60-42E2-9626-543EB275A59B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{49D4BCCF-CD60-42E2-9626-543EB275A59B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{49D4BCCF-CD60-42E2-9626-543EB275A59B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{49D4BCCF-CD60-42E2-9626-543EB275A59B}.Release|Any CPU.Build.0 = Release|Any CPU
{6548A7FD-DC01-468D-AD87-4A0943F25510}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6548A7FD-DC01-468D-AD87-4A0943F25510}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6548A7FD-DC01-468D-AD87-4A0943F25510}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6548A7FD-DC01-468D-AD87-4A0943F25510}.Release|Any CPU.Build.0 = Release|Any CPU
{673F2448-B6D9-4646-9F7A-4FE590ACBE37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{673F2448-B6D9-4646-9F7A-4FE590ACBE37}.Debug|Any CPU.Build.0 = Debug|Any CPU
{673F2448-B6D9-4646-9F7A-4FE590ACBE37}.Release|Any CPU.ActiveCfg = Release|Any CPU
{673F2448-B6D9-4646-9F7A-4FE590ACBE37}.Release|Any CPU.Build.0 = Release|Any CPU
{0FDAE312-4873-4B99-B8DA-303632E5AE3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0FDAE312-4873-4B99-B8DA-303632E5AE3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0FDAE312-4873-4B99-B8DA-303632E5AE3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0FDAE312-4873-4B99-B8DA-303632E5AE3C}.Release|Any CPU.Build.0 = Release|Any CPU
{42F2C924-A855-4BED-85F1-4D66F5F0AC74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{42F2C924-A855-4BED-85F1-4D66F5F0AC74}.Debug|Any CPU.Build.0 = Debug|Any CPU
{42F2C924-A855-4BED-85F1-4D66F5F0AC74}.Release|Any CPU.ActiveCfg = Release|Any CPU
{42F2C924-A855-4BED-85F1-4D66F5F0AC74}.Release|Any CPU.Build.0 = Release|Any CPU
{681E90A8-5384-436D-8A55-5835DD095798}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{681E90A8-5384-436D-8A55-5835DD095798}.Debug|Any CPU.Build.0 = Debug|Any CPU
{681E90A8-5384-436D-8A55-5835DD095798}.Release|Any CPU.ActiveCfg = Release|Any CPU
{681E90A8-5384-436D-8A55-5835DD095798}.Release|Any CPU.Build.0 = Release|Any CPU
{17C897AE-5B86-4A24-BE2F-B24BEB344244}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{17C897AE-5B86-4A24-BE2F-B24BEB344244}.Debug|Any CPU.Build.0 = Debug|Any CPU
{17C897AE-5B86-4A24-BE2F-B24BEB344244}.Release|Any CPU.ActiveCfg = Release|Any CPU
{17C897AE-5B86-4A24-BE2F-B24BEB344244}.Release|Any CPU.Build.0 = Release|Any CPU
{E19FEE58-F259-41F6-8119-0D2D669B5196}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E19FEE58-F259-41F6-8119-0D2D669B5196}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E19FEE58-F259-41F6-8119-0D2D669B5196}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E19FEE58-F259-41F6-8119-0D2D669B5196}.Release|Any CPU.Build.0 = Release|Any CPU
{B0E13D28-64BB-4334-993F-B01DD504BD21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B0E13D28-64BB-4334-993F-B01DD504BD21}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B0E13D28-64BB-4334-993F-B01DD504BD21}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B0E13D28-64BB-4334-993F-B01DD504BD21}.Release|Any CPU.Build.0 = Release|Any CPU
{2AC80313-3520-4590-98D3-5C28C5D1358F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2AC80313-3520-4590-98D3-5C28C5D1358F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2AC80313-3520-4590-98D3-5C28C5D1358F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2AC80313-3520-4590-98D3-5C28C5D1358F}.Release|Any CPU.Build.0 = Release|Any CPU
{5DDC9DF2-552B-4613-AA1C-E8D00258B626}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5DDC9DF2-552B-4613-AA1C-E8D00258B626}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5DDC9DF2-552B-4613-AA1C-E8D00258B626}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5DDC9DF2-552B-4613-AA1C-E8D00258B626}.Release|Any CPU.Build.0 = Release|Any CPU
{4E97E875-5144-4072-834D-3FB3A91864E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4E97E875-5144-4072-834D-3FB3A91864E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4E97E875-5144-4072-834D-3FB3A91864E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4E97E875-5144-4072-834D-3FB3A91864E3}.Release|Any CPU.Build.0 = Release|Any CPU
{77810C00-66BC-4C92-8132-8DEE5E7C451A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{77810C00-66BC-4C92-8132-8DEE5E7C451A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{77810C00-66BC-4C92-8132-8DEE5E7C451A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{77810C00-66BC-4C92-8132-8DEE5E7C451A}.Release|Any CPU.Build.0 = Release|Any CPU
{3D638FD6-9F45-49B4-B550-CD3DBB612FEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3D638FD6-9F45-49B4-B550-CD3DBB612FEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3D638FD6-9F45-49B4-B550-CD3DBB612FEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3D638FD6-9F45-49B4-B550-CD3DBB612FEA}.Release|Any CPU.Build.0 = Release|Any CPU
{AA3EBA09-8C6A-473C-B20F-248479B450AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AA3EBA09-8C6A-473C-B20F-248479B450AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA3EBA09-8C6A-473C-B20F-248479B450AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AA3EBA09-8C6A-473C-B20F-248479B450AE}.Release|Any CPU.Build.0 = Release|Any CPU
{5C912C54-B70E-450F-A446-FF1A4B64E32D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5C912C54-B70E-450F-A446-FF1A4B64E32D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5C912C54-B70E-450F-A446-FF1A4B64E32D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5C912C54-B70E-450F-A446-FF1A4B64E32D}.Release|Any CPU.Build.0 = Release|Any CPU
{2348F3F7-BA6A-4B02-94C7-C18284E7929C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2348F3F7-BA6A-4B02-94C7-C18284E7929C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2348F3F7-BA6A-4B02-94C7-C18284E7929C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2348F3F7-BA6A-4B02-94C7-C18284E7929C}.Release|Any CPU.Build.0 = Release|Any CPU
{287CE8F6-B30B-4BAC-8BCB-79DEA4EFAFEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{287CE8F6-B30B-4BAC-8BCB-79DEA4EFAFEB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{287CE8F6-B30B-4BAC-8BCB-79DEA4EFAFEB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{287CE8F6-B30B-4BAC-8BCB-79DEA4EFAFEB}.Release|Any CPU.Build.0 = Release|Any CPU
{FA46FB57-61D2-4CA1-96AF-7F77B13C2038}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FA46FB57-61D2-4CA1-96AF-7F77B13C2038}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FA46FB57-61D2-4CA1-96AF-7F77B13C2038}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FA46FB57-61D2-4CA1-96AF-7F77B13C2038}.Release|Any CPU.Build.0 = Release|Any CPU
{35F66009-7D5D-4554-8E4C-D49F51391BB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{35F66009-7D5D-4554-8E4C-D49F51391BB9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{35F66009-7D5D-4554-8E4C-D49F51391BB9}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -600,28 +468,6 @@ Global
{947D5525-8929-498A-A3AF-1B8DA27425A0} = {C557B43E-5306-4C48-B8BB-F0158AEE3DBF}
{C602A3FC-394F-47F2-8B16-9442723AA3D2} = {C557B43E-5306-4C48-B8BB-F0158AEE3DBF}
{DE07E77A-A412-4C60-AFF3-FAE14F63BB54} = {D43BF479-C9E8-4C0A-82FE-A897653BDA6B}
{07EF0422-0D0B-42F7-88BA-8614B8B29222} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{6C0D016D-3C9A-44D2-A382-8BC1C5A363F8} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{9B85BA46-BEEC-4C58-8DDE-0F7786FD46A1} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{49D4BCCF-CD60-42E2-9626-543EB275A59B} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{6548A7FD-DC01-468D-AD87-4A0943F25510} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{673F2448-B6D9-4646-9F7A-4FE590ACBE37} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{0FDAE312-4873-4B99-B8DA-303632E5AE3C} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{42F2C924-A855-4BED-85F1-4D66F5F0AC74} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{681E90A8-5384-436D-8A55-5835DD095798} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{17C897AE-5B86-4A24-BE2F-B24BEB344244} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{E19FEE58-F259-41F6-8119-0D2D669B5196} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{B0E13D28-64BB-4334-993F-B01DD504BD21} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{2AC80313-3520-4590-98D3-5C28C5D1358F} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{5DDC9DF2-552B-4613-AA1C-E8D00258B626} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{4E97E875-5144-4072-834D-3FB3A91864E3} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{77810C00-66BC-4C92-8132-8DEE5E7C451A} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{3D638FD6-9F45-49B4-B550-CD3DBB612FEA} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{AA3EBA09-8C6A-473C-B20F-248479B450AE} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{5C912C54-B70E-450F-A446-FF1A4B64E32D} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{2348F3F7-BA6A-4B02-94C7-C18284E7929C} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{287CE8F6-B30B-4BAC-8BCB-79DEA4EFAFEB} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{FA46FB57-61D2-4CA1-96AF-7F77B13C2038} = {45AD7AA3-ABF5-47F0-8256-9CEC4CA90516}
{35F66009-7D5D-4554-8E4C-D49F51391BB9} = {3CDAA648-8463-42D4-A09B-AB6AA309AAC4}
{49474236-41CE-49C7-A92D-B547C12C2F20} = {D43BF479-C9E8-4C0A-82FE-A897653BDA6B}
{9FB6995F-68F3-4BE8-B2E9-2C7CB45FDE01} = {7F560679-5A72-40A5-9186-A44C4914C650}