From 5f1aeddf6c0bf9ad6fe45fb1896eac911b38d26c Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 1 Nov 2024 13:02:28 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=83=D0=BD=D0=B8=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20dataset=5Fid=20=D0=B4=D0=BB=D1=8F=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=B6=D0=B4=D0=BE=D0=B9=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF?= =?UTF-8?q?=D1=8B=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BE=D0=B1=D1=83=D1=87=D0=B0=D1=8E?= =?UTF-8?q?=D1=89=D0=B5=D0=B9=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=B8=20=D1=81=D0=B2=D1=8F=D0=B7=D1=8C=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B8=20=D1=81=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF?= =?UTF-8?q?=D0=BE=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/UDO_PKG_EQUIPDS.pck | 225 +++++++++++++++--- db/UDO_PKG_EQUIPDS_BASE.pck | 93 ++++++-- db/UDO_PKG_EQUIPTCF.pck | 4 +- db/UDO_T_EQUIPDSCMFL.sql | 4 + db/UDO_T_EQUIPDSCMML.sql | 2 + panels/eqs_tech_cond_forecast/admin_tab.js | 49 +++- .../eqs_tech_cond_forecast/admin_tab_hooks.js | 40 +++- .../admin_tab_layout.js | 59 ++++- panels/eqs_tech_cond_forecast/forecast_tab.js | 4 +- .../forecast_tab_layout.js | 20 +- 10 files changed, 406 insertions(+), 94 deletions(-) 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 ( + (onOk ? onCancel() : null)}> + Передать фреймворку + + + + + + + + + ); +}; + +//Контроль свойств - Диалог параметров передачи файлов данных класса оборудования фреймворку +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)} /> - - ) : (