720 lines
45 KiB
SQL
720 lines
45 KiB
SQL
create or replace package UDO_PKG_EQUIPDS as
|
||
|
||
/* Список "Выборки данных оборудования" */
|
||
procedure LIST
|
||
(
|
||
COUT out clob -- Сериализованная таблица данных
|
||
);
|
||
|
||
/* Клиентское добавление "Выборки данных оборудования" */
|
||
procedure INS
|
||
(
|
||
SCODE in varchar2, -- Мнемокод
|
||
SNAME in varchar2, -- Наименование
|
||
NRN out number -- Регистрационный номер
|
||
);
|
||
|
||
/* Клиентское удаление "Выборки данных оборудования" */
|
||
procedure DEL
|
||
(
|
||
NRN in number -- Регистрационный номер
|
||
);
|
||
|
||
/* Карточка "Выборки данных оборудования (классы оборудования)" */
|
||
procedure CM_CARD
|
||
(
|
||
NEQUIPDSCM in number, -- Рег. номер класса оборудования выборки данных
|
||
COUT out clob -- Сериализованная карточка
|
||
);
|
||
|
||
/* Список "Выборки данных оборудования (классы оборудования)" */
|
||
procedure CM_LIST
|
||
(
|
||
NEQUIPDS in number, -- Рег. номер выборки данных
|
||
COUT out clob -- Сериализованный список
|
||
);
|
||
|
||
/* Клиентское добавление "Выборки данных оборудования (классы оборудования)" */
|
||
procedure CM_INS
|
||
(
|
||
NPRN in number, -- Родитель
|
||
SEQOBJKIND in varchar2, -- Класс оборудования
|
||
SUSERPROCS_DATA in varchar2, -- Процедура формирования
|
||
SEXSSERVICE_UPLOAD in varchar2, -- Сервис обмена для выгрузки данных
|
||
SEXSSERVICEFN_UPLOAD in varchar2, -- Функция обмена для выгрузки данных
|
||
SEXSSERVICE_SEND_MD in varchar2, -- Сервис обмена для передачи внешней системе
|
||
SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
|
||
SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
|
||
SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
|
||
NRN out number -- Регистрационный номер
|
||
);
|
||
|
||
/* Клиентское удаление "Выборки данных оборудования (классы оборудования)" */
|
||
procedure CM_DEL
|
||
(
|
||
NRN in number -- Регистрационный номер
|
||
);
|
||
|
||
/* Список "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||
procedure CMFL_LIST
|
||
(
|
||
NEQUIPDSCM in number, -- Рег. номер класса оборудования выборки данных
|
||
COUT out clob -- Сериализованная таблица данных
|
||
);
|
||
|
||
/* Загрузка на сервер "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||
procedure CMFL_UPLOAD
|
||
(
|
||
NEQUIPDSCM in number -- Рег. номер класса оборудования выборки данных
|
||
);
|
||
|
||
/* Передача внешней системе "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||
procedure CMFL_SEND_MD
|
||
(
|
||
NEQUIPDSCM in number -- Рег. номер класса оборудования выборки данных
|
||
);
|
||
|
||
/* Список "Выборки данных оборудования (классы оборудования, модели)" */
|
||
procedure CMML_LIST
|
||
(
|
||
NEQUIPDSCM in number, -- Рег. номер класса оборудования выборки данных
|
||
COUT out clob -- Сериализованная таблица данных
|
||
);
|
||
|
||
/* Клиентское добавление "Выборки данных оборудования (классы оборудования, модели)" */
|
||
procedure CMML_INS
|
||
(
|
||
NPRN in number, -- Родитель
|
||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict))
|
||
NPRECISION_P in number, -- Точность (план)
|
||
NRN out number -- Регистрационный номер
|
||
);
|
||
|
||
/* Клиентское удаление "Выборки данных оборудования (классы оборудования, модели)" */
|
||
procedure CMML_DEL
|
||
(
|
||
NRN in number -- Регистрационный номер
|
||
);
|
||
|
||
/* Обработка внешней системой "Выборки данных оборудования (классы оборудования, модели)" */
|
||
procedure CMML_SEND_RQ
|
||
(
|
||
NEQUIPDSCMML in number -- Рег. номер модели класса оборудования выборки данных
|
||
);
|
||
|
||
/* Состояние моделей по единице оборудования */
|
||
function CMML_STATUS_BY_EQCONFIG
|
||
(
|
||
NEQCONFIG in number -- Рег. номер позиции состава оборудования
|
||
) return number; -- Код действия с моделью (0 - нет моделей, 1 - есть модели в процессе обучения, 2 - есть обученные модели)
|
||
|
||
/* Список моделей по единице оборудования */
|
||
procedure CMML_LIST_BY_EQCONFIG
|
||
(
|
||
NEQCONFIG in number, -- Рег. номер позиции состава оборудования
|
||
COUT out clob -- Сериализованная таблица данных
|
||
);
|
||
|
||
end UDO_PKG_EQUIPDS;
|
||
/
|
||
create or replace package body UDO_PKG_EQUIPDS as
|
||
|
||
/*
|
||
TODO: owner="root" created="06.08.2024"
|
||
text="Проверка прав доступа на работу с ""Выборками данных"""
|
||
*/
|
||
|
||
/* Список "Выборки данных оборудования" */
|
||
procedure LIST
|
||
(
|
||
COUT out clob -- Сериализованная таблица данных
|
||
)
|
||
is
|
||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
|
||
NCUR integer; -- Курсор документа для результата
|
||
XDOC PKG_XMAKE.TNODE; -- Документ для результата
|
||
XDS PKG_XMAKE.TNODE; -- Элемент для выборки данных
|
||
begin
|
||
/* Открываем документ */
|
||
NCUR := PKG_XMAKE.OPEN_CURSOR();
|
||
/* Обходим выборки данных */
|
||
for C in (select T.RN NRN,
|
||
T.NAME SNAME
|
||
from UDO_T_EQUIPDS T
|
||
where T.COMPANY = NCOMPANY
|
||
order by T.NAME)
|
||
loop
|
||
XDS := PKG_XMAKE.CONCAT(ICURSOR => NCUR,
|
||
RNODE00 => XDS,
|
||
RNODE01 => PKG_XMAKE.ELEMENT(ICURSOR => NCUR,
|
||
SNAME => 'XDS',
|
||
RATTRIBUTES => PKG_XMAKE.ATTRIBUTES(ICURSOR => NCUR,
|
||
RATTRIBUTE00 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
||
SNAME => 'NRN',
|
||
SVALUE => C.NRN),
|
||
RATTRIBUTE01 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
||
SNAME => 'SNAME',
|
||
SVALUE => C.SNAME))));
|
||
end loop;
|
||
/* Формируем XML-представление ответа */
|
||
XDOC := PKG_XMAKE.ELEMENT(ICURSOR => NCUR, SNAME => 'XDATA', RNODE00 => XDS);
|
||
/* Конвертируем в CLOB */
|
||
COUT := PKG_XMAKE.SERIALIZE_TO_CLOB(ICURSOR => NCUR,
|
||
ITYPE => PKG_XMAKE.CONTENT_,
|
||
RNODE => XDOC,
|
||
RHEADER => PKG_XHEADER.WRAP_ALL(SVERSION => PKG_XHEADER.VERSION_1_0_,
|
||
SENCODING => PKG_XHEADER.ENCODING_UTF_,
|
||
SSTANDALONE => PKG_XHEADER.STANDALONE_YES_));
|
||
/* Закрываем документ */
|
||
PKG_XMAKE.CLOSE_CURSOR(ICURSOR => NCUR);
|
||
end LIST;
|
||
|
||
/* Клиентское добавление "Выборки данных оборудования" */
|
||
procedure INS
|
||
(
|
||
SCODE in varchar2, -- Мнемокод
|
||
SNAME in varchar2, -- Наименование
|
||
NRN out number -- Регистрационный номер
|
||
)
|
||
is
|
||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация
|
||
begin
|
||
/* Добавляем запись */
|
||
UDO_PKG_EQUIPDS_BASE.INS(NCOMPANY => NCOMPANY, SCODE => SCODE, SNAME => SNAME, NRN => NRN);
|
||
end INS;
|
||
|
||
/* Клиентское удаление "Выборки данных оборудования" */
|
||
procedure DEL
|
||
(
|
||
NRN in number -- Регистрационный номер
|
||
)
|
||
is
|
||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация
|
||
begin
|
||
/* Удаляем запись */
|
||
UDO_PKG_EQUIPDS_BASE.DEL(NRN => NRN, NCOMPANY => NCOMPANY);
|
||
end DEL;
|
||
|
||
/* Карточка "Выборки данных оборудования (классы оборудования)" */
|
||
procedure CM_CARD
|
||
(
|
||
NEQUIPDSCM in number, -- Рег. номер класса оборудования выборки данных
|
||
COUT out clob -- Сериализованная карточка
|
||
)
|
||
is
|
||
NCUR integer; -- Курсор документа для результата
|
||
XDOC PKG_XMAKE.TNODE; -- Документ для результата
|
||
XEQUIPDSCM PKG_XMAKE.TNODE; -- Элемент для карточки
|
||
begin
|
||
/* Открываем документ */
|
||
NCUR := PKG_XMAKE.OPEN_CURSOR();
|
||
/* Обращаемся к данным класса оборудования */
|
||
for C in (select T.RN NRN,
|
||
OK.NAME SNAME,
|
||
UP.CODE SUSERPROCS_DATA,
|
||
SU.CODE || '/' || SFU.CODE SEXSSERVICE_UPLOAD,
|
||
SMD.CODE || '/' || SFMD.CODE SEXSSERVICE_SEND_MD,
|
||
SRQ.CODE || '/' || SFRQ.CODE SEXSSERVICE_SEND_RQ
|
||
from UDO_T_EQUIPDSCM T,
|
||
EQOBJKIND OK,
|
||
USERPROCS UP,
|
||
EXSSERVICE SU,
|
||
EXSSERVICEFN SFU,
|
||
EXSSERVICE SMD,
|
||
EXSSERVICEFN SFMD,
|
||
EXSSERVICE SRQ,
|
||
EXSSERVICEFN SFRQ
|
||
where T.RN = NEQUIPDSCM
|
||
and T.EQOBJKIND = OK.RN
|
||
and T.USERPROCS_DATA = UP.RN
|
||
and T.EXSSERVICEFN_UPLOAD = SFU.RN
|
||
and SFU.PRN = SU.RN
|
||
and T.EXSSERVICEFN_SEND_MD = SFMD.RN
|
||
and SFMD.PRN = SMD.RN
|
||
and T.EXSSERVICEFN_SEND_RQ = SFRQ.RN
|
||
and SFRQ.PRN = SRQ.RN)
|
||
loop
|
||
/* Собираем карточку класса оборудования */
|
||
XEQUIPDSCM := PKG_XMAKE.ELEMENT(ICURSOR => NCUR,
|
||
SNAME => 'XEQUIPDSCM',
|
||
RATTRIBUTES => PKG_XMAKE.ATTRIBUTES(ICURSOR => NCUR,
|
||
RATTRIBUTE00 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
||
SNAME => 'NRN',
|
||
SVALUE => C.NRN),
|
||
RATTRIBUTE01 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
||
SNAME => 'SNAME',
|
||
SVALUE => C.SNAME),
|
||
RATTRIBUTE02 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
||
SNAME => 'SUSERPROCS_DATA',
|
||
SVALUE => C.SUSERPROCS_DATA),
|
||
RATTRIBUTE03 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
||
SNAME => 'SEXSSERVICE_UPLOAD',
|
||
SVALUE => C.SEXSSERVICE_UPLOAD),
|
||
RATTRIBUTE04 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
||
SNAME => 'SEXSSERVICE_SEND_MD',
|
||
SVALUE => C.SEXSSERVICE_SEND_MD),
|
||
RATTRIBUTE05 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
||
SNAME => 'SEXSSERVICE_SEND_RQ',
|
||
SVALUE => C.SEXSSERVICE_SEND_RQ)));
|
||
end loop;
|
||
/* Формируем XML-представление ответа */
|
||
XDOC := PKG_XMAKE.ELEMENT(ICURSOR => NCUR, SNAME => 'XDATA', RNODE00 => XEQUIPDSCM);
|
||
/* Конвертируем в CLOB */
|
||
COUT := PKG_XMAKE.SERIALIZE_TO_CLOB(ICURSOR => NCUR,
|
||
ITYPE => PKG_XMAKE.CONTENT_,
|
||
RNODE => XDOC,
|
||
RHEADER => PKG_XHEADER.WRAP_ALL(SVERSION => PKG_XHEADER.VERSION_1_0_,
|
||
SENCODING => PKG_XHEADER.ENCODING_UTF_,
|
||
SSTANDALONE => PKG_XHEADER.STANDALONE_YES_));
|
||
/* Закрываем документ */
|
||
PKG_XMAKE.CLOSE_CURSOR(ICURSOR => NCUR);
|
||
end CM_CARD;
|
||
|
||
/* Список "Выборки данных оборудования (классы оборудования)" */
|
||
procedure CM_LIST
|
||
(
|
||
NEQUIPDS in number, -- Рег. номер выборки данных
|
||
COUT out clob -- Сериализованный список
|
||
)
|
||
is
|
||
NCUR integer; -- Курсор документа для результата
|
||
XDOC PKG_XMAKE.TNODE; -- Документ для результата
|
||
XDSCM PKG_XMAKE.TNODE; -- Элемент для выборки данных
|
||
begin
|
||
/* Открываем документ */
|
||
NCUR := PKG_XMAKE.OPEN_CURSOR();
|
||
/* Обходим классы оборудования заданной выборки данных */
|
||
for C in (select T.RN NRN,
|
||
OK.CODE SCODE,
|
||
OK.NAME SNAME
|
||
from UDO_T_EQUIPDSCM T,
|
||
EQOBJKIND OK
|
||
where T.PRN = NEQUIPDS
|
||
and T.EQOBJKIND = OK.RN
|
||
order by OK.CODE)
|
||
loop
|
||
XDSCM := PKG_XMAKE.CONCAT(ICURSOR => NCUR,
|
||
RNODE00 => XDSCM,
|
||
RNODE01 => PKG_XMAKE.ELEMENT(ICURSOR => NCUR,
|
||
SNAME => 'XDSCM',
|
||
RATTRIBUTES => PKG_XMAKE.ATTRIBUTES(ICURSOR => NCUR,
|
||
RATTRIBUTE00 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
||
SNAME => 'NRN',
|
||
SVALUE => C.NRN),
|
||
RATTRIBUTE01 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
||
SNAME => 'SCODE',
|
||
SVALUE => C.SCODE),
|
||
RATTRIBUTE02 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
||
SNAME => 'SNAME',
|
||
SVALUE => C.SNAME))));
|
||
end loop;
|
||
/* Формируем XML-представление ответа */
|
||
XDOC := PKG_XMAKE.ELEMENT(ICURSOR => NCUR, SNAME => 'XDATA', RNODE00 => XDSCM);
|
||
/* Конвертируем в CLOB */
|
||
COUT := PKG_XMAKE.SERIALIZE_TO_CLOB(ICURSOR => NCUR,
|
||
ITYPE => PKG_XMAKE.CONTENT_,
|
||
RNODE => XDOC,
|
||
RHEADER => PKG_XHEADER.WRAP_ALL(SVERSION => PKG_XHEADER.VERSION_1_0_,
|
||
SENCODING => PKG_XHEADER.ENCODING_UTF_,
|
||
SSTANDALONE => PKG_XHEADER.STANDALONE_YES_));
|
||
/* Закрываем документ */
|
||
PKG_XMAKE.CLOSE_CURSOR(ICURSOR => NCUR);
|
||
end CM_LIST;
|
||
|
||
/* Клиентское добавление "Выборки данных оборудования (классы оборудования)" */
|
||
procedure CM_INS
|
||
(
|
||
NPRN in number, -- Родитель
|
||
SEQOBJKIND in varchar2, -- Класс оборудования
|
||
SUSERPROCS_DATA in varchar2, -- Процедура формирования
|
||
SEXSSERVICE_UPLOAD in varchar2, -- Сервис обмена для выгрузки данных
|
||
SEXSSERVICEFN_UPLOAD in varchar2, -- Функция обмена для выгрузки данных
|
||
SEXSSERVICE_SEND_MD in varchar2, -- Сервис обмена для передачи внешней системе
|
||
SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
|
||
SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
|
||
SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
|
||
NRN out number -- Регистрационный номер
|
||
)
|
||
is
|
||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация
|
||
NEQOBJKIND PKG_STD.TREF; -- Рег. номер класса оборудования
|
||
NUSERPROCS_DATA PKG_STD.TREF; -- Рег. номер процедуры формирования
|
||
NEXSSERVICEFN_UPLOAD PKG_STD.TREF; -- Рег. номер функции обмена для выгрузки данных
|
||
NEXSSERVICEFN_SEND_MD PKG_STD.TREF; -- Рег. номер Функции обмена для передачи внешней системе
|
||
NEXSSERVICEFN_SEND_RQ PKG_STD.TREF; -- Рег. номер функции обмена для обработки внешней системой
|
||
begin
|
||
/* Разыменуем ссылки */
|
||
UDO_PKG_EQUIPDS_BASE.CM_JOINS(NCOMPANY => NCOMPANY,
|
||
SEQOBJKIND => SEQOBJKIND,
|
||
SUSERPROCS_DATA => SUSERPROCS_DATA,
|
||
SEXSSERVICE_UPLOAD => SEXSSERVICE_UPLOAD,
|
||
SEXSSERVICEFN_UPLOAD => SEXSSERVICEFN_UPLOAD,
|
||
SEXSSERVICE_SEND_MD => SEXSSERVICE_SEND_MD,
|
||
SEXSSERVICEFN_SEND_MD => SEXSSERVICEFN_SEND_MD,
|
||
SEXSSERVICE_SEND_RQ => SEXSSERVICE_SEND_RQ,
|
||
SEXSSERVICEFN_SEND_RQ => SEXSSERVICEFN_SEND_RQ,
|
||
NEQOBJKIND => NEQOBJKIND,
|
||
NUSERPROCS_DATA => NUSERPROCS_DATA,
|
||
NEXSSERVICEFN_UPLOAD => NEXSSERVICEFN_UPLOAD,
|
||
NEXSSERVICEFN_SEND_MD => NEXSSERVICEFN_SEND_MD,
|
||
NEXSSERVICEFN_SEND_RQ => NEXSSERVICEFN_SEND_RQ);
|
||
/* Добавляем запись */
|
||
UDO_PKG_EQUIPDS_BASE.CM_INS(NPRN => NPRN,
|
||
NEQOBJKIND => NEQOBJKIND,
|
||
NUSERPROCS_DATA => NUSERPROCS_DATA,
|
||
NEXSSERVICEFN_UPLOAD => NEXSSERVICEFN_UPLOAD,
|
||
NEXSSERVICEFN_SEND_MD => NEXSSERVICEFN_SEND_MD,
|
||
NEXSSERVICEFN_SEND_RQ => NEXSSERVICEFN_SEND_RQ,
|
||
NRN => NRN);
|
||
end CM_INS;
|
||
|
||
/* Клиентское удаление "Выборки данных оборудования (классы оборудования)" */
|
||
procedure CM_DEL
|
||
(
|
||
NRN in number -- Регистрационный номер
|
||
)
|
||
is
|
||
begin
|
||
/* Удаляем запись */
|
||
UDO_PKG_EQUIPDS_BASE.CM_DEL(NRN => NRN);
|
||
end CM_DEL;
|
||
|
||
/* Список "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||
procedure CMFL_LIST
|
||
(
|
||
NEQUIPDSCM in number, -- Рег. номер класса оборудования выборки данных
|
||
COUT out clob -- Сериализованная таблица данных
|
||
)
|
||
is
|
||
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
||
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
|
||
begin
|
||
/* Инициализируем таблицу данных */
|
||
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE();
|
||
/* Добавляем в таблицу описание колонок */
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'NRN',
|
||
SCAPTION => 'Рег. номер',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||
BVISIBLE => false);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'SFILE_NAME',
|
||
SCAPTION => 'Имя',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'SDESCR',
|
||
SCAPTION => 'Описание',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'NSTATUS',
|
||
SCAPTION => 'Состояние',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'SERR',
|
||
SCAPTION => 'Сообщение об ошибке',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||
BVISIBLE => false);
|
||
/* Обходим данные */
|
||
for C in (select T.RN NRN,
|
||
T.FILE_NAME SFILE_NAME,
|
||
T.DESCR SDESCR,
|
||
T.STATUS NSTATUS,
|
||
T.ERR SERR
|
||
from UDO_T_EQUIPDSCMFL T
|
||
where T.PRN = NEQUIPDSCM
|
||
order by T.RN)
|
||
loop
|
||
/* Добавляем колонки с данными */
|
||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => C.NRN, BCLEAR => true);
|
||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SFILE_NAME', SVALUE => C.SFILE_NAME);
|
||
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 => 'SERR', SVALUE => C.SERR);
|
||
/* Добавляем строку в таблицу */
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
||
end loop;
|
||
/* Сериализуем описание */
|
||
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1);
|
||
end CMFL_LIST;
|
||
|
||
/* Загрузка на сервер "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||
procedure CMFL_UPLOAD
|
||
(
|
||
NEQUIPDSCM in number -- Рег. номер класса оборудования выборки данных
|
||
)
|
||
is
|
||
begin
|
||
/*
|
||
TODO: owner="root" created="07.08.2024"
|
||
text="Реализовать проверку возможности выполнения действия и установки статусов"
|
||
*/
|
||
/* Выставим состояние файлам данных класса оборудования */
|
||
for C in (select T.RN NRN from UDO_T_EQUIPDSCMFL T where T.PRN = NEQUIPDSCM)
|
||
loop
|
||
UDO_PKG_EQUIPDS_BASE.CMFL_SET_STATUS(NRN => C.NRN, NSTATUS => 2, SQUEUE_ID => C.NRN, SERR => null);
|
||
end loop;
|
||
end CMFL_UPLOAD;
|
||
|
||
/* Передача внешней системе "Выборки данных оборудования (классы оборудования, файлы данных)" */
|
||
procedure CMFL_SEND_MD
|
||
(
|
||
NEQUIPDSCM in number -- Рег. номер класса оборудования выборки данных
|
||
)
|
||
is
|
||
begin
|
||
/*
|
||
TODO: owner="root" created="07.08.2024"
|
||
text="Реализовать проверку возможности выполнения действия и установки статусов"
|
||
*/
|
||
/* Выставим состояние файлам данных класса оборудования */
|
||
for C in (select T.RN NRN from UDO_T_EQUIPDSCMFL T where T.PRN = NEQUIPDSCM)
|
||
loop
|
||
UDO_PKG_EQUIPDS_BASE.CMFL_SET_STATUS(NRN => C.NRN, NSTATUS => 5, SQUEUE_ID => C.NRN, SERR => null);
|
||
end loop;
|
||
end CMFL_SEND_MD;
|
||
|
||
/* Список "Выборки данных оборудования (классы оборудования, модели)" */
|
||
procedure CMML_LIST
|
||
(
|
||
NEQUIPDSCM in number, -- Рег. номер класса оборудования выборки данных
|
||
COUT out clob -- Сериализованная таблица данных
|
||
)
|
||
is
|
||
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
||
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
|
||
begin
|
||
/* Инициализируем таблицу данных */
|
||
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE();
|
||
/* Добавляем в таблицу описание колонок */
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'NRN',
|
||
SCAPTION => 'Рег. номер',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||
BVISIBLE => false);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'STASK',
|
||
SCAPTION => 'Задача',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||
SHINT => 'Алгоритм прогонозирования модели:<br>' || UDO_PKG_EQUIPDS_BASE.CMML_TASK_HINT());
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'NPRECISION_P',
|
||
SCAPTION => 'Точность (план)',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'NPRECISION_F',
|
||
SCAPTION => 'Точность (факт)',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'NSTATUS',
|
||
SCAPTION => 'Состояние',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'SERR',
|
||
SCAPTION => 'Сообщение об ошибке',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||
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,
|
||
T.TASK STASK,
|
||
T.PRECISION_P NPRECISION_P,
|
||
T.PRECISION_F NPRECISION_F,
|
||
T.STATUS NSTATUS,
|
||
T.ERR SERR
|
||
from UDO_T_EQUIPDSCMML T
|
||
where T.PRN = NEQUIPDSCM
|
||
order by T.RN)
|
||
loop
|
||
/* Добавляем колонки с данными */
|
||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => C.NRN, BCLEAR => true);
|
||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'STASK', SVALUE => C.STASK);
|
||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NPRECISION_P', NVALUE => C.NPRECISION_P);
|
||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NPRECISION_F', NVALUE => C.NPRECISION_F);
|
||
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 => 'SACTIONS');
|
||
/* Добавляем строку в таблицу */
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
||
end loop;
|
||
/* Сериализуем описание */
|
||
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1);
|
||
end CMML_LIST;
|
||
|
||
/* Клиентское добавление "Выборки данных оборудования (классы оборудования, модели)" */
|
||
procedure CMML_INS
|
||
(
|
||
NPRN in number, -- Родитель
|
||
STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict))
|
||
NPRECISION_P in number, -- Точность (план)
|
||
NRN out number -- Регистрационный номер
|
||
)
|
||
is
|
||
begin
|
||
/* Добавляем запись */
|
||
UDO_PKG_EQUIPDS_BASE.CMML_INS(NPRN => NPRN, STASK => STASK, NPRECISION_P => NPRECISION_P, NRN => NRN);
|
||
end CMML_INS;
|
||
|
||
/* Клиентское удаление "Выборки данных оборудования (классы оборудования, модели)" */
|
||
procedure CMML_DEL
|
||
(
|
||
NRN in number -- Регистрационный номер
|
||
)
|
||
is
|
||
begin
|
||
/* Удаляем запись */
|
||
UDO_PKG_EQUIPDS_BASE.CMML_DEL(NRN => NRN);
|
||
end CMML_DEL;
|
||
|
||
/* Обработка внешней системой "Выборки данных оборудования (классы оборудования, модели)" */
|
||
procedure CMML_SEND_RQ
|
||
(
|
||
NEQUIPDSCMML in number -- Рег. номер модели класса оборудования выборки данных
|
||
)
|
||
is
|
||
begin
|
||
/*
|
||
TODO: owner="root" created="07.08.2024"
|
||
text="Реализовать проверку возможности выполнения действия и установки статусов"
|
||
*/
|
||
/* Обратимся к модели */
|
||
for C in (select T.RN NRN,
|
||
T.PRECISION_P NPRECISION_P
|
||
from UDO_T_EQUIPDSCMML T
|
||
where T.RN = NEQUIPDSCMML)
|
||
loop
|
||
/* Установим фактическую точность */
|
||
UDO_PKG_EQUIPDS_BASE.CMML_SET_PRECISION_F(NRN => C.NRN, NPRECISION_F => C.NPRECISION_P);
|
||
/* Установим состояние модели */
|
||
UDO_PKG_EQUIPDS_BASE.CMML_SET_STATUS(NRN => C.NRN, NSTATUS => 2, SQUEUE_ID => C.NRN, SERR => null);
|
||
end loop;
|
||
end CMML_SEND_RQ;
|
||
|
||
/* Состояние моделей по единице оборудования */
|
||
function CMML_STATUS_BY_EQCONFIG
|
||
(
|
||
NEQCONFIG in number -- Рег. номер позиции состава оборудования
|
||
) return number -- Код действия с моделью (0 - нет моделей, 1 - есть модели в процессе обучения, 2 - есть обученные модели)
|
||
is
|
||
NRES PKG_STD.TNUMBER; -- Буфер для результата
|
||
begin
|
||
/* По умолчанию - моделей нет */
|
||
NRES := 0;
|
||
/* Обходим модели */
|
||
for C in (select ML.STATUS
|
||
from UDO_T_EQUIPDSCM CM,
|
||
UDO_T_EQUIPDSCMML ML
|
||
where CM.EQOBJKIND = (select CF.OBJ_KIND from EQCONFIG CF where CF.RN = NEQCONFIG)
|
||
and CM.RN = ML.PRN)
|
||
loop
|
||
/* Модель есть */
|
||
NRES := 1;
|
||
/* Если она уже обучена */
|
||
if (C.STATUS = 2) then
|
||
NRES := 2;
|
||
end if;
|
||
end loop;
|
||
/* Возвращаем результат */
|
||
return NRES;
|
||
end CMML_STATUS_BY_EQCONFIG;
|
||
|
||
/* Список моделей по единице оборудования */
|
||
procedure CMML_LIST_BY_EQCONFIG
|
||
(
|
||
NEQCONFIG in number, -- Рег. номер позиции состава оборудования
|
||
COUT out clob -- Сериализованная таблица данных
|
||
)
|
||
is
|
||
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
||
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
|
||
begin
|
||
/* Инициализируем таблицу данных */
|
||
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE();
|
||
/* Добавляем в таблицу описание колонок */
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'NRN',
|
||
SCAPTION => 'Рег. номер модели',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||
BVISIBLE => false);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'NEQUIPDS',
|
||
SCAPTION => 'Рег. номер выборки',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||
BVISIBLE => false);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'NEQUIPDSCM',
|
||
SCAPTION => 'Рег. номер класса оборудования выборки',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||
BVISIBLE => false);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'SNEQUIPDS',
|
||
SCAPTION => 'Выборка',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'STASK',
|
||
SCAPTION => 'Задача',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||
SHINT => 'Алгоритм прогонозирования модели:<br>' ||
|
||
UDO_PKG_EQUIPDS_BASE.CMML_TASK_HINT());
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'NPRECISION_P',
|
||
SCAPTION => 'Точность (план)',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'NPRECISION_F',
|
||
SCAPTION => 'Точность (факт)',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'NSTATUS',
|
||
SCAPTION => 'Состояние',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB);
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||
SNAME => 'SERR',
|
||
SCAPTION => 'Сообщение об ошибке',
|
||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||
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,
|
||
CM.PRN NEQUIPDS,
|
||
T.PRN NEQUIPDSCM,
|
||
DS.NAME SNEQUIPDS,
|
||
T.TASK STASK,
|
||
T.PRECISION_P NPRECISION_P,
|
||
T.PRECISION_F NPRECISION_F,
|
||
T.STATUS NSTATUS,
|
||
T.ERR SERR
|
||
from UDO_T_EQUIPDSCMML T,
|
||
UDO_T_EQUIPDSCM CM,
|
||
UDO_T_EQUIPDS DS
|
||
where T.PRN = CM.RN
|
||
and CM.PRN = DS.RN
|
||
and CM.EQOBJKIND = (select CF.OBJ_KIND from EQCONFIG CF where CF.RN = NEQCONFIG)
|
||
order by T.RN)
|
||
loop
|
||
/* Добавляем колонки с данными */
|
||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => C.NRN, BCLEAR => true);
|
||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NEQUIPDS', NVALUE => C.NEQUIPDS);
|
||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NEQUIPDSCM', NVALUE => C.NEQUIPDSCM);
|
||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SNEQUIPDS', SVALUE => C.SNEQUIPDS);
|
||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'STASK', SVALUE => C.STASK);
|
||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NPRECISION_P', NVALUE => C.NPRECISION_P);
|
||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NPRECISION_F', NVALUE => C.NPRECISION_F);
|
||
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 => 'SACTIONS');
|
||
/* Добавляем строку в таблицу */
|
||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
||
end loop;
|
||
/* Сериализуем описание */
|
||
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1);
|
||
end CMML_LIST_BY_EQCONFIG;
|
||
|
||
end UDO_PKG_EQUIPDS;
|
||
/
|