diff --git a/EgwProxy.SqlDb.Test/SqlFromDebug/GetMachineProdData.sql b/EgwProxy.SqlDb.Test/SqlFromDebug/GetMachineProdData.sql new file mode 100644 index 00000000..5217969a --- /dev/null +++ b/EgwProxy.SqlDb.Test/SqlFromDebug/GetMachineProdData.sql @@ -0,0 +1,109 @@ +ALTER PROCEDURE [dbo].GetMachineProdData +AS +BEGIN + -- SET NOCOUNT ON added to prevent extra result sets from + -- interfering with SELECT statements. + SET NOCOUNT ON; + + BEGIN tran + + -- dichiarazioni variabili x recupero dati + DECLARE @LastIdx INT = 0 + DECLARE @NewIdx INT = 0 + + -- recupero valore ultima riga stato processata... + SELECT @LastIdx = ISNULL(LastIdx,0) + FROM SyncState + WHERE TableName = 'ToMachineProdData' + + -- recupero nuovo MAX idx + SELECT @NewIdx = ISNULL(MAX(ID),0) + FROM syn_M2ERP_PRODORDERS + + -- eseguo SOLO SE ho dati aggiuntivi... + IF(@NewIdx > @LastIdx) + BEGIN + /* -------------------------------------------------- + * Invierò solo VARIAZIONI dei valori + * - CurrentProdOrder (iniziato/concluso) + * - Quantità Produzione + * + * andando ad incrociare ogni record col precedente... + * -------------------------------------------------- */ + + -- processo dati ORDINI + ;WITH cteCurrOrd AS + ( + SELECT ID + ,ProdOrder + ,Targa as IdxMacchina + ,[DateTime] AS DtEvento + ,ProdOrderState + ,ProdQty + FROM syn_M2ERP_PRODORDERS + WHERE ID > @LastIdx AND ID <= @NewIdx + ) + , ctePrevOrd AS + ( + SELECT ID + ,ProdOrder + ,Targa as IdxMacchina + ,[DateTime] AS DtEvento + ,ProdOrderState + ,ProdQty + FROM syn_M2ERP_PRODORDERS + WHERE ID >= @LastIdx AND ID < @NewIdx + ) + , cteActDec AS + ( + SELECT curr.DtEvento as DtEve + ,curr.IdxMacchina + ,CASE + WHEN curr.ProdOrderState = 1 THEN 'StartOrd' + --WHEN curr.ProdOrderState = 2 THEN 'PauseOrd' + WHEN curr.ProdOrderState = 3 THEN 'EndOrd' + --WHEN curr.ProdOrderState = 6 THEN 'InsOrd' + ELSE 'NONE' + END AS OrdAction + ,CASE + WHEN LEFT(curr.ProdOrder, 4) = 'PODL' THEN REPLACE(curr.ProdOrder,'PODL','') + ELSE 0 END AS IdxPodl + ,CASE + WHEN LEFT(curr.ProdOrder, 3) = 'ODL' THEN REPLACE(curr.ProdOrder,'ODL','') + ELSE 0 END AS IdxOdl + ,curr.ProdOrder as CodComm + ,curr.ProdQty as PzCount + FROM cteCurrOrd curr + INNER JOIN ctePrevOrd prev + ON curr.ID = prev.ID+1 + WHERE (curr.ProdOrder <> prev.ProdOrder) + OR (curr.ProdOrderState <> prev.ProdOrderState) + OR (curr.ProdQty <> prev.ProdQty) + ) + -- lego i valori col precedente x calcolare se siano variati x insert valori + INSERT INTO MachineProdData(DtEve, IdxMacchina, Action, IdxPodl, IdxOdl, CodComm, PzCount) + SELECT DtEve, IdxMacchina, OrdAction, IdxPodl, IdxOdl, CodComm, PzCount + FROM cteActDec + WHERE OrdAction <> 'NONE' + + + -- aggiorno valore indice processato + MERGE SyncState AS tgt + USING (SELECT @NewIdx as LastIdx, 'ToMachineProdData' AS TableName) as src (LastIdx, TableName) + ON (tgt.TableName = src.TableName) + WHEN MATCHED THEN + UPDATE SET LastIdx = src.LastIdx + ,Note = 'UPDATED from ' + CAST(@LastIdx AS NVARCHAR(50)) + ,LastUpdate = GETDATE() + WHEN NOT MATCHED THEN + INSERT (LastIdx, TableName, Note, LastUpdate) + VALUES (src.LastIdx, src.TableName, 'CREATED', GETDATE()); + + END + + COMMIT tran + +END +GO + + diff --git a/EgwProxy.SqlDb.Test/TestSetup.cs b/EgwProxy.SqlDb.Test/TestSetup.cs index 2384bd3f..433851a5 100644 --- a/EgwProxy.SqlDb.Test/TestSetup.cs +++ b/EgwProxy.SqlDb.Test/TestSetup.cs @@ -12,7 +12,7 @@ namespace EgwProxy.SqlDb.Test public string server { get; set; } = ""; public string user { get; set; } = ""; public string password { get; set; } = ""; - public string dbName { get; set; } = "MoonPro_IOB_ISF"; + public string dbName { get; set; } = "MoonPro_IOB_ISF_PAMA"; public List steps { get; set; } }