Files
HDCApi/_custom/Gornicky/sql/ep_HDCDZApi_ZpracujPrijataData.sql
2025-05-21 21:14:32 +02:00

165 lines
4.7 KiB
Transact-SQL

-- dbo.ep_HDCDZApi_ZpracujPrijataData
CREATE PROCEDURE dbo.ep_HDCDZApi_ZpracujPrijataData
@idJson INT=NULL
AS
SET NOCOUNT ON
-- ! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !
IF OBJECT_ID(N'dbo.Tabx_HDC_API_DigitalizaceSoubory', N'U') IS NULL
BEGIN
IF OBJECT_ID(N'dbo._hdc_ph_Log', N'U') IS NOT NULL
INSERT dbo._hdc_ph_Log (LogText) SELECT N'Neexistuje tabulka Tabx_HDC_API_DigitalizaceSoubory'
RETURN
END
DECLARE
@errMsg NVARCHAR(500)=N'',
@errProc NVARCHAR(100),
@tranPred INT,
@iChyba INT,
@bChyba BIT,
@iTemp INT,
@debugXML XML,
@idUziv INT
DECLARE
@jsonString NVARCHAR(max),
@docsJson NVARCHAR(max),
@soubor NVARCHAR(100),
@dataZoneId INT,
@docNum INT,
@ordNum NVARCHAR(15), -- zakazka,
@docUrl NVARCHAR(255),
@jeNacteno BIT,
@jeKpl BIT,
@pgTotal INT,
@pgRead INT,
@cisZam INT
DROP TABLE IF EXISTS #TabJSONData
CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max) )
IF (@idJson IS NOT NULL)
DECLARE j CURSOR LOCAL FOR
SELECT ID, JsonData FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson
ELSE
DECLARE j CURSOR LOCAL FOR
SELECT ID, JsonData
FROM dbo._hdc_ph_PrijataJsonData
WHERE Blokovano=0
AND DatZpracovani IS NULL
AND ISNULL(JSONData,N'')<>N''
ORDER BY DatPorizeni
OPEN j
WHILE (1=1)
BEGIN
FETCH NEXT FROM j INTO @idJson, @jsonString
IF (@@FETCH_STATUS<>0) BREAK
IF (ISJSON(@jsonString)=0)
BEGIN
UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Neplatna JSON data' WHERE ID=@idJson
END
BEGIN TRY
SET @tranPred=@@TRANCOUNT
IF (@tranPred=0)
BEGIN TRAN
-- smaz pomocnou tabulku
DELETE FROM #TabJSONData
INSERT #TabJSONData (doc) SELECT @jsonString
UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=NULL, CisloZam=@cisZam, Blokovano=1 WHERE ID=@idJson
SELECT @dataZoneId=JSON_VALUE(d.doc, '$.datazoneId'),
@soubor=JSON_VALUE(d.doc, '$.file'),
@docsJson = d2.documents
FROM #TabJSONData d
CROSS APPLY OPENJSON(d.doc, N'$')
WITH ([documents] NVARCHAR(max) AS JSON) AS d2
SET @soubor=ISNULL(@soubor, N'')
IF (@soubor<>N'')
UPDATE dbo._hdc_ph_PrijataJsonData SET UzivIdent=@soubor WHERE ID=@idJson
IF (@docsJson<>N'')
BEGIN
IF (ISJSON(@docsJson)=1)
BEGIN
DELETE FROM #TabJSONData
INSERT #TabJSONData (doc) SELECT @docsJson
DECLARE docs CURSOR LOCAL FOR
SELECT detail.idDoklad, detail.cisloZakazky, ISNULL(detail.jeNacteno,0), ISNULL(detail.jeKpl,0),
ISNULL(detail.pgCount,0), ISNULL(detail.pgRead,0), detail.docUrl
FROM #TabJSONData d
CROSS APPLY OPENJSON (d.doc, N'$')
WITH (idDoklad INT '$.documentNumber',
cisloZakazky NVARCHAR(15) '$.orderNumber',
jeNacteno BIT '$.isNotFound',
jeKpl BIT '$.isComplete',
pgCount INT '$.pageCountTotal',
pgRead INT '$.pageCountRead',
docURL NVARCHAR(255) '$.documentUrl') AS detail
OPEN docs
WHILE (1=1)
BEGIN
FETCH NEXT FROM docs INTO @docNum, @ordNum, @jeNacteno, @jeKpl, @pgTotal, @pgRead, @docUrl
IF (@@FETCH_STATUS<>0) BREAK
IF (CHARINDEX(N'NotFound', @docUrl)=0)
BEGIN
IF NOT EXISTS (SELECT 1 FROM dbo.Tabx_HDC_API_DigitalizaceSoubory WHERE DocNumber=@docNum AND OrderNumber=@ordNum AND DocURL=@docUrl)
INSERT dbo.Tabx_HDC_API_DigitalizaceSoubory (IDJsonData, IDDZDoc, DocNumber, OrderNumber, IsComplete, IsNotFound, PagesTotal, PagesRead, DocURL, IDDokladOZ)
SELECT @idJson, @dataZoneId, @docNum, @ordNum, @jeKpl, @jeNacteno, @pgTotal, @pgRead, @docUrl, @docNum
END
ELSE
BEGIN
IF NOT EXISTS (SELECT 1 FROM dbo.Tabx_HDC_API_DigitalizaceSoubory WHERE DocURL=@docUrl)
INSERT dbo.Tabx_HDC_API_DigitalizaceSoubory (IDJsonData, IDDZDoc, IsComplete, IsNotFound, PagesTotal, PagesRead, DocURL, IDDokladOZ)
SELECT @idJson, @dataZoneId, @jeKpl, @jeNacteno, @pgTotal, @pgRead, @docUrl, @docNum
END
END
CLOSE docs
DEALLOCATE docs
END -- ISJSON(@jsonString)=1
END -- @docsJson<>''
UPDATE dbo._hdc_ph_PrijataJsonData SET Blokovano=0, DatZpracovani=GETDATE() WHERE ID=@idJson
IF (@tranPred=0) AND (@@TRANCOUNT>0)
COMMIT TRAN
END TRY
BEGIN CATCH
SET @errMsg = ERROR_MESSAGE()
SET @errProc = ERROR_PROCEDURE()
IF (@tranPred=0) AND (@@TRANCOUNT>0)
ROLLBACK TRAN
UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson
END CATCH
END
CLOSE j
DEALLOCATE j
-- cisteni
DROP TABLE IF EXISTS #TabJSONData