Перенёс расширения для Алисы в отдельный репозиторий
This commit is contained in:
parent
cb1b5f6954
commit
5d7b5109f4
5
.gitignore
vendored
5
.gitignore
vendored
@ -2,7 +2,4 @@
|
||||
node_modules/
|
||||
|
||||
# VS Code
|
||||
.vscode/
|
||||
|
||||
# Static files
|
||||
static/
|
||||
.vscode/
|
@ -1,577 +0,0 @@
|
||||
create or replace package UDO_PKG_EXS_ALICE as
|
||||
|
||||
/* Îáðàáîòêà çàïðîñà íà ïîèñê êîíòðàãåíòà */
|
||||
procedure FIND_AGENT
|
||||
(
|
||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||
);
|
||||
|
||||
/* Îáðàáîòêà çàïðîñà íà ïîèñê äîãîâîðà */
|
||||
procedure FIND_CONTRACT
|
||||
(
|
||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||
);
|
||||
|
||||
/* Îáðàáîòêà çàïðîñà íà ïîèñê çàêàçà ïîòðåáèòåëÿ */
|
||||
procedure FIND_CONSUMERORD
|
||||
(
|
||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||
);
|
||||
|
||||
/* Îáðàáîòêà çàïðîñà íà ïîèñê êîíòàêòíîé èíôîðìàöèè */
|
||||
procedure FIND_CONTACT
|
||||
(
|
||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||
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) := 'òàì';
|
||||
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
|
||||
/* Åñëè ïîèñêîâàÿ ôðàçà çàäàíà */
|
||||
if (SSEARCH_STR is not null) then
|
||||
/* Îáõîäèì ñëîâà ïîèñêîâîé ôðàçû */
|
||||
for W in (select REGEXP_SUBSTR(T.STR, '[^' || SDELIM || ']+', 1, level) SWRD
|
||||
from (select replace(replace(replace(replace(replace(replace(replace(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) || '%';
|
||||
/* Ïðîâåðèì, ÷òî õîòü êàêàÿ-òî çàöåïêà îñòàëîñü äëÿ ïîèñêà */
|
||||
if (replace(SRES, '%', '') is null) then
|
||||
/* Èñêàòü âñ¸ ïðîäðÿä - íå âåðíî, ñ÷èòàåì ÷òî ïîèñêîâîé ôðàçû íåò */
|
||||
SRES := null;
|
||||
end if;
|
||||
else
|
||||
/* Íåò ïîèñêîâîé ôðàçû - íåò ðåçóëüòàòà */
|
||||
SRES := null;
|
||||
end if;
|
||||
/* Âåðíåì îòâåò */
|
||||
return SRES;
|
||||
end UTL_SEARCH_STR_PREPARE;
|
||||
|
||||
/* Îáðàáîòêà çàïðîñà íà ïîèñê êîíòðàãåíòà */
|
||||
procedure FIND_AGENT
|
||||
(
|
||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||
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');
|
||||
/* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */
|
||||
CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS);
|
||||
/* Åñëè åñòü ÷òî èñêàòü */
|
||||
if (CTMP is not null) then
|
||||
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
|
||||
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
|
||||
/* Èíèöèàëèçèðóåì îòâåò */
|
||||
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
|
||||
from AGNLIST T,
|
||||
ACATALOG CAT
|
||||
where ((LOWER(CTMP) like LOWER('%' || replace(T.AGNABBR, ' ', '%') || '%')) or
|
||||
(LOWER(CTMP) like LOWER('%' || replace(T.AGNNAME, ' ', '%') || '%')) or
|
||||
((T.AGNFAMILYNAME is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME || '%'))) or
|
||||
((T.AGNFAMILYNAME_AC is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_AC || '%'))) or
|
||||
((T.AGNFAMILYNAME_ABL is not null) and
|
||||
(LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_ABL || '%'))) or
|
||||
((T.AGNFAMILYNAME_TO is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_TO || '%'))) or
|
||||
((T.AGNFAMILYNAME_FR is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_FR || '%'))))
|
||||
and T.CRN = CAT.RN
|
||||
and CAT.NAME = SSEARCH_CATALOG_NAME
|
||||
and ROWNUM <= 1)
|
||||
loop
|
||||
/* Îñíîâíàÿ èíôîðìàöèÿ */
|
||||
CRESP := C.SAGENT;
|
||||
/* Äàëåå - â çàâèñèìîñòè îò òèïà, äëÿ ÞË - ñâåäåíèÿ î äîãîâîðàõ è êîíòàêòíîì ëèöå */
|
||||
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_RESULT_SET(NIDENT => NIDENT,
|
||||
SRESULT => PKG_EXS.SPRC_RESP_RESULT_OK,
|
||||
BRESP => CLOB2BLOB(LCDATA => CRESP, SCHARSET => 'UTF8'));
|
||||
exception
|
||||
when others then
|
||||
/* Âåðí¸ì îøèáêó */
|
||||
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT, SRESULT => PKG_EXS.SPRC_RESP_RESULT_ERR, SMSG => sqlerrm);
|
||||
end FIND_AGENT;
|
||||
|
||||
/* Îáðàáîòêà çàïðîñà íà ïîèñê äîãîâîðà */
|
||||
procedure FIND_CONTRACT
|
||||
(
|
||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||
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');
|
||||
/* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */
|
||||
CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS);
|
||||
/* Åñëè åñòü ÷òî èñêàòü */
|
||||
if (CTMP is not null) then
|
||||
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
|
||||
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
|
||||
/* Èíèöèàëèçèðóåì îòâåò */
|
||||
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 (((T.EXT_NUMBER is not null) and (LOWER(CTMP) like LOWER('%' || T.EXT_NUMBER || '%'))) or
|
||||
((T.EXT_NUMBER is null) and (LOWER(CTMP) like LOWER('%' || trim(T.DOC_NUMB) || '%'))))
|
||||
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_RESULT_SET(NIDENT => NIDENT,
|
||||
SRESULT => PKG_EXS.SPRC_RESP_RESULT_OK,
|
||||
BRESP => CLOB2BLOB(LCDATA => CRESP, SCHARSET => 'UTF8'));
|
||||
exception
|
||||
when others then
|
||||
/* Âåðí¸ì îøèáêó */
|
||||
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT, SRESULT => PKG_EXS.SPRC_RESP_RESULT_ERR, SMSG => sqlerrm);
|
||||
end FIND_CONTRACT;
|
||||
|
||||
/* Îáðàáîòêà çàïðîñà íà ïîèñê çàêàçà ïîòðåáèòåëÿ */
|
||||
procedure FIND_CONSUMERORD
|
||||
(
|
||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||
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');
|
||||
/* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */
|
||||
CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS);
|
||||
/* Åñëè åñòü ÷òî èñêàòü */
|
||||
if (CTMP is not null) then
|
||||
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
|
||||
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
|
||||
/* Èíèöèàëèçèðóåì îòâåò */
|
||||
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,
|
||||
AG.AGNNAME SMANAGER
|
||||
from CONSUMERORD T,
|
||||
AGNLIST AG,
|
||||
CURNAMES CN,
|
||||
ACATALOG CAT
|
||||
where (LOWER(CTMP) like LOWER('%' || trim(T.ORD_NUMB) || '%'))
|
||||
and T.ACC_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');
|
||||
/* Ìåíåäæåð */
|
||||
if (C.SMANAGER is not null) then
|
||||
CRESP := CRESP || ', ìåíåäæåð: ' || C.SMANAGER;
|
||||
end if;
|
||||
end loop;
|
||||
else
|
||||
CRESP := 'Íå ïîíÿòíî êàêîé çàêàç Âû õîòèòå íàéòè, èçâèíèòå...';
|
||||
end if;
|
||||
/* Âîçâðàùàåì îòâåò */
|
||||
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT,
|
||||
SRESULT => PKG_EXS.SPRC_RESP_RESULT_OK,
|
||||
BRESP => CLOB2BLOB(LCDATA => CRESP, SCHARSET => 'UTF8'));
|
||||
exception
|
||||
when others then
|
||||
/* Âåðí¸ì îøèáêó */
|
||||
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT, SRESULT => PKG_EXS.SPRC_RESP_RESULT_ERR, SMSG => sqlerrm);
|
||||
end FIND_CONSUMERORD;
|
||||
|
||||
/* Îáðàáîòêà çàïðîñà íà ïîèñê êîíòàêòíîé èíôîðìàöèè */
|
||||
procedure FIND_CONTACT
|
||||
(
|
||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||
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) := '%çâîíèòü';
|
||||
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) := '%ãîâîðèò%';
|
||||
/* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
|
||||
CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8');
|
||||
/* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */
|
||||
CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS);
|
||||
/* Åñëè åñòü ÷òî èñêàòü */
|
||||
if (CTMP is not null) then
|
||||
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
|
||||
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
|
||||
/* Èíèöèàëèçèðóåì îòâåò */
|
||||
CRESP := 'Êîíòàêò íå íàéäåí';
|
||||
/* Èùåì çàïðîøåííîãî êîíòðàãåíòà */
|
||||
for C in (select T.AGNNAME SAGENT,
|
||||
T.AGNTYPE NAGNTYPE,
|
||||
T.PHONE SPHONE,
|
||||
T.MAIL SMAIL,
|
||||
T.AGN_COMMENT SCONTACT_PERSON
|
||||
from AGNLIST T,
|
||||
ACATALOG CAT
|
||||
where ((LOWER(CTMP) like LOWER('%' || replace(T.AGNABBR, ' ', '%') || '%')) or
|
||||
(LOWER(CTMP) like LOWER('%' || replace(T.AGNNAME, ' ', '%') || '%')) or
|
||||
((T.AGNFAMILYNAME is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME || '%'))) or
|
||||
((T.AGNFAMILYNAME_AC is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_AC || '%'))) or
|
||||
((T.AGNFAMILYNAME_ABL is not null) and
|
||||
(LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_ABL || '%'))) or
|
||||
((T.AGNFAMILYNAME_TO is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_TO || '%'))) or
|
||||
((T.AGNFAMILYNAME_FR is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_FR || '%'))))
|
||||
and T.CRN = CAT.RN
|
||||
and CAT.NAME = SSEARCH_CATALOG_NAME
|
||||
and ROWNUM <= 1)
|
||||
loop
|
||||
/* Îñíîâíàÿ èíôîðìàöèÿ */
|
||||
CRESP := C.SAGENT;
|
||||
/* Äàëåå - â çàâèñèìîñòè îò òèïà, äëÿ ÞË - ñâåäåíèÿ î äîãîâîðàõ è êîíòàêòíîì ëèöå */
|
||||
if (C.NAGNTYPE = 0) then
|
||||
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_RESULT_SET(NIDENT => NIDENT,
|
||||
SRESULT => PKG_EXS.SPRC_RESP_RESULT_OK,
|
||||
BRESP => CLOB2BLOB(LCDATA => CRESP, SCHARSET => 'UTF8'));
|
||||
exception
|
||||
when others then
|
||||
/* Âåðí¸ì îøèáêó */
|
||||
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT, SRESULT => PKG_EXS.SPRC_RESP_RESULT_ERR, SMSG => sqlerrm);
|
||||
end FIND_CONTACT;
|
||||
|
||||
end;
|
||||
/
|
@ -1,45 +0,0 @@
|
||||
/*
|
||||
Сервис интеграции ПП Парус 8 с WEB API
|
||||
Дополнительный модуль: Взаимодействие с Яндекс-Диалогами (голосовым помошником "Алиса")
|
||||
*/
|
||||
|
||||
//------------
|
||||
// Тело модуля
|
||||
//------------
|
||||
|
||||
//ДО функции "Алиса/Поиск контрагента"
|
||||
const beforeFindAgent = async prms => {};
|
||||
|
||||
//ПОСЛЕ функции "Алиса/Поиск контрагента"
|
||||
const afterFindAgent = async prms => {};
|
||||
|
||||
//ДО функции "Алиса/Поиск договора"
|
||||
const beforeFindContract = async prms => {};
|
||||
|
||||
//ПОСЛЕ функции "Алиса/Поиск договора"
|
||||
const afterFindContract = async prms => {};
|
||||
|
||||
//ДО функции "Алиса/Поиск заказа потребителя"
|
||||
const beforeFindConsumerOrd = async prms => {};
|
||||
|
||||
//ПОСЛЕ функции "Алиса/Поиск заказа потребителя"
|
||||
const afterFindConsumerOrd = async prms => {};
|
||||
|
||||
//ДО функции "Алиса/Поиск контактной информации"
|
||||
const beforeFindContact = async prms => {};
|
||||
|
||||
//ПОСЛЕ функции "Алиса/Поиск контактной информации"
|
||||
const afterFindContact = async prms => {};
|
||||
|
||||
//-----------------
|
||||
// Интерфейс модуля
|
||||
//-----------------
|
||||
|
||||
exports.beforeFindAgent = beforeFindAgent;
|
||||
exports.afterFindAgent = afterFindAgent;
|
||||
exports.beforeFindContract = beforeFindContract;
|
||||
exports.afterFindContract = afterFindContract;
|
||||
exports.beforeFindConsumerOrd = beforeFindConsumerOrd;
|
||||
exports.afterFindConsumerOrd = afterFindConsumerOrd;
|
||||
exports.beforeFindContact = beforeFindContact;
|
||||
exports.afterFindContact = afterFindContact;
|
0
static/.gitkeep
Normal file
0
static/.gitkeep
Normal file
Loading…
x
Reference in New Issue
Block a user