Перенёс расширения для Алисы в отдельный репозиторий

This commit is contained in:
Mikhail Chechnev 2019-03-08 20:23:16 +03:00
parent cb1b5f6954
commit 5d7b5109f4
4 changed files with 1 additions and 626 deletions

5
.gitignore vendored
View File

@ -2,7 +2,4 @@
node_modules/
# VS Code
.vscode/
# Static files
static/
.vscode/

View File

@ -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;
/

View File

@ -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
View File