Рефакторинг пакетов (разделил по направлениям), в ЭИ навёл порядки с точки зрения повторного использования кода, для Алисы дописал алгоритмы поиска, начал расписывать поиск "Заказов потребителей"
This commit is contained in:
parent
29b124d710
commit
bc346574d3
426
db/UDO_PKG_EXS_ALICE.pck
Normal file
426
db/UDO_PKG_EXS_ALICE.pck
Normal file
@ -0,0 +1,426 @@
|
|||||||
|
create or replace package UDO_PKG_EXS_ALICE as
|
||||||
|
|
||||||
|
/* Îáðàáîòêà çàïðîñà íà ïîèñê êîíòðàãåíòà */
|
||||||
|
procedure FIND_AGENT
|
||||||
|
(
|
||||||
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Îáðàáîòêà çàïðîñà íà ïîèñê äîãîâîðà */
|
||||||
|
procedure FIND_CONTRACT
|
||||||
|
(
|
||||||
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Îáðàáîòêà çàïðîñà íà ïîèñê çàêàçà ïîòðåáèòåëÿ */
|
||||||
|
procedure FIND_CONSUMERORD
|
||||||
|
(
|
||||||
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
);
|
||||||
|
|
||||||
|
end;
|
||||||
|
/
|
||||||
|
create or replace package body UDO_PKG_EXS_ALICE as
|
||||||
|
|
||||||
|
/* Êîíñòàíòû - êàòàëîã äëÿ ïîèñêà äàííûõ */
|
||||||
|
SSEARCH_CATALOG_NAME constant ACATALOG.NAME%type := 'Ñåìèíàð 20_12_2018';
|
||||||
|
|
||||||
|
/* Òèï äàííûõ äëÿ êîëëåêöèè øàáëîíîâ âñïîìîãàòåëüíûõ ñëîâ ïîèñêà */
|
||||||
|
type THELPER_PATTERNS is table of varchar2(4000);
|
||||||
|
|
||||||
|
/* Ïðîâåðêà íà ïðèñóòñòâèå ñëîâà â ñïèñêå âñïîìîãàòåëüíûõ */
|
||||||
|
function UTL_HELPER_CHECK
|
||||||
|
(
|
||||||
|
SWORD in varchar2, -- Ïðîâåðÿåìîå ñëîâî
|
||||||
|
HELPER_PATTERNS in THELPER_PATTERNS -- Êîëëåêöèÿ øàáëîíîâ âñïîìîãàòåëüíûõ ñëîâ
|
||||||
|
)
|
||||||
|
return boolean -- Ðåçóëüàòà ïðîâåðêè
|
||||||
|
is
|
||||||
|
BRES boolean; -- Áóôåð äëÿ ðåçóëüòàòà
|
||||||
|
begin
|
||||||
|
/* Èíèöèàëèçèðóåì áóôåð */
|
||||||
|
BRES := false;
|
||||||
|
/* Åñëè êîëëåêöèÿ íå ïóñòà */
|
||||||
|
if ((HELPER_PATTERNS is not null) and (HELPER_PATTERNS.COUNT > 0)) then
|
||||||
|
/* Îáõîäèì å¸ */
|
||||||
|
for I in HELPER_PATTERNS.FIRST .. HELPER_PATTERNS.LAST
|
||||||
|
loop
|
||||||
|
/* Åñëè ñëîâî åñòü â êîëëåêöèè */
|
||||||
|
if (LOWER(SWORD) like LOWER(HELPER_PATTERNS(I))) then
|
||||||
|
/* Âûñòàâèì ôëàã ïðèñóòñòâèÿ è çàâåðøèì ïîèñê */
|
||||||
|
BRES := true;
|
||||||
|
exit;
|
||||||
|
end if;
|
||||||
|
end loop;
|
||||||
|
end if;
|
||||||
|
/* Âîçâðàùàåì îòâåò */
|
||||||
|
return BRES;
|
||||||
|
end UTL_HELPER_CHECK;
|
||||||
|
|
||||||
|
/* Èíèöèàëèçàöèÿ îáùèõ âñïîìîãàòåëüíûõ ïîèñêîâûõ ôðàç */
|
||||||
|
procedure UTL_HELPER_INIT_COMMON
|
||||||
|
(
|
||||||
|
HELPER_PATTERNS in out THELPER_PATTERNS -- Êîëëåêöèÿ øàáëîíîâ âñïîìîãàòåëüíûõ ñëîâ
|
||||||
|
)
|
||||||
|
is
|
||||||
|
begin
|
||||||
|
/* Ñîçäàäèì ïóñòóþ êîëëåêöèþ åñëè íàäî */
|
||||||
|
if (HELPER_PATTERNS is null) then
|
||||||
|
HELPER_PATTERNS := THELPER_PATTERNS();
|
||||||
|
end if;
|
||||||
|
/* Íàïîëíèì å¸ îáùèìè ïîèñêîâûìè âñïîìîãàòåëüíûìè ôðàçàìè */
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ðàññêàæè';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ïðî';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'î';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'îá';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ïî';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ñâåäåíèÿ';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'èíôîðìàöèþ';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'èíôîðìàöèÿ';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'èíôîðìàöèè';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'èíôû';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'èíôó';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'äàé';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'íàðîé';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'çàïðîñè';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'íàéäè';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ñîîáùè';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ïîâåäàé';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ìíå';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ñîñòîÿíè%';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ñòàòóñ%';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'êàê';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'òàì';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ìîé';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'íîìåð%';
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'çà';
|
||||||
|
end UTL_HELPER_INIT_COMMON;
|
||||||
|
|
||||||
|
/* Ïîäãîòîâêà ïîèñêîâîé ôðàçû ê ó÷àñòèþ â âûáîðêå */
|
||||||
|
function UTL_SEARCH_STR_PREPARE
|
||||||
|
(
|
||||||
|
SSEARCH_STR in varchar2, -- Ïîèñêîâàÿ ôðàçà
|
||||||
|
SDELIM in varchar2, -- Ðàçäåëèòåëü ñëîâ â ïîèñêîâîé ôðàçå
|
||||||
|
HELPER_PATTERNS in THELPER_PATTERNS -- Êîëëåêöèÿ øàáëîíîâ âñïîìîãàòåëüíûõ ñëîâ
|
||||||
|
)
|
||||||
|
return varchar2 -- Ïîäãîòîâëåííàÿ ïîèñêîâàÿ ôðàçà
|
||||||
|
is
|
||||||
|
SRES varchar2(32000); -- Ðåçóëüòàò ðàáîòû
|
||||||
|
begin
|
||||||
|
/* Îáõîäèì ñëîâà ïîèñêîâîé ôðàçû */
|
||||||
|
for W in (select REGEXP_SUBSTR(T.STR, '[^' || SDELIM || ']+', 1, level) SWRD
|
||||||
|
from (select replace(replace(SSEARCH_STR, ',', ''), '.', '') STR from DUAL) T
|
||||||
|
connect by INSTR(T.STR, SDELIM, 1, level - 1) > 0)
|
||||||
|
loop
|
||||||
|
/* Åñëè ñëîâî íå â ñïèñêå âñïîìîãàòåëüíûõ */
|
||||||
|
if (not UTL_HELPER_CHECK(SWORD => W.SWRD, HELPER_PATTERNS => HELPER_PATTERNS)) then
|
||||||
|
/* Îñòàâëÿåì åãî â èòîãîâîé âûáîðêå */
|
||||||
|
SRES := SRES || '%' || W.SWRD;
|
||||||
|
end if;
|
||||||
|
end loop;
|
||||||
|
/* Óáåðåì ëèøíèå ïðîáåëû è ãîòîâèì äëÿ ïîèñêà */
|
||||||
|
SRES := '%' || trim(SRES) || '%';
|
||||||
|
/* Âåðíåì îòâåò */
|
||||||
|
return SRES;
|
||||||
|
end UTL_SEARCH_STR_PREPARE;
|
||||||
|
|
||||||
|
/* Îáðàáîòêà çàïðîñà íà ïîèñê êîíòðàãåíòà */
|
||||||
|
procedure FIND_AGENT
|
||||||
|
(
|
||||||
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
)
|
||||||
|
is
|
||||||
|
HELPER_PATTERNS THELPER_PATTERNS; -- Êîëëåêöèÿ øàáëîíîâ âñïîìîãàòåëüíûõ ñëîâ ïîèñêà
|
||||||
|
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
||||||
|
CTMP clob; -- Áóôåð äëÿ êîíâåðòàöèè
|
||||||
|
CRESP clob; -- Äàííûå äëÿ îòâåòà
|
||||||
|
RCTMP sys_refcursor; -- Áóôåð äëÿ èçìåíåííîé ïîçèöèè î÷åðåäè
|
||||||
|
begin
|
||||||
|
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
||||||
|
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
||||||
|
/* Èíèöèàëèçèðóåì êîëëåêöèþ ñëîâ-ïîìîøíèêîâ */
|
||||||
|
UTL_HELPER_INIT_COMMON(HELPER_PATTERNS => HELPER_PATTERNS);
|
||||||
|
/* Íàïîëíÿåì å¸ çíà÷åíèÿìè èíäèâèäóàëüíûìè äëÿ äàííîãî çàïðîñà */
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'êîíòðàãåíò%';
|
||||||
|
/* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
|
||||||
|
CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8');
|
||||||
|
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
|
||||||
|
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
|
||||||
|
/* Åñëè åñòü ÷òî èñêàòü */
|
||||||
|
if (CTMP is not null) then
|
||||||
|
/* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */
|
||||||
|
CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS);
|
||||||
|
/* Èíèöèàëèçèðóåì îòâåò */
|
||||||
|
CRESP := 'Êîíòðàãåíò íå íàéäåí';
|
||||||
|
/* Èùåì çàïðîøåííîãî êîíòðàãåíòà */
|
||||||
|
for C in (select T.AGNNAME ||
|
||||||
|
DECODE(T.AGNTYPE, 1, ', ôèçè÷åñêîå ëèöî', ', þðèäè÷åñêîå ëèöî') SAGENT,
|
||||||
|
T.AGNTYPE NAGNTYPE,
|
||||||
|
(select count(CN.RN) from CONTRACTS CN where CN.AGENT = T.RN) NCNT_CONTRACTS,
|
||||||
|
(select sum(CN.DOC_SUM) from CONTRACTS CN where CN.AGENT = T.RN) NSUM_CONTRACTS,
|
||||||
|
T.PHONE SPHONE,
|
||||||
|
T.MAIL SMAIL,
|
||||||
|
T.AGN_COMMENT SCONTACT_PERSON,
|
||||||
|
NVL((select 1 from DUAL where LOWER(T.AGN_COMMENT) like LOWER(CTMP)), 0) NLINKED_SIGN
|
||||||
|
from AGNLIST T,
|
||||||
|
ACATALOG CAT
|
||||||
|
where ((LOWER(T.AGNABBR) like LOWER(CTMP)) or (LOWER(T.AGNNAME) like LOWER(CTMP)) or
|
||||||
|
(LOWER(T.AGN_COMMENT) like LOWER(CTMP)))
|
||||||
|
and T.CRN = CAT.RN
|
||||||
|
and CAT.NAME = SSEARCH_CATALOG_NAME
|
||||||
|
and ROWNUM <= 1)
|
||||||
|
loop
|
||||||
|
/* Îñíîâíàÿ èíôîðìàöèÿ */
|
||||||
|
if (C.NLINKED_SIGN = 1) then
|
||||||
|
CRESP := 'Íå ÿâëÿåòñÿ ñàìîñòîÿòåëüíûì, íàéäåí ïî ñîâïàäåíèþ â äîïîëíèòåëüíîé èíôîðìàöèè ê êîíòðàãåíòó:' ||
|
||||||
|
CHR(10) || CHR(10) || C.SAGENT;
|
||||||
|
else
|
||||||
|
CRESP := C.SAGENT;
|
||||||
|
end if;
|
||||||
|
/* Äàëåå - â çàâèñèìîñòè îò òèïà, äëÿ ÞË - ñâåäåíèÿ î äîãîâîðàõ è êîíòàêòíîì ëèöå */
|
||||||
|
if (C.NAGNTYPE = 0) then
|
||||||
|
if (C.NCNT_CONTRACTS = 0) then
|
||||||
|
CRESP := CRESP || ', íå èìååò çàðåãèñòðèðîâàííûõ â ñèñòåìå äîãîâîðîâ';
|
||||||
|
else
|
||||||
|
CRESP := CRESP || ', çàðåãèñòðèðîâàíî äîãîâîðîâ: ' || TO_CHAR(C.NCNT_CONTRACTS);
|
||||||
|
if (C.NSUM_CONTRACTS <> 0) then
|
||||||
|
CRESP := CRESP || ', íà îáùóþ ñóììó: ' || TO_CHAR(C.NSUM_CONTRACTS) || ' ðóá.';
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
if (C.SCONTACT_PERSON is not null) then
|
||||||
|
CRESP := CRESP || ', êîíòàêòíîå ëèöî: ' || C.SCONTACT_PERSON;
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
/* Êîíòàêòû êîíòðàãåíòà - òåëåôîí */
|
||||||
|
if (C.SPHONE is not null) then
|
||||||
|
CRESP := CRESP || ', òåëåôîí: ' || C.SPHONE;
|
||||||
|
end if;
|
||||||
|
/* Êîíòàêòû êîíòðàãåíòà - e-mail */
|
||||||
|
if (C.SMAIL is not null) then
|
||||||
|
CRESP := CRESP || ', e-mail: ' || C.SMAIL;
|
||||||
|
end if;
|
||||||
|
end loop;
|
||||||
|
else
|
||||||
|
CRESP := 'Íå óêàçàí ïîèñêîâûé çàïðîñ';
|
||||||
|
end if;
|
||||||
|
/* Âîçâðàùàåì îòâåò */
|
||||||
|
PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT,
|
||||||
|
SARG => PKG_EXS.SCONT_FLD_BRESP,
|
||||||
|
BVALUE => CLOB2BLOB(LCDATA => CRESP, SCHARSET => 'UTF8'));
|
||||||
|
end FIND_AGENT;
|
||||||
|
|
||||||
|
/* Îáðàáîòêà çàïðîñà íà ïîèñê äîãîâîðà */
|
||||||
|
procedure FIND_CONTRACT
|
||||||
|
(
|
||||||
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
)
|
||||||
|
is
|
||||||
|
HELPER_PATTERNS THELPER_PATTERNS; -- Êîëëåêöèÿ øàáëîíîâ âñïîìîãàòåëüíûõ ñëîâ ïîèñêà
|
||||||
|
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
||||||
|
CTMP clob; -- Áóôåð äëÿ êîíâåðòàöèè
|
||||||
|
CRESP clob; -- Äàííûå äëÿ îòâåòà
|
||||||
|
RCTMP sys_refcursor; -- Áóôåð äëÿ èçìåíåííîé ïîçèöèè î÷åðåäè
|
||||||
|
begin
|
||||||
|
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
||||||
|
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
||||||
|
/* Èíèöèàëèçèðóåì êîëëåêöèþ ñëîâ-ïîìîøíèêîâ */
|
||||||
|
UTL_HELPER_INIT_COMMON(HELPER_PATTERNS => HELPER_PATTERNS);
|
||||||
|
/* Íàïîëíÿåì å¸ çíà÷åíèÿìè èíäèâèäóàëüíûìè äëÿ äàííîãî çàïðîñà */
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'äîãîâîð%';
|
||||||
|
/* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
|
||||||
|
CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8');
|
||||||
|
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
|
||||||
|
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
|
||||||
|
/* Åñëè åñòü ÷òî èñêàòü */
|
||||||
|
if (CTMP is not null) then
|
||||||
|
/* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */
|
||||||
|
CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS);
|
||||||
|
/* Èíèöèàëèçèðóåì îòâåò */
|
||||||
|
CRESP := 'Äîãîâîð íå íàéäåí';
|
||||||
|
/* Èùåì çàïðîøåííûé äîãîâîð */
|
||||||
|
for C in (select DECODE(T.INOUT_SIGN, 0, 'Âõîäÿùèé', 'Èñõîäÿùèé') || ' äîãîâîð ¹' ||
|
||||||
|
NVL(T.EXT_NUMBER, trim(T.DOC_NUMB)) || ' îò ' || TO_CHAR(T.DOC_DATE, 'dd.mm.yyyy') ||
|
||||||
|
' ñ êîíòðàãåíòîì ' || AG.AGNNAME SDOC,
|
||||||
|
T.SUBJECT SSUBJECT,
|
||||||
|
T.DOC_SUM NDOC_SUM,
|
||||||
|
T.DOC_INPAY_SUM NDOC_INPAY_SUM,
|
||||||
|
T.DOC_OUTPAY_SUM NDOC_OUTPAY_SUM,
|
||||||
|
T.END_DATE DEND_DATE,
|
||||||
|
CN.ALTNAME10 SCUR
|
||||||
|
from CONTRACTS T,
|
||||||
|
AGNLIST AG,
|
||||||
|
CURNAMES CN,
|
||||||
|
ACATALOG CAT
|
||||||
|
where ((LOWER(T.EXT_NUMBER) like LOWER(CTMP)) or
|
||||||
|
(LOWER(trim(T.DOC_NUMB)) like LOWER(CTMP)))
|
||||||
|
and T.AGENT = AG.RN
|
||||||
|
and T.CURRENCY = CN.RN
|
||||||
|
and T.CRN = CAT.RN
|
||||||
|
and CAT.NAME = SSEARCH_CATALOG_NAME
|
||||||
|
and ROWNUM <= 1)
|
||||||
|
loop
|
||||||
|
/* Îñíîâíûå ñâåäåíèÿ */
|
||||||
|
CRESP := C.SDOC;
|
||||||
|
/* Ïðåäìåò äîãîâîðà */
|
||||||
|
if (C.SSUBJECT is not null) then
|
||||||
|
CRESP := CRESP || ', ïðåäìåò äîãîâîðà: ' || C.SSUBJECT;
|
||||||
|
end if;
|
||||||
|
/* Ñóììà äîãîâîðà */
|
||||||
|
if (C.NDOC_SUM <> 0) then
|
||||||
|
CRESP := CRESP || CHR(10) || 'Ñóììà äîãîâîðà: ' || TO_CHAR(C.NDOC_SUM) || ' ' || C.SCUR;
|
||||||
|
/* Ñîñòîÿíèå îïëàòû äëÿ ïîñòóïëåíèÿ ÄÑ */
|
||||||
|
if (C.NDOC_INPAY_SUM <> 0) then
|
||||||
|
if (C.NDOC_INPAY_SUM = C.NDOC_SUM) then
|
||||||
|
CRESP := CRESP || ', îïëà÷åí çàêç÷èêîì ïîëíîñòüþ';
|
||||||
|
else
|
||||||
|
CRESP := CRESP || ', ïîëó÷åíî îò çàêàç÷èêà: ' || TO_CHAR(C.NDOC_INPAY_SUM) || ' ' || C.SCUR;
|
||||||
|
if (C.NDOC_SUM - C.NDOC_INPAY_SUM > 0) then
|
||||||
|
CRESP := CRESP || ', îñòàòîê ê ïîëó÷åíèþ: ' || TO_CHAR(C.NDOC_SUM - C.NDOC_INPAY_SUM) || ' ' || C.SCUR;
|
||||||
|
if (C.DEND_DATE is not null) then
|
||||||
|
CRESP := CRESP || ', äîãîâîð èñòåêàåò ' || TO_CHAR(C.DEND_DATE, 'dd.mm.yyyy');
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
/* Ñîñòîÿíèå îïëàòû äëÿ âûáûòèÿ ÄÑ */
|
||||||
|
if (C.NDOC_OUTPAY_SUM <> 0) then
|
||||||
|
if (C.NDOC_OUTPAY_SUM = C.NDOC_SUM) then
|
||||||
|
CRESP := CRESP || ', ïîëíîñòüþ îïëà÷åí çàêç÷èêó';
|
||||||
|
else
|
||||||
|
CRESP := CRESP || ', îïëà÷åíî çàêàç÷èêó ' || TO_CHAR(C.NDOC_OUTPAY_SUM) || ' ' || C.SCUR;
|
||||||
|
if (C.NDOC_SUM - C.NDOC_OUTPAY_SUM > 0) then
|
||||||
|
CRESP := CRESP || ', îñòàòîê ê îïëàòå ' || TO_CHAR(C.NDOC_SUM - C.NDOC_OUTPAY_SUM) || ' ' || C.SCUR;
|
||||||
|
if (C.DEND_DATE is not null) then
|
||||||
|
CRESP := CRESP || ', äîãîâîð èñòåêàåò ' || TO_CHAR(C.DEND_DATE, 'dd.mm.yyyy');
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
end loop;
|
||||||
|
else
|
||||||
|
CRESP := 'Íå óêàçàí ïîèñêîâûé çàïðîñ';
|
||||||
|
end if;
|
||||||
|
/* Âîçâðàùàåì îòâåò */
|
||||||
|
PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT,
|
||||||
|
SARG => PKG_EXS.SCONT_FLD_BRESP,
|
||||||
|
BVALUE => CLOB2BLOB(LCDATA => CRESP, SCHARSET => 'UTF8'));
|
||||||
|
end FIND_CONTRACT;
|
||||||
|
|
||||||
|
/* Îáðàáîòêà çàïðîñà íà ïîèñê çàêàçà ïîòðåáèòåëÿ */
|
||||||
|
procedure FIND_CONSUMERORD
|
||||||
|
(
|
||||||
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
)
|
||||||
|
is
|
||||||
|
HELPER_PATTERNS THELPER_PATTERNS; -- Êîëëåêöèÿ øàáëîíîâ âñïîìîãàòåëüíûõ ñëîâ ïîèñêà
|
||||||
|
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
||||||
|
NSTATE_PROP PKG_STD.TREF; -- Ðåã. íîìåð ÄÑ äëÿ õðàíåíèÿ ñîñòîÿíèÿ çàêàçà
|
||||||
|
CTMP clob; -- Áóôåð äëÿ êîíâåðòàöèè
|
||||||
|
CRESP clob; -- Äàííûå äëÿ îòâåòà
|
||||||
|
RCTMP sys_refcursor; -- Áóôåð äëÿ èçìåíåííîé ïîçèöèè î÷åðåäè
|
||||||
|
begin
|
||||||
|
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
||||||
|
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
||||||
|
/* Èíèöèàëèçèðóåì êîëëåêöèþ ñëîâ-ïîìîøíèêîâ */
|
||||||
|
UTL_HELPER_INIT_COMMON(HELPER_PATTERNS => HELPER_PATTERNS);
|
||||||
|
/* Íàïîëíÿåì å¸ çíà÷åíèÿìè èíäèâèäóàëüíûìè äëÿ äàííîãî çàïðîñà */
|
||||||
|
HELPER_PATTERNS.EXTEND();
|
||||||
|
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'çàêàç%';
|
||||||
|
/* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
|
||||||
|
CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8');
|
||||||
|
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
|
||||||
|
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
|
||||||
|
/* Åñëè åñòü ÷òî èñêàòü */
|
||||||
|
if (CTMP is not null) then
|
||||||
|
/* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */
|
||||||
|
CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS);
|
||||||
|
/* Èíèöèàëèçèðóåì îòâåò */
|
||||||
|
CRESP := 'Çàêàç íå íàéäåí';
|
||||||
|
/* Èùåì çàïðîøåííûé çàêàç */
|
||||||
|
for C in (select 'Çàêàç ¹' || trim(T.ORD_NUMB) || ' îò ' || TO_CHAR(T.ORD_DATE, 'dd.mm.yyyy') SDOC,
|
||||||
|
T.PSUMWTAX NSUM,
|
||||||
|
T.RELEASE_DATE DRELEASE_DATE,
|
||||||
|
(select V.STR_VALUE
|
||||||
|
from DOCS_PROPS_VALS V,
|
||||||
|
DOCS_PROPS DP
|
||||||
|
where V.UNIT_RN = T.RN
|
||||||
|
and V.DOCS_PROP_RN = DP.RN
|
||||||
|
and DP.CODE = 'ÑîñòîÿíèåÇàêàçàÏîòð') SSTATE,
|
||||||
|
CN.ALTNAME10 SCUR
|
||||||
|
from CONSUMERORD T,
|
||||||
|
AGNLIST AG,
|
||||||
|
CURNAMES CN,
|
||||||
|
ACATALOG CAT
|
||||||
|
where (LOWER(trim(T.ORD_NUMB)) like LOWER(CTMP))
|
||||||
|
and T.AGENT = AG.RN
|
||||||
|
and T.CURRENCY = CN.RN
|
||||||
|
and T.CRN = CAT.RN
|
||||||
|
and CAT.NAME = SSEARCH_CATALOG_NAME
|
||||||
|
and ROWNUM <= 1)
|
||||||
|
loop
|
||||||
|
/* Îñíîâíûå ñâåäåíèÿ */
|
||||||
|
CRESP := C.SDOC;
|
||||||
|
/* Ñîñòîÿíèå */
|
||||||
|
if (C.SSTATE is not null) then
|
||||||
|
CRESP := CRESP || ', íàõîäèòñÿ â ñîñòîÿíèè "' || C.SSTATE || '"';
|
||||||
|
else
|
||||||
|
CRESP := CRESP || ', ê ñîæàëåíèþ íå óäàëîñü îïðåäåëèòü ñîñòîÿíèå çàêàçà, íî ìû ìîæíî ñêàçàòü ÷òî';
|
||||||
|
end if;
|
||||||
|
/* Ñóììà çàçàçà */
|
||||||
|
if (C.NSUM <> 0) then
|
||||||
|
CRESP := CRESP || ', ñóììà çàêàçà ñîñòàâëÿåò ' || TO_CHAR(C.NSUM) || ' ' || C.SCUR;
|
||||||
|
end if;
|
||||||
|
/* Ïëàíîâûé ñðîê èñïîëíåíèÿ */
|
||||||
|
CRESP := CRESP || ', ïëàíîâàÿ äàòà èñïîëíåíèÿ çàêàçà ' || TO_CHAR(C.DRELEASE_DATE, 'dd.mm.yyyy');
|
||||||
|
end loop;
|
||||||
|
else
|
||||||
|
CRESP := 'Íå óêàçàí ïîèñêîâûé çàïðîñ';
|
||||||
|
end if;
|
||||||
|
/* Âîçâðàùàåì îòâåò */
|
||||||
|
PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT,
|
||||||
|
SARG => PKG_EXS.SCONT_FLD_BRESP,
|
||||||
|
BVALUE => CLOB2BLOB(LCDATA => CRESP, SCHARSET => 'UTF8'));
|
||||||
|
end FIND_CONSUMERORD;
|
||||||
|
|
||||||
|
end;
|
||||||
|
/
|
293
db/UDO_PKG_EXS_INV.pck
Normal file
293
db/UDO_PKG_EXS_INV.pck
Normal file
@ -0,0 +1,293 @@
|
|||||||
|
create or replace package UDO_PKG_EXS_INV as
|
||||||
|
|
||||||
|
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - àóòåíòèôèêàöèÿ */
|
||||||
|
procedure CHECKAUTH
|
||||||
|
(
|
||||||
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - ñ÷èòûâàíèå ïîëüçîâàòåëåé */
|
||||||
|
procedure GETUSERS
|
||||||
|
(
|
||||||
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
);
|
||||||
|
|
||||||
|
end;
|
||||||
|
/
|
||||||
|
create or replace package body UDO_PKG_EXS_INV as
|
||||||
|
|
||||||
|
/* Êîíñòàíòû - òýãè */
|
||||||
|
STSD constant varchar2(20) := 'tsd';
|
||||||
|
SCHECKAUTHRESPONSE constant varchar2(20) := 'CheckAuthResponse';
|
||||||
|
SGETUSERSRESPONSE constant varchar2(20) := 'GetUsersResponse';
|
||||||
|
SDEVICEID constant varchar2(20) := 'DeviceID';
|
||||||
|
SRESULT constant varchar2(20) := 'Result';
|
||||||
|
SSOAPENV constant varchar2(20) := 'soapenv';
|
||||||
|
SENVELOPE constant varchar2(20) := 'Envelope';
|
||||||
|
SHEADER constant varchar2(20) := 'Header';
|
||||||
|
SBODY constant varchar2(20) := 'Body';
|
||||||
|
SITEM constant varchar2(20) := 'Item';
|
||||||
|
SCODE constant varchar2(20) := 'Code';
|
||||||
|
SNAME constant varchar2(20) := 'Name';
|
||||||
|
|
||||||
|
/* Ñîçäàíèå âåòêè XML */
|
||||||
|
function UTL_CREATENODE
|
||||||
|
(
|
||||||
|
XDOC in DBMS_XMLDOM.DOMDOCUMENT, -- Äîêóìåíò
|
||||||
|
STAG in varchar2, -- Íàèìåíîâàíèå òýãà
|
||||||
|
SNS in varchar2 default null, -- Ïðîñòðàíñòâî èì¸í
|
||||||
|
SVAL in varchar2 default null -- Çíà÷åíèå òýãà
|
||||||
|
)
|
||||||
|
return DBMS_XMLDOM.DOMNODE -- Ññûëêà íà ñôîðìèðîâàííûé òýã äîêóìåíòà
|
||||||
|
is
|
||||||
|
XEL DBMS_XMLDOM.DOMELEMENT; -- Ýëåìåíò ïðîñòðàíñòâà èì¸í
|
||||||
|
XNODE DBMS_XMLDOM.DOMNODE; -- Ôîðìèðóåìàÿ âåòêà
|
||||||
|
XTEXT DBMS_XMLDOM.DOMNODE; -- Òåêñò (çíà÷åíèå) ôîðìèðóåìîé âåòêè
|
||||||
|
begin
|
||||||
|
/* Åñëè çàäàíî ïðîñòðàíñòâî èì¸í */
|
||||||
|
if (SNS is not null) then
|
||||||
|
/* Ñîçäà¸ì ýëåìåíò ñ åãî èñïîëüçîâàíèåì */
|
||||||
|
XEL := DBMS_XMLDOM.CREATEELEMENT(DOC => XDOC, TAGNAME => STAG, NS => SNS);
|
||||||
|
XNODE := DBMS_XMLDOM.MAKENODE(ELEM => XEL);
|
||||||
|
DBMS_XMLDOM.SETPREFIX(N => XNODE, PREFIX => SNS);
|
||||||
|
else
|
||||||
|
/* Èëè áåç íåãî */
|
||||||
|
XEL := DBMS_XMLDOM.CREATEELEMENT(DOC => XDOC, TAGNAME => STAG);
|
||||||
|
XNODE := DBMS_XMLDOM.MAKENODE(ELEM => XEL);
|
||||||
|
end if;
|
||||||
|
/* Çíà÷åíèå ðàçìåùàåì â òåêñòîâîé ÷àñòè âåòêè */
|
||||||
|
if (SVAL is not null) then
|
||||||
|
XTEXT := DBMS_XMLDOM.APPENDCHILD(N => XNODE,
|
||||||
|
NEWCHILD => DBMS_XMLDOM.MAKENODE(T => DBMS_XMLDOM.CREATETEXTNODE(DOC => XDOC,
|
||||||
|
DATA => SVAL)));
|
||||||
|
end if;
|
||||||
|
/* Âåðíåì ðåçóëüòàò */
|
||||||
|
return XNODE;
|
||||||
|
end UTL_CREATENODE;
|
||||||
|
|
||||||
|
/* Ñ÷èòûâàíèå çíà÷åíèÿ âåòêè XML */
|
||||||
|
function UTL_GETNODEVAL
|
||||||
|
(
|
||||||
|
XROOTNODE in DBMS_XMLDOM.DOMNODE, -- Êîðíåâàÿ âåòêà äëÿ ñ÷èòûâàíèÿ çíà÷åíèÿ
|
||||||
|
SPATTERN in varchar2 -- Øàáëîí äëÿ ñ÷èòûâàíèÿ äàííûõ
|
||||||
|
)
|
||||||
|
return varchar2 -- Ñ÷èòàííîå çíà÷åíèå
|
||||||
|
is
|
||||||
|
XNODE DBMS_XMLDOM.DOMNODE; -- Èñêîìàÿ âåòêà ñî çíà÷åíèåì (ïîäõîäÿùàÿ ïîä øàáëîí)
|
||||||
|
SVAL PKG_STD.TSTRING; -- Ðåçóëüòàò ðàáîòû
|
||||||
|
begin
|
||||||
|
/* Íàéäåì íóæíóþ âåòêó ïî øàáëîíó */
|
||||||
|
XNODE := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XROOTNODE, PATTERN => SPATTERN);
|
||||||
|
/* Åñëè òàì íåò íè÷åãî */
|
||||||
|
if (DBMS_XMLDOM.ISNULL(N => XNODE)) then
|
||||||
|
/* Åãî è âåðí¸ì */
|
||||||
|
return null;
|
||||||
|
end if;
|
||||||
|
/* ×òî-òî åñòü - ÷èòàåì äàííûå */
|
||||||
|
SVAL := DBMS_XMLDOM.GETNODEVALUE(DBMS_XMLDOM.GETFIRSTCHILD(N => XNODE));
|
||||||
|
/* Îòäà¸ì ðåçóëüòàò */
|
||||||
|
return SVAL;
|
||||||
|
end UTL_GETNODEVAL;
|
||||||
|
|
||||||
|
/* Ñîçäàíèå äîêóìåíòà äëÿ îòâåòà */
|
||||||
|
procedure UTL_CREATERESPONSEDOC
|
||||||
|
(
|
||||||
|
XDOC out DBMS_XMLDOM.DOMDOCUMENT -- Áóôåð äëÿ äîêóìåíòà
|
||||||
|
)
|
||||||
|
is
|
||||||
|
begin
|
||||||
|
/* Ñîçäà¸ì íîâûé äîêóìåíò */
|
||||||
|
XDOC := DBMS_XMLDOM.NEWDOMDOCUMENT();
|
||||||
|
/* Âûñòàâëÿåì ïàðàìåòðû çàãîëîâêà */
|
||||||
|
DBMS_XMLDOM.SETVERSION(DOC => XDOC, VERSION => '1.0" encoding="UTF-8');
|
||||||
|
/* Âûñòàâëÿåì êîäèðîâêó */
|
||||||
|
DBMS_XMLDOM.SETCHARSET(DOC => XDOC, CHARSET => 'UTF-8');
|
||||||
|
end UTL_CREATERESPONSEDOC;
|
||||||
|
|
||||||
|
/* Ôîðìèðîâíèå îòâåòà íà çàïðîñ èç XML-äîêóìåíòà (îá¸ðòûâàíèå â êîíâåðò ïîäãîòîâëåííûõ äàííûõ) */
|
||||||
|
function UTL_CREATERESPONSE
|
||||||
|
(
|
||||||
|
XDOC in DBMS_XMLDOM.DOMDOCUMENT, -- Äîêóìåíò
|
||||||
|
XCONTENT in DBMS_XMLDOM.DOMNODE -- Íàèìåíîâàíèå òýãà ñ îòïðàâëÿåìûì êîíòåíòîì
|
||||||
|
) return clob -- Ðåçóëüòàò ðàáîòû
|
||||||
|
is
|
||||||
|
XMAIN_NODE DBMS_XMLDOM.DOMNODE;
|
||||||
|
XENVELOPE_EL DBMS_XMLDOM.DOMELEMENT;
|
||||||
|
XENVELOPE DBMS_XMLDOM.DOMNODE;
|
||||||
|
XHEADER DBMS_XMLDOM.DOMNODE;
|
||||||
|
XBODY DBMS_XMLDOM.DOMNODE;
|
||||||
|
XNODE DBMS_XMLDOM.DOMNODE;
|
||||||
|
CDATA clob; -- Áóôåð äëÿ ðåçóëüòàòà
|
||||||
|
begin
|
||||||
|
/* Ïîäãîòîâèì äîêóìåíò */
|
||||||
|
XMAIN_NODE := DBMS_XMLDOM.MAKENODE(DOC => XDOC);
|
||||||
|
/* Îáåðí¸ì åãî â êîíâåðò */
|
||||||
|
XENVELOPE_EL := DBMS_XMLDOM.CREATEELEMENT(DOC => XDOC, TAGNAME => SENVELOPE, NS => SSOAPENV);
|
||||||
|
DBMS_XMLDOM.SETATTRIBUTE(ELEM => XENVELOPE_EL,
|
||||||
|
name => 'xmlns:soapenv',
|
||||||
|
NEWVALUE => 'http://schemas.xmlsoap.org/soap/envelope/');
|
||||||
|
DBMS_XMLDOM.SETATTRIBUTE(ELEM => XENVELOPE_EL,
|
||||||
|
name => 'xmlns:tsd',
|
||||||
|
NEWVALUE => 'http://www.example.org/TSDService/');
|
||||||
|
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => XENVELOPE_EL);
|
||||||
|
DBMS_XMLDOM.SETPREFIX(N => XENVELOPE, PREFIX => SSOAPENV);
|
||||||
|
XENVELOPE := DBMS_XMLDOM.APPENDCHILD(N => XMAIN_NODE, NEWCHILD => XENVELOPE);
|
||||||
|
/* Ñôîðìèðóåì çàãîëîâîê */
|
||||||
|
XHEADER := UTL_CREATENODE(XDOC => XDOC, STAG => SHEADER, SNS => SSOAPENV);
|
||||||
|
XHEADER := DBMS_XMLDOM.APPENDCHILD(N => XENVELOPE, NEWCHILD => XHEADER);
|
||||||
|
/* Ñôîðìèðóåì òåëî */
|
||||||
|
XBODY := UTL_CREATENODE(XDOC => XDOC, STAG => SBODY, SNS => SSOAPENV);
|
||||||
|
XBODY := DBMS_XMLDOM.APPENDCHILD(N => XENVELOPE, NEWCHILD => XBODY);
|
||||||
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XBODY, NEWCHILD => XCONTENT);
|
||||||
|
/* Êîíâåðòèðóåì â CLOB */
|
||||||
|
DBMS_LOB.CREATETEMPORARY(LOB_LOC => CDATA, CACHE => true, DUR => DBMS_LOB.SESSION);
|
||||||
|
DBMS_XMLDOM.WRITETOCLOB(DOC => XDOC, CL => CDATA, CHARSET => 'UTF-8');
|
||||||
|
DBMS_XMLDOM.FREEDOCUMENT(DOC => XDOC);
|
||||||
|
/* Âåðíåì ðåçóëüòàò */
|
||||||
|
return CDATA;
|
||||||
|
end UTL_CREATERESPONSE;
|
||||||
|
|
||||||
|
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - àóòåíòèôèêàöèÿ */
|
||||||
|
procedure CHECKAUTH
|
||||||
|
(
|
||||||
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
)
|
||||||
|
is
|
||||||
|
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
||||||
|
XCHECKAUTHRESPONSE DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò îòâåòà
|
||||||
|
XRESULT DBMS_XMLDOM.DOMNODE; -- Ðåçóëüòàò àóòåíòèôèêàöèè
|
||||||
|
XNODE DBMS_XMLDOM.DOMNODE; -- Áóôåð äëÿ âåòêè îòâåòà
|
||||||
|
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Äîêóìåíò
|
||||||
|
XMLPARCER DBMS_XMLPARSER.PARSER; -- Ïàðñåð
|
||||||
|
XENVELOPE DBMS_XMLDOM.DOMNODE; -- Êîíâåðò
|
||||||
|
XBODY DBMS_XMLDOM.DOMNODE; -- Òåëî äîêóìåíòà
|
||||||
|
XNODELIST DBMS_XMLDOM.DOMNODELIST; -- Âåòêè òåëà äîêóìåíòà
|
||||||
|
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà
|
||||||
|
CRESPONSE clob; -- Áóôåð äëÿ îòâåòà
|
||||||
|
CREQ clob; -- Áóôåð äëÿ çàïðîñà
|
||||||
|
SREQDEVICEID varchar2(30); -- Èäåíòèôèêàòîð óñòðîéñòâà èç çàïðîñà
|
||||||
|
begin
|
||||||
|
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
||||||
|
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
||||||
|
/* Âîçüìåì òåêñò çàïðîñà */
|
||||||
|
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
|
||||||
|
/* Ñîçäàåì èíñòàíñ XML ïàðñåðà */
|
||||||
|
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
|
||||||
|
/* Ðàçáèðàåì XML èç çàïðîñà */
|
||||||
|
DBMS_XMLPARSER.PARSECLOB(P => XMLPARCER, DOC => CREQ);
|
||||||
|
/* Áåðåì XML äîêóìåíò èç ðàçîáðàííîãî */
|
||||||
|
XDOC := DBMS_XMLPARSER.GETDOCUMENT(P => XMLPARCER);
|
||||||
|
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò */
|
||||||
|
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => DBMS_XMLDOM.GETDOCUMENTELEMENT(DOC => XDOC));
|
||||||
|
/* Ñ÷èòûâàåì ýëåìåíò òåëî */
|
||||||
|
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XENVELOPE, PATTERN => SBODY);
|
||||||
|
/* Ñ÷èòûâàåì äî÷åðíèå ýëåìåíòû òåëà */
|
||||||
|
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(N => XBODY);
|
||||||
|
/* Áåðåì ïåðâûé äî÷åðíèé ýëåìåíò */
|
||||||
|
XNODE_ROOT := DBMS_XMLDOM.ITEM(NL => XNODELIST, IDX => 0);
|
||||||
|
/* Ñ÷èòûâàåì èäåíòèôèêàòîð óñòðîéñòâà */
|
||||||
|
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDEVICEID);
|
||||||
|
/* Êîíòðîëü èíäåòèôèêàòîðà óñòðîéñòâà ïî ëèöåíçèè */
|
||||||
|
/* UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID); */
|
||||||
|
/* Ïîäãîòàâëèâàåì äîêóìåíò äëÿ îòâåòà */
|
||||||
|
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
||||||
|
/* Âìåñòî ïðîâåðêè ïî ëèöåíçèè - ïîêà ïðîñòî ïðîâåðêà íà òî, ÷òî èäåíòèôèêàòîð óñòðîéñòâà áûë ïåðåäàí */
|
||||||
|
if (SREQDEVICEID is not null) then
|
||||||
|
/* Ò.ê. ïîêà ïðîâåðîê íåò íèêàêèõ - âñåãäà âîçâðàùàåì ïîëîæèòåëüíûé îòâåò */
|
||||||
|
XCHECKAUTHRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SCHECKAUTHRESPONSE, SNS => STSD);
|
||||||
|
XRESULT := UTL_CREATENODE(XDOC => XDOC, STAG => SRESULT, SNS => STSD, SVAL => 'true');
|
||||||
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XCHECKAUTHRESPONSE, NEWCHILD => XRESULT);
|
||||||
|
/* Îáîðà÷èâàåì åãî â êîíâåðò */
|
||||||
|
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XCHECKAUTHRESPONSE);
|
||||||
|
end if;
|
||||||
|
/* Âîçâðàùàåì îòâåò */
|
||||||
|
PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT,
|
||||||
|
SARG => PKG_EXS.SCONT_FLD_BRESP,
|
||||||
|
BVALUE => CLOB2BLOB(LCDATA => CRESPONSE));
|
||||||
|
end CHECKAUTH;
|
||||||
|
|
||||||
|
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - ñ÷èòûâàíèå ïîëüçîâàòåëåé */
|
||||||
|
procedure GETUSERS
|
||||||
|
(
|
||||||
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
)
|
||||||
|
is
|
||||||
|
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
||||||
|
XGETUSERSRESPONSE DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò îòâåòà
|
||||||
|
XNODE DBMS_XMLDOM.DOMNODE; -- Áóôåð äëÿ âåòêè îòâåòà
|
||||||
|
XITEM DBMS_XMLDOM.DOMNODE; -- Ýëåìåíò îòâåòíîãî ñïèñêà
|
||||||
|
XCODE DBMS_XMLDOM.DOMNODE; -- Êîä ýëåìåíòà îòâåòíîãî ñïèñêà
|
||||||
|
XNAME DBMS_XMLDOM.DOMNODE; -- Íèìåíîâàíèå ýëåìåíòà îòâåòíîãî ñïèñêà
|
||||||
|
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Äîêóìåíò
|
||||||
|
XMLPARCER DBMS_XMLPARSER.PARSER; -- Ïàðñåð
|
||||||
|
XENVELOPE DBMS_XMLDOM.DOMNODE; -- Êîíâåðò
|
||||||
|
XBODY DBMS_XMLDOM.DOMNODE; -- Òåëî äîêóìåíòà
|
||||||
|
XNODELIST DBMS_XMLDOM.DOMNODELIST; -- Âåòêè òåëà äîêóìåíòà
|
||||||
|
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà
|
||||||
|
CRESPONSE clob; -- Áóôåð äëÿ îòâåòà
|
||||||
|
CREQ clob; -- Áóôåð äëÿ çàïðîñà
|
||||||
|
SREQDEVICEID varchar2(30); -- Èäåíòèôèêàòîð óñòðîéñòâà èç çàïðîñà
|
||||||
|
begin
|
||||||
|
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
||||||
|
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
||||||
|
/* Âîçüìåì òåêñò çàïðîñà */
|
||||||
|
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
|
||||||
|
/* Ñîçäàåì èíñòàíñ XML ïàðñåðà */
|
||||||
|
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
|
||||||
|
/* Ðàçáèðàåì XML èç çàïðîñà */
|
||||||
|
DBMS_XMLPARSER.PARSECLOB(P => XMLPARCER, DOC => CREQ);
|
||||||
|
/* Áåðåì XML äîêóìåíò èç ðàçîáðàííîãî */
|
||||||
|
XDOC := DBMS_XMLPARSER.GETDOCUMENT(P => XMLPARCER);
|
||||||
|
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò */
|
||||||
|
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => DBMS_XMLDOM.GETDOCUMENTELEMENT(DOC => XDOC));
|
||||||
|
/* Ñ÷èòûâàåì ýëåìåíò òåëî */
|
||||||
|
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XENVELOPE, PATTERN => SBODY);
|
||||||
|
/* Ñ÷èòûâàåì äî÷åðíèå ýëåìåíòû òåëà */
|
||||||
|
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(N => XBODY);
|
||||||
|
/* Áåðåì ïåðâûé äî÷åðíèé ýëåìåíò */
|
||||||
|
XNODE_ROOT := DBMS_XMLDOM.ITEM(NL => XNODELIST, IDX => 0);
|
||||||
|
/* Ñ÷èòûâàåì èäåíòèôèêàòîð óñòðîéñòâà */
|
||||||
|
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDEVICEID);
|
||||||
|
/* Êîíòðîëü èíäåòèôèêàòîðà óñòðîéñòâà ïî ëèöåíçèè */
|
||||||
|
/* UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID); */
|
||||||
|
/* Ïîäãîòàâëèâàåì äîêóìåíò äëÿ îòâåòà */
|
||||||
|
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
||||||
|
/* Âìåñòî ïðîâåðêè ïî ëèöåíçèè - ïîêà ïðîñòî ïðîâåðêà íà òî, ÷òî èäåíòèôèêàòîð óñòðîéñòâà áûë ïåðåäàí */
|
||||||
|
if (SREQDEVICEID is not null) then
|
||||||
|
/* Ñîçäà¸ì ïðîñòðàíñòâî èì¸í äëÿ îòâåòà */
|
||||||
|
XGETUSERSRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SGETUSERSRESPONSE, SNS => STSD);
|
||||||
|
/* Îáõîäèì ñîòðóäíèêîâ-èíâåíòàðèçàòîðîâ */
|
||||||
|
for REC in (select T.RN,
|
||||||
|
A.AGNABBR
|
||||||
|
from INVPERSONS T,
|
||||||
|
AGNLIST A
|
||||||
|
where T.COMPANY = 136018
|
||||||
|
and T.AGNLIST = A.RN)
|
||||||
|
loop
|
||||||
|
/* Ñîáèðàåì èíôîðìàöèþ ïî ñîòðóäíèêó â îòâåò */
|
||||||
|
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => SITEM, SNS => STSD);
|
||||||
|
XCODE := UTL_CREATENODE(XDOC => XDOC, STAG => SCODE, SNS => STSD, SVAL => REC.RN);
|
||||||
|
XNAME := UTL_CREATENODE(XDOC => XDOC, STAG => SNAME, SNS => STSD, SVAL => REC.AGNABBR);
|
||||||
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XCODE);
|
||||||
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XNAME);
|
||||||
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XGETUSERSRESPONSE, NEWCHILD => XITEM);
|
||||||
|
end loop;
|
||||||
|
/* Îáîðà÷èâàåì îòâåò â êîíâåðò */
|
||||||
|
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XGETUSERSRESPONSE);
|
||||||
|
end if;
|
||||||
|
/* Âîçâðàùàåì îòâåò */
|
||||||
|
PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT,
|
||||||
|
SARG => PKG_EXS.SCONT_FLD_BRESP,
|
||||||
|
BVALUE => CLOB2BLOB(LCDATA => CRESPONSE, SCHARSET => 'UTF8'));
|
||||||
|
end GETUSERS;
|
||||||
|
|
||||||
|
end;
|
||||||
|
/
|
@ -1,249 +1,34 @@
|
|||||||
create or replace package UDO_PKG_EXS_TEST as
|
create or replace package UDO_PKG_EXS_TEST as
|
||||||
|
|
||||||
/* Çàïðîñèòü êîíòðàãåíòà */
|
/* Îáðàáîòêà çàïðîñà íà ñîçäàíèå ñåññèè */
|
||||||
procedure RECIVE_AGENT
|
procedure UTL_LOGIN
|
||||||
(
|
(
|
||||||
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Çàïðîñèòü êîíòðàãåíòà */
|
||||||
|
procedure AGENT_GET_INFO
|
||||||
|
(
|
||||||
|
NCOMPANY in number, -- Ðåã. íîìåð îðãàíèçàöèè
|
||||||
NREMOTE_AGENT in number -- Ðåã. íîìåð êîíòðàãåíòà â óäàë¸ííîé ÁÄ
|
NREMOTE_AGENT in number -- Ðåã. íîìåð êîíòðàãåíòà â óäàë¸ííîé ÁÄ
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Îáðàáîòêà îòâåòà ñ èíôîðìàöèåé î êîíòðàãåíòå îò òåñòîâîãî ñòåíäà */
|
/* Îáðàáîòêà îòâåòà ñ èíôîðìàöèåé î êîíòðàãåíòå îò òåñòîâîãî ñòåíäà */
|
||||||
procedure PROCESS_AGN_INFO_RESP
|
procedure AGENT_PROCESS_INFO
|
||||||
(
|
(
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Îáðàáîòêà çàïðîñà íà ñîçäàíèå ñåññèè */
|
|
||||||
procedure RESP_LOGIN
|
|
||||||
(
|
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
||||||
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
|
||||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Îáðàáîòêà çàïðîñà íà ïîèñê êîíòðàãåíòà */
|
|
||||||
procedure RESP_FIND_AGENT
|
|
||||||
(
|
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
||||||
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
|
||||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Îáðàáîòêà çàïðîñà íà ïîèñê äîãîâîðà */
|
|
||||||
procedure RESP_FIND_CONTRACT
|
|
||||||
(
|
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
||||||
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
|
||||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - àóòåíòèôèêàöèÿ */
|
|
||||||
procedure INV_CHECKAUTH_XML
|
|
||||||
(
|
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
||||||
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
|
||||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - ñ÷èòûâàíèå ïîëüçîâàòåëåé */
|
|
||||||
procedure INV_GETUSERS_XML
|
|
||||||
(
|
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
||||||
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
|
||||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
|
||||||
);
|
|
||||||
|
|
||||||
end;
|
end;
|
||||||
/
|
/
|
||||||
create or replace package body UDO_PKG_EXS_TEST as
|
create or replace package body UDO_PKG_EXS_TEST as
|
||||||
|
|
||||||
/* Òèï äàííûõ äëÿ êîëëåêöèè øàáëîíîâ âñïîìîãàòåëüíûõ ñëîâ ïîèñêà */
|
|
||||||
type THELPER_PATTERNS is table of varchar2(4000);
|
|
||||||
|
|
||||||
/* Ïðîâåðêà íà ïðèñóòñòâèå ñëîâà â ñïèñêå âñïîìîãàòåëüíûõ */
|
|
||||||
function UTL_HELPER_CHECK
|
|
||||||
(
|
|
||||||
SWORD in varchar2, -- Ïðîâåðÿåìîå ñëîâî
|
|
||||||
HELPER_PATTERNS in THELPER_PATTERNS -- Êîëëåêöèÿ øàáëîíîâ âñïîìîãàòåëüíûõ ñëîâ
|
|
||||||
)
|
|
||||||
return boolean -- Ðåçóëüàòà ïðîâåðêè
|
|
||||||
is
|
|
||||||
BRES boolean; -- Áóôåð äëÿ ðåçóëüòàòà
|
|
||||||
begin
|
|
||||||
/* Èíèöèàëèçèðóåì áóôåð */
|
|
||||||
BRES := false;
|
|
||||||
/* Åñëè êîëëåêöèÿ íå ïóñòà */
|
|
||||||
if ((HELPER_PATTERNS is not null) and (HELPER_PATTERNS.COUNT > 0)) then
|
|
||||||
/* Îáõîäèì å¸ */
|
|
||||||
for I in HELPER_PATTERNS.FIRST .. HELPER_PATTERNS.LAST
|
|
||||||
loop
|
|
||||||
/* Åñëè ñëîâî åñòü â êîëëåêöèè */
|
|
||||||
if (LOWER(SWORD) like LOWER(HELPER_PATTERNS(I))) then
|
|
||||||
/* Âûñòàâèì ôëàã ïðèñóòñòâèÿ è çàâåðøèì ïîèñê */
|
|
||||||
BRES := true;
|
|
||||||
exit;
|
|
||||||
end if;
|
|
||||||
end loop;
|
|
||||||
end if;
|
|
||||||
/* Âîçâðàùàåì îòâåò */
|
|
||||||
return BRES;
|
|
||||||
end UTL_HELPER_CHECK;
|
|
||||||
|
|
||||||
/* Èíèöèàëèçàöèÿ îáùèõ âñïîìîãàòåëüíûõ ïîèñêîâûõ ôðàç */
|
|
||||||
procedure UTL_HELPER_INIT_COMMON
|
|
||||||
(
|
|
||||||
HELPER_PATTERNS in out THELPER_PATTERNS -- Êîëëåêöèÿ øàáëîíîâ âñïîìîãàòåëüíûõ ñëîâ
|
|
||||||
)
|
|
||||||
is
|
|
||||||
begin
|
|
||||||
/* Ñîçäàäèì ïóñòóþ êîëëåêöèþ åñëè íàäî */
|
|
||||||
if (HELPER_PATTERNS is null) then
|
|
||||||
HELPER_PATTERNS := THELPER_PATTERNS();
|
|
||||||
end if;
|
|
||||||
/* Íàïîëíèì å¸ îáùèìè ïîèñêîâûìè âñïîìîãàòåëüíûìè ôðàçàìè */
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ðàññêàæè';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ïðî';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'î';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'îá';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ïî';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ñâåäåíèÿ';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'èíôîðìàöèþ';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'èíôîðìàöèÿ';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'èíôîðìàöèè';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'èíôû';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'èíôó';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'äàé';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'íàðîé';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'çàïðîñè';
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'íàéäè';
|
|
||||||
end UTL_HELPER_INIT_COMMON;
|
|
||||||
|
|
||||||
/* Ïîäãîòîâêà ïîèñêîâîé ôðàçû ê ó÷àñòèþ â âûáîðêå */
|
|
||||||
function UTL_SEARCH_STR_PREPARE
|
|
||||||
(
|
|
||||||
SSEARCH_STR in varchar2, -- Ïîèñêîâàÿ ôðàçà
|
|
||||||
SDELIM in varchar2, -- Ðàçäåëèòåëü ñëîâ â ïîèñêîâîé ôðàçå
|
|
||||||
HELPER_PATTERNS in THELPER_PATTERNS -- Êîëëåêöèÿ øàáëîíîâ âñïîìîãàòåëüíûõ ñëîâ
|
|
||||||
)
|
|
||||||
return varchar2 -- Ïîäãîòîâëåííàÿ ïîèñêîâàÿ ôðàçà
|
|
||||||
is
|
|
||||||
SRES varchar2(32000); -- Ðåçóëüòàò ðàáîòû
|
|
||||||
begin
|
|
||||||
/* Îáõîäèì ñëîâà ïîèñêîâîé ôðàçû */
|
|
||||||
for W in (select REGEXP_SUBSTR(T.STR, '[^' || SDELIM || ']+', 1, level) SWRD
|
|
||||||
from (select replace(replace(SSEARCH_STR, ',', ''), '.', '') STR from DUAL) T
|
|
||||||
connect by INSTR(T.STR, SDELIM, 1, level - 1) > 0)
|
|
||||||
loop
|
|
||||||
/* Åñëè ñëîâî íå â ñïèñêå âñïîìîãàòåëüíûõ */
|
|
||||||
if (not UTL_HELPER_CHECK(SWORD => W.SWRD, HELPER_PATTERNS => HELPER_PATTERNS)) then
|
|
||||||
/* Îñòàâëÿåì åãî â èòîãîâîé âûáîðêå */
|
|
||||||
SRES := SRES || '%' || W.SWRD;
|
|
||||||
end if;
|
|
||||||
end loop;
|
|
||||||
/* Óáåðåì ëèøíèå ïðîáåëû è ãîòîâèì äëÿ ïîèñêà */
|
|
||||||
SRES := '%' || trim(SRES) || '%';
|
|
||||||
/* Âåðíåì îòâåò */
|
|
||||||
return SRES;
|
|
||||||
end UTL_SEARCH_STR_PREPARE;
|
|
||||||
|
|
||||||
/* Çàïðîñèòü êîíòðàãåíòà */
|
|
||||||
procedure RECIVE_AGENT
|
|
||||||
(
|
|
||||||
NREMOTE_AGENT in number -- Ðåã. íîìåð êîíòðàãåíòà â óäàë¸ííîé ÁÄ
|
|
||||||
)
|
|
||||||
is
|
|
||||||
SEXSSERVICEFN EXSSERVICEFN.CODE%type; -- Ìíåìîêîä ôóíêöèè ñåðâèñà
|
|
||||||
NEXSSERVICEFN EXSSERVICEFN.RN%type; -- Ðåã. íîìåð ôóíêöèè ñåðâèñà
|
|
||||||
RCTMP sys_refcursor; -- Áóôåð äëÿ èçìåíåííîé ïîçèöèè î÷åðåäè
|
|
||||||
begin
|
|
||||||
/* Èíèöèàëèçèðóåì ìíåìîêîä ôóíêöèè ñåðâèñà */
|
|
||||||
SEXSSERVICEFN := 'Ïîëó÷åíèåÊîíòðàãåíòà';
|
|
||||||
/* Íàéäåì ðåã. íîìåð ôóíêöèè ñåðâèñà */
|
|
||||||
FIND_EXSSERVICEFN_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, SCODE => SEXSSERVICEFN, NRN => NEXSSERVICEFN);
|
|
||||||
/* Ïîìåñòèì çàäàíèå â î÷åðåäü */
|
|
||||||
PKG_EXS.QUEUE_PUT(NEXSSERVICEFN => NEXSSERVICEFN,
|
|
||||||
BMSG => CLOB2BLOB(LCDATA => 'CPRMS={SACTION:"GET_AGENT",NAGENT:' || TO_CHAR(NREMOTE_AGENT) || '}'),
|
|
||||||
RCQUEUE => RCTMP);
|
|
||||||
end RECIVE_AGENT;
|
|
||||||
|
|
||||||
/* Îáðàáîòêà îòâåòà ñ èíôîðìàöèåé î êîíòðàãåíòå îò òåñòîâîãî ñòåíäà */
|
|
||||||
procedure PROCESS_AGN_INFO_RESP
|
|
||||||
(
|
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
||||||
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
|
||||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
|
||||||
)
|
|
||||||
is
|
|
||||||
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
|
||||||
CTMP clob; -- Áóôåð äëÿ êîíâåðòàöèè
|
|
||||||
RCTMP sys_refcursor; -- Áóôåð äëÿ èçìåíåííîé ïîçèöèè î÷åðåäè
|
|
||||||
NCOMPANY PKG_STD.TREF; -- Ðåã. íîìåð îðãàíèçàöèè
|
|
||||||
NCRN PKG_STD.TREF; -- Ðåã. íîìåð êàòàëîãà
|
|
||||||
SAGNABBR AGNLIST.AGNABBR%type; -- Ìíåìîêîä êîíòðàãåíòà
|
|
||||||
SAGNNAME AGNLIST.AGNNAME%type; -- Íàèìåíîâàíèå êîíòðàãåíòà
|
|
||||||
NAGENT AGNLIST.RN%type; -- Ðåã. íîìåð äîáàâëåííîãî êîíòðàãåíòà
|
|
||||||
begin
|
|
||||||
/* Èíèöèàëèçèðóåì îðãàíèçàöèþ */
|
|
||||||
NCOMPANY := 136018;
|
|
||||||
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
|
||||||
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
|
||||||
/* Êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
|
|
||||||
CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.RESP, SCHARSET => 'UTF8');
|
|
||||||
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
|
|
||||||
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
|
|
||||||
/* Ðàçáèðàåì îòâåò ñåðâåðà */
|
|
||||||
if (CTMP is not null) then
|
|
||||||
select EXTRACTVALUE(XMLTYPE(CTMP), '/AGENT/SAGNABBR') SAGNABBR,
|
|
||||||
EXTRACTVALUE(XMLTYPE(CTMP), '/AGENT/SAGNNAME') SAGNNAME
|
|
||||||
into SAGNABBR,
|
|
||||||
SAGNNAME
|
|
||||||
from DUAL;
|
|
||||||
else
|
|
||||||
P_EXCEPTION(0, 'Íå óêàçàíû äàííûå äëÿ äîáàâëåíèÿ êîíòðàãåíòà.');
|
|
||||||
end if;
|
|
||||||
if (SAGNABBR is null) then
|
|
||||||
P_EXCEPTION(0, 'Â îòâåòå ñåðâåðà íå óêàçàí ìíåìîêîä êîíòðàãåíòà.');
|
|
||||||
end if;
|
|
||||||
if (SAGNNAME is null) then
|
|
||||||
P_EXCEPTION(0,
|
|
||||||
'Â îòâåòå ñåðâåðà íå óêàçàíî íàèìåíîâàíèå êîíòðàãåíòà.');
|
|
||||||
end if;
|
|
||||||
/* Íàéä¸ì êàòàëîã */
|
|
||||||
FIND_ACATALOG_NAME(NFLAG_SMART => 0,
|
|
||||||
NCOMPANY => NCOMPANY,
|
|
||||||
NVERSION => null,
|
|
||||||
SUNITCODE => 'AGNLIST',
|
|
||||||
SNAME => 'ExchangeService',
|
|
||||||
NRN => NCRN);
|
|
||||||
/* Ðåãèñòðèðóåì êîíòðàãåíòà */
|
|
||||||
P_AGNLIST_BASE_INSERT(NCOMPANY => NCOMPANY,
|
|
||||||
NCRN => NCRN,
|
|
||||||
SAGNABBR => SUBSTR(NIDENT || SAGNABBR, 1, 20),
|
|
||||||
SAGNNAME => SAGNNAME || ' ' || NIDENT,
|
|
||||||
NRN => NAGENT);
|
|
||||||
exception
|
|
||||||
when others then
|
|
||||||
PKG_EXS.PRC_RESP_ARG_STR_SET(NIDENT => NIDENT, SARG => PKG_EXS.SCONT_FLD_SERR, SVALUE => sqlerrm);
|
|
||||||
end PROCESS_AGN_INFO_RESP;
|
|
||||||
|
|
||||||
/* Îáðàáîòêà çàïðîñà íà ñîçäàíèå ñåññèè */
|
/* Îáðàáîòêà çàïðîñà íà ñîçäàíèå ñåññèè */
|
||||||
procedure RESP_LOGIN
|
procedure UTL_LOGIN
|
||||||
(
|
(
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
@ -298,472 +83,100 @@ create or replace package body UDO_PKG_EXS_TEST as
|
|||||||
exception
|
exception
|
||||||
when others then
|
when others then
|
||||||
PKG_EXS.PRC_RESP_ARG_STR_SET(NIDENT => NIDENT, SARG => PKG_EXS.SCONT_FLD_SERR, SVALUE => sqlerrm);
|
PKG_EXS.PRC_RESP_ARG_STR_SET(NIDENT => NIDENT, SARG => PKG_EXS.SCONT_FLD_SERR, SVALUE => sqlerrm);
|
||||||
end RESP_LOGIN;
|
end UTL_LOGIN;
|
||||||
|
|
||||||
/* Îáðàáîòêà çàïðîñà íà ïîèñê êîíòðàãåíòà */
|
/* Çàïðîñèòü êîíòðàãåíòà íà óäàë¸ííîì ñåðâåðå */
|
||||||
procedure RESP_FIND_AGENT
|
procedure AGENT_GET_INFO
|
||||||
(
|
(
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
NCOMPANY in number, -- Ðåã. íîìåð îðãàíèçàöèè
|
||||||
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
NREMOTE_AGENT in number -- Ðåã. íîìåð êîíòðàãåíòà â óäàë¸ííîé ÁÄ
|
||||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
HELPER_PATTERNS THELPER_PATTERNS; -- Êîëëåêöèÿ øàáëîíîâ âñïîìîãàòåëüíûõ ñëîâ ïîèñêà
|
RCTMP sys_refcursor; -- Áóôåð äëÿ èçìåíåííîé ïîçèöèè î÷åðåäè
|
||||||
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
begin
|
||||||
CTMP clob; -- Áóôåð äëÿ êîíâåðòàöèè
|
/* Ïîìåñòèì çàäàíèå â î÷åðåäü */
|
||||||
CRESP clob; -- Äàííûå äëÿ îòâåòà
|
PKG_EXS.QUEUE_PUT(SEXSSERVICE => 'ÒåñòîâûéÑòåíä',
|
||||||
RCTMP sys_refcursor; -- Áóôåð äëÿ èçìåíåííîé ïîçèöèè î÷åðåäè
|
SEXSSERVICEFN => 'Ïîëó÷åíèåÊîíòðàãåíòà',
|
||||||
begin
|
BMSG => CLOB2BLOB(LCDATA => '{"SACTION":"GET_AGENT","NAGENT":' || TO_CHAR(NREMOTE_AGENT) ||
|
||||||
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
',"NCOMPANY":' || TO_CHAR(NCOMPANY) || '}'),
|
||||||
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
RCQUEUE => RCTMP);
|
||||||
/* Èíèöèàëèçèðóåì êîëëåêöèþ ñëîâ-ïîìîøíèêîâ */
|
end AGENT_GET_INFO;
|
||||||
UTL_HELPER_INIT_COMMON(HELPER_PATTERNS => HELPER_PATTERNS);
|
|
||||||
/* Íàïîëíÿåì å¸ çíà÷åíèÿìè èíäèâèäóàëüíûìè äëÿ äàííîãî çàïðîñà */
|
|
||||||
HELPER_PATTERNS.EXTEND();
|
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'êîíòðàãåíò%';
|
|
||||||
/* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
|
|
||||||
CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8');
|
|
||||||
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
|
|
||||||
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
|
|
||||||
/* Åñëè åñòü ÷òî èñêàòü */
|
|
||||||
if (CTMP is not null) then
|
|
||||||
/* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */
|
|
||||||
CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS);
|
|
||||||
/* Èíèöèàëèçèðóåì îòâåò */
|
|
||||||
CRESP := 'Êîíòðàãåíò íå íàéäåí';
|
|
||||||
/* Èùåì çàïðîøåííîãî êîíòðàãåíòà */
|
|
||||||
for C in (select T.AGNNAME ||
|
|
||||||
DECODE(T.AGNTYPE, 1, ', ôèçè÷åñêîå ëèöî', ', þðèäè÷åñêîå ëèöî') SAGENT,
|
|
||||||
(select count(CN.RN) from CONTRACTS CN where CN.AGENT = T.RN) NCNT_CONTRACTS,
|
|
||||||
(select sum(CN.DOC_SUM) from CONTRACTS CN where CN.AGENT = T.RN) NSUM_CONTRACTS
|
|
||||||
from AGNLIST T
|
|
||||||
where ((LOWER(T.AGNABBR) like LOWER(CTMP)) or (LOWER(T.AGNNAME) like LOWER(CTMP)))
|
|
||||||
and ROWNUM <= 1)
|
|
||||||
loop
|
|
||||||
CRESP := C.SAGENT;
|
|
||||||
if (C.NCNT_CONTRACTS = 0) then
|
|
||||||
CRESP := CRESP || ', íå èìååò çàðåãèñòðèðîâàííûõ â ñèñòåìå äîãîâîðîâ';
|
|
||||||
else
|
|
||||||
CRESP := CRESP || ', çàðåãèñòðèðîâàíî äîãîâîðîâ: ' || TO_CHAR(C.NCNT_CONTRACTS);
|
|
||||||
if (C.NSUM_CONTRACTS <> 0) then
|
|
||||||
CRESP := CRESP || ', íà îáùóþ ñóììó: ' || TO_CHAR(C.NSUM_CONTRACTS) || ' ðóá.';
|
|
||||||
end if;
|
|
||||||
end if;
|
|
||||||
end loop;
|
|
||||||
else
|
|
||||||
CRESP := 'Íå óêàçàí ïîèñêîâûé çàïðîñ';
|
|
||||||
end if;
|
|
||||||
/* Âîçâðàùàåì îòâåò */
|
|
||||||
PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT,
|
|
||||||
SARG => PKG_EXS.SCONT_FLD_BRESP,
|
|
||||||
BVALUE => CLOB2BLOB(LCDATA => CRESP, SCHARSET => 'UTF8'));
|
|
||||||
end RESP_FIND_AGENT;
|
|
||||||
|
|
||||||
/* Îáðàáîòêà çàïðîñà íà ïîèñê äîãîâîðà */
|
/* Îáðàáîòêà îòâåòà ñ èíôîðìàöèåé î êîíòðàãåíòå îò òåñòîâîãî ñòåíäà */
|
||||||
procedure RESP_FIND_CONTRACT
|
procedure AGENT_PROCESS_INFO
|
||||||
(
|
(
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
||||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
HELPER_PATTERNS THELPER_PATTERNS; -- Êîëëåêöèÿ øàáëîíîâ âñïîìîãàòåëüíûõ ñëîâ ïîèñêà
|
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
||||||
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
CMSG clob; -- Áóôåð äëÿ çàïðîñà
|
||||||
CTMP clob; -- Áóôåð äëÿ êîíâåðòàöèè
|
CRESP clob; -- Áóôåð äëÿ îòâåòà
|
||||||
CRESP clob; -- Äàííûå äëÿ îòâåòà
|
RCTMP sys_refcursor; -- Áóôåð äëÿ èçìåíåííîé ïîçèöèè î÷åðåäè
|
||||||
RCTMP sys_refcursor; -- Áóôåð äëÿ èçìåíåííîé ïîçèöèè î÷åðåäè
|
NCOMPANY PKG_STD.TREF; -- Ðåã. íîìåð îðãàíèçàöèè
|
||||||
|
NCRN PKG_STD.TREF; -- Ðåã. íîìåð êàòàëîãà
|
||||||
|
SAGNABBR AGNLIST.AGNABBR%type; -- Ìíåìîêîä êîíòðàãåíòà
|
||||||
|
SAGNNAME AGNLIST.AGNNAME%type; -- Íàèìåíîâàíèå êîíòðàãåíòà
|
||||||
|
NAGENT AGNLIST.RN%type; -- Ðåã. íîìåð äîáàâëåííîãî êîíòðàãåíòà
|
||||||
begin
|
begin
|
||||||
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
||||||
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
||||||
/* Èíèöèàëèçèðóåì êîëëåêöèþ ñëîâ-ïîìîøíèêîâ */
|
/* Ñ÷èòàåì çàïðîñ ñåðâåðó */
|
||||||
UTL_HELPER_INIT_COMMON(HELPER_PATTERNS => HELPER_PATTERNS);
|
CMSG := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
|
||||||
/* Íàïîëíÿåì å¸ çíà÷åíèÿìè èíäèâèäóàëüíûìè äëÿ äàííîãî çàïðîñà */
|
/* Ñ÷èòàåì îòâåò ñåðâåðà è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
|
||||||
HELPER_PATTERNS.EXTEND();
|
CRESP := BLOB2CLOB(LBDATA => REXSQUEUE.RESP, SCHARSET => 'UTF8');
|
||||||
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'äîãîâîð%';
|
|
||||||
/* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
|
|
||||||
CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8');
|
|
||||||
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
|
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
|
||||||
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
|
PKG_EXS.QUEUE_RESP_SET(NEXSQUEUE => REXSQUEUE.RN, BRESP => CLOB2BLOB(LCDATA => CRESP), RCQUEUE => RCTMP);
|
||||||
/* Åñëè åñòü ÷òî èñêàòü */
|
/* Çàáåðåì îðãàíèçàöèþ èç èñõîäÿùåãî ñîîáùåíèÿ */
|
||||||
if (CTMP is not null) then
|
begin
|
||||||
/* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */
|
select EXTRACTVALUE(XMLTYPE(CMSG), '/MSG/NCOMPANY') NCOMPANY into NCOMPANY from DUAL;
|
||||||
CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS);
|
exception
|
||||||
/* Èùåì çàïðîøåííûé äîãîâîð */
|
when others then
|
||||||
|
P_EXCEPTION(0, 'Íå óäàëîñü îïðåäåëèòü îðãàíèçàöèþ');
|
||||||
|
end;
|
||||||
|
if (NCOMPANY is null) then
|
||||||
|
P_EXCEPTION(0, 'Â èñõîäÿùåì ñîîáùåíèè íå óêàçàíà îðãàíèçàöèÿ');
|
||||||
|
end if;
|
||||||
|
/* Ðàçáèðàåì îòâåò ñåðâåðà */
|
||||||
|
if (CRESP is not null) then
|
||||||
begin
|
begin
|
||||||
select DECODE(T.INOUT_SIGN, 0, 'Âõîäÿùèé', 'Èñõîäÿùèé') || ' äîãîâîð ¹' ||
|
select EXTRACTVALUE(XMLTYPE(CRESP), '/AGENT/SAGNABBR') SAGNABBR,
|
||||||
NVL(T.EXT_NUMBER, trim(T.DOC_PREF) || '-' || trim(T.DOC_NUMB)) || ' îò ' ||
|
EXTRACTVALUE(XMLTYPE(CRESP), '/AGENT/SAGNNAME') SAGNNAME
|
||||||
TO_CHAR(T.DOC_DATE, 'dd.mm.yyyy') || ' ñ êîíòðàãåíòîì ' || AG.AGNNAME || ' íà ñóììó ' ||
|
into SAGNABBR,
|
||||||
TO_CHAR(T.DOC_SUM) || ' ' || CN.INTCODE || ', îïëà÷åíî ' || TO_CHAR(T.FACT_OUTPAY_SUM) || ' ' ||
|
SAGNNAME
|
||||||
CN.INTCODE SDOC
|
from DUAL;
|
||||||
into CRESP
|
|
||||||
from CONTRACTS T,
|
|
||||||
AGNLIST AG,
|
|
||||||
CURNAMES CN
|
|
||||||
where ((LOWER(T.EXT_NUMBER) like LOWER(CTMP)) or
|
|
||||||
(LOWER(trim(T.DOC_PREF) || trim(T.DOC_NUMB)) like LOWER(CTMP)))
|
|
||||||
and T.AGENT = AG.RN
|
|
||||||
and T.CURRENCY = CN.RN
|
|
||||||
and ROWNUM <= 1;
|
|
||||||
exception
|
exception
|
||||||
when NO_DATA_FOUND then
|
when others then
|
||||||
CRESP := 'Äîãîâîð íå íàéäåí';
|
P_EXCEPTION(0, 'Íåîæèäàííûé îòâåò ñåðâåðà.');
|
||||||
end;
|
end;
|
||||||
else
|
else
|
||||||
CRESP := 'Íå óêàçàí ïîèñêîâûé çàïðîñ';
|
P_EXCEPTION(0, 'Íå óêàçàíû äàííûå äëÿ äîáàâëåíèÿ êîíòðàãåíòà.');
|
||||||
end if;
|
end if;
|
||||||
/* Âîçâðàùàåì îòâåò */
|
if (SAGNABBR is null) then
|
||||||
PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT,
|
P_EXCEPTION(0, 'Â îòâåòå ñåðâåðà íå óêàçàí ìíåìîêîä êîíòðàãåíòà.');
|
||||||
SARG => PKG_EXS.SCONT_FLD_BRESP,
|
|
||||||
BVALUE => CLOB2BLOB(LCDATA => CRESP, SCHARSET => 'UTF8'));
|
|
||||||
end RESP_FIND_CONTRACT;
|
|
||||||
|
|
||||||
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - àóòåíòèôèêàöèÿ */
|
|
||||||
procedure INV_CHECKAUTH_XML
|
|
||||||
(
|
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
||||||
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
|
||||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
|
||||||
)
|
|
||||||
is
|
|
||||||
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
|
||||||
/**/
|
|
||||||
SREQDEVICEID varchar2(30);
|
|
||||||
XCHECKAUTHRESPONSE DBMS_XMLDOM.DOMNODE;
|
|
||||||
XRESULT DBMS_XMLDOM.DOMNODE;
|
|
||||||
XNODE DBMS_XMLDOM.DOMNODE;
|
|
||||||
CRESPONSE clob;
|
|
||||||
XDOC DBMS_XMLDOM.DOMDOCUMENT;
|
|
||||||
/**/
|
|
||||||
XMLPARCER DBMS_XMLPARSER.PARSER;
|
|
||||||
XENVELOPE DBMS_XMLDOM.DOMNODE;
|
|
||||||
XBODY DBMS_XMLDOM.DOMNODE;
|
|
||||||
XNODELIST DBMS_XMLDOM.DOMNODELIST;
|
|
||||||
XNODE_ROOT DBMS_XMLDOM.DOMNODE;
|
|
||||||
SNODE varchar2(100);
|
|
||||||
CREQ clob;
|
|
||||||
/**/
|
|
||||||
STSD constant varchar2(20) := 'tsd';
|
|
||||||
SCHECKAUTHRESPONSE constant varchar2(20) := 'CheckAuthResponse';
|
|
||||||
SDEVICEID constant varchar2(20) := 'DeviceID';
|
|
||||||
SRESULT constant varchar2(20) := 'Result';
|
|
||||||
SSOAPENV constant varchar2(20) := 'soapenv';
|
|
||||||
SENVELOPE constant varchar2(20) := 'Envelope';
|
|
||||||
SHEADER constant varchar2(20) := 'Header';
|
|
||||||
SBODY constant varchar2(20) := 'Body';
|
|
||||||
/* Ñîçäàíèå âåòêè XML */
|
|
||||||
function CREATENODE
|
|
||||||
(
|
|
||||||
STAG in varchar2,
|
|
||||||
SNS in varchar2 default null,
|
|
||||||
SVAL in varchar2 default null
|
|
||||||
) return DBMS_XMLDOM.DOMNODE is
|
|
||||||
XEL DBMS_XMLDOM.DOMELEMENT;
|
|
||||||
XNODE DBMS_XMLDOM.DOMNODE;
|
|
||||||
XTEXT DBMS_XMLDOM.DOMNODE;
|
|
||||||
begin
|
|
||||||
if SNS is not null then
|
|
||||||
XEL := DBMS_XMLDOM.CREATEELEMENT(DOC => XDOC, TAGNAME => STAG, NS => SNS);
|
|
||||||
XNODE := DBMS_XMLDOM.MAKENODE(XEL);
|
|
||||||
DBMS_XMLDOM.SETPREFIX(N => XNODE, PREFIX => SNS);
|
|
||||||
else
|
|
||||||
XEL := DBMS_XMLDOM.CREATEELEMENT(DOC => XDOC, TAGNAME => STAG);
|
|
||||||
XNODE := DBMS_XMLDOM.MAKENODE(XEL);
|
|
||||||
end if;
|
|
||||||
if SVAL is not null then
|
|
||||||
XTEXT := DBMS_XMLDOM.APPENDCHILD(XNODE, DBMS_XMLDOM.MAKENODE(DBMS_XMLDOM.CREATETEXTNODE(XDOC, SVAL)));
|
|
||||||
end if;
|
|
||||||
return XNODE;
|
|
||||||
end;
|
|
||||||
/* Ñ÷èòûâàíèå çíà÷åíèÿ âåòêè XML */
|
|
||||||
function GETNODEVAL
|
|
||||||
(
|
|
||||||
XROOTNODE in DBMS_XMLDOM.DOMNODE,
|
|
||||||
SPATTERN in varchar2
|
|
||||||
) return varchar2 is
|
|
||||||
XNODE DBMS_XMLDOM.DOMNODE;
|
|
||||||
SVAL varchar2(100);
|
|
||||||
begin
|
|
||||||
XNODE := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XROOTNODE, PATTERN => SPATTERN);
|
|
||||||
if DBMS_XMLDOM.ISNULL(XNODE) then
|
|
||||||
return null;
|
|
||||||
end if;
|
|
||||||
SVAL := DBMS_XMLDOM.GETNODEVALUE(DBMS_XMLDOM.GETFIRSTCHILD(N => XNODE));
|
|
||||||
return SVAL;
|
|
||||||
end GETNODEVAL;
|
|
||||||
/* Ñîçäàíèå äîêóìåíòà äëÿ îòâåòà */
|
|
||||||
procedure CREATERESPONSEDOC is
|
|
||||||
begin
|
|
||||||
XDOC := DBMS_XMLDOM.NEWDOMDOCUMENT;
|
|
||||||
DBMS_XMLDOM.SETVERSION(XDOC
|
|
||||||
,'1.0" encoding="UTF-8');
|
|
||||||
DBMS_XMLDOM.SETCHARSET(XDOC
|
|
||||||
,'UTF-8');
|
|
||||||
end;
|
|
||||||
/* Ñîçäàíèå îòâåòà */
|
|
||||||
function CREATERESPONSE(XCONTENT in DBMS_XMLDOM.DOMNODE) return clob is
|
|
||||||
XMAIN_NODE DBMS_XMLDOM.DOMNODE;
|
|
||||||
XENVELOPE_EL DBMS_XMLDOM.DOMELEMENT;
|
|
||||||
XENVELOPE DBMS_XMLDOM.DOMNODE;
|
|
||||||
XHEADER DBMS_XMLDOM.DOMNODE;
|
|
||||||
XBODY DBMS_XMLDOM.DOMNODE;
|
|
||||||
XNODE DBMS_XMLDOM.DOMNODE;
|
|
||||||
CDATA clob;
|
|
||||||
begin
|
|
||||||
-- Document
|
|
||||||
XMAIN_NODE := DBMS_XMLDOM.MAKENODE(XDOC);
|
|
||||||
-- Envelope
|
|
||||||
XENVELOPE_EL := DBMS_XMLDOM.CREATEELEMENT(DOC => XDOC, TAGNAME => SENVELOPE, NS => SSOAPENV);
|
|
||||||
DBMS_XMLDOM.SETATTRIBUTE(ELEM => XENVELOPE_EL,
|
|
||||||
name => 'xmlns:soapenv',
|
|
||||||
NEWVALUE => 'http://schemas.xmlsoap.org/soap/envelope/');
|
|
||||||
DBMS_XMLDOM.SETATTRIBUTE(ELEM => XENVELOPE_EL, name => 'xmlns:tsd', NEWVALUE => 'http://www.example.org/TSDService/');
|
|
||||||
XENVELOPE := DBMS_XMLDOM.MAKENODE(XENVELOPE_EL);
|
|
||||||
DBMS_XMLDOM.SETPREFIX(N => XENVELOPE, PREFIX => SSOAPENV);
|
|
||||||
XENVELOPE := DBMS_XMLDOM.APPENDCHILD(N => XMAIN_NODE, NEWCHILD => XENVELOPE);
|
|
||||||
-- Header
|
|
||||||
XHEADER := CREATENODE(SHEADER, SSOAPENV);
|
|
||||||
XHEADER := DBMS_XMLDOM.APPENDCHILD(N => XENVELOPE, NEWCHILD => XHEADER);
|
|
||||||
-- Body
|
|
||||||
XBODY := CREATENODE(SBODY, SSOAPENV);
|
|
||||||
XBODY := DBMS_XMLDOM.APPENDCHILD(N => XENVELOPE, NEWCHILD => XBODY);
|
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XBODY, NEWCHILD => XCONTENT);
|
|
||||||
-- Ñîçäàåì CLOB
|
|
||||||
DBMS_LOB.CREATETEMPORARY(LOB_LOC => CDATA, CACHE => true, DUR => DBMS_LOB.SESSION);
|
|
||||||
DBMS_XMLDOM.WRITETOCLOB(XDOC, CDATA, 'UTF-8');
|
|
||||||
DBMS_XMLDOM.FREEDOCUMENT(DOC => XDOC);
|
|
||||||
return CDATA;
|
|
||||||
end;
|
|
||||||
begin
|
|
||||||
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
|
||||||
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
|
||||||
/* Êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
|
|
||||||
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
|
|
||||||
-- Ñîçäàåì èíñòàíñ XML ïàðñåðà
|
|
||||||
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
|
|
||||||
-- Ñ÷èòûâàåì XML èç çàïðîñà
|
|
||||||
DBMS_XMLPARSER.PARSECLOB(XMLPARCER
|
|
||||||
,CREQ);
|
|
||||||
-- Áåðåì XML äîêóìåíò
|
|
||||||
XDOC := DBMS_XMLPARSER.GETDOCUMENT(XMLPARCER);
|
|
||||||
-- Ñ÷èòûâàåì Êîðíåâîé ýëåìåíò
|
|
||||||
XENVELOPE := DBMS_XMLDOM.MAKENODE(DBMS_XMLDOM.GETDOCUMENTELEMENT(XDOC));
|
|
||||||
-- Ñ÷èòûâàåì ýëåìåíò Body
|
|
||||||
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(XENVELOPE
|
|
||||||
,SBODY);
|
|
||||||
-- Ñ÷èòûâàåì äî÷åðíèå ýëåìåíòû ê Body
|
|
||||||
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(XBODY);
|
|
||||||
-- Áåðåì ïåðâûé äî÷åðíèé ýëåìåíò
|
|
||||||
XNODE_ROOT := DBMS_XMLDOM.ITEM(XNODELIST
|
|
||||||
,0);
|
|
||||||
-- Ñ÷èòàåì èìÿ ýëåìåíòà
|
|
||||||
DBMS_XMLDOM.GETLOCALNAME(XNODE_ROOT
|
|
||||||
,SNODE);
|
|
||||||
-- Ñ÷èòûâàåì DeviceID
|
|
||||||
SREQDEVICEID := GETNODEVAL(XNODE_ROOT
|
|
||||||
,SDEVICEID);
|
|
||||||
--CHECK_ID(SREQDEVICEID);
|
|
||||||
CREATERESPONSEDOC();
|
|
||||||
if SREQDEVICEID is not null
|
|
||||||
then
|
|
||||||
XCHECKAUTHRESPONSE := CREATENODE(SCHECKAUTHRESPONSE
|
|
||||||
,STSD);
|
|
||||||
XRESULT := CREATENODE(SRESULT
|
|
||||||
,STSD
|
|
||||||
,'true');
|
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XCHECKAUTHRESPONSE
|
|
||||||
,NEWCHILD => XRESULT);
|
|
||||||
CRESPONSE := CREATERESPONSE(XCHECKAUTHRESPONSE);
|
|
||||||
end if;
|
end if;
|
||||||
/* Âîçâðàùàåì îòâåò */
|
if (SAGNNAME is null) then
|
||||||
PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT,
|
P_EXCEPTION(0,
|
||||||
SARG => PKG_EXS.SCONT_FLD_BRESP,
|
'Â îòâåòå ñåðâåðà íå óêàçàíî íàèìåíîâàíèå êîíòðàãåíòà.');
|
||||||
BVALUE => CLOB2BLOB(LCDATA => CRESPONSE));
|
|
||||||
end;
|
|
||||||
|
|
||||||
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - ñ÷èòûâàíèå ïîëüçîâàòåëåé */
|
|
||||||
procedure INV_GETUSERS_XML
|
|
||||||
(
|
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
||||||
NSRV_TYPE in number, -- Òèï ñåðâèñà (ñì. êîíñòàíòû PKG_EXS.NSRV_TYPE*)
|
|
||||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
|
||||||
)
|
|
||||||
is
|
|
||||||
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
|
||||||
/**/
|
|
||||||
SREQDEVICEID varchar2(30);
|
|
||||||
XGETUSERSRESPONSE DBMS_XMLDOM.DOMNODE;
|
|
||||||
XITEM DBMS_XMLDOM.DOMNODE;
|
|
||||||
XCODE DBMS_XMLDOM.DOMNODE;
|
|
||||||
XNAME DBMS_XMLDOM.DOMNODE;
|
|
||||||
XNODE DBMS_XMLDOM.DOMNODE;
|
|
||||||
CRESPONSE clob;
|
|
||||||
XDOC DBMS_XMLDOM.DOMDOCUMENT;
|
|
||||||
/**/
|
|
||||||
XMLPARCER DBMS_XMLPARSER.PARSER;
|
|
||||||
XENVELOPE DBMS_XMLDOM.DOMNODE;
|
|
||||||
XBODY DBMS_XMLDOM.DOMNODE;
|
|
||||||
XNODELIST DBMS_XMLDOM.DOMNODELIST;
|
|
||||||
XNODE_ROOT DBMS_XMLDOM.DOMNODE;
|
|
||||||
SNODE varchar2(100);
|
|
||||||
CREQ clob;
|
|
||||||
/**/
|
|
||||||
STSD constant varchar2(20) := 'tsd';
|
|
||||||
SGETUSERSRESPONSE constant varchar2(20) := 'GetUsersResponse';
|
|
||||||
SDEVICEID constant varchar2(20) := 'DeviceID';
|
|
||||||
SRESULT constant varchar2(20) := 'Result';
|
|
||||||
SSOAPENV constant varchar2(20) := 'soapenv';
|
|
||||||
SENVELOPE constant varchar2(20) := 'Envelope';
|
|
||||||
SHEADER constant varchar2(20) := 'Header';
|
|
||||||
SBODY constant varchar2(20) := 'Body';
|
|
||||||
SITEM constant varchar2(20) := 'Item';
|
|
||||||
SCODE constant varchar2(20) := 'Code';
|
|
||||||
SNAME constant varchar2(20) := 'Name';
|
|
||||||
/* Ñîçäàíèå âåòêè XML */
|
|
||||||
function CREATENODE
|
|
||||||
(
|
|
||||||
STAG in varchar2,
|
|
||||||
SNS in varchar2 default null,
|
|
||||||
SVAL in varchar2 default null
|
|
||||||
) return DBMS_XMLDOM.DOMNODE is
|
|
||||||
XEL DBMS_XMLDOM.DOMELEMENT;
|
|
||||||
XNODE DBMS_XMLDOM.DOMNODE;
|
|
||||||
XTEXT DBMS_XMLDOM.DOMNODE;
|
|
||||||
begin
|
|
||||||
if SNS is not null then
|
|
||||||
XEL := DBMS_XMLDOM.CREATEELEMENT(DOC => XDOC, TAGNAME => STAG, NS => SNS);
|
|
||||||
XNODE := DBMS_XMLDOM.MAKENODE(XEL);
|
|
||||||
DBMS_XMLDOM.SETPREFIX(N => XNODE, PREFIX => SNS);
|
|
||||||
else
|
|
||||||
XEL := DBMS_XMLDOM.CREATEELEMENT(DOC => XDOC, TAGNAME => STAG);
|
|
||||||
XNODE := DBMS_XMLDOM.MAKENODE(XEL);
|
|
||||||
end if;
|
|
||||||
if SVAL is not null then
|
|
||||||
XTEXT := DBMS_XMLDOM.APPENDCHILD(XNODE, DBMS_XMLDOM.MAKENODE(DBMS_XMLDOM.CREATETEXTNODE(XDOC, SVAL)));
|
|
||||||
end if;
|
|
||||||
return XNODE;
|
|
||||||
end;
|
|
||||||
/* Ñ÷èòûâàíèå çíà÷åíèÿ âåòêè XML */
|
|
||||||
function GETNODEVAL
|
|
||||||
(
|
|
||||||
XROOTNODE in DBMS_XMLDOM.DOMNODE,
|
|
||||||
SPATTERN in varchar2
|
|
||||||
) return varchar2 is
|
|
||||||
XNODE DBMS_XMLDOM.DOMNODE;
|
|
||||||
SVAL varchar2(100);
|
|
||||||
begin
|
|
||||||
XNODE := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XROOTNODE, PATTERN => SPATTERN);
|
|
||||||
if DBMS_XMLDOM.ISNULL(XNODE) then
|
|
||||||
return null;
|
|
||||||
end if;
|
|
||||||
SVAL := DBMS_XMLDOM.GETNODEVALUE(DBMS_XMLDOM.GETFIRSTCHILD(N => XNODE));
|
|
||||||
return SVAL;
|
|
||||||
end GETNODEVAL;
|
|
||||||
/* Ñîçäàíèå äîêóìåíòà äëÿ îòâåòà */
|
|
||||||
procedure CREATERESPONSEDOC is
|
|
||||||
begin
|
|
||||||
XDOC := DBMS_XMLDOM.NEWDOMDOCUMENT;
|
|
||||||
DBMS_XMLDOM.SETVERSION(XDOC
|
|
||||||
,'1.0" encoding="UTF-8');
|
|
||||||
DBMS_XMLDOM.SETCHARSET(XDOC
|
|
||||||
,'UTF-8');
|
|
||||||
end;
|
|
||||||
/* Ñîçäàíèå îòâåòà */
|
|
||||||
function CREATERESPONSE(XCONTENT in DBMS_XMLDOM.DOMNODE) return clob is
|
|
||||||
XMAIN_NODE DBMS_XMLDOM.DOMNODE;
|
|
||||||
XENVELOPE_EL DBMS_XMLDOM.DOMELEMENT;
|
|
||||||
XENVELOPE DBMS_XMLDOM.DOMNODE;
|
|
||||||
XHEADER DBMS_XMLDOM.DOMNODE;
|
|
||||||
XBODY DBMS_XMLDOM.DOMNODE;
|
|
||||||
XNODE DBMS_XMLDOM.DOMNODE;
|
|
||||||
CDATA clob;
|
|
||||||
begin
|
|
||||||
-- Document
|
|
||||||
XMAIN_NODE := DBMS_XMLDOM.MAKENODE(XDOC);
|
|
||||||
-- Envelope
|
|
||||||
XENVELOPE_EL := DBMS_XMLDOM.CREATEELEMENT(DOC => XDOC, TAGNAME => SENVELOPE, NS => SSOAPENV);
|
|
||||||
DBMS_XMLDOM.SETATTRIBUTE(ELEM => XENVELOPE_EL,
|
|
||||||
name => 'xmlns:soapenv',
|
|
||||||
NEWVALUE => 'http://schemas.xmlsoap.org/soap/envelope/');
|
|
||||||
DBMS_XMLDOM.SETATTRIBUTE(ELEM => XENVELOPE_EL, name => 'xmlns:tsd', NEWVALUE => 'http://www.example.org/TSDService/');
|
|
||||||
XENVELOPE := DBMS_XMLDOM.MAKENODE(XENVELOPE_EL);
|
|
||||||
DBMS_XMLDOM.SETPREFIX(N => XENVELOPE, PREFIX => SSOAPENV);
|
|
||||||
XENVELOPE := DBMS_XMLDOM.APPENDCHILD(N => XMAIN_NODE, NEWCHILD => XENVELOPE);
|
|
||||||
-- Header
|
|
||||||
XHEADER := CREATENODE(SHEADER, SSOAPENV);
|
|
||||||
XHEADER := DBMS_XMLDOM.APPENDCHILD(N => XENVELOPE, NEWCHILD => XHEADER);
|
|
||||||
-- Body
|
|
||||||
XBODY := CREATENODE(SBODY, SSOAPENV);
|
|
||||||
XBODY := DBMS_XMLDOM.APPENDCHILD(N => XENVELOPE, NEWCHILD => XBODY);
|
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XBODY, NEWCHILD => XCONTENT);
|
|
||||||
-- Ñîçäàåì CLOB
|
|
||||||
DBMS_LOB.CREATETEMPORARY(LOB_LOC => CDATA, CACHE => true, DUR => DBMS_LOB.SESSION);
|
|
||||||
DBMS_XMLDOM.WRITETOCLOB(XDOC, CDATA, 'UTF-8');
|
|
||||||
DBMS_XMLDOM.FREEDOCUMENT(DOC => XDOC);
|
|
||||||
return CDATA;
|
|
||||||
end;
|
|
||||||
begin
|
|
||||||
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
|
||||||
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
|
||||||
/* Êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
|
|
||||||
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
|
|
||||||
-- Ñîçäàåì èíñòàíñ XML ïàðñåðà
|
|
||||||
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
|
|
||||||
-- Ñ÷èòûâàåì XML èç çàïðîñà
|
|
||||||
DBMS_XMLPARSER.PARSECLOB(XMLPARCER
|
|
||||||
,CREQ);
|
|
||||||
-- Áåðåì XML äîêóìåíò
|
|
||||||
XDOC := DBMS_XMLPARSER.GETDOCUMENT(XMLPARCER);
|
|
||||||
-- Ñ÷èòûâàåì Êîðíåâîé ýëåìåíò
|
|
||||||
XENVELOPE := DBMS_XMLDOM.MAKENODE(DBMS_XMLDOM.GETDOCUMENTELEMENT(XDOC));
|
|
||||||
-- Ñ÷èòûâàåì ýëåìåíò Body
|
|
||||||
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(XENVELOPE
|
|
||||||
,SBODY);
|
|
||||||
-- Ñ÷èòûâàåì äî÷åðíèå ýëåìåíòû ê Body
|
|
||||||
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(XBODY);
|
|
||||||
-- Áåðåì ïåðâûé äî÷åðíèé ýëåìåíò
|
|
||||||
XNODE_ROOT := DBMS_XMLDOM.ITEM(XNODELIST
|
|
||||||
,0);
|
|
||||||
-- Ñ÷èòàåì èìÿ ýëåìåíòà
|
|
||||||
DBMS_XMLDOM.GETLOCALNAME(XNODE_ROOT
|
|
||||||
,SNODE);
|
|
||||||
-- Ñ÷èòûâàåì DeviceID
|
|
||||||
SREQDEVICEID := GETNODEVAL(XNODE_ROOT
|
|
||||||
,SDEVICEID);
|
|
||||||
--CHECK_ID(SREQDEVICEID);
|
|
||||||
CREATERESPONSEDOC();
|
|
||||||
if SREQDEVICEID is not null
|
|
||||||
then
|
|
||||||
XGETUSERSRESPONSE := CREATENODE(SGETUSERSRESPONSE
|
|
||||||
,STSD);
|
|
||||||
for REC in (select T.RN
|
|
||||||
,A.AGNABBR
|
|
||||||
from INVPERSONS T
|
|
||||||
,AGNLIST A
|
|
||||||
where T.COMPANY = 136018
|
|
||||||
and T.AGNLIST = A.RN)
|
|
||||||
loop
|
|
||||||
XITEM := CREATENODE(SITEM
|
|
||||||
,STSD);
|
|
||||||
XCODE := CREATENODE(SCODE
|
|
||||||
,STSD
|
|
||||||
,REC.RN);
|
|
||||||
XNAME := CREATENODE(SNAME
|
|
||||||
,STSD
|
|
||||||
,REC.AGNABBR);
|
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM
|
|
||||||
,NEWCHILD => XCODE);
|
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM
|
|
||||||
,NEWCHILD => XNAME);
|
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XGETUSERSRESPONSE
|
|
||||||
,NEWCHILD => XITEM);
|
|
||||||
end loop;
|
|
||||||
CRESPONSE := CREATERESPONSE(XGETUSERSRESPONSE);
|
|
||||||
end if;
|
end if;
|
||||||
/* Âîçâðàùàåì îòâåò */
|
/* Íàéä¸ì êàòàëîã */
|
||||||
PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT,
|
FIND_ACATALOG_NAME(NFLAG_SMART => 0,
|
||||||
SARG => PKG_EXS.SCONT_FLD_BRESP,
|
NCOMPANY => NCOMPANY,
|
||||||
BVALUE => CLOB2BLOB(LCDATA => CRESPONSE, sCHARSET => 'UTF8'));
|
NVERSION => null,
|
||||||
end;
|
SUNITCODE => 'AGNLIST',
|
||||||
|
SNAME => 'ExchangeService',
|
||||||
|
NRN => NCRN);
|
||||||
|
/* Ðåãèñòðèðóåì êîíòðàãåíòà */
|
||||||
|
P_AGNLIST_BASE_INSERT(NCOMPANY => NCOMPANY,
|
||||||
|
NCRN => NCRN,
|
||||||
|
SAGNABBR => SUBSTR(NIDENT || SAGNABBR, 1, 20),
|
||||||
|
SAGNNAME => SAGNNAME || ' ' || NIDENT,
|
||||||
|
NRN => NAGENT);
|
||||||
|
exception
|
||||||
|
when others then
|
||||||
|
PKG_EXS.PRC_RESP_ARG_STR_SET(NIDENT => NIDENT, SARG => PKG_EXS.SCONT_FLD_SERR, SVALUE => sqlerrm);
|
||||||
|
end AGENT_PROCESS_INFO;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
/
|
/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user