Files
IntegrySmartIndustry/Integry Smart Gateway/Core/RestConsumer/Controller/WarehouseControllerService.cs

382 lines
13 KiB
C#

using Integry_Smart_Gateway.Core.RestConsumer.Entity;
using Integry_Smart_Gateway.Core.RestConsumer.Entity.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Integry_Smart_Gateway.Core.Alert.Model;
using Integry_Smart_Gateway.Core.Logger;
using Integry_Smart_Gateway.Core.Orders.Model;
using Integry_Smart_Gateway.Core.RestConsumer.Entity.Model.DTO;
using Integry_Smart_Gateway.Core.RestConsumer.Model;
using Integry_Smart_Gateway.Core.Settings;
namespace Integry_Smart_Gateway.Core.RestConsumer.Controller;
public class WarehouseControllerService(
ISettingsService settingsService,
ILoggerService loggerService,
IEntityService entityService,
IRestConsumerService restConsumerService)
: IWarehouseControllerService
{
public async Task<MtbColt?> CreateUdcProduzione(CreateUdcProduzioneRequest createUdcProduzioneRequest)
{
BaseRESTResponse<MtbColt>? response = null;
try
{
response = await restConsumerService
.Post<MtbColt>("mes_v2/createULLavorazione", data: createUdcProduzioneRequest);
}
catch (System.Exception ex)
{
loggerService.LogError(ex, nameof(WarehouseControllerService));
}
var responseMtbColt = response?.Entity ?? response?.Dto;
return responseMtbColt;
}
public async Task<MtbColt?> CreateEmptyMtbColt(OrdineLavorazioneDTO ordineLavorazione)
{
IDictionary<string, object> queryParams = new Dictionary<string, object>
{
{ "codJfas", settingsService.GetProductionConfig().CodJfas },
{ "dataOrd", ordineLavorazione.DataOrd },
{ "numOrd", ordineLavorazione.NumOrd },
{ "gestione", ordineLavorazione.Gestione },
{ "codMdep", ordineLavorazione.CodMdep },
{ "codAnag", "F0000" }
};
MtbColt? responseMtbColt = null;
try
{
responseMtbColt = (await restConsumerService.Get<MtbColt>("mes_v2/createFakeMtbColtToConfirm", queryParams))
.Dto;
}
catch (System.Exception ex)
{
loggerService.LogError(ex, nameof(WarehouseControllerService));
}
return responseMtbColt;
}
public void SaveCaratteristicaPartita<T>(string codMart, string partitaMag, string caratName, T value,
DateTime? dataRilevazione = null)
{
SaveCaratteristicaPartita(codMart, partitaMag, caratName, null, value, dataRilevazione);
}
public void SaveCaratteristicaPartita<T>(string codMart, string partitaMag, string caratName, string fonte,
T value)
{
SaveCaratteristicaPartita(codMart, partitaMag, caratName, fonte, value, null);
}
public void SaveCaratteristicaPartita<T>(string codMart, string partitaMag, string caratName, string fonte,
T value, DateTime? dataRilevazione = null)
{
var mtbPartitaMag = new MtbPartitaMag
{
Operation = EntityBase.OperationType.NO_OP,
codMart = codMart,
partitaMag = partitaMag,
mtbPartitaMagCarat = new[]
{
new MtbPartitaMagCarat()
{
Operation = EntityBase.OperationType.INSERT_OR_UPDATE,
carat = caratName,
valCarat = value.ToString(),
fonte = fonte,
DataRilevazione = dataRilevazione ?? DateTime.Now
}
}
};
try
{
entityService.ProcessEntity<MtbPartitaMag>(mtbPartitaMag);
}
catch (System.Exception ex)
{
loggerService.LogError(ex, nameof(WarehouseControllerService));
}
}
public void RemoveCaratteristicaPartita(string codMart, string partitaMag, string caratName, string fonte)
{
var caratsToDelete = restConsumerService.ProcessSql<List<MtbPartitaMagCarat>>(
@$"SELECT cod_mart, partita_mag, carat, id_riga
FROM mtb_partita_mag_carat
WHERE cod_mart = '{codMart}'
AND partita_mag = '{partitaMag}'
AND carat = '{caratName}'
AND fonte = '{fonte}'")
.Result;
if (caratsToDelete != null && caratsToDelete.Any())
{
foreach (var mtbPartitaMagCarat in caratsToDelete)
{
mtbPartitaMagCarat.Operation = EntityBase.OperationType.DELETE;
}
entityService.ProcessEntityList<MtbPartitaMagCarat>(caratsToDelete.Select(x => (IEntity)x).ToList(),
false);
}
}
public MtbPartitaMagCarat? RetrieveCaratteristicaPartita(string codMart, string partitaMag, string caratName)
{
var carats = restConsumerService.ProcessSql<List<MtbPartitaMagCarat>>(
@$"SELECT *
FROM mtb_partita_mag_carat
WHERE cod_mart = '{codMart}'
AND partita_mag = '{partitaMag}'
AND carat = '{caratName}'")
.Result;
if (carats != null && carats.Any())
return carats[0];
return null;
}
public MtbColt CaricaMateriaPrimaInPosizione(string posizione, string codMdep, string codAnag, string codMart,
string partitaMag, float quantity, string gestioneOrd, DateTime dataOrd, int numOrd, int rigaOrd)
{
var createUdcRequest = new CreateUdcRequest()
{
CodMdep = codMdep,
CodJfas = settingsService.GetProductionConfig().CodJfas,
CodAnag = codAnag,
Posizione = posizione,
Ordini =
[
new CreateUdcRequestOrder()
{
Gestione = gestioneOrd,
DataOrd = dataOrd,
NumOrd = numOrd,
}
],
UdcRows =
[
new InsertUdcRowRequest()
{
DataOrd = dataOrd,
NumOrd = numOrd,
RigaOrd = rigaOrd,
CodMart = codMart,
QtaTot = quantity * 100,
PartitaMag = partitaMag,
}
]
};
var response = restConsumerService
.Post<CreateUdcResponse>(
"wms/accettazione/createUDCWithRows",
null, createUdcRequest)
.Result
.Dto;
return response.MtbColt;
}
public MtbColt? CaricaMateriaPrimaInSilos(string posizione, string codMdep, string codAnag, string codMart,
string partitaMag, float quantity, DateTime dataOrd, int numOrd, int rigaOrd)
{
var mtbColt = new MtbColt
{
Operation = EntityBase.OperationType.INSERT,
Gestione = "A",
SerCollo = "/",
CodMdep = codMdep,
CodJfas = settingsService.GetProductionConfig().CodJfas,
CodAnag = codAnag,
Posizione = posizione,
DataOrd = dataOrd,
NumOrd = numOrd
};
var mtbColr = new MtbColr
{
//codJcom = ordineLavorazione.codJcom,
DataOrd = dataOrd,
NumOrd = numOrd,
RigaOrd = rigaOrd,
CodMart = codMart,
QtaCol = quantity,
PartitaMag = partitaMag
};
mtbColt.MtbColr.Add(mtbColr);
try
{
MtbColt response = restConsumerService
.Post<MtbColt>(
"wms/accettazione/accettazioneMerceSilos",
null, mtbColt)
.Result
.Dto;
return response;
}
catch (System.Exception ex)
{
loggerService.LogError(ex, nameof(WarehouseControllerService));
return null;
}
}
public IList<AlertDTO> SpostaArtDaPosizioneInPosizione(string codMart, string partitaMag, string codMdep,
string posizioneSource, string posizioneDest, double qta, double qtaCnf, double numCnf)
{
var spostaArtDaPosizioneInPosizione = new SpostaArtDaPosizioneInPosizioneRequestDTO()
{
codMart = codMart,
partitaMag = partitaMag,
codMdep = codMdep,
posizioneSource = posizioneSource,
posizioneDest = posizioneDest,
numCnfToMove = numCnf,
qtaCnfToMove = qtaCnf,
qtaToMove = qta
};
List<AlertDTO> alerts = new List<AlertDTO>();
try
{
IList<dynamic> responses = restConsumerService
.Post<IList<dynamic>>(
"wms/spostaArtDaPosizioneInPosizione",
null, spostaArtDaPosizioneInPosizione)
.Result
.Dto;
if (responses != null)
{
foreach (var response in responses)
{
AlertLevelEnum? level = null;
switch ((string)response.tipo)
{
case "INFO":
level = AlertLevelEnum.INFO;
break;
case "WARNING":
level = AlertLevelEnum.WARNING;
break;
case "ERROR":
level = AlertLevelEnum.DANGER;
break;
}
alerts.Add(new AlertDTO()
{
AlertLevel = (AlertLevelEnum)level,
Title = "Scarico materia prima",
Message = response.message
});
}
}
}
catch (System.Exception ex)
{
loggerService.LogError(ex, nameof(WarehouseControllerService));
}
return alerts;
}
public List<AlertDTO> ScaricaMateriaPrimaDaPosizione(string? codJfas, string codMdep,
bool useRapportoMatPrima,
IList<ScaricoMateriaPrimaDTO> scaricoMateriaPrimaDtos)
{
IDictionary<string, object> queryParams = new Dictionary<string, object>();
if (!string.IsNullOrEmpty(codJfas)) queryParams.Add("codJfas", codJfas);
queryParams.Add("codMdep", codMdep);
queryParams.Add("useRapportoMatPrima", useRapportoMatPrima);
List<AlertDTO> alerts = new List<AlertDTO>();
try
{
IList<dynamic> responses = restConsumerService
.Post<IList<dynamic>>(
"scaricoMateriaPrimaDaPosizione",
queryParams, scaricoMateriaPrimaDtos)
.Result
.Dto;
if (responses != null)
{
foreach (var response in responses)
{
AlertLevelEnum? level = null;
switch ((string)response.tipo)
{
case "INFO":
level = AlertLevelEnum.INFO;
break;
case "WARNING":
level = AlertLevelEnum.WARNING;
break;
case "ERROR":
level = AlertLevelEnum.DANGER;
break;
}
alerts.Add(new AlertDTO()
{
AlertLevel = (AlertLevelEnum)level,
Title = "Scarico materia prima",
Message = response.message
});
}
}
}
catch (System.Exception ex)
{
loggerService.LogError(ex, nameof(WarehouseControllerService));
}
return alerts;
}
public void CreaCaricoProdottoFinito(string codJfas, string codMdep,
OrdineLavorazioneDTO ordineLavorazioneDto,
float qta)
{
IDictionary<string, object> queryParams = new Dictionary<string, object>();
queryParams.Add("codJfas", codJfas);
queryParams.Add("codMdep", codMdep);
queryParams.Add("dataOrd", ordineLavorazioneDto.DataOrd);
queryParams.Add("numOrd", ordineLavorazioneDto.NumOrd);
queryParams.Add("gestione", ordineLavorazioneDto.Gestione);
queryParams.Add("qta", qta.ToString().Replace(",", "."));
try
{
restConsumerService.Get<object>("mes_v2/createColloCaricoProdottoFinito", queryParams);
}
catch (System.Exception ex)
{
loggerService.LogError(ex, nameof(WarehouseControllerService));
}
}
}