Контроль наличия роли для администрирования, интеграция с "Сервисами обмена", удаление файлов выборок по одному, контроль возможности перехода к статусу (для файла выборки, модели)
This commit is contained in:
parent
e59247fd2d
commit
d82d4646d3
@ -33,7 +33,7 @@ create or replace package UDO_PKG_EQUIPDS as
|
|||||||
SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
|
SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
|
||||||
SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
|
SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
|
||||||
SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
|
SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
|
||||||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict))
|
STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.SCMML_TASK_*)
|
||||||
NPRECISION_P in number, -- Точность (план)
|
NPRECISION_P in number, -- Точность (план)
|
||||||
NEQUIPDS out number, -- Регистрационный номер выборки данных оборудования
|
NEQUIPDS out number, -- Регистрационный номер выборки данных оборудования
|
||||||
NEQUIPDSCM out number -- Регистрационный номер класса оборудования выборки данных
|
NEQUIPDSCM out number -- Регистрационный номер класса оборудования выборки данных
|
||||||
@ -82,6 +82,21 @@ create or replace package UDO_PKG_EQUIPDS as
|
|||||||
COUT out clob -- Сериализованная таблица данных
|
COUT out clob -- Сериализованная таблица данных
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Удаление "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
|
procedure CMFL_DEL
|
||||||
|
(
|
||||||
|
NRN in number -- Регистрационный номер
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Формирование "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
|
procedure CMFL_MAKE
|
||||||
|
(
|
||||||
|
NEQUIPDSCM in number, -- Рег. номер класса оборудования выборки данных
|
||||||
|
NDATASET_IDENT in number, -- Идентификатор буфера данных
|
||||||
|
NDATASET_CONFIG_IDENT in number, -- Идентификатор буфера описания данных
|
||||||
|
NCLEAR in number := 0 -- Флаг очистки имеющихся файлов данных (0 - не очищать, 1 - очистить)
|
||||||
|
);
|
||||||
|
|
||||||
/* Загрузка на сервер "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
/* Загрузка на сервер "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
procedure CMFL_UPLOAD
|
procedure CMFL_UPLOAD
|
||||||
(
|
(
|
||||||
@ -105,7 +120,7 @@ create or replace package UDO_PKG_EQUIPDS as
|
|||||||
procedure CMML_INS
|
procedure CMML_INS
|
||||||
(
|
(
|
||||||
NPRN in number, -- Родитель
|
NPRN in number, -- Родитель
|
||||||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict))
|
STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.SCMML_TASK_*)
|
||||||
NPRECISION_P in number, -- Точность (план)
|
NPRECISION_P in number, -- Точность (план)
|
||||||
NRN out number -- Регистрационный номер
|
NRN out number -- Регистрационный номер
|
||||||
);
|
);
|
||||||
@ -159,11 +174,6 @@ end UDO_PKG_EQUIPDS;
|
|||||||
/
|
/
|
||||||
create or replace package body UDO_PKG_EQUIPDS as
|
create or replace package body UDO_PKG_EQUIPDS as
|
||||||
|
|
||||||
/*
|
|
||||||
TODO: owner="root" created="06.08.2024"
|
|
||||||
text="Проверка прав доступа на работу с ""Выборками данных"""
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Список "Выборки данных оборудования" */
|
/* Список "Выборки данных оборудования" */
|
||||||
procedure LIST
|
procedure LIST
|
||||||
(
|
(
|
||||||
@ -174,7 +184,14 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
NCUR integer; -- Курсор документа для результата
|
NCUR integer; -- Курсор документа для результата
|
||||||
XDOC PKG_XMAKE.TNODE; -- Документ для результата
|
XDOC PKG_XMAKE.TNODE; -- Документ для результата
|
||||||
XDS PKG_XMAKE.TNODE; -- Элемент для выборки данных
|
XDS PKG_XMAKE.TNODE; -- Элемент для выборки данных
|
||||||
|
NACCESS PKG_STD.TNUMBER := 0; -- Флаг наличия доступа к моделям (0 - доступа нет, 1 - доступ есть)
|
||||||
begin
|
begin
|
||||||
|
/* Проверим права доступа */
|
||||||
|
if (UDO_PKG_EQUIPDS_BASE.UTL_ACCESS_CHECK(SUSER => UTILIZER(),
|
||||||
|
STABLE => 'UDO_T_EQUIPDS',
|
||||||
|
SACTION => 'UDO_EQUIPDS_SELECT')) then
|
||||||
|
NACCESS := 1;
|
||||||
|
end if;
|
||||||
/* Открываем документ */
|
/* Открываем документ */
|
||||||
NCUR := PKG_XMAKE.OPEN_CURSOR();
|
NCUR := PKG_XMAKE.OPEN_CURSOR();
|
||||||
/* Обходим выборки данных */
|
/* Обходим выборки данных */
|
||||||
@ -183,6 +200,7 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
T.NAME SNAME
|
T.NAME SNAME
|
||||||
from UDO_T_EQUIPDS T
|
from UDO_T_EQUIPDS T
|
||||||
where T.COMPANY = NCOMPANY
|
where T.COMPANY = NCOMPANY
|
||||||
|
and NACCESS = 1
|
||||||
order by T.NAME)
|
order by T.NAME)
|
||||||
loop
|
loop
|
||||||
XDS := PKG_XMAKE.CONCAT(ICURSOR => NCUR,
|
XDS := PKG_XMAKE.CONCAT(ICURSOR => NCUR,
|
||||||
@ -201,7 +219,12 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
SVALUE => C.SNAME))));
|
SVALUE => C.SNAME))));
|
||||||
end loop;
|
end loop;
|
||||||
/* Формируем XML-представление ответа */
|
/* Формируем XML-представление ответа */
|
||||||
XDOC := PKG_XMAKE.ELEMENT(ICURSOR => NCUR, SNAME => 'XDATA', RNODE00 => XDS);
|
XDOC := PKG_XMAKE.ELEMENT(ICURSOR => NCUR,
|
||||||
|
SNAME => 'XDATA',
|
||||||
|
RNODE00 => XDS,
|
||||||
|
RNODE01 => PKG_XMAKE.ELEMENT(ICURSOR => NCUR,
|
||||||
|
SNAME => 'NACCESS',
|
||||||
|
RVALUE00 => PKG_XMAKE.VALUE(ICURSOR => NCUR, NVALUE => NACCESS)));
|
||||||
/* Конвертируем в CLOB */
|
/* Конвертируем в CLOB */
|
||||||
COUT := PKG_XMAKE.SERIALIZE_TO_CLOB(ICURSOR => NCUR,
|
COUT := PKG_XMAKE.SERIALIZE_TO_CLOB(ICURSOR => NCUR,
|
||||||
ITYPE => PKG_XMAKE.CONTENT_,
|
ITYPE => PKG_XMAKE.CONTENT_,
|
||||||
@ -223,6 +246,8 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
is
|
is
|
||||||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация
|
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация
|
||||||
begin
|
begin
|
||||||
|
/* Проверим права доступа */
|
||||||
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDS', SACTION => 'UDO_EQUIPDS_INSERT');
|
||||||
/* Добавляем запись */
|
/* Добавляем запись */
|
||||||
UDO_PKG_EQUIPDS_BASE.INS(NCOMPANY => NCOMPANY, SCODE => SCODE, SNAME => SNAME, NRN => NRN);
|
UDO_PKG_EQUIPDS_BASE.INS(NCOMPANY => NCOMPANY, SCODE => SCODE, SNAME => SNAME, NRN => NRN);
|
||||||
end INS;
|
end INS;
|
||||||
@ -235,6 +260,8 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
is
|
is
|
||||||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация
|
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация
|
||||||
begin
|
begin
|
||||||
|
/* Проверим права доступа */
|
||||||
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDS', SACTION => 'UDO_EQUIPDS_DELETE', NDOCUMENT => NRN);
|
||||||
/* Удаляем запись */
|
/* Удаляем запись */
|
||||||
UDO_PKG_EQUIPDS_BASE.DEL(NRN => NRN, NCOMPANY => NCOMPANY);
|
UDO_PKG_EQUIPDS_BASE.DEL(NRN => NRN, NCOMPANY => NCOMPANY);
|
||||||
end DEL;
|
end DEL;
|
||||||
@ -252,7 +279,7 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
|
SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
|
||||||
SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
|
SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
|
||||||
SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
|
SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
|
||||||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict))
|
STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.SCMML_TASK_*)
|
||||||
NPRECISION_P in number, -- Точность (план)
|
NPRECISION_P in number, -- Точность (план)
|
||||||
NEQUIPDS out number, -- Регистрационный номер выборки данных оборудования
|
NEQUIPDS out number, -- Регистрационный номер выборки данных оборудования
|
||||||
NEQUIPDSCM out number -- Регистрационный номер класса оборудования выборки данных
|
NEQUIPDSCM out number -- Регистрационный номер класса оборудования выборки данных
|
||||||
@ -261,6 +288,8 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация
|
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация
|
||||||
NEQUIPDSCMML PKG_STD.TREF; -- Рег. номер модели
|
NEQUIPDSCMML PKG_STD.TREF; -- Рег. номер модели
|
||||||
begin
|
begin
|
||||||
|
/* Проверим права доступа */
|
||||||
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDS', SACTION => 'UDO_EQUIPDS_MAKE');
|
||||||
/* Проверим наличие такой выборки */
|
/* Проверим наличие такой выборки */
|
||||||
UDO_PKG_EQUIPDS_BASE.FIND_BY_CODE(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, SCODE => SEQUIPDS, NRN => NEQUIPDS);
|
UDO_PKG_EQUIPDS_BASE.FIND_BY_CODE(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, SCODE => SEQUIPDS, NRN => NEQUIPDS);
|
||||||
/* Выборки нет */
|
/* Выборки нет */
|
||||||
@ -313,6 +342,8 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
XDOC PKG_XMAKE.TNODE; -- Документ для результата
|
XDOC PKG_XMAKE.TNODE; -- Документ для результата
|
||||||
XEQUIPDSCM PKG_XMAKE.TNODE; -- Элемент для карточки
|
XEQUIPDSCM PKG_XMAKE.TNODE; -- Элемент для карточки
|
||||||
begin
|
begin
|
||||||
|
/* Проверим права доступа */
|
||||||
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCM', SACTION => 'UDO_EQUIPDSCM_SELECT');
|
||||||
/* Открываем документ */
|
/* Открываем документ */
|
||||||
NCUR := PKG_XMAKE.OPEN_CURSOR();
|
NCUR := PKG_XMAKE.OPEN_CURSOR();
|
||||||
/* Обращаемся к данным класса оборудования */
|
/* Обращаемся к данным класса оборудования */
|
||||||
@ -388,6 +419,8 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
XDOC PKG_XMAKE.TNODE; -- Документ для результата
|
XDOC PKG_XMAKE.TNODE; -- Документ для результата
|
||||||
XDSCM PKG_XMAKE.TNODE; -- Элемент для выборки данных
|
XDSCM PKG_XMAKE.TNODE; -- Элемент для выборки данных
|
||||||
begin
|
begin
|
||||||
|
/* Проверим права доступа */
|
||||||
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCM', SACTION => 'UDO_EQUIPDSCM_SELECT');
|
||||||
/* Открываем документ */
|
/* Открываем документ */
|
||||||
NCUR := PKG_XMAKE.OPEN_CURSOR();
|
NCUR := PKG_XMAKE.OPEN_CURSOR();
|
||||||
/* Обходим классы оборудования заданной выборки данных */
|
/* Обходим классы оборудования заданной выборки данных */
|
||||||
@ -482,6 +515,8 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
NEXSSERVICEFN_SEND_MD PKG_STD.TREF; -- Рег. номер Функции обмена для передачи внешней системе
|
NEXSSERVICEFN_SEND_MD PKG_STD.TREF; -- Рег. номер Функции обмена для передачи внешней системе
|
||||||
NEXSSERVICEFN_SEND_RQ PKG_STD.TREF; -- Рег. номер функции обмена для обработки внешней системой
|
NEXSSERVICEFN_SEND_RQ PKG_STD.TREF; -- Рег. номер функции обмена для обработки внешней системой
|
||||||
begin
|
begin
|
||||||
|
/* Проверим права доступа */
|
||||||
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCM', SACTION => 'UDO_EQUIPDSCM_INSERT');
|
||||||
/* Разыменуем ссылки */
|
/* Разыменуем ссылки */
|
||||||
UDO_PKG_EQUIPDS_BASE.CM_JOINS(NCOMPANY => NCOMPANY,
|
UDO_PKG_EQUIPDS_BASE.CM_JOINS(NCOMPANY => NCOMPANY,
|
||||||
SEQOBJKIND => SEQOBJKIND,
|
SEQOBJKIND => SEQOBJKIND,
|
||||||
@ -517,9 +552,11 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
)
|
)
|
||||||
is
|
is
|
||||||
begin
|
begin
|
||||||
|
/* Проверим права доступа */
|
||||||
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCM', SACTION => 'UDO_EQUIPDSCM_DELETE', NDOCUMENT => NRN);
|
||||||
/* Удаляем запись */
|
/* Удаляем запись */
|
||||||
UDO_PKG_EQUIPDS_BASE.CM_DEL(NRN => NRN);
|
UDO_PKG_EQUIPDS_BASE.CM_DEL(NRN => NRN);
|
||||||
end CM_DEL;
|
end CM_DEL;
|
||||||
|
|
||||||
/* Список "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
/* Список "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
procedure CMFL_LIST
|
procedure CMFL_LIST
|
||||||
@ -531,6 +568,8 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
||||||
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
|
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
|
||||||
begin
|
begin
|
||||||
|
/* Проверим права доступа */
|
||||||
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCMFL', SACTION => 'UDO_EQUIPDSCMFL_SELECT');
|
||||||
/* Инициализируем таблицу данных */
|
/* Инициализируем таблицу данных */
|
||||||
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE();
|
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE();
|
||||||
/* Добавляем в таблицу описание колонок */
|
/* Добавляем в таблицу описание колонок */
|
||||||
@ -556,6 +595,10 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
SCAPTION => 'Сообщение об ошибке',
|
SCAPTION => 'Сообщение об ошибке',
|
||||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||||
BVISIBLE => false);
|
BVISIBLE => false);
|
||||||
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
|
SNAME => 'SACTIONS',
|
||||||
|
SCAPTION => 'Действия',
|
||||||
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
|
||||||
/* Обходим данные */
|
/* Обходим данные */
|
||||||
for C in (select T.RN NRN,
|
for C in (select T.RN NRN,
|
||||||
T.FILE_NAME SFILE_NAME,
|
T.FILE_NAME SFILE_NAME,
|
||||||
@ -572,6 +615,7 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SDESCR', SVALUE => C.SDESCR);
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SDESCR', SVALUE => C.SDESCR);
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSTATUS', NVALUE => C.NSTATUS);
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSTATUS', NVALUE => C.NSTATUS);
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SERR', SVALUE => C.SERR);
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SERR', SVALUE => C.SERR);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SACTIONS');
|
||||||
/* Добавляем строку в таблицу */
|
/* Добавляем строку в таблицу */
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
||||||
end loop;
|
end loop;
|
||||||
@ -579,40 +623,165 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1);
|
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1);
|
||||||
end CMFL_LIST;
|
end CMFL_LIST;
|
||||||
|
|
||||||
/* Загрузка на сервер "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
/* Удаление "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
procedure CMFL_UPLOAD
|
procedure CMFL_DEL
|
||||||
(
|
(
|
||||||
NEQUIPDSCM in number -- Рег. номер класса оборудования выборки данных
|
NRN in number -- Регистрационный номер
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
begin
|
begin
|
||||||
/*
|
/* Проверим права доступа */
|
||||||
TODO: owner="root" created="07.08.2024"
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCMFL', SACTION => 'UDO_EQUIPDSCMFL_DELETE', NDOCUMENT => NRN);
|
||||||
text="Реализовать проверку возможности выполнения действия и установки статусов"
|
/* Выполним базовое удаление */
|
||||||
*/
|
UDO_PKG_EQUIPDS_BASE.CMFL_DEL(NRN => NRN);
|
||||||
/* Выставим состояние файлам данных класса оборудования */
|
end CMFL_DEL;
|
||||||
for C in (select T.RN NRN from UDO_T_EQUIPDSCMFL T where T.PRN = NEQUIPDSCM)
|
|
||||||
|
/* Формирование "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
|
procedure CMFL_MAKE
|
||||||
|
(
|
||||||
|
NEQUIPDSCM in number, -- Рег. номер класса оборудования выборки данных
|
||||||
|
NDATASET_IDENT in number, -- Идентификатор буфера данных
|
||||||
|
NDATASET_CONFIG_IDENT in number, -- Идентификатор буфера описания данных
|
||||||
|
NCLEAR in number := 0 -- Флаг очистки имеющихся файлов данных (0 - не очищать, 1 - очистить)
|
||||||
|
)
|
||||||
|
is
|
||||||
|
NCMFL PKG_STD.TREF; -- Рег. номер добавленного файла данных
|
||||||
|
NFILES_CNT PKG_STD.TNUMBER := 0; -- Количество найденных файлов выборки
|
||||||
|
NCONFIG_CNT PKG_STD.TNUMBER := 0; -- Количество найденных описаний выборки
|
||||||
|
begin
|
||||||
|
/* Проверим параметры */
|
||||||
|
if (COALESCE(NDATASET_IDENT, 0) = 0) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Пользовательская процедура формирования данных не вернула идентификатор буфера выборки.');
|
||||||
|
end if;
|
||||||
|
if (COALESCE(NDATASET_CONFIG_IDENT, 0) = 0) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Пользовательская процедура формирования данных не вернула идентификатор буфера описания выборки.');
|
||||||
|
end if;
|
||||||
|
/* Зачистим старые файлы */
|
||||||
|
if (NCLEAR = 1) then
|
||||||
|
for C in (select T.RN from UDO_T_EQUIPDSCMFL T where T.PRN = NEQUIPDSCM)
|
||||||
|
loop
|
||||||
|
UDO_PKG_EQUIPDS_BASE.CMFL_DEL(NRN => C.RN);
|
||||||
|
end loop;
|
||||||
|
end if;
|
||||||
|
/* Добавим новые файлы выборки */
|
||||||
|
for C in (select F.*
|
||||||
|
from FILE_BUFFER F
|
||||||
|
where F.IDENT = NDATASET_IDENT
|
||||||
|
and F.DATA is not null
|
||||||
|
and F.BDATA is not null
|
||||||
|
and F.FILENAME is not null)
|
||||||
loop
|
loop
|
||||||
UDO_PKG_EQUIPDS_BASE.CMFL_SET_STATUS(NRN => C.NRN, NSTATUS => 2, SQUEUE_ID => C.NRN, SERR => null);
|
NFILES_CNT := NFILES_CNT + 1;
|
||||||
|
UDO_PKG_EQUIPDS_BASE.CMFL_INS(NPRN => NEQUIPDSCM,
|
||||||
|
SFILE_NAME => C.FILENAME,
|
||||||
|
SDESCR => C.DATA,
|
||||||
|
BDATASET => C.BDATA,
|
||||||
|
NRN => NCMFL);
|
||||||
end loop;
|
end loop;
|
||||||
|
/* Добавим описание выборки */
|
||||||
|
for C in (select F.*
|
||||||
|
from FILE_BUFFER F
|
||||||
|
where F.IDENT = NDATASET_CONFIG_IDENT
|
||||||
|
and F.DATA is not null)
|
||||||
|
loop
|
||||||
|
NCONFIG_CNT := NCONFIG_CNT + 1;
|
||||||
|
UDO_PKG_EQUIPDS_BASE.CM_SET_DATA_CONFIG(NRN => NEQUIPDSCM, BDATA_CONFIG => C.DATA);
|
||||||
|
end loop;
|
||||||
|
/* Проверим, что сформировали данные */
|
||||||
|
if (NFILES_CNT = 0) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Пользовательская процедура формирования данных не вернула выборку.');
|
||||||
|
end if;
|
||||||
|
if (NCONFIG_CNT = 0) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Пользовательская процедура формирования данных не вернула описание выборки.');
|
||||||
|
end if;
|
||||||
|
/* Зачистим буфер */
|
||||||
|
P_FILE_BUFFER_CLEAR(NIDENT => NDATASET_IDENT);
|
||||||
|
P_FILE_BUFFER_CLEAR(NIDENT => NDATASET_CONFIG_IDENT);
|
||||||
|
end CMFL_MAKE;
|
||||||
|
|
||||||
|
/* Загрузка на сервер "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
|
procedure CMFL_UPLOAD
|
||||||
|
(
|
||||||
|
NEQUIPDSCM in number -- Рег. номер класса оборудования выборки данных
|
||||||
|
)
|
||||||
|
is
|
||||||
|
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
|
||||||
|
NIDENT PKG_STD.TREF; -- Идентификатор выбранных файлов
|
||||||
|
NTMP PKG_STD.TREF; -- Рег. номер записи буфера
|
||||||
|
begin
|
||||||
|
/* Проверим права доступа */
|
||||||
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCMFL', SACTION => 'UDO_EQUIPDSCMFL_UPLOAD');
|
||||||
|
/* Обходим файлы данных для загрузки */
|
||||||
|
for C in (select T.RN NRN
|
||||||
|
from UDO_T_EQUIPDSCMFL T
|
||||||
|
where T.PRN = NEQUIPDSCM
|
||||||
|
and T.STATUS in
|
||||||
|
(UDO_PKG_EQUIPDS_BASE.NCMFL_STATUS_REGISTERED, UDO_PKG_EQUIPDS_BASE.NCMFL_STATUS_UPLOAD_ERR))
|
||||||
|
loop
|
||||||
|
/* Сформируем идентификатор выборки, если ещё не делали этого */
|
||||||
|
if (NIDENT is null) then
|
||||||
|
NIDENT := GEN_IDENT();
|
||||||
|
end if;
|
||||||
|
/* Добавляем файл в выборку */
|
||||||
|
P_SELECTLIST_INSERT(NIDENT => NIDENT, NDOCUMENT => C.NRN, SUNITCODE => 'UDO_T_EQUIPDSCMFL', NRN => NTMP);
|
||||||
|
end loop;
|
||||||
|
/* Проверим, что в выборку попали данные */
|
||||||
|
if (NIDENT is null) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Нет данных для загрузки на сервер. Сначала необходимо выполнить формирование обучающей выборки.');
|
||||||
|
end if;
|
||||||
|
/* Устанавливаем статус - загружается на сервер */
|
||||||
|
for C in (select SL.DOCUMENT NRN
|
||||||
|
from SELECTLIST SL
|
||||||
|
where SL.IDENT = NIDENT
|
||||||
|
and SL.UNITCODE = 'UDO_T_EQUIPDSCMFL')
|
||||||
|
loop
|
||||||
|
UDO_PKG_EQUIPDS_BASE.CMFL_SET_STATUS(NRN => C.NRN, NSTATUS => UDO_PKG_EQUIPDS_BASE.NCMFL_STATUS_UPLOADING);
|
||||||
|
end loop;
|
||||||
|
/* Ставим задачу на зугрузку в очередь */
|
||||||
|
UDO_PKG_EQUIPDS_DATAPROCESS.UPLOAD(NCOMPANY => NCOMPANY, NIDENT => NIDENT, NEQUIPDSCM => NEQUIPDSCM);
|
||||||
|
/* Очищаем выборку */
|
||||||
|
P_SELECTLIST_CLEAR(NIDENT => NIDENT);
|
||||||
end CMFL_UPLOAD;
|
end CMFL_UPLOAD;
|
||||||
|
|
||||||
/* Передача внешней системе "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
/* Передача внешней системе "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
procedure CMFL_SEND_MD
|
procedure CMFL_SEND_MD
|
||||||
(
|
(
|
||||||
NEQUIPDSCM in number -- Рег. номер класса оборудования выборки данных
|
NEQUIPDSCM in number -- Рег. номер класса оборудования выборки данных
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
|
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
|
||||||
|
NIDENT PKG_STD.TREF; -- Идентификатор выбранных файлов
|
||||||
|
NTMP PKG_STD.TREF; -- Рег. номер записи буфера
|
||||||
begin
|
begin
|
||||||
/*
|
/* Проверим права доступа */
|
||||||
TODO: owner="root" created="07.08.2024"
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCMFL', SACTION => 'UDO_EQUIPDSCMFL_SEND_MD');
|
||||||
text="Реализовать проверку возможности выполнения действия и установки статусов"
|
/* Обходим файлы данных для передаче внешней системе */
|
||||||
*/
|
for C in (select T.RN NRN
|
||||||
/* Выставим состояние файлам данных класса оборудования */
|
from UDO_T_EQUIPDSCMFL T
|
||||||
for C in (select T.RN NRN from UDO_T_EQUIPDSCMFL T where T.PRN = NEQUIPDSCM)
|
where T.PRN = NEQUIPDSCM
|
||||||
|
and T.STATUS = UDO_PKG_EQUIPDS_BASE.NCMFL_STATUS_UPLOADED)
|
||||||
loop
|
loop
|
||||||
UDO_PKG_EQUIPDS_BASE.CMFL_SET_STATUS(NRN => C.NRN, NSTATUS => 5, SQUEUE_ID => C.NRN, SERR => null);
|
/* Сформируем идентификатор выборки, если ещё не делали этого */
|
||||||
|
if (NIDENT is null) then
|
||||||
|
NIDENT := GEN_IDENT();
|
||||||
|
end if;
|
||||||
|
/* Добавляем файл в выборку */
|
||||||
|
P_SELECTLIST_INSERT(NIDENT => NIDENT, NDOCUMENT => C.NRN, SUNITCODE => 'UDO_T_EQUIPDSCMFL', NRN => NTMP);
|
||||||
end loop;
|
end loop;
|
||||||
|
/* Проверим, что в выборку попали данные */
|
||||||
|
if (NIDENT is null) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Нет данных для передачи внешней системе. Сначала необходимо выполнить передачу данных на сервер.');
|
||||||
|
end if;
|
||||||
|
/* Ставим задачу на передачу внешней системе */
|
||||||
|
UDO_PKG_EQUIPDS_DATAPROCESS.SEND_MD(NCOMPANY => NCOMPANY, NIDENT=> NIDENT, NEQUIPDSCM => NEQUIPDSCM);
|
||||||
|
/* Очищаем выборку */
|
||||||
|
P_SELECTLIST_CLEAR(NIDENT => NIDENT);
|
||||||
end CMFL_SEND_MD;
|
end CMFL_SEND_MD;
|
||||||
|
|
||||||
/* Список "Выборки данных оборудования (классы оборудования, модели)" */
|
/* Список "Выборки данных оборудования (классы оборудования, модели)" */
|
||||||
@ -625,6 +794,8 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
||||||
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
|
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
|
||||||
begin
|
begin
|
||||||
|
/* Проверим права доступа */
|
||||||
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCMML', SACTION => 'UDO_EQUIPDSCMML_SELECT');
|
||||||
/* Инициализируем таблицу данных */
|
/* Инициализируем таблицу данных */
|
||||||
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE();
|
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE();
|
||||||
/* Добавляем в таблицу описание колонок */
|
/* Добавляем в таблицу описание колонок */
|
||||||
@ -689,12 +860,14 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
procedure CMML_INS
|
procedure CMML_INS
|
||||||
(
|
(
|
||||||
NPRN in number, -- Родитель
|
NPRN in number, -- Родитель
|
||||||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict))
|
STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.SCMML_TASK_*)
|
||||||
NPRECISION_P in number, -- Точность (план)
|
NPRECISION_P in number, -- Точность (план)
|
||||||
NRN out number -- Регистрационный номер
|
NRN out number -- Регистрационный номер
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
begin
|
begin
|
||||||
|
/* Проверим права доступа */
|
||||||
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCMML', SACTION => 'UDO_EQUIPDSCMML_INSERT');
|
||||||
/* Добавляем запись */
|
/* Добавляем запись */
|
||||||
UDO_PKG_EQUIPDS_BASE.CMML_INS(NPRN => NPRN, STASK => STASK, NPRECISION_P => NPRECISION_P, NRN => NRN);
|
UDO_PKG_EQUIPDS_BASE.CMML_INS(NPRN => NPRN, STASK => STASK, NPRECISION_P => NPRECISION_P, NRN => NRN);
|
||||||
end CMML_INS;
|
end CMML_INS;
|
||||||
@ -706,6 +879,8 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
)
|
)
|
||||||
is
|
is
|
||||||
begin
|
begin
|
||||||
|
/* Проверим права доступа */
|
||||||
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCMML', SACTION => 'UDO_EQUIPDSCMML_DELETE', NDOCUMENT => NRN);
|
||||||
/* Удаляем запись */
|
/* Удаляем запись */
|
||||||
UDO_PKG_EQUIPDS_BASE.CMML_DEL(NRN => NRN);
|
UDO_PKG_EQUIPDS_BASE.CMML_DEL(NRN => NRN);
|
||||||
end CMML_DEL;
|
end CMML_DEL;
|
||||||
@ -713,25 +888,37 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
/* Обработка внешней системой "Выборки данных оборудования (классы оборудования, модели)" */
|
/* Обработка внешней системой "Выборки данных оборудования (классы оборудования, модели)" */
|
||||||
procedure CMML_SEND_RQ
|
procedure CMML_SEND_RQ
|
||||||
(
|
(
|
||||||
NEQUIPDSCMML in number -- Рег. номер модели класса оборудования выборки данных
|
NEQUIPDSCMML in number -- Рег. номер модели класса оборудования выборки данных
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
|
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
|
||||||
|
RCMML UDO_T_EQUIPDSCMML%rowtype; -- Запись модели
|
||||||
|
NCOUNT PKG_STD.TNUMBER; -- Количество файлов данных модели, переданных внешней системе
|
||||||
begin
|
begin
|
||||||
/*
|
/* Считаем модель */
|
||||||
TODO: owner="root" created="07.08.2024"
|
RCMML := UDO_PKG_EQUIPDS_BASE.CMML_GET(NFLAG_SMART => 0, NRN => NEQUIPDSCMML);
|
||||||
text="Реализовать проверку возможности выполнения действия и установки статусов"
|
/* Проверим права доступа */
|
||||||
*/
|
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCMML',
|
||||||
/* Обратимся к модели */
|
SACTION => 'UDO_EQUIPDSCMML_SEND_RQ',
|
||||||
for C in (select T.RN NRN,
|
NDOCUMENT => RCMML.RN);
|
||||||
T.PRECISION_P NPRECISION_P
|
/* Проверим, что у класса оборудования есть файлы данных, переданные внешней системе */
|
||||||
from UDO_T_EQUIPDSCMML T
|
begin
|
||||||
where T.RN = NEQUIPDSCMML)
|
select count(T.RN)
|
||||||
loop
|
into NCOUNT
|
||||||
/* Установим фактическую точность */
|
from UDO_T_EQUIPDSCMFL T
|
||||||
UDO_PKG_EQUIPDS_BASE.CMML_SET_PRECISION_F(NRN => C.NRN, NPRECISION_F => C.NPRECISION_P);
|
where T.PRN = RCMML.PRN
|
||||||
/* Установим состояние модели */
|
and T.STATUS = UDO_PKG_EQUIPDS_BASE.NCMFL_STATUS_SENT;
|
||||||
UDO_PKG_EQUIPDS_BASE.CMML_SET_STATUS(NRN => C.NRN, NSTATUS => 2, SQUEUE_ID => C.NRN, SERR => null);
|
exception
|
||||||
end loop;
|
when others then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Не удалось проверить состояние файлов данных выборки.');
|
||||||
|
end;
|
||||||
|
if (NCOUNT = 0) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'У класса оборудования нет файлов данных, переданных фреймворку - обучение невозможно.');
|
||||||
|
end if;
|
||||||
|
/* Отправим запрос на обучение */
|
||||||
|
--UDO_PKG_EQUIPDS_DATAPROCESS.SEND_RQ(NCOMPANY => NCOMPANY, NEQUIPDSCMML => RCMML.RN);
|
||||||
end CMML_SEND_RQ;
|
end CMML_SEND_RQ;
|
||||||
|
|
||||||
/* Состояние "Выборки данных оборудования (классы оборудования, модели)" по единице оборудования */
|
/* Состояние "Выборки данных оборудования (классы оборудования, модели)" по единице оборудования */
|
||||||
@ -752,11 +939,11 @@ text="Проверка прав доступа на работу с ""Выбор
|
|||||||
and CM.RN = ML.PRN)
|
and CM.RN = ML.PRN)
|
||||||
loop
|
loop
|
||||||
/* Модель есть */
|
/* Модель есть */
|
||||||
if (NRES < 2) then
|
if (NRES < UDO_PKG_EQUIPDS_BASE.NCMML_STATUS_PROCESSED) then
|
||||||
NRES := 1;
|
NRES := 1;
|
||||||
end if;
|
end if;
|
||||||
/* Если она уже обучена */
|
/* Если она уже обучена */
|
||||||
if (C.STATUS = 2) then
|
if (C.STATUS = UDO_PKG_EQUIPDS_BASE.NCMML_STATUS_PROCESSED) then
|
||||||
NRES := 2;
|
NRES := 2;
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
|
@ -1,5 +1,42 @@
|
|||||||
create or replace package UDO_PKG_EQUIPDS_BASE as
|
create or replace package UDO_PKG_EQUIPDS_BASE as
|
||||||
|
|
||||||
|
/* Константы - состояния "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
|
NCMFL_STATUS_REGISTERED constant PKG_STD.TNUMBER := 0; -- Зарегистрирован
|
||||||
|
NCMFL_STATUS_UPLOADING constant PKG_STD.TNUMBER := 1; -- Загружается на сервер
|
||||||
|
NCMFL_STATUS_UPLOADED constant PKG_STD.TNUMBER := 2; -- Успешно загружен на сервер
|
||||||
|
NCMFL_STATUS_UPLOAD_ERR constant PKG_STD.TNUMBER := 3; -- Ошибка загрузки на сервер
|
||||||
|
NCMFL_STATUS_SENDING constant PKG_STD.TNUMBER := 4; -- Загружается во внешнюю систему
|
||||||
|
NCMFL_STATUS_SENT constant PKG_STD.TNUMBER := 5; -- Успешно загружен во внешнюю систему
|
||||||
|
NCMFL_STATUS_SEND_ERR constant PKG_STD.TNUMBER := 6; -- При загрузке во внешнюю систему произошла ошибка
|
||||||
|
|
||||||
|
/* Константы - типовые задачи "Выборки данных оборудования (классы оборудования, модели)" */
|
||||||
|
SCMML_TASK_TCF constant PKG_STD.TSTRING := 'TCF'; -- TCF - оценка технического состояния (Technical Condition Forecast)
|
||||||
|
SCMML_TASK_RUL constant PKG_STD.TSTRING := 'RUL'; -- RUL - прогнозирование остаточного ресурса (Remaining Useful Life)
|
||||||
|
SCMML_TASK_FP constant PKG_STD.TSTRING := 'FP'; -- FP - Прогнозирование отказа (Failure Predict)
|
||||||
|
|
||||||
|
/* Константы - состояния "Выборки данных оборудования (классы оборудования, модели)" */
|
||||||
|
NCMML_STATUS_REGISTERED constant PKG_STD.TNUMBER := 0; -- Зарегистрирована
|
||||||
|
NCMML_STATUS_PROCESSING constant PKG_STD.TNUMBER := 1; -- Обрабатывается внешней системой
|
||||||
|
NCMML_STATUS_PROCESSED constant PKG_STD.TNUMBER := 2; -- Успешно обработана внешней системой
|
||||||
|
NCMML_STATUS_PROCESS_ERR constant PKG_STD.TNUMBER := 3; -- При обработке внешней системой произошла ошибка
|
||||||
|
|
||||||
|
/* Проверка прав доступа */
|
||||||
|
function UTL_ACCESS_CHECK
|
||||||
|
(
|
||||||
|
SUSER in varchar2, -- Пользователь
|
||||||
|
STABLE in varchar2, -- Таблица раздела
|
||||||
|
SACTION in varchar2, -- Действие в разделе
|
||||||
|
NDOCUMENT in number := null -- Регистрационный номер документа
|
||||||
|
) return boolean; -- Флаг доступа (false - нет доступа, true - доступ есть)
|
||||||
|
|
||||||
|
/* Проверка прав доступа (процедурная обёртка) */
|
||||||
|
procedure UTL_ACCESS
|
||||||
|
(
|
||||||
|
STABLE in varchar2, -- Таблица раздела
|
||||||
|
SACTION in varchar2, -- Действие в разделе
|
||||||
|
NDOCUMENT in number :=null -- Регистрационный номер документа
|
||||||
|
);
|
||||||
|
|
||||||
/* Считывание записи "Выборки данных оборудования" по регистрационному номеру */
|
/* Считывание записи "Выборки данных оборудования" по регистрационному номеру */
|
||||||
function GET
|
function GET
|
||||||
(
|
(
|
||||||
@ -109,12 +146,27 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
|
|||||||
NRN in number -- Регистрационный номер
|
NRN in number -- Регистрационный номер
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Базовая установка описания структуры выборки "Выборки данных оборудования (классы оборудования)" */
|
||||||
|
procedure CM_SET_DATA_CONFIG
|
||||||
|
(
|
||||||
|
NRN in number, -- Регистрационный номер
|
||||||
|
BDATA_CONFIG in clob -- Описание структуры выборки
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Считывание записи "Выборки данных оборудования (классы оборудования, файлы данных)" по регистрационному номеру */
|
||||||
|
function CMFL_GET
|
||||||
|
(
|
||||||
|
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать)
|
||||||
|
NRN in number -- Регистрационный номер
|
||||||
|
) return UDO_T_EQUIPDSCMFL%rowtype; -- Запись файла данных класса оборудования выборки данных
|
||||||
|
|
||||||
/* Базовое добавление "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
/* Базовое добавление "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
procedure CMFL_INS
|
procedure CMFL_INS
|
||||||
(
|
(
|
||||||
NPRN in number, -- Родитель
|
NPRN in number, -- Родитель
|
||||||
SFILE_NAME in varchar2, -- Имя файла
|
SFILE_NAME in varchar2, -- Имя файла
|
||||||
SDESCR in varchar2, -- Описание
|
SDESCR in varchar2, -- Описание
|
||||||
|
BDATASET in blob, -- Данные выборки
|
||||||
NRN out number -- Регистрационный номер
|
NRN out number -- Регистрационный номер
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -134,18 +186,25 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
|
|||||||
/* Базовая установка состояния "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
/* Базовая установка состояния "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
procedure CMFL_SET_STATUS
|
procedure CMFL_SET_STATUS
|
||||||
(
|
(
|
||||||
NRN in number, -- Регистрационный номер
|
NRN in number, -- Регистрационный номер
|
||||||
NSTATUS in number, -- Состояние (0 - зарегистрирован, 1 - загружается на сервер, 2 - успешно загружен на сервер, 3 - ошибка загрузки на сервер, 4 - загружается во внешнюю систему, 5 - успешно загружен во внешнюю систему, 6 - при загрузке во внешнюю систему произошла ошибка)
|
NSTATUS in number, -- Состояние (см. константы NCMFL_STATUS_*)
|
||||||
SQUEUE_ID in varchar2, -- Идентификатор очереди обработки
|
SQUEUE_ID in varchar2 := null, -- Идентификатор очереди обработки
|
||||||
SERR in varchar2 -- Сообщение об ошибке
|
SERR in varchar2 := null -- Сообщение об ошибке
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Считывание записи "Выборки данных оборудования (классы оборудования, модели)" по регистрационному номеру */
|
||||||
|
function CMML_GET
|
||||||
|
(
|
||||||
|
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать)
|
||||||
|
NRN in number -- Регистрационный номер
|
||||||
|
) return UDO_T_EQUIPDSCMML%rowtype; -- Запись модели класса оборудования выборки данных
|
||||||
|
|
||||||
/* Поиск "Выборки данных оборудования (классы оборудования, модели)" по задаче */
|
/* Поиск "Выборки данных оборудования (классы оборудования, модели)" по задаче */
|
||||||
procedure CMML_FIND_BY_TASK
|
procedure CMML_FIND_BY_TASK
|
||||||
(
|
(
|
||||||
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать)
|
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать)
|
||||||
NPRN in number, -- Родитель
|
NPRN in number, -- Родитель
|
||||||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */
|
STASK in varchar2, -- Задача (см. константы SCMML_TASK_*) */
|
||||||
NPRECISION_P in number, -- Точность (план)
|
NPRECISION_P in number, -- Точность (план)
|
||||||
NRN out number -- Регистрационный номер
|
NRN out number -- Регистрационный номер
|
||||||
);
|
);
|
||||||
@ -154,7 +213,7 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
|
|||||||
procedure CMML_INS
|
procedure CMML_INS
|
||||||
(
|
(
|
||||||
NPRN in number, -- Родитель
|
NPRN in number, -- Родитель
|
||||||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */
|
STASK in varchar2, -- Задача (см. константы SCMML_TASK_*) */
|
||||||
NPRECISION_P in number, -- Точность (план)
|
NPRECISION_P in number, -- Точность (план)
|
||||||
NRN out number -- Регистрационный номер
|
NRN out number -- Регистрационный номер
|
||||||
);
|
);
|
||||||
@ -163,7 +222,7 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
|
|||||||
procedure CMML_UPD
|
procedure CMML_UPD
|
||||||
(
|
(
|
||||||
NRN in number, -- Регистрационный номер
|
NRN in number, -- Регистрационный номер
|
||||||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */
|
STASK in varchar2, -- Задача (см. константы SCMML_TASK_*) */
|
||||||
NPRECISION_P in number -- Точность (план)
|
NPRECISION_P in number -- Точность (план)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -183,16 +242,16 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
|
|||||||
/* Базовая установка состояния "Выборки данных оборудования (классы оборудования, модели)" */
|
/* Базовая установка состояния "Выборки данных оборудования (классы оборудования, модели)" */
|
||||||
procedure CMML_SET_STATUS
|
procedure CMML_SET_STATUS
|
||||||
(
|
(
|
||||||
NRN in number, -- Регистрационный номер
|
NRN in number, -- Регистрационный номер
|
||||||
NSTATUS in number, -- Состояние (0 - зарегистрирована, 1 - обрабатывается внешней системой, 2 - успешно обработана внешней системой, 3 - при обработке внешней системой произошла ошибка)
|
NSTATUS in number, -- Состояние (см. константы NCMML_STATUS_*)
|
||||||
SQUEUE_ID in varchar2, -- Идентификатор очереди обработки
|
SQUEUE_ID in varchar2 := null, -- Идентификатор очереди обработки
|
||||||
SERR in varchar2 -- Сообщение об ошибке
|
SERR in varchar2 := null -- Сообщение об ошибке
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Формирование наименования для задачи "Выборки данных оборудования (классы оборудования, модели)" */
|
/* Формирование наименования для задачи "Выборки данных оборудования (классы оборудования, модели)" */
|
||||||
function CMML_TASK_NAME
|
function CMML_TASK_NAME
|
||||||
(
|
(
|
||||||
STASK in varchar2 -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */
|
STASK in varchar2 -- Задача (см. константы SCMML_TASK_*) */
|
||||||
) return varchar2; -- Наименование задачи
|
) return varchar2; -- Наименование задачи
|
||||||
|
|
||||||
/* Формирование подсказки для задачи "Выборки данных оборудования (классы оборудования, модели)" */
|
/* Формирование подсказки для задачи "Выборки данных оборудования (классы оборудования, модели)" */
|
||||||
@ -242,6 +301,56 @@ end UDO_PKG_EQUIPDS_BASE;
|
|||||||
/
|
/
|
||||||
create or replace package body UDO_PKG_EQUIPDS_BASE as
|
create or replace package body UDO_PKG_EQUIPDS_BASE as
|
||||||
|
|
||||||
|
/*Константы - мнемокод роли администратора, разрешающей обучение моделей */
|
||||||
|
SROLE_ML_ADMIN constant PKG_STD.TSTRING := 'ML_ADMIN';
|
||||||
|
|
||||||
|
/* Проверка прав доступа */
|
||||||
|
function UTL_ACCESS_CHECK
|
||||||
|
(
|
||||||
|
SUSER in varchar2, -- Пользователь
|
||||||
|
STABLE in varchar2, -- Таблица раздела
|
||||||
|
SACTION in varchar2, -- Действие в разделе
|
||||||
|
NDOCUMENT in number := null -- Регистрационный номер документа
|
||||||
|
) return boolean -- Флаг доступа (false - нет доступа, true - доступ есть)
|
||||||
|
is
|
||||||
|
begin
|
||||||
|
/* Проверим наличие роли администратора у пользователя */
|
||||||
|
for C in (select UR.RN
|
||||||
|
from USERROLES UR,
|
||||||
|
ROLES R,
|
||||||
|
USERLIST UL
|
||||||
|
where UR.ROLEID = R.RN
|
||||||
|
and UR.AUTHID = UL.AUTHID
|
||||||
|
and UL.AUTHID = SUSER
|
||||||
|
and R.ROLENAME = SROLE_ML_ADMIN)
|
||||||
|
loop
|
||||||
|
/* Роль есть */
|
||||||
|
return true;
|
||||||
|
end loop;
|
||||||
|
/* Прав доступа нет */
|
||||||
|
return false;
|
||||||
|
end UTL_ACCESS_CHECK;
|
||||||
|
|
||||||
|
/* Проверка прав доступа (процедурная обёртка) */
|
||||||
|
procedure UTL_ACCESS
|
||||||
|
(
|
||||||
|
STABLE in varchar2, -- Таблица раздела
|
||||||
|
SACTION in varchar2, -- Действие в разделе
|
||||||
|
NDOCUMENT in number :=null -- Регистрационный номер документа
|
||||||
|
)
|
||||||
|
is
|
||||||
|
begin
|
||||||
|
if (not UDO_PKG_EQUIPDS_BASE.UTL_ACCESS_CHECK(SUSER => UTILIZER(),
|
||||||
|
STABLE => STABLE,
|
||||||
|
SACTION => SACTION,
|
||||||
|
NDOCUMENT => NDOCUMENT)) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'У вас нет прав доступа для выполнения действия "%s" в таблице "%s".',
|
||||||
|
SACTION,
|
||||||
|
STABLE);
|
||||||
|
end if;
|
||||||
|
end UTL_ACCESS;
|
||||||
|
|
||||||
/* Считывание записи "Выборки данных оборудования" по регистрационному номеру */
|
/* Считывание записи "Выборки данных оборудования" по регистрационному номеру */
|
||||||
function GET
|
function GET
|
||||||
(
|
(
|
||||||
@ -531,12 +640,45 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
|
|||||||
delete from UDO_T_EQUIPDSCM T where T.RN = NRN;
|
delete from UDO_T_EQUIPDSCM T where T.RN = NRN;
|
||||||
end CM_DEL;
|
end CM_DEL;
|
||||||
|
|
||||||
|
/* Базовая установка описания структуры выборки "Выборки данных оборудования (классы оборудования)" */
|
||||||
|
procedure CM_SET_DATA_CONFIG
|
||||||
|
(
|
||||||
|
NRN in number, -- Регистрационный номер
|
||||||
|
BDATA_CONFIG in clob -- Описание структуры выборки
|
||||||
|
)
|
||||||
|
is
|
||||||
|
begin
|
||||||
|
/* Установим описание структуры выборки */
|
||||||
|
update UDO_T_EQUIPDSCM T set T.DATA_CONFIG = BDATA_CONFIG where T.RN = NRN;
|
||||||
|
end CM_SET_DATA_CONFIG;
|
||||||
|
|
||||||
|
/* Считывание записи "Выборки данных оборудования (классы оборудования, файлы данных)" по регистрационному номеру */
|
||||||
|
function CMFL_GET
|
||||||
|
(
|
||||||
|
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать)
|
||||||
|
NRN in number -- Регистрационный номер
|
||||||
|
) return UDO_T_EQUIPDSCMFL%rowtype -- Запись файла данных класса оборудования выборки данных
|
||||||
|
is
|
||||||
|
RES UDO_T_EQUIPDSCMFL%rowtype; -- Буфер для результата
|
||||||
|
begin
|
||||||
|
/* Считывание записи */
|
||||||
|
begin
|
||||||
|
select T.* into RES from UDO_T_EQUIPDSCMFL T where T.RN = NRN;
|
||||||
|
exception
|
||||||
|
when NO_DATA_FOUND then
|
||||||
|
PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => NFLAG_SMART, NDOCUMENT => NRN, SUNIT_TABLE => 'UDO_T_EQUIPDSCMFL');
|
||||||
|
end;
|
||||||
|
/* Возврат результата */
|
||||||
|
return RES;
|
||||||
|
end CMFL_GET;
|
||||||
|
|
||||||
/* Базовое добавление "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
/* Базовое добавление "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
procedure CMFL_INS
|
procedure CMFL_INS
|
||||||
(
|
(
|
||||||
NPRN in number, -- Родитель
|
NPRN in number, -- Родитель
|
||||||
SFILE_NAME in varchar2, -- Имя файла
|
SFILE_NAME in varchar2, -- Имя файла
|
||||||
SDESCR in varchar2, -- Описание
|
SDESCR in varchar2, -- Описание
|
||||||
|
BDATASET in blob, -- Данные выборки
|
||||||
NRN out number -- Регистрационный номер
|
NRN out number -- Регистрационный номер
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
@ -545,21 +687,29 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
|
|||||||
NRN := GEN_ID();
|
NRN := GEN_ID();
|
||||||
/* Добавляем запись */
|
/* Добавляем запись */
|
||||||
insert into UDO_T_EQUIPDSCMFL
|
insert into UDO_T_EQUIPDSCMFL
|
||||||
(RN, PRN, FILE_NAME, DESCR, QUEUE_ID, STATUS, ERR)
|
(RN, PRN, FILE_NAME, DESCR, QUEUE_ID, STATUS, ERR, DATASET)
|
||||||
values
|
values
|
||||||
(NRN, NPRN, SFILE_NAME, SDESCR, null, 0, null);
|
(NRN, NPRN, SFILE_NAME, SDESCR, null, NCMFL_STATUS_REGISTERED, null, BDATASET);
|
||||||
end CMFL_INS;
|
end CMFL_INS;
|
||||||
|
|
||||||
/* Базовое удаление "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
/* Базовое удаление "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
procedure CMFL_DEL
|
procedure CMFL_DEL
|
||||||
(
|
(
|
||||||
NRN in number -- Регистрационный номер
|
NRN in number -- Регистрационный номер
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
|
RREC UDO_T_EQUIPDSCMFL%rowtype; -- Обрабатываемая запись
|
||||||
begin
|
begin
|
||||||
|
/* Считаем запись */
|
||||||
|
RREC := CMFL_GET(NFLAG_SMART => 0, NRN => NRN);
|
||||||
|
/* Можно удалять только в статусах: зарегистрирован, успешно загружен на сервер, ошибка загрузки на сервер, успешно загружен во внешнюю систему, при загрузке во внешнюю систему произошла ошибка */
|
||||||
|
if (RREC.STATUS not in
|
||||||
|
(NCMFL_STATUS_REGISTERED, NCMFL_STATUS_UPLOADED, NCMFL_STATUS_UPLOAD_ERR, NCMFL_STATUS_SENT, NCMFL_STATUS_SEND_ERR)) then
|
||||||
|
P_EXCEPTION(0, 'Файл данных обрабатывается, удаление невозможно.');
|
||||||
|
end if;
|
||||||
/* Удалим запись */
|
/* Удалим запись */
|
||||||
delete from UDO_T_EQUIPDSCMFL T where T.RN = NRN;
|
delete from UDO_T_EQUIPDSCMFL T where T.RN = NRN;
|
||||||
end CMFL_DEL;
|
end CMFL_DEL;
|
||||||
|
|
||||||
/* Базовая установка имени файла "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
/* Базовая установка имени файла "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
procedure CMFL_SET_FILE_NAME
|
procedure CMFL_SET_FILE_NAME
|
||||||
@ -576,27 +726,66 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
|
|||||||
/* Базовая установка состояния "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
/* Базовая установка состояния "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||||||
procedure CMFL_SET_STATUS
|
procedure CMFL_SET_STATUS
|
||||||
(
|
(
|
||||||
NRN in number, -- Регистрационный номер
|
NRN in number, -- Регистрационный номер
|
||||||
NSTATUS in number, -- Состояние (0 - зарегистрирован, 1 - загружается на сервер, 2 - успешно загружен на сервер, 3 - ошибка загрузки на сервер, 4 - загружается во внешнюю систему, 5 - успешно загружен во внешнюю систему, 6 - при загрузке во внешнюю систему произошла ошибка)
|
NSTATUS in number, -- Состояние (см. константы NCMFL_STATUS_*)
|
||||||
SQUEUE_ID in varchar2, -- Идентификатор очереди обработки
|
SQUEUE_ID in varchar2 := null, -- Идентификатор очереди обработки
|
||||||
SERR in varchar2 -- Сообщение об ошибке
|
SERR in varchar2 := null -- Сообщение об ошибке
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
|
SQUEUE_ID_ PKG_STD.TSTRING := SQUEUE_ID; -- Буфер для идентификатора очереди обработки
|
||||||
|
SERR_ PKG_STD.TSTRING := SERR; -- Буфер для сообщения об ошибке
|
||||||
begin
|
begin
|
||||||
|
/* Проверим идентификатор очереди */
|
||||||
|
if ((NSTATUS in (NCMFL_STATUS_SENDING, NCMFL_STATUS_SENT)) and (SQUEUE_ID_ is null)) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Идентификатор очереди обработки обязателен для перевода файла данных в состояния "Загружается во внешнюю систему", "Успешно загружен во внешнюю систему".');
|
||||||
|
end if;
|
||||||
|
/* Проверим сообщение об ошибке */
|
||||||
|
if ((NSTATUS in (NCMFL_STATUS_UPLOAD_ERR, NCMFL_STATUS_SEND_ERR)) and (SERR_ is null)) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Текст сообщения об ошибке обязателен для перевода файла данных в состояния "Ошибка загрузки на сервер", "Ошибка загрузки во внешнюю систему".');
|
||||||
|
end if;
|
||||||
|
/* Удалим идентификатор очереди обработки и сообщение об ошибке для тех статусов, где они не нужны */
|
||||||
|
if (NSTATUS not in (NCMFL_STATUS_SENDING, NCMFL_STATUS_SENT)) then
|
||||||
|
SQUEUE_ID_ := null;
|
||||||
|
end if;
|
||||||
|
if (NSTATUS not in (NCMFL_STATUS_UPLOAD_ERR, NCMFL_STATUS_SEND_ERR)) then
|
||||||
|
SERR_ := null;
|
||||||
|
end if;
|
||||||
/* Установим состояние и сопутствующие ему атрибуты */
|
/* Установим состояние и сопутствующие ему атрибуты */
|
||||||
update UDO_T_EQUIPDSCMFL T
|
update UDO_T_EQUIPDSCMFL T
|
||||||
set T.STATUS = NSTATUS,
|
set T.STATUS = NSTATUS,
|
||||||
T.QUEUE_ID = SQUEUE_ID,
|
T.QUEUE_ID = SQUEUE_ID_,
|
||||||
T.ERR = SERR
|
T.ERR = SERR_
|
||||||
where T.RN = NRN;
|
where T.RN = NRN;
|
||||||
end CMFL_SET_STATUS;
|
end CMFL_SET_STATUS;
|
||||||
|
|
||||||
|
/* Считывание записи "Выборки данных оборудования (классы оборудования, модели)" по регистрационному номеру */
|
||||||
|
function CMML_GET
|
||||||
|
(
|
||||||
|
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать)
|
||||||
|
NRN in number -- Регистрационный номер
|
||||||
|
) return UDO_T_EQUIPDSCMML%rowtype -- Запись модели класса оборудования выборки данных
|
||||||
|
is
|
||||||
|
RES UDO_T_EQUIPDSCMML%rowtype; -- Буфер для результата
|
||||||
|
begin
|
||||||
|
/* Считывание записи */
|
||||||
|
begin
|
||||||
|
select T.* into RES from UDO_T_EQUIPDSCMML T where T.RN = NRN;
|
||||||
|
exception
|
||||||
|
when NO_DATA_FOUND then
|
||||||
|
PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => NFLAG_SMART, NDOCUMENT => NRN, SUNIT_TABLE => 'UDO_T_EQUIPDSCMML');
|
||||||
|
end;
|
||||||
|
/* Возврат результата */
|
||||||
|
return RES;
|
||||||
|
end CMML_GET;
|
||||||
|
|
||||||
/* Поиск "Выборки данных оборудования (классы оборудования, модели)" по задаче */
|
/* Поиск "Выборки данных оборудования (классы оборудования, модели)" по задаче */
|
||||||
procedure CMML_FIND_BY_TASK
|
procedure CMML_FIND_BY_TASK
|
||||||
(
|
(
|
||||||
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать)
|
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать)
|
||||||
NPRN in number, -- Родитель
|
NPRN in number, -- Родитель
|
||||||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */
|
STASK in varchar2, -- Задача (см. константы SCMML_TASK_*) */
|
||||||
NPRECISION_P in number, -- Точность (план)
|
NPRECISION_P in number, -- Точность (план)
|
||||||
NRN out number -- Регистрационный номер
|
NRN out number -- Регистрационный номер
|
||||||
)
|
)
|
||||||
@ -624,7 +813,7 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
|
|||||||
procedure CMML_INS
|
procedure CMML_INS
|
||||||
(
|
(
|
||||||
NPRN in number, -- Родитель
|
NPRN in number, -- Родитель
|
||||||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */
|
STASK in varchar2, -- Задача (см. константы SCMML_TASK_*) */
|
||||||
NPRECISION_P in number, -- Точность (план)
|
NPRECISION_P in number, -- Точность (план)
|
||||||
NRN out number -- Регистрационный номер
|
NRN out number -- Регистрационный номер
|
||||||
)
|
)
|
||||||
@ -636,18 +825,26 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
|
|||||||
insert into UDO_T_EQUIPDSCMML
|
insert into UDO_T_EQUIPDSCMML
|
||||||
(RN, PRN, TASK, PRECISION_P, PRECISION_F, QUEUE_ID, STATUS, ERR)
|
(RN, PRN, TASK, PRECISION_P, PRECISION_F, QUEUE_ID, STATUS, ERR)
|
||||||
values
|
values
|
||||||
(NRN, NPRN, STASK, NPRECISION_P, null, null, 0, null);
|
(NRN, NPRN, STASK, NPRECISION_P, null, null, NCMML_STATUS_REGISTERED, null);
|
||||||
end CMML_INS;
|
end CMML_INS;
|
||||||
|
|
||||||
/* Базовое исправление "Выборки данных оборудования (классы оборудования, модели)" */
|
/* Базовое исправление "Выборки данных оборудования (классы оборудования, модели)" */
|
||||||
procedure CMML_UPD
|
procedure CMML_UPD
|
||||||
(
|
(
|
||||||
NRN in number, -- Регистрационный номер
|
NRN in number, -- Регистрационный номер
|
||||||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */
|
STASK in varchar2, -- Задача (см. константы SCMML_TASK_*) */
|
||||||
NPRECISION_P in number -- Точность (план)
|
NPRECISION_P in number -- Точность (план)
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
|
RREC UDO_T_EQUIPDSCMML%rowtype; -- Обрабатываемая запись
|
||||||
begin
|
begin
|
||||||
|
/* Считаем запись */
|
||||||
|
RREC := CMML_GET(NFLAG_SMART => 0, NRN => NRN);
|
||||||
|
/* Можно изменять только в статусах: зарегистрирована, при обработке внешней системой произошла ошибка */
|
||||||
|
if (RREC.STATUS not in (NCMML_STATUS_REGISTERED, NCMML_STATUS_PROCESS_ERR)) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Модель обрабатывается или уже успешно обработана, изменение невозможно.');
|
||||||
|
end if;
|
||||||
/* Исправим данные */
|
/* Исправим данные */
|
||||||
update UDO_T_EQUIPDSCMML T
|
update UDO_T_EQUIPDSCMML T
|
||||||
set T.TASK = STASK,
|
set T.TASK = STASK,
|
||||||
@ -658,10 +855,17 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
|
|||||||
/* Базовое удаление "Выборки данных оборудования (классы оборудования, модели)" */
|
/* Базовое удаление "Выборки данных оборудования (классы оборудования, модели)" */
|
||||||
procedure CMML_DEL
|
procedure CMML_DEL
|
||||||
(
|
(
|
||||||
NRN in number -- Регистрационный номер
|
NRN in number -- Регистрационный номер
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
|
RREC UDO_T_EQUIPDSCMML%rowtype; -- Обрабатываемая запись
|
||||||
begin
|
begin
|
||||||
|
/* Считаем запись */
|
||||||
|
RREC := CMML_GET(NFLAG_SMART => 0, NRN => NRN);
|
||||||
|
/* Можно удалять только в статусах: зарегистрирована, успешно обработана внешней системой, при обработке внешней системой произошла ошибка */
|
||||||
|
if (RREC.STATUS not in (NCMML_STATUS_REGISTERED, NCMML_STATUS_PROCESSED, NCMML_STATUS_PROCESS_ERR)) then
|
||||||
|
P_EXCEPTION(0, 'Модель обрабатывается, удаление невозможно.');
|
||||||
|
end if;
|
||||||
/* Удалим историю */
|
/* Удалим историю */
|
||||||
for C in (select T.RN from UDO_T_EQUIPDSCMMLH T where T.PRN = NRN)
|
for C in (select T.RN from UDO_T_EQUIPDSCMMLH T where T.PRN = NRN)
|
||||||
loop
|
loop
|
||||||
@ -686,34 +890,53 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
|
|||||||
/* Базовая установка состояния "Выборки данных оборудования (классы оборудования, модели)" */
|
/* Базовая установка состояния "Выборки данных оборудования (классы оборудования, модели)" */
|
||||||
procedure CMML_SET_STATUS
|
procedure CMML_SET_STATUS
|
||||||
(
|
(
|
||||||
NRN in number, -- Регистрационный номер
|
NRN in number, -- Регистрационный номер
|
||||||
NSTATUS in number, -- Состояние (0 - зарегистрирована, 1 - обрабатывается внешней системой, 2 - успешно обработана внешней системой, 3 - при обработке внешней системой произошла ошибка)
|
NSTATUS in number, -- Состояние (см. константы NCMML_STATUS_*)
|
||||||
SQUEUE_ID in varchar2, -- Идентификатор очереди обработки
|
SQUEUE_ID in varchar2 := null, -- Идентификатор очереди обработки
|
||||||
SERR in varchar2 -- Сообщение об ошибке
|
SERR in varchar2 := null -- Сообщение об ошибке
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
|
SQUEUE_ID_ PKG_STD.TSTRING := SQUEUE_ID; -- Буфер для идентификатора очереди обработки
|
||||||
|
SERR_ PKG_STD.TSTRING := SERR; -- Буфер для сообщения об ошибке
|
||||||
begin
|
begin
|
||||||
|
/* Проверим идентификатор очереди */
|
||||||
|
if ((NSTATUS in (NCMML_STATUS_PROCESSING, NCMML_STATUS_PROCESSED)) and (SQUEUE_ID_ is null)) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Идентификатор очереди обработки обязателен для перевода модели в состояния "Обрабатывается внешней системой", "Успешно обработана внешней системой".');
|
||||||
|
end if;
|
||||||
|
/* Проверим сообщение об ошибке */
|
||||||
|
if ((NSTATUS in (NCMML_STATUS_PROCESS_ERR)) and (SERR_ is null)) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Текст сообщения об ошибке обязателен для перевода модели в состояние "Ошибка обработки внешней системой".');
|
||||||
|
end if;
|
||||||
|
/* Удалим идентификатор очереди обработки и сообщение об ошибке для тех статусов, где они не нужны */
|
||||||
|
if (NSTATUS not in (NCMML_STATUS_PROCESSING, NCMML_STATUS_PROCESSED)) then
|
||||||
|
SQUEUE_ID_ := null;
|
||||||
|
end if;
|
||||||
|
if (NSTATUS not in (NCMML_STATUS_PROCESS_ERR)) then
|
||||||
|
SERR_ := null;
|
||||||
|
end if;
|
||||||
/* Установим состояние и сопутствующие ему атрибуты */
|
/* Установим состояние и сопутствующие ему атрибуты */
|
||||||
update UDO_T_EQUIPDSCMML T
|
update UDO_T_EQUIPDSCMML T
|
||||||
set T.STATUS = NSTATUS,
|
set T.STATUS = NSTATUS,
|
||||||
T.QUEUE_ID = SQUEUE_ID,
|
T.QUEUE_ID = SQUEUE_ID_,
|
||||||
T.ERR = SERR
|
T.ERR = SERR_
|
||||||
where T.RN = NRN;
|
where T.RN = NRN;
|
||||||
end CMML_SET_STATUS;
|
end CMML_SET_STATUS;
|
||||||
|
|
||||||
/* Формирование наименования для задачи "Выборки данных оборудования (классы оборудования, модели)" */
|
/* Формирование наименования для задачи "Выборки данных оборудования (классы оборудования, модели)" */
|
||||||
function CMML_TASK_NAME
|
function CMML_TASK_NAME
|
||||||
(
|
(
|
||||||
STASK in varchar2 -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */
|
STASK in varchar2 -- Задача (см. константы SCMML_TASK_*) */
|
||||||
) return varchar2 -- Наименование задачи
|
) return varchar2 -- Наименование задачи
|
||||||
is
|
is
|
||||||
begin
|
begin
|
||||||
case STASK
|
case STASK
|
||||||
when 'TCF' then
|
when SCMML_TASK_TCF then
|
||||||
return 'Оценка технического состояния';
|
return 'Оценка технического состояния';
|
||||||
when 'RUL' then
|
when SCMML_TASK_RUL then
|
||||||
return 'Прогноз остаточного ресурса';
|
return 'Прогноз остаточного ресурса';
|
||||||
when 'FP' then
|
when SCMML_TASK_FP then
|
||||||
return 'Прогноз отказа';
|
return 'Прогноз отказа';
|
||||||
else
|
else
|
||||||
return 'Вид задачи оценки не поддерживается';
|
return 'Вид задачи оценки не поддерживается';
|
||||||
@ -725,9 +948,9 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
|
|||||||
return varchar2 -- Подсказка для задачи
|
return varchar2 -- Подсказка для задачи
|
||||||
is
|
is
|
||||||
begin
|
begin
|
||||||
return '<b>TCF</b> - ' || CMML_TASK_NAME(STASK => 'TCF') || ' (<b>T</b>echnical <b>C</b>ondition <b>F</b>orecast)<br>' ||
|
return '<b>TCF</b> - ' || CMML_TASK_NAME(STASK => SCMML_TASK_TCF) || ' (<b>T</b>echnical <b>C</b>ondition <b>F</b>orecast)<br>' ||
|
||||||
'<b>RUL</b> - ' || CMML_TASK_NAME(STASK => 'RUL') || ' (<b>R</b>emaining <b>U</b>seful <b>L</b>ife)<br>' ||
|
'<b>RUL</b> - ' || CMML_TASK_NAME(STASK => SCMML_TASK_RUL) || ' (<b>R</b>emaining <b>U</b>seful <b>L</b>ife)<br>' ||
|
||||||
'<b>FP</b> - ' || CMML_TASK_NAME(STASK => 'FP') || ' (<b>F</b>ailure <b>P</b>redict)';
|
'<b>FP</b> - ' || CMML_TASK_NAME(STASK => SCMML_TASK_FP) || ' (<b>F</b>ailure <b>P</b>redict)';
|
||||||
end CMML_TASK_HINT;
|
end CMML_TASK_HINT;
|
||||||
|
|
||||||
/* Вычисление вероятности выхода из строя на дату по RUL-прогнозу */
|
/* Вычисление вероятности выхода из строя на дату по RUL-прогнозу */
|
||||||
|
@ -82,7 +82,7 @@ create or replace package UDO_PKG_EQUIPTCF as
|
|||||||
DFORECAST_DATE in date, -- Дата получения прогноза
|
DFORECAST_DATE in date, -- Дата получения прогноза
|
||||||
NFORECAST in number, -- Прогнозное значение, полученное от фреймворка
|
NFORECAST in number, -- Прогнозное значение, полученное от фреймворка
|
||||||
SDICMUNTS in varchar2, -- Единица измерения выборки
|
SDICMUNTS in varchar2, -- Единица измерения выборки
|
||||||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */
|
STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.CMML_TASK_*) */
|
||||||
COUT out clob -- Данные детальной карточки прогноза
|
COUT out clob -- Данные детальной карточки прогноза
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -785,7 +785,7 @@ text="Проверка прав доступа при формировании
|
|||||||
DFORECAST_DATE in date, -- Дата получения прогноза
|
DFORECAST_DATE in date, -- Дата получения прогноза
|
||||||
NFORECAST in number, -- Прогнозное значение, полученное от фреймворка
|
NFORECAST in number, -- Прогнозное значение, полученное от фреймворка
|
||||||
SDICMUNTS in varchar2, -- Единица измерения выборки
|
SDICMUNTS in varchar2, -- Единица измерения выборки
|
||||||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */
|
STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.CMML_TASK_*) */
|
||||||
COUT out clob -- Данные детальной карточки прогноза
|
COUT out clob -- Данные детальной карточки прогноза
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
@ -977,7 +977,7 @@ text="Проверка прав доступа при формировании
|
|||||||
UDO_T_EQUIPDSCMML CMML
|
UDO_T_EQUIPDSCMML CMML
|
||||||
where T.EQCONFIG = NEQCONFIG
|
where T.EQCONFIG = NEQCONFIG
|
||||||
and T.PRN = CMML.RN
|
and T.PRN = CMML.RN
|
||||||
and CMML.TASK = 'RUL'
|
and CMML.TASK = UDO_PKG_EQUIPDS_BASE.SCMML_TASK_RUL
|
||||||
order by T.RQ_DATE desc)
|
order by T.RQ_DATE desc)
|
||||||
loop
|
loop
|
||||||
DFORECAST_DATE := C.DFORECAST_DATE;
|
DFORECAST_DATE := C.DFORECAST_DATE;
|
||||||
|
@ -2,23 +2,28 @@ create or replace procedure UDO_P_EQUIPDSCMFL_CREATE
|
|||||||
/* Тестовая процедура формирования данных выборки */
|
/* Тестовая процедура формирования данных выборки */
|
||||||
(
|
(
|
||||||
NEQUIPDSCM in number, -- Рег. номер класса оборудования выборки данных
|
NEQUIPDSCM in number, -- Рег. номер класса оборудования выборки данных
|
||||||
NCNT in number -- Количество формируемых файлов
|
NCNT in number, -- Количество формируемых файлов
|
||||||
|
NDATASET_IDENT out number, -- Идентификатор буфера данных
|
||||||
|
NDATASET_CONFIG_IDENT out number -- Идентификатор буфера описания данных
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
NTMP PKG_STD.TREF; -- Рег. номер добавленного файла данных
|
|
||||||
begin
|
begin
|
||||||
/* Зачистим старые файлы */
|
/* Сформируем идентификаторы */
|
||||||
for C in (select T.RN from UDO_T_EQUIPDSCMFL T where T.PRN = NEQUIPDSCM)
|
NDATASET_IDENT := GEN_IDENT();
|
||||||
loop
|
NDATASET_CONFIG_IDENT := GEN_IDENT();
|
||||||
UDO_PKG_EQUIPDS_BASE.CMFL_DEL(NRN => C.RN);
|
/* Добавим новые файлы данных */
|
||||||
end loop;
|
|
||||||
/* Добавим новые файлы */
|
|
||||||
for I in 1 .. NCNT
|
for I in 1 .. NCNT
|
||||||
loop
|
loop
|
||||||
UDO_PKG_EQUIPDS_BASE.CMFL_INS(NPRN => NEQUIPDSCM,
|
P_FILE_BUFFER_INSERT(NIDENT => NDATASET_IDENT,
|
||||||
SFILE_NAME => 'data_' || NEQUIPDSCM || '_' || I || '.xml',
|
CFILENAME => 'data_' || NEQUIPDSCM || '_' || I || '_' || TO_CHAR(sysdate, 'yyyymmddhh24miss') ||
|
||||||
SDESCR => 'Описание для файла №' || I,
|
'.xml',
|
||||||
NRN => NTMP);
|
CDATA => 'Описание для файла №' || I,
|
||||||
|
BLOBDATA => CLOB2BLOB(LCDATA => 'Содержимое для файла №' || I));
|
||||||
end loop;
|
end loop;
|
||||||
|
/* Добавим описание файлов данных */
|
||||||
|
P_FILE_BUFFER_INSERT(NIDENT => NDATASET_CONFIG_IDENT,
|
||||||
|
CFILENAME => null,
|
||||||
|
CDATA => 'Описание структуры выборки',
|
||||||
|
BLOBDATA => null);
|
||||||
end;
|
end;
|
||||||
/
|
/
|
||||||
|
@ -15,16 +15,18 @@ create table UDO_T_EQUIPDSCMFL
|
|||||||
STATUS number(1) default 0 not null,
|
STATUS number(1) default 0 not null,
|
||||||
/* Сообщение об ошибке */
|
/* Сообщение об ошибке */
|
||||||
ERR varchar2(4000) default null,
|
ERR varchar2(4000) default null,
|
||||||
|
/* Данные */
|
||||||
|
DATASET blob,
|
||||||
/* Ключи */
|
/* Ключи */
|
||||||
constraint UDO_C_EQUIPDSCMFL_RN_PK primary key (RN),
|
constraint UDO_C_EQUIPDSCMFL_RN_PK primary key (RN),
|
||||||
constraint UDO_C_EQUIPDSCMFL_PRN_FK foreign key (PRN) references UDO_T_EQUIPDSCM(RN),
|
constraint UDO_C_EQUIPDSCMFL_PRN_FK foreign key (PRN) references UDO_T_EQUIPDSCM(RN),
|
||||||
constraint UDO_C_EQUIPDSCMFL_FLNM_NB check (rtrim(FILE_NAME) is not null),
|
constraint UDO_C_EQUIPDSCMFL_FLNM_NB check (rtrim(FILE_NAME) is not null),
|
||||||
constraint UDO_C_EQUIPDSCMFL_DESCR_NB check ((DESCR is null) or (rtrim(DESCR) is not null)),
|
constraint UDO_C_EQUIPDSCMFL_DESCR_NB check ((DESCR is null) or (rtrim(DESCR) is not null)),
|
||||||
constraint UDO_C_EQUIPDSCMFL_QID_NB check ((QUEUE_ID is null) or (rtrim(QUEUE_ID) is not null)),
|
constraint UDO_C_EQUIPDSCMFL_QID_NB check ((QUEUE_ID is null) or (rtrim(QUEUE_ID) is not null)),
|
||||||
constraint UDO_C_EQUIPDSCMFL_QID_CH check (((STATUS in (4, 5, 6)) and (QUEUE_ID is not null)) or (STATUS not in (4, 5, 6))),
|
constraint UDO_C_EQUIPDSCMFL_QID_CH check (((STATUS in (4, 5)) and (QUEUE_ID is not null)) or ((STATUS not in (4, 5)) and (QUEUE_ID is null))),
|
||||||
constraint UDO_C_EQUIPDSCMFL_STATUS_CH check (STATUS in (0, 1, 2, 3, 4, 5, 6)),
|
constraint UDO_C_EQUIPDSCMFL_STATUS_CH check (STATUS in (0, 1, 2, 3, 4, 5, 6)),
|
||||||
constraint UDO_C_EQUIPDSCMFL_ERR_NB check ((ERR is null) or (rtrim(ERR) is not null)),
|
constraint UDO_C_EQUIPDSCMFL_ERR_NB check ((ERR is null) or (rtrim(ERR) is not null)),
|
||||||
constraint UDO_C_EQUIPDSCMFL_ERR_CH check (((STATUS in (3, 6)) and (ERR is not null)) or (STATUS not in (3, 6))),
|
constraint UDO_C_EQUIPDSCMFL_ERR_CH check (((STATUS in (3, 6)) and (ERR is not null)) or ((STATUS not in (3, 6)) and (ERR is null))),
|
||||||
constraint UDO_C_EQUIPDSCMFL_FLNM_UN unique (PRN, FILE_NAME),
|
constraint UDO_C_EQUIPDSCMFL_FLNM_UN unique (PRN, FILE_NAME),
|
||||||
constraint UDO_C_EQUIPDSCMFL_QID_UN unique (FILE_NAME, QUEUE_ID)
|
constraint UDO_C_EQUIPDSCMFL_QID_UN unique (FILE_NAME, QUEUE_ID)
|
||||||
);
|
);
|
||||||
|
@ -25,10 +25,10 @@ create table UDO_T_EQUIPDSCMML
|
|||||||
constraint UDO_C_EQUIPDSCMML_PRECP_CH check ((PRECISION_P > 0) and (PRECISION_P <= 100)),
|
constraint UDO_C_EQUIPDSCMML_PRECP_CH check ((PRECISION_P > 0) and (PRECISION_P <= 100)),
|
||||||
constraint UDO_C_EQUIPDSCMML_PRECF_CH check ((PRECISION_F is null) or ((PRECISION_F is not null) and (PRECISION_F > 0) and (PRECISION_F <= 100))),
|
constraint UDO_C_EQUIPDSCMML_PRECF_CH check ((PRECISION_F is null) or ((PRECISION_F is not null) and (PRECISION_F > 0) and (PRECISION_F <= 100))),
|
||||||
constraint UDO_C_EQUIPDSCMML_QID_NB check ((QUEUE_ID is null) or (rtrim(QUEUE_ID) is not null)),
|
constraint UDO_C_EQUIPDSCMML_QID_NB check ((QUEUE_ID is null) or (rtrim(QUEUE_ID) is not null)),
|
||||||
constraint UDO_C_EQUIPDSCMML_QID_CH check (((STATUS in (1, 2, 3)) and (QUEUE_ID is not null)) or (STATUS not in (1, 2, 3))),
|
constraint UDO_C_EQUIPDSCMML_QID_CH check (((STATUS in (1, 2)) and (QUEUE_ID is not null)) or ((STATUS not in (1, 2)) and (QUEUE_ID is null))),
|
||||||
constraint UDO_C_EQUIPDSCMML_STATUS_CH check (STATUS in (0, 1, 2, 3)),
|
constraint UDO_C_EQUIPDSCMML_STATUS_CH check (STATUS in (0, 1, 2, 3)),
|
||||||
constraint UDO_C_EQUIPDSCMML_ERR_NB check ((ERR is null) or (rtrim(ERR) is not null)),
|
constraint UDO_C_EQUIPDSCMML_ERR_NB check ((ERR is null) or (rtrim(ERR) is not null)),
|
||||||
constraint UDO_C_EQUIPDSCMML_ERR_CH check (((STATUS in (3)) and (ERR is not null)) or (STATUS not in (3))),
|
constraint UDO_C_EQUIPDSCMML_ERR_CH check (((STATUS in (3)) and (ERR is not null)) or ((STATUS not in (3)) and (ERR is null))),
|
||||||
constraint UDO_C_EQUIPDSCMML_UN unique (PRN, TASK, PRECISION_P),
|
constraint UDO_C_EQUIPDSCMML_UN unique (PRN, TASK, PRECISION_P),
|
||||||
constraint UDO_C_EQUIPDSCMML_QID_UN unique (QUEUE_ID)
|
constraint UDO_C_EQUIPDSCMML_QID_UN unique (QUEUE_ID)
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user