diff --git a/db/UDO_PKG_EQUIPDS.pck b/db/UDO_PKG_EQUIPDS.pck
index 3363e8f..090f8a0 100644
--- a/db/UDO_PKG_EQUIPDS.pck
+++ b/db/UDO_PKG_EQUIPDS.pck
@@ -33,8 +33,6 @@ create or replace package UDO_PKG_EQUIPDS as
SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
- STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.SCMML_TASK_*)
- NPRECISION_P in number, -- Точность (план)
NEQUIPDS out number, -- Регистрационный номер выборки данных оборудования
NEQUIPDSCM out number -- Регистрационный номер класса оборудования выборки данных
);
@@ -75,6 +73,14 @@ create or replace package UDO_PKG_EQUIPDS as
NRN in number -- Регистрационный номер
);
+ /* Клиентское получение списка доступных выборок данных "Выборки данных оборудования (классы оборудования)" */
+ procedure CM_DATASET_LIST
+ (
+ NRN in number, -- Регистрационный номер
+ NSTATUS in number := null, -- Статус (null - все, см. константы UDO_PKG_EQUIPDS_BASE.NCMFL_STATUS_*)
+ COUT out clob -- Сериализованный список
+ );
+
/* Список "Выборки данных оборудования (классы оборудования, файлы данных)" */
procedure CMFL_LIST
(
@@ -106,7 +112,8 @@ create or replace package UDO_PKG_EQUIPDS as
/* Передача внешней системе "Выборки данных оборудования (классы оборудования, файлы данных)" */
procedure CMFL_SEND_MD
(
- NEQUIPDSCM in number -- Рег. номер класса оборудования выборки данных
+ NEQUIPDSCM in number, -- Рег. номер класса оборудования выборки данных
+ NDATASET_ID in number -- Идентификатор выборки
);
/* Список "Выборки данных оборудования (классы оборудования, модели)" */
@@ -122,6 +129,7 @@ create or replace package UDO_PKG_EQUIPDS as
NPRN in number, -- Родитель
STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.SCMML_TASK_*)
NPRECISION_P in number, -- Точность (план)
+ NDATASET_ID in number, -- Идентификатор выборки
NRN out number -- Регистрационный номер
);
@@ -246,6 +254,13 @@ create or replace package body UDO_PKG_EQUIPDS as
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация
begin
+ /* Проверим параметры */
+ if (SCODE is null) then
+ P_EXCEPTION(0, 'Не указан мнемокод.');
+ end if;
+ if (SNAME is null) then
+ P_EXCEPTION(0, 'Не указано наименование.');
+ end if;
/* Проверим права доступа */
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDS', SACTION => 'UDO_EQUIPDS_INSERT');
/* Добавляем запись */
@@ -279,15 +294,36 @@ create or replace package body UDO_PKG_EQUIPDS as
SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
- STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.SCMML_TASK_*)
- NPRECISION_P in number, -- Точность (план)
NEQUIPDS out number, -- Регистрационный номер выборки данных оборудования
NEQUIPDSCM out number -- Регистрационный номер класса оборудования выборки данных
)
is
- NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация
- NEQUIPDSCMML PKG_STD.TREF; -- Рег. номер модели
+ NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация
begin
+ /* Проверим параметры */
+ if (SEQUIPDS is null) then
+ P_EXCEPTION(0, 'Не указана выборка данных.');
+ end if;
+ if (SEQOBJKIND is null) then
+ P_EXCEPTION(0, 'Не указан класс оборудования.');
+ end if;
+ if (SDICMUNTS is null) then
+ P_EXCEPTION(0, 'Не указана единица измерения выборки.');
+ end if;
+ if (SUSERPROCS_DATA is null) then
+ P_EXCEPTION(0, 'Не указана процедура формирования данных выборки.');
+ end if;
+ if ((SEXSSERVICE_UPLOAD is null) or (SEXSSERVICEFN_UPLOAD is null)) then
+ P_EXCEPTION(0, 'Не указана функция обмена для выгрузки данных.');
+ end if;
+ if ((SEXSSERVICE_SEND_MD is null) or (SEXSSERVICEFN_SEND_MD is null)) then
+ P_EXCEPTION(0,
+ 'Не указана функция обмена для передачи внешней системе.');
+ end if;
+ if ((SEXSSERVICE_SEND_RQ is null) or (SEXSSERVICEFN_SEND_RQ is null)) then
+ P_EXCEPTION(0,
+ 'Не указана функция обмена для обработки внешней системой.');
+ end if;
/* Проверим права доступа */
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDS', SACTION => 'UDO_EQUIPDS_MAKE');
/* Проверим наличие такой выборки */
@@ -318,17 +354,6 @@ create or replace package body UDO_PKG_EQUIPDS as
SEXSSERVICEFN_SEND_RQ => SEXSSERVICEFN_SEND_RQ,
NRN => NEQUIPDSCM);
end if;
- /* Проверим наличие такой модели */
- UDO_PKG_EQUIPDS_BASE.CMML_FIND_BY_TASK(NFLAG_SMART => 1,
- NPRN => NEQUIPDSCM,
- STASK => STASK,
- NPRECISION_P => NPRECISION_P,
- NRN => NEQUIPDSCMML);
- /* Модели нет */
- if (NEQUIPDSCMML is null) then
- /* Добавим модель */
- CMML_INS(NPRN => NEQUIPDSCM, STASK => STASK, NPRECISION_P => NPRECISION_P, NRN => NEQUIPDSCMML);
- end if;
end MAKE;
/* Карточка "Выборки данных оборудования (классы оборудования)" */
@@ -515,6 +540,30 @@ create or replace package body UDO_PKG_EQUIPDS as
NEXSSERVICEFN_SEND_MD PKG_STD.TREF; -- Рег. номер Функции обмена для передачи внешней системе
NEXSSERVICEFN_SEND_RQ PKG_STD.TREF; -- Рег. номер функции обмена для обработки внешней системой
begin
+ /* Проверим параметры */
+ if (NPRN is null) then
+ P_EXCEPTION(0, 'Не указана родительская выборка данных.');
+ end if;
+ if (SEQOBJKIND is null) then
+ P_EXCEPTION(0, 'Не указан класс оборудования.');
+ end if;
+ if (SDICMUNTS is null) then
+ P_EXCEPTION(0, 'Не указана единица измерения выборки.');
+ end if;
+ if (SUSERPROCS_DATA is null) then
+ P_EXCEPTION(0, 'Не указана процедура формирования данных выборки.');
+ end if;
+ if ((SEXSSERVICE_UPLOAD is null) or (SEXSSERVICEFN_UPLOAD is null)) then
+ P_EXCEPTION(0, 'Не указана функция обмена для выгрузки данных.');
+ end if;
+ if ((SEXSSERVICE_SEND_MD is null) or (SEXSSERVICEFN_SEND_MD is null)) then
+ P_EXCEPTION(0,
+ 'Не указана функция обмена для передачи внешней системе.');
+ end if;
+ if ((SEXSSERVICE_SEND_RQ is null) or (SEXSSERVICEFN_SEND_RQ is null)) then
+ P_EXCEPTION(0,
+ 'Не указана функция обмена для обработки внешней системой.');
+ end if;
/* Проверим права доступа */
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCM', SACTION => 'UDO_EQUIPDSCM_INSERT');
/* Разыменуем ссылки */
@@ -558,6 +607,56 @@ create or replace package body UDO_PKG_EQUIPDS as
UDO_PKG_EQUIPDS_BASE.CM_DEL(NRN => NRN);
end CM_DEL;
+ /* Клиентское получение списка доступных выборок данных "Выборки данных оборудования (классы оборудования)" */
+ procedure CM_DATASET_LIST
+ (
+ NRN in number, -- Регистрационный номер
+ NSTATUS in number := null, -- Статус (null - все, см. константы UDO_PKG_EQUIPDS_BASE.NCMFL_STATUS_*)
+ COUT out clob -- Сериализованный список
+ )
+ is
+ NCUR integer; -- Курсор документа для результата
+ XDOC PKG_XMAKE.TNODE; -- Документ для результата
+ XDSCM_DATASET PKG_XMAKE.TNODE; -- Элемент для выборки данных
+ begin
+ /* Проверим права доступа */
+ UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCM', SACTION => 'UDO_EQUIPDSCM_SELECT');
+ /* Открываем документ */
+ NCUR := PKG_XMAKE.OPEN_CURSOR();
+ /* Обходим выборки, зафиксированные в файлах данных */
+ for C in (select distinct T.DATASET_ID NDATASET_ID,
+ T.DATASET_TS DDATASET_TS
+ from UDO_T_EQUIPDSCMFL T
+ where T.PRN = NRN
+ and ((NSTATUS is null) or ((NSTATUS is not null) and (T.STATUS = NSTATUS)))
+ order by T.DATASET_TS)
+ loop
+ XDSCM_DATASET := PKG_XMAKE.CONCAT(ICURSOR => NCUR,
+ RNODE00 => XDSCM_DATASET,
+ RNODE01 => PKG_XMAKE.ELEMENT(ICURSOR => NCUR,
+ SNAME => 'XDSCM_DATASET',
+ RATTRIBUTES => PKG_XMAKE.ATTRIBUTES(ICURSOR => NCUR,
+ RATTRIBUTE00 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ SNAME => 'value',
+ SVALUE => C.NDATASET_ID),
+ RATTRIBUTE01 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ SNAME => 'name',
+ SVALUE => UDO_PKG_EQUIPDS_BASE.UTL_DATASET_MAKE_NAME(NDATASET_ID => C.NDATASET_ID,
+ DDATASET_TS => C.DDATASET_TS)))));
+ end loop;
+ /* Формируем XML-представление ответа */
+ XDOC := PKG_XMAKE.ELEMENT(ICURSOR => NCUR, SNAME => 'XDATA', RNODE00 => XDSCM_DATASET);
+ /* Конвертируем в 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_DATASET_LIST;
+
/* Список "Выборки данных оборудования (классы оборудования, файлы данных)" */
procedure CMFL_LIST
(
@@ -578,6 +677,10 @@ create or replace package body UDO_PKG_EQUIPDS as
SCAPTION => 'Рег. номер',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
BVISIBLE => false);
+ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
+ SNAME => 'SDATASET',
+ SCAPTION => 'Выборка',
+ SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SFILE_NAME',
SCAPTION => 'Имя',
@@ -598,19 +701,25 @@ create or replace package body UDO_PKG_EQUIPDS as
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SACTIONS',
SCAPTION => 'Действия',
- SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
+ SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
/* Обходим данные */
- for C in (select T.RN NRN,
- T.FILE_NAME SFILE_NAME,
- T.DESCR SDESCR,
- T.STATUS NSTATUS,
- T.ERR SERR
+ for C in (select T.RN NRN,
+ T.DATASET_ID NDATASET_ID,
+ T.DATASET_TS DDATASET_TS,
+ 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 => 'SDATASET',
+ SVALUE => UDO_PKG_EQUIPDS_BASE.UTL_DATASET_MAKE_NAME(NDATASET_ID => C.NDATASET_ID,
+ DDATASET_TS => C.DDATASET_TS));
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);
@@ -648,6 +757,7 @@ create or replace package body UDO_PKG_EQUIPDS as
NCMFL PKG_STD.TREF; -- Рег. номер добавленного файла данных
NFILES_CNT PKG_STD.TNUMBER := 0; -- Количество найденных файлов выборки
NCONFIG_CNT PKG_STD.TNUMBER := 0; -- Количество найденных описаний выборки
+ DDATASET_TS PKG_STD.TLDATE; -- Буфер для времени формирования данных выборки
begin
/* Проверим параметры */
if (COALESCE(NDATASET_IDENT, 0) = 0) then
@@ -665,6 +775,8 @@ create or replace package body UDO_PKG_EQUIPDS as
UDO_PKG_EQUIPDS_BASE.CMFL_DEL(NRN => C.RN);
end loop;
end if;
+ /* Зафиксируем время формирования */
+ DDATASET_TS := sysdate;
/* Добавим новые файлы выборки */
for C in (select F.*
from FILE_BUFFER F
@@ -674,11 +786,13 @@ create or replace package body UDO_PKG_EQUIPDS as
and F.FILENAME is not null)
loop
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);
+ UDO_PKG_EQUIPDS_BASE.CMFL_INS(NPRN => NEQUIPDSCM,
+ SFILE_NAME => C.FILENAME,
+ SDESCR => C.DATA,
+ BDATASET => C.BDATA,
+ NDATASET_ID => NDATASET_IDENT,
+ DDATASET_TS => DDATASET_TS,
+ NRN => NCMFL);
end loop;
/* Добавим описание выборки */
for C in (select F.*
@@ -751,19 +865,25 @@ create or replace package body UDO_PKG_EQUIPDS as
/* Передача внешней системе "Выборки данных оборудования (классы оборудования, файлы данных)" */
procedure CMFL_SEND_MD
(
- NEQUIPDSCM in number -- Рег. номер класса оборудования выборки данных
+ NEQUIPDSCM in number, -- Рег. номер класса оборудования выборки данных
+ NDATASET_ID in number -- Идентификатор выборки
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
NIDENT PKG_STD.TREF; -- Идентификатор выбранных файлов
NTMP PKG_STD.TREF; -- Рег. номер записи буфера
begin
+ /* Проверим параметры */
+ if (NDATASET_ID is null) then
+ P_EXCEPTION(0, 'Не указана выборка.');
+ end if;
/* Проверим права доступа */
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCMFL', SACTION => 'UDO_EQUIPDSCMFL_SEND_MD');
/* Обходим файлы данных для передаче внешней системе */
for C in (select T.RN NRN
from UDO_T_EQUIPDSCMFL T
where T.PRN = NEQUIPDSCM
+ and T.DATASET_ID = NDATASET_ID
and T.STATUS = UDO_PKG_EQUIPDS_BASE.NCMFL_STATUS_UPLOADED)
loop
/* Сформируем идентификатор выборки, если ещё не делали этого */
@@ -779,7 +899,7 @@ create or replace package body UDO_PKG_EQUIPDS as
'Нет данных для передачи внешней системе. Сначала необходимо выполнить передачу данных на сервер.');
end if;
/* Ставим задачу на передачу внешней системе */
- UDO_PKG_EQUIPDS_DATAPROCESS.SEND_MD(NCOMPANY => NCOMPANY, NIDENT=> NIDENT, NEQUIPDSCM => NEQUIPDSCM);
+ UDO_PKG_EQUIPDS_DATAPROCESS.SEND_MD(NCOMPANY => NCOMPANY, NIDENT => NIDENT, NEQUIPDSCM => NEQUIPDSCM);
/* Очищаем выборку */
P_SELECTLIST_CLEAR(NIDENT => NIDENT);
end CMFL_SEND_MD;
@@ -808,7 +928,8 @@ create or replace package body UDO_PKG_EQUIPDS as
SNAME => 'STASK',
SCAPTION => 'Задача',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
- SHINT => 'Алгоритм прогонозирования модели: ' || UDO_PKG_EQUIPDS_BASE.CMML_TASK_HINT());
+ SHINT => 'Алгоритм прогонозирования модели: ' ||
+ UDO_PKG_EQUIPDS_BASE.CMML_TASK_HINT());
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'NPRECISION_P',
SCAPTION => 'Точность (план)',
@@ -817,6 +938,10 @@ create or replace package body UDO_PKG_EQUIPDS as
SNAME => 'NPRECISION_F',
SCAPTION => 'Точность (факт)',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB);
+ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
+ SNAME => 'SDATASET',
+ SCAPTION => 'Выборка',
+ SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'NSTATUS',
SCAPTION => 'Состояние',
@@ -831,12 +956,17 @@ create or replace package body UDO_PKG_EQUIPDS as
SCAPTION => 'Действия',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
/* Обходим данные */
- for C in (select T.RN NRN,
- T.TASK STASK,
+ 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
+ T.DATASET_ID NDATASET_ID,
+ (select F.DATASET_TS
+ from UDO_T_EQUIPDSCMFL F
+ where F.DATASET_ID = T.DATASET_ID
+ and ROWNUM <= 1) DDATASET_TS,
+ T.STATUS NSTATUS,
+ T.ERR SERR
from UDO_T_EQUIPDSCMML T
where T.PRN = NEQUIPDSCM
order by T.RN)
@@ -846,6 +976,10 @@ create or replace package body UDO_PKG_EQUIPDS as
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 => 'SDATASET',
+ SVALUE => UDO_PKG_EQUIPDS_BASE.UTL_DATASET_MAKE_NAME(NDATASET_ID => C.NDATASET_ID,
+ DDATASET_TS => C.DDATASET_TS));
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');
@@ -862,14 +996,29 @@ create or replace package body UDO_PKG_EQUIPDS as
NPRN in number, -- Родитель
STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.SCMML_TASK_*)
NPRECISION_P in number, -- Точность (план)
+ NDATASET_ID in number, -- Идентификатор выборки
NRN out number -- Регистрационный номер
)
is
begin
+ /* Проверим параметры */
+ if (STASK is null) then
+ P_EXCEPTION(0, 'Не указана задача.');
+ end if;
+ if (NPRECISION_P is null) then
+ P_EXCEPTION(0, 'Не указана точность.');
+ end if;
+ if (NDATASET_ID is null) then
+ P_EXCEPTION(0, 'Не указана выборка.');
+ end if;
/* Проверим права доступа */
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,
+ NDATASET_ID => NDATASET_ID,
+ NRN => NRN);
end CMML_INS;
/* Клиентское удаление "Выборки данных оборудования (классы оборудования, модели)" */
@@ -918,7 +1067,7 @@ create or replace package body UDO_PKG_EQUIPDS as
'У класса оборудования нет файлов данных, переданных фреймворку - обучение невозможно.');
end if;
/* Отправим запрос на обучение */
- --UDO_PKG_EQUIPDS_DATAPROCESS.SEND_RQ(NCOMPANY => NCOMPANY, NEQUIPDSCMML => RCMML.RN);
+ UDO_PKG_EQUIPDS_DATAPROCESS.SEND_RQ(NCOMPANY => NCOMPANY, NEQUIPDSCMML => RCMML.RN);
end CMML_SEND_RQ;
/* Состояние "Выборки данных оборудования (классы оборудования, модели)" по единице оборудования */
diff --git a/db/UDO_PKG_EQUIPDS_BASE.pck b/db/UDO_PKG_EQUIPDS_BASE.pck
index 86f1934..754c121 100644
--- a/db/UDO_PKG_EQUIPDS_BASE.pck
+++ b/db/UDO_PKG_EQUIPDS_BASE.pck
@@ -37,6 +37,13 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
NDOCUMENT in number :=null -- Регистрационный номер документа
);
+ /* Формирование наименования выборки данных по идентификатору и времени формирования */
+ function UTL_DATASET_MAKE_NAME
+ (
+ NDATASET_ID in number, -- Идентификатор данных
+ DDATASET_TS in date -- Время формирования данных
+ ) return varchar2; -- Наименование выборки
+
/* Считывание записи "Выборки данных оборудования" по регистрационному номеру */
function GET
(
@@ -167,6 +174,8 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
SFILE_NAME in varchar2, -- Имя файла
SDESCR in varchar2, -- Описание
BDATASET in blob, -- Данные выборки
+ NDATASET_ID in number, -- Идентификатор данных
+ DDATASET_TS in date, -- Время формирования данных
NRN out number -- Регистрационный номер
);
@@ -204,7 +213,7 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
(
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать)
NPRN in number, -- Родитель
- STASK in varchar2, -- Задача (см. константы SCMML_TASK_*) */
+ STASK in varchar2, -- Задача (см. константы SCMML_TASK_*)
NPRECISION_P in number, -- Точность (план)
NRN out number -- Регистрационный номер
);
@@ -213,8 +222,9 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
procedure CMML_INS
(
NPRN in number, -- Родитель
- STASK in varchar2, -- Задача (см. константы SCMML_TASK_*) */
+ STASK in varchar2, -- Задача (см. константы SCMML_TASK_*)
NPRECISION_P in number, -- Точность (план)
+ NDATASET_ID in number, -- Идентификатор выборки
NRN out number -- Регистрационный номер
);
@@ -222,7 +232,7 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
procedure CMML_UPD
(
NRN in number, -- Регистрационный номер
- STASK in varchar2, -- Задача (см. константы SCMML_TASK_*) */
+ STASK in varchar2, -- Задача (см. константы SCMML_TASK_*)
NPRECISION_P in number -- Точность (план)
);
@@ -251,7 +261,7 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
/* Формирование наименования для задачи "Выборки данных оборудования (классы оборудования, модели)" */
function CMML_TASK_NAME
(
- STASK in varchar2 -- Задача (см. константы SCMML_TASK_*) */
+ STASK in varchar2 -- Задача (см. константы SCMML_TASK_*)
) return varchar2; -- Наименование задачи
/* Формирование подсказки для задачи "Выборки данных оборудования (классы оборудования, модели)" */
@@ -351,6 +361,17 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
end if;
end UTL_ACCESS;
+ /* Формирование наименования выборки данных по идентификатору и времени формирования */
+ function UTL_DATASET_MAKE_NAME
+ (
+ NDATASET_ID in number, -- Идентификатор данных
+ DDATASET_TS in date -- Время формирования данных
+ ) return varchar2 -- Наименование выборки
+ is
+ begin
+ return '№' || TO_CHAR(NDATASET_ID) || ' от ' || TO_CHAR(DDATASET_TS, 'dd.mm.yyyy hh24:mi:ss');
+ end UTL_DATASET_MAKE_NAME;
+
/* Считывание записи "Выборки данных оборудования" по регистрационному номеру */
function GET
(
@@ -679,6 +700,8 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
SFILE_NAME in varchar2, -- Имя файла
SDESCR in varchar2, -- Описание
BDATASET in blob, -- Данные выборки
+ NDATASET_ID in number, -- Идентификатор данных
+ DDATASET_TS in date, -- Время формирования данных
NRN out number -- Регистрационный номер
)
is
@@ -687,9 +710,9 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
NRN := GEN_ID();
/* Добавляем запись */
insert into UDO_T_EQUIPDSCMFL
- (RN, PRN, FILE_NAME, DESCR, QUEUE_ID, STATUS, ERR, DATASET)
+ (RN, PRN, FILE_NAME, DESCR, QUEUE_ID, STATUS, ERR, DATASET, DATASET_ID, DATASET_TS)
values
- (NRN, NPRN, SFILE_NAME, SDESCR, null, NCMFL_STATUS_REGISTERED, null, BDATASET);
+ (NRN, NPRN, SFILE_NAME, SDESCR, null, NCMFL_STATUS_REGISTERED, null, BDATASET, NDATASET_ID, DDATASET_TS);
end CMFL_INS;
/* Базовое удаление "Выборки данных оборудования (классы оборудования, файлы данных)" */
@@ -703,10 +726,27 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
/* Считаем запись */
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
+ 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;
+ /* Проверим, что нет связанных обученных/обучающихся моделей, иначе - сначала следует удалить модель вручную */
+ for C in (select T.RN
+ from UDO_T_EQUIPDSCMML T
+ where T.DATASET_ID = RREC.DATASET_ID
+ and T.STATUS <> NCMML_STATUS_REGISTERED)
+ loop
+ P_EXCEPTION(0,
+ 'Файлы имеют связанные модели, находящиеся в состоянии отличном от "Зарегистрирована". Сначала необходимо удалить их.');
+ end loop;
+ /* Попробуем удалить связанные модели */
+ for C in (select T.RN from UDO_T_EQUIPDSCMML T where T.DATASET_ID = RREC.DATASET_ID)
+ loop
+ CMML_DEL(NRN => C.RN);
+ end loop;
/* Удалим запись */
delete from UDO_T_EQUIPDSCMFL T where T.RN = NRN;
end CMFL_DEL;
@@ -785,7 +825,7 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
(
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать)
NPRN in number, -- Родитель
- STASK in varchar2, -- Задача (см. константы SCMML_TASK_*) */
+ STASK in varchar2, -- Задача (см. константы SCMML_TASK_*)
NPRECISION_P in number, -- Точность (план)
NRN out number -- Регистрационный номер
)
@@ -812,27 +852,46 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
/* Базовое добавление "Выборки данных оборудования (классы оборудования, модели)" */
procedure CMML_INS
(
- NPRN in number, -- Родитель
- STASK in varchar2, -- Задача (см. константы SCMML_TASK_*) */
- NPRECISION_P in number, -- Точность (план)
- NRN out number -- Регистрационный номер
+ NPRN in number, -- Родитель
+ STASK in varchar2, -- Задача (см. константы SCMML_TASK_*)
+ NPRECISION_P in number, -- Точность (план)
+ NDATASET_ID in number, -- Идентификатор выборки
+ NRN out number -- Регистрационный номер
)
is
+ NCNT PKG_STD.TNUMBER; -- Счетчик файлов данных выборки
begin
+ /* Проверим наличие идентификатора выборки в файлах данных */
+ begin
+ select count(T.RN)
+ into NCNT
+ from UDO_T_EQUIPDSCMFL T
+ where T.PRN = NPRN
+ and T.DATASET_ID = NDATASET_ID;
+ exception
+ when others then
+ P_EXCEPTION(0,
+ 'Не удалось проверить корректность идентификатора выборки.');
+ end;
+ if (NCNT = 0) then
+ P_EXCEPTION(0,
+ 'Неверно указан идентификатор выборки (%s).',
+ COALESCE(TO_CHAR(NDATASET_ID), '<НЕ УКАЗАН>'));
+ end if;
/* Формируем рег. номер */
NRN := GEN_ID();
/* Добавляем запись */
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, DATASET_ID)
values
- (NRN, NPRN, STASK, NPRECISION_P, null, null, NCMML_STATUS_REGISTERED, null);
+ (NRN, NPRN, STASK, NPRECISION_P, null, null, NCMML_STATUS_REGISTERED, null, NDATASET_ID);
end CMML_INS;
/* Базовое исправление "Выборки данных оборудования (классы оборудования, модели)" */
procedure CMML_UPD
(
NRN in number, -- Регистрационный номер
- STASK in varchar2, -- Задача (см. константы SCMML_TASK_*) */
+ STASK in varchar2, -- Задача (см. константы SCMML_TASK_*)
NPRECISION_P in number -- Точность (план)
)
is
@@ -927,7 +986,7 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
/* Формирование наименования для задачи "Выборки данных оборудования (классы оборудования, модели)" */
function CMML_TASK_NAME
(
- STASK in varchar2 -- Задача (см. константы SCMML_TASK_*) */
+ STASK in varchar2 -- Задача (см. константы SCMML_TASK_*)
) return varchar2 -- Наименование задачи
is
begin
diff --git a/db/UDO_PKG_EQUIPTCF.pck b/db/UDO_PKG_EQUIPTCF.pck
index ac9286c..a0ed4f0 100644
--- a/db/UDO_PKG_EQUIPTCF.pck
+++ b/db/UDO_PKG_EQUIPTCF.pck
@@ -82,7 +82,7 @@ create or replace package UDO_PKG_EQUIPTCF as
DFORECAST_DATE in date, -- Дата получения прогноза
NFORECAST in number, -- Прогнозное значение, полученное от фреймворка
SDICMUNTS in varchar2, -- Единица измерения выборки
- STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.CMML_TASK_*) */
+ STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.CMML_TASK_*)
COUT out clob -- Данные детальной карточки прогноза
);
@@ -785,7 +785,7 @@ text="Проверка прав доступа при формировании
DFORECAST_DATE in date, -- Дата получения прогноза
NFORECAST in number, -- Прогнозное значение, полученное от фреймворка
SDICMUNTS in varchar2, -- Единица измерения выборки
- STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.CMML_TASK_*) */
+ STASK in varchar2, -- Задача (см. константы UDO_PKG_EQUIPDS_BASE.CMML_TASK_*)
COUT out clob -- Данные детальной карточки прогноза
)
is
diff --git a/db/UDO_T_EQUIPDSCMFL.sql b/db/UDO_T_EQUIPDSCMFL.sql
index 92b7901..dc6a0db 100644
--- a/db/UDO_T_EQUIPDSCMFL.sql
+++ b/db/UDO_T_EQUIPDSCMFL.sql
@@ -17,6 +17,10 @@ create table UDO_T_EQUIPDSCMFL
ERR varchar2(4000) default null,
/* Данные */
DATASET blob,
+ /* Идентификатор данных */
+ DATASET_ID number(17) not null,
+ /* Время формирования данных */
+ DATASET_TS date not null,
/* Ключи */
constraint UDO_C_EQUIPDSCMFL_RN_PK primary key (RN),
constraint UDO_C_EQUIPDSCMFL_PRN_FK foreign key (PRN) references UDO_T_EQUIPDSCM(RN),
diff --git a/db/UDO_T_EQUIPDSCMML.sql b/db/UDO_T_EQUIPDSCMML.sql
index 953383f..b15ccbb 100644
--- a/db/UDO_T_EQUIPDSCMML.sql
+++ b/db/UDO_T_EQUIPDSCMML.sql
@@ -17,6 +17,8 @@ create table UDO_T_EQUIPDSCMML
STATUS number(1) default 0 not null,
/* Сообщение об ошибке */
ERR varchar2(4000) default null,
+ /* Идентификатор данных */
+ DATASET_ID number(17) not null,
/* Ключи */
constraint UDO_C_EQUIPDSCMML_RN_PK primary key (RN),
constraint UDO_C_EQUIPDSCMML_PRN_FK foreign key (PRN) references UDO_T_EQUIPDSCM(RN),
diff --git a/panels/eqs_tech_cond_forecast/admin_tab.js b/panels/eqs_tech_cond_forecast/admin_tab.js
index f561e19..ad98a59 100644
--- a/panels/eqs_tech_cond_forecast/admin_tab.js
+++ b/panels/eqs_tech_cond_forecast/admin_tab.js
@@ -20,6 +20,7 @@ import {
EquipDataSelectionClassMachineIU,
EquipDataSelectionClassMachineList,
EquipDataSelectionClassMachineCard,
+ EquipDataSelectionClassMachineFileSendMDDialog,
EquipDataSelectionClassMachineModelIU
} from "./admin_tab_layout"; //Вспомогательные компоненты и вёрстка
import {
@@ -43,7 +44,12 @@ const REFRESH_INITIAL = {
};
//Начальное состояние диалогов
-const DIALOGS_INITIAL = { dataSelectionIU: false, dataSelectionClassMachineIU: false, dataSelectionClassMachineModelIU: false };
+const DIALOGS_INITIAL = {
+ dataSelectionIU: false,
+ dataSelectionClassMachineIU: false,
+ dataSelectionClassMachineFileSendMD: false,
+ dataSelectionClassMachineModelIU: false
+};
//Стили
const STYLES = {
@@ -102,10 +108,10 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
);
//При смене выборки данных
- const handleDataSelectionChange = value => {
+ const handleDataSelectionChange = (value, resetRefresh = true) => {
setDataSelection(value);
setDataSelectionClassMachine(null);
- setRefresh(REFRESH_INITIAL);
+ if (resetRefresh) setRefresh(REFRESH_INITIAL);
};
//При нажатии на "Добавить выборку"
@@ -115,7 +121,7 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
const handleDeleteEquipDataSelection = async () => {
await executeStored({ stored: "UDO_PKG_EQUIPDS.DEL", args: { NRN: equipDataSelection } });
setRefresh(pv => ({ ...pv, dataSelection: pv.dataSelection + 1 }));
- setDataSelection(DS_RN_DEFAULT);
+ handleDataSelectionChange(DS_RN_DEFAULT, false);
};
//При отмене диалога IU выборки
@@ -126,7 +132,7 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
const data = await executeStored({ stored: "UDO_PKG_EQUIPDS.INS", args: { SCODE: values.code, SNAME: values.name } });
setDialogs(pv => ({ ...pv, dataSelectionIU: false }));
setRefresh(pv => ({ ...pv, dataSelection: pv.dataSelection + 1 }));
- setDataSelection(data.NRN);
+ handleDataSelectionChange(data.NRN, false);
};
//При нажатии на класс оборудования
@@ -190,8 +196,8 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
if (res.success)
processMakeEquipDataSelectionClassMachineFilesResults(
equipDSCM,
- res.outParameters.NDATASET_IDENT,
- res.outParameters.NDATASET_CONFIG_IDENT,
+ res.outParameters?.NDATASET_IDENT,
+ res.outParameters?.NDATASET_CONFIG_IDENT,
clear
);
}
@@ -211,10 +217,7 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
};
//При нажатии "Передать внешней системе" в списке файлов карточки класса оборудования
- const handleSendMdEquipDataSelectionClassMachineFiles = async equipDSCM => {
- await executeStored({ stored: "UDO_PKG_EQUIPDS.CMFL_SEND_MD", args: { NEQUIPDSCM: equipDSCM } });
- setRefresh(pv => ({ ...pv, dataSelectionClassMachineFilesList: pv.dataSelectionClassMachineFilesList + 1 }));
- };
+ const handleSendMdEquipDataSelectionClassMachineFiles = () => setDialogs(pv => ({ ...pv, dataSelectionClassMachineFileSendMD: true }));
//При нажатии на "Добавить модель класса оборудования"
const handleAddEquipDataSelectionClassMachineModel = () => setDialogs(pv => ({ ...pv, dataSelectionClassMachineModelIU: true }));
@@ -225,6 +228,19 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
setRefresh(pv => ({ ...pv, dataSelectionClassMachineModelsList: pv.dataSelectionClassMachineModelsList + 1 }));
};
+ //При отмене диалога отправки файла данных фреймворку
+ const handleEquipDataSelectionClassMachineFileSendMDCancel = () => setDialogs(pv => ({ ...pv, dataSelectionClassMachineFileSendMD: false }));
+
+ //При сохранении диалога отправки файла данных фреймворку
+ const handleEquipDataSelectionClassMachineFileSendMDOk = async values => {
+ await executeStored({
+ stored: "UDO_PKG_EQUIPDS.CMFL_SEND_MD",
+ args: { NEQUIPDSCM: equipDataSelectionClassMachine, NDATASET_ID: values.dataset ? parseInt(values.dataset) : null }
+ });
+ setDialogs(pv => ({ ...pv, dataSelectionClassMachineFileSendMD: false }));
+ setRefresh(pv => ({ ...pv, dataSelectionClassMachineFilesList: pv.dataSelectionClassMachineFilesList + 1 }));
+ };
+
//При отмене диалога IU модели класса оборудования
const handleEquipDataSelectionClassMachineModelIUCancel = () => setDialogs(pv => ({ ...pv, dataSelectionClassMachineModelIU: false }));
@@ -235,7 +251,8 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
args: {
NPRN: equipDataSelectionClassMachine,
STASK: values.task,
- NPRECISION_P: parseInt(values.precisionP)
+ NPRECISION_P: values.precisionP ? parseInt(values.precisionP) : null,
+ NDATASET_ID: values.dataset ? parseInt(values.dataset) : null
}
});
setDialogs(pv => ({ ...pv, dataSelectionClassMachineModelIU: false }));
@@ -272,8 +289,16 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
onCancel={handleEquipDataSelectionClassMachineIUCancel}
/>
) : null}
+ {dialogs.dataSelectionClassMachineFileSendMD ? (
+
+ ) : null}
{dialogs.dataSelectionClassMachineModelIU ? (
diff --git a/panels/eqs_tech_cond_forecast/admin_tab_hooks.js b/panels/eqs_tech_cond_forecast/admin_tab_hooks.js
index 9938c24..359f721 100644
--- a/panels/eqs_tech_cond_forecast/admin_tab_hooks.js
+++ b/panels/eqs_tech_cond_forecast/admin_tab_hooks.js
@@ -26,7 +26,7 @@ const useEquipDataSelectionClassMachineList = (dataSelection, refresh) => {
//Подключение к контексту взаимодействия с сервером
const { executeStored } = useContext(BackEndСtx);
- //Загрузка данных при изменении зависимостейuse
+ //Загрузка данных при изменении зависимостей
useEffect(() => {
const loadData = async () => {
try {
@@ -171,6 +171,41 @@ const useEquipDataSelectionClassMachineModelsList = (classMachine, refresh) => {
return { equipDataSelectionClassMachineModelsList: data, equipDataSelectionClassMachineModelsListIsLoading: isLoading };
};
+//Загрузка выборок данных класса оборудования
+const useEquipDataSelectionClassMachineDataSetsList = (classMachine, status = null) => {
+ //Собственное состояние - флаг загрузки
+ const [isLoading, setLoading] = useState(false);
+
+ //Собственное состояние - данные
+ const [data, setData] = useState([]);
+
+ //Подключение к контексту взаимодействия с сервером
+ const { executeStored } = useContext(BackEndСtx);
+
+ //Загрузка данных при изменении зависимостей
+ useEffect(() => {
+ const loadData = async () => {
+ try {
+ setLoading(true);
+ const data = await executeStored({
+ stored: "UDO_PKG_EQUIPDS.CM_DATASET_LIST",
+ args: { NRN: classMachine, NSTATUS: status },
+ respArg: "COUT",
+ isArray: name => ["XDSCM_DATASET"].includes(name),
+ loader: false
+ });
+ setData(data?.XDSCM_DATASET || []);
+ } finally {
+ setLoading(false);
+ }
+ };
+ if (classMachine) loadData();
+ }, [classMachine, status, executeStored]);
+
+ //Вернём данные
+ return { equipDataSelectionClassMachineDataSetsList: data, equipDataSelectionClassMachineDataSetsListIsLoading: isLoading };
+};
+
//----------------
//Интерфейс модуля
//----------------
@@ -179,5 +214,6 @@ export {
useEquipDataSelectionClassMachineList,
useEquipDataSelectionClassMachineCard,
useEquipDataSelectionClassMachineFilesList,
- useEquipDataSelectionClassMachineModelsList
+ useEquipDataSelectionClassMachineModelsList,
+ useEquipDataSelectionClassMachineDataSetsList
};
diff --git a/panels/eqs_tech_cond_forecast/admin_tab_layout.js b/panels/eqs_tech_cond_forecast/admin_tab_layout.js
index e90e540..e3410c9 100644
--- a/panels/eqs_tech_cond_forecast/admin_tab_layout.js
+++ b/panels/eqs_tech_cond_forecast/admin_tab_layout.js
@@ -53,6 +53,7 @@ import {
import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных
import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения
import { DS_RN_DEFAULT, TASK_LIST } from "./eqs_tech_cond_forecast_hooks"; //Общие вспомогательные хуки
+import { useEquipDataSelectionClassMachineDataSetsList } from "./admin_tab_hooks"; //Вспомогательные хуки
//---------
//Константы
@@ -407,14 +408,59 @@ EquipDataSelectionClassMachineIU.propTypes = {
onCancel: PropTypes.func
};
+//Диалог параметров передачи файлов данных класса оборудования фреймворку
+const EquipDataSelectionClassMachineFileSendMDDialog = ({ classMachine, onOk, onCancel }) => {
+ //Собственное состояние - значения формы
+ const [values, setValues] = useState({
+ dataset: null
+ });
+
+ //Доступные выборки данных
+ const { equipDataSelectionClassMachineDataSetsList } = useEquipDataSelectionClassMachineDataSetsList(classMachine, 2);
+
+ //Отработка воода значения в форму
+ const handleValueChanged = (name, value) => setValues(pv => ({ ...pv, [name]: value }));
+
+ //Генерация содержимого
+ return (
+
+ );
+};
+
+//Контроль свойств - Диалог параметров передачи файлов данных класса оборудования фреймворку
+EquipDataSelectionClassMachineFileSendMDDialog.propTypes = {
+ classMachine: PropTypes.number.isRequired,
+ onOk: PropTypes.func,
+ onCancel: PropTypes.func
+};
+
//Диалог IU модели класса оборудования выборки данных
-const EquipDataSelectionClassMachineModelIU = ({ onOk, onCancel }) => {
+const EquipDataSelectionClassMachineModelIU = ({ classMachine, onOk, onCancel }) => {
//Собственное состояние - значения формы
const [values, setValues] = useState({
task: "RUL",
- precisionP: null
+ precisionP: null,
+ dataset: null
});
+ //Доступные выборки данных
+ const { equipDataSelectionClassMachineDataSetsList } = useEquipDataSelectionClassMachineDataSetsList(classMachine);
+
//Отработка воода значения в форму
const handleValueChanged = (name, value) => setValues(pv => ({ ...pv, [name]: value }));
@@ -437,6 +483,13 @@ const EquipDataSelectionClassMachineModelIU = ({ onOk, onCancel }) => {
onChange={handleValueChanged}
type={"number"}
/>
+
@@ -448,6 +501,7 @@ const EquipDataSelectionClassMachineModelIU = ({ onOk, onCancel }) => {
//Контроль свойств - Диалог IU модели класса оборудования выборки данных
EquipDataSelectionClassMachineModelIU.propTypes = {
+ classMachine: PropTypes.number.isRequired,
onOk: PropTypes.func,
onCancel: PropTypes.func
};
@@ -675,6 +729,7 @@ EquipDataSelectionClassMachineCard.propTypes = {
export {
EquipDataSelectionIU,
EquipDataSelectionClassMachineIU,
+ EquipDataSelectionClassMachineFileSendMDDialog,
EquipDataSelectionClassMachineModelIU,
EquipDataSelectionList,
EquipDataSelectionClassMachineList,
diff --git a/panels/eqs_tech_cond_forecast/forecast_tab.js b/panels/eqs_tech_cond_forecast/forecast_tab.js
index cf410c0..914d85d 100644
--- a/panels/eqs_tech_cond_forecast/forecast_tab.js
+++ b/panels/eqs_tech_cond_forecast/forecast_tab.js
@@ -255,9 +255,7 @@ const ForecastTab = ({ onGoToAdmin }) => {
SEXSSERVICE_SEND_MD: values.exsServiceSendMd,
SEXSSERVICEFN_SEND_MD: values.exsServiceFnSendMd,
SEXSSERVICE_SEND_RQ: values.exsServiceSendRq,
- SEXSSERVICEFN_SEND_RQ: values.exsServiceFnSendRq,
- STASK: values.task,
- NPRECISION_P: parseFloat(values.precisionP)
+ SEXSSERVICEFN_SEND_RQ: values.exsServiceFnSendRq
}
});
setDialogs(pv => ({ ...pv, makeEqDataSet: false }));
diff --git a/panels/eqs_tech_cond_forecast/forecast_tab_layout.js b/panels/eqs_tech_cond_forecast/forecast_tab_layout.js
index 9b23fb7..29d9ae6 100644
--- a/panels/eqs_tech_cond_forecast/forecast_tab_layout.js
+++ b/panels/eqs_tech_cond_forecast/forecast_tab_layout.js
@@ -27,7 +27,7 @@ import {
selectServiceFn,
IUDFormTextField
} from "./eqs_tech_cond_forecast_layout"; //Общие вспомогательные компоненты и вёрстка
-import { DS_RN_DEFAULT, TASK_LIST, useEquipDataSelectionList } from "./eqs_tech_cond_forecast_hooks"; //Общие вспомогательные хуки
+import { DS_RN_DEFAULT, useEquipDataSelectionList } from "./eqs_tech_cond_forecast_hooks"; //Общие вспомогательные хуки
import { P8PChart } from "../../components/p8p_chart"; //График
//---------
@@ -655,9 +655,7 @@ const TechObjMakeDataSet = ({ eqobjKind, measureUnit, onOk, onCancel }) => {
exsServiceSendMd: "Загрузка_на_Фреймворк",
exsServiceFnSendMd: "Передача данных",
exsServiceSendRq: "Загрузка_на_Фреймворк",
- exsServiceFnSendRq: "Запрос на обучение",
- task: "RUL",
- precisionP: 99
+ exsServiceFnSendRq: "Запрос на обучение"
});
//Отработка воода значения в форму
@@ -741,20 +739,6 @@ const TechObjMakeDataSet = ({ eqobjKind, measureUnit, onOk, onCancel }) => {
onChange={handleValueChanged}
dictionary={callBack => selectServiceFn(pOnlineShowDictionary, "exsServiceFnSendRq", callBack)}
/>
-
-
>
) : (