-- dbo.ep_HDCDZApi_ZpracujPrijataData CREATE PROCEDURE dbo.ep_HDCDZApi_ZpracujPrijataData @idJson INT=NULL AS -- HD Consulting Strakonice, T. Buzin -- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! SET NOCOUNT ON DECLARE @tranPred INT, @cnt INT, @datPorizeni DATETIME, @errMsg NVARCHAR(500), @bChyba BIT, @iChyba INT, @debugXml XML, @aktDatum DATETIME, @logTyp TINYINT, @logText NVARCHAR(500), @logInt INT, @logStr NVARCHAR(255), @log4Mail BIT=0 DECLARE @jsonString NVARCHAR(MAX), @jsonString2 NVARCHAR(MAX), @typDokum NVARCHAR(50), @subtypDokum NVARCHAR(50), @akce NVARCHAR(50), @akceSource NVARCHAR(50), @datumText NVARCHAR(25) DECLARE @TabPHObj TABLE (ID INT NOT NULL, IDPHIdent INT) -- vytvor pomocnou tabulku /* IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL DROP TABLE #TabJSONData CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max)) */ DROP TABLE IF EXISTS #TabJSONData CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max)) IF (@idJson IS NULL) DECLARE j CURSOR LOCAL FOR SELECT ID, JSONData, DatPorizeni FROM dbo._hdc_ph_PrijataJsonData WHERE DatZpracovani IS NULL AND ISNULL(JSONData, N'')<>N'' ORDER BY DatPorizeni ASC ELSE DECLARE j CURSOR LOCAL FOR SELECT ID, JSONData, DatPorizeni FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson OPEN j WHILE (1=1) BEGIN FETCH NEXT FROM j INTO @idJson, @jsonString, @datPorizeni IF (@@FETCH_STATUS<>0) BREAK IF (ISJSON(@jsonString)=0) CONTINUE BEGIN TRY SET @tranPred = @@TRANCOUNT IF (@tranPred=0) BEGIN TRAN SET @datumText = NULL -- smaz pomocnou tabulku DELETE FROM #TabJSONData INSERT #TabJSONData (doc) SELECT @jsonString SELECT TOP(1) @akce = JSON_VALUE(doc, '$.action'), @akceSource = JSON_VALUE(doc, '$.source'), @datumText = JSON_VALUE(doc, '$.actionAt') FROM #TabJSONData SET @akce = ISNULL(@akce, N'') SET @akceSource = ISNULL(@akceSource, N'') SET @datumText = ISNULL(@datumText, N'') IF (@datumText<>N'') SET @datPorizeni = CONVERT(datetime, @datumText, 120) IF (@akce<>N'') UPDATE dbo._hdc_ph_PrijataJsonData SET Akce=@akce WHERE ID=@idJson AND Akce IS NULL IF ISNULL( (SELECT COUNT(ID) FROM dbo._hdc_ph_Log WHERE IdJsonData=@idJson), 0)>=3 BEGIN IF EXISTS(SELECT 1 FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson AND ISNULL(PosledniChyba,N'')=N'') UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=(SELECT TOP(1) LogText FROM dbo._hdc_ph_Log WHERE IdJsonData=@idJson ORDER BY DatPorizeni DESC) WHERE ID=@idJson CONTINUE END SET @logTyp = 0 SET @logInt = NULL SET @logStr = N'' SET @log4Mail = 0 SET @logText = N'' -- BEGIN: TLACITKO IF (@akce=N'click' AND @akceSource='button') BEGIN SET @akce = N'' UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE() WHERE ID=@idJson END -- akce: vyroba_zacatek -- END: TLACITKO IF (@tranPred=0) AND (@@TRANCOUNT>0) COMMIT TRAN END TRY BEGIN CATCH IF (@tranPred=0) AND (@@TRANCOUNT>0) ROLLBACK TRAN SET @errMsg = ERROR_MESSAGE() UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=@errMsg WHERE ID=@idJson IF (@logTyp>0) INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue, StrValue, IdJsonData, ForMail) SELECT @logTyp, ISNULL(@logText, N'') + NCHAR(13)+NCHAR(10) + @errMsg, @logInt, @logStr, @idJson, @log4Mail ELSE INSERT dbo._hdc_ph_Log (Typ, LogText, IdJsonData, ForMail) SELECT 1, N'Chyba zpracovani PrijataJsonData: ' + @errMsg, @idJson, 1 END CATCH SET @logTyp=0 END CLOSE j DEALLOCATE j -- pro jistotu IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL DROP TABLE #TabJSONData