diff --git a/src/components/factory.ts b/src/components/factory.ts index 000700f..dca00cf 100644 --- a/src/components/factory.ts +++ b/src/components/factory.ts @@ -69,7 +69,7 @@ export const makePaginationObject = (paginationContainer:PaginationContainer, .. } } -export const updateFromWebApiWrapperAsync = async (funcAsync: asyncFunction, setShowLoader: Dispatch>, errorNotifyText: string) => { +export const invokeWebApiWrapperAsync = async (funcAsync: asyncFunction, setShowLoader: Dispatch>, errorNotifyText: string) => { if(setShowLoader) setShowLoader(true) try{ diff --git a/src/pages/Documents/DocumentsTemplate.jsx b/src/pages/Documents/DocumentsTemplate.jsx index b8b1428..0b9ea99 100644 --- a/src/pages/Documents/DocumentsTemplate.jsx +++ b/src/pages/Documents/DocumentsTemplate.jsx @@ -3,7 +3,7 @@ import { DatePicker, Button, Input } from "antd" import moment from "moment" import { FileService } from "../../services/api" import { - updateFromWebApiWrapperAsync, + invokeWebApiWrapperAsync, download, makePaginationObject, } from "../../components/factory" @@ -27,7 +27,7 @@ export default function DocumentsTemplate({ idCategory, idWell }) { const uploadUrl = `/api/well/${idWell}/files/?idCategory=${idCategory}` const handleFileDownload = async (_, row) => { - updateFromWebApiWrapperAsync( + invokeWebApiWrapperAsync( async () => { await download(`/api/well/${idWell}/files/${row.id}`) }, @@ -99,7 +99,7 @@ export default function DocumentsTemplate({ idCategory, idWell }) { end = filterDataRange[1].toISOString() } - updateFromWebApiWrapperAsync( + invokeWebApiWrapperAsync( async () => { const paginatedFiles = await FileService.getFilesInfo( idWell, diff --git a/src/pages/Report.jsx b/src/pages/Report.jsx deleted file mode 100644 index b9cff76..0000000 --- a/src/pages/Report.jsx +++ /dev/null @@ -1,307 +0,0 @@ -import { useState, useEffect } from "react"; -import { useParams } from 'react-router-dom'; -import { - Form, - DatePicker, - Radio, - Button, - Select, - Table, - Progress, - notification -} from 'antd'; -import 'moment/locale/ru'; -import locale from 'antd/lib/locale/ru_RU'; -import moment from "moment"; -import {Subscribe} from '../services/signalr'; -import notify from '../components/notify'; -import LoaderPortal from '../components/LoaderPortal'; -import { ReportService } from '../services/api'; - -const { RangePicker } = DatePicker; -const { Option } = Select; - -let reportDatesRange = { - from: moment("0001-01-01T00:00:00"), - to: moment("9999-12-31T23:59:59.9999999") -} - -const timePeriodNames = [ - {label: '1 секунда', value: 1}, - {label: '10 секунд', value: 10}, - {label: '1 минута', value: 60}, - {label: '5 минут', value: 300}, - {label: '30 минут', value: 1800}, - {label: '1 час', value: 3600}, - {label: '6 часов', value: 21600}, - {label: '12 часов', value: 43200}, - {label: '1 день', value: 86400}, - {label: '1 неделя', value: 604800} -] - -const firstStep = timePeriodNames[2]["value"] - -const imgPaths = { - '.pdf': '/images/pdf.png', - '.las': '/images/las.png' -} - - -// Экспорт рендера -export default function Report(props) { - - const [rangeDate, setRangeDate] = useState([moment().subtract(1,'days'), moment()]) - const [step, setStep] = useState(firstStep) - const [format, setFormat] = useState(0) - const [approxPages, setPagesCount] = useState(0) - const [suitableReports, setSuitableReports] = useState([]) - const [loader, setLoader] = useState(false) - - - let wellId = useParams().id; - - const periods = timePeriodNames.map((line) => ) - - const columns = [ - { - title: '', - dataIndex: 'reportFormat', - key: 'reportFormat', - render: format => {format} - }, - { - title: 'Параметры отчета', - dataIndex: 'reportParams', - key: 'reportParams', - }, - { - title: 'Название отчета', - dataIndex: 'reportName', - key: 'reportName', - render: name => - }, - ]; - - const ReportCreationNotify = ({progressData}) => { - progressData = progressData ?? {progress: 0.0, operation: 'Создание отчета', reportName: ''} - - return ( - <> - -
- { progressData.operation } -
- - - ) - } - - const getReportFile = async (event, reportFileName) => { - - try { - await fetch(`/api/report/${wellId}/${reportFileName}`, { - headers: { - Authorization: 'Bearer ' + localStorage['token'] - } - }) - .then(async (response) => { - const blob = await response.blob(); - - let reader = new FileReader(); - reader.readAsDataURL(blob); - reader.onload = function (e) { - var link = document.createElement("a"); - link.download = reportFileName; - link.href = e.target.result - link.click(); - link.remove(); - }; - }); - } catch (error) { - notify(`Не удалось скачать отчет по скважине (${wellId}) c - ${rangeDate[0].format("DD.MM.YYYY hh:mm:ss")} по - ${rangeDate[1].format("DD.MM.YYYY hh:mm:ss")}`, 'error') - console.log(error) - } - } - - const handleReportCreation = async (values) => { - let begin = rangeDate[0].toISOString() - let end = rangeDate[1].toISOString() - - try { - const idUser = localStorage['userId']; - - const taskId = await ReportService.createReport(wellId, - idUser, values.step, values.format, begin, end) - if(!taskId) - return - - const handleReportProgress = (progressData) => { - if(progressData) { - notification.open({ - key: taskId, - message: 'Создание отчета:', - description: , - duration: 0 - }); - - if (progressData.reportName?.length) - unSubscribeReportHub() - } - } - - const unSubscribeReportHub = Subscribe('hubs/reports', 'GetReportProgress', `Report_${taskId}`, handleReportProgress) - } - catch(error) { - notify(`Не удалось создать отчет по скважине (${wellId}) c - ${rangeDate[0].format("DD.MM.YYYY hh:mm:ss")} по - ${rangeDate[1].format("DD.MM.YYYY hh:mm:ss")}`, 'error') - console.log(error) - } - } - - function disabledDate(current) { - return reportDatesRange.From >= current || reportDatesRange.To <= current; - } - - useEffect(()=>{ - async function getRepostSizeAsync() { - let begin = rangeDate[0].toISOString() - let end = rangeDate[1].toISOString() - try { - let approxPagesResponse = await ReportService.getReportSize(wellId, step, format, begin, end) - setPagesCount(approxPagesResponse) - } catch(error) { - notify(`Не удалось получить предварительный размер отчета c - ${rangeDate[0].format("DD.MM.YYYY hh:mm:ss")} по - ${rangeDate[1].format("DD.MM.YYYY hh:mm:ss")}`, 'error') - console.log(error) - } finally { - setLoader(false) - } - } - - getRepostSizeAsync() - },[rangeDate, step, format, wellId]) - - useEffect(()=>{ - async function getSuitableReportsAsync() { - let begin = rangeDate[0].toISOString() - let end = rangeDate[1].toISOString() - try { - setLoader(true) - let suitableReportsResponse = await ReportService.getSuitableReportsNames(wellId, step, format, begin, end) ?? [] - - let suitableReports = suitableReportsResponse.map(value => { - return { - key: value.id, - reportFormat: value.format, - reportParams: `Дата создания: ${new Date(value.date).toLocaleDateString()}, - Данные от ${new Date(value.begin).toLocaleString()} - до ${new Date(value.end).toLocaleString()}, - Шаг: ${timePeriodNames[value.step]}`, - reportName: value.name - } - }) - setSuitableReports(suitableReports) - } catch(error) { - notify(`Не удалось получить подходящие по параметрам отчеты c - ${rangeDate[0].format("DD.MM.YYYY hh:mm:ss")} по - ${rangeDate[1].format("DD.MM.YYYY hh:mm:ss")}`, 'error') - console.log(error) - } finally { - setLoader(false) - } - } - - getSuitableReportsAsync() - },[rangeDate, step, format, wellId]) - - useEffect(()=>{ - async function getDatesRange() { - let response = await ReportService.getReportsDateRange(wellId) - reportDatesRange.from = moment(response.from) - reportDatesRange.to = moment(response.to) - } - - getDatesRange() - },[wellId]) - - return (<> -
-
-
- - { - setRangeDate([moment(dateStrings[0]), moment(dateStrings[1])]) - } - } - locale={locale} - showTime - /> - - - - - setFormat(e.target.value)} - className="ml-30px" - > - - PDF - LAS - - - -
-
-
-
-

- Отчеты с аналогичными параметрами, доступные для скачивания: -


- - - - - - ) -} diff --git a/src/pages/TelemetryView/ActiveMessagesOnline.jsx b/src/pages/TelemetryView/ActiveMessagesOnline.jsx index 2504a30..1e5e4e8 100644 --- a/src/pages/TelemetryView/ActiveMessagesOnline.jsx +++ b/src/pages/TelemetryView/ActiveMessagesOnline.jsx @@ -3,7 +3,7 @@ import {Table} from "antd"; import moment from 'moment' import LoaderPortal from '../../components/LoaderPortal' -import {updateFromWebApiWrapperAsync} from '../../components/factory' +import {invokeWebApiWrapperAsync} from '../../components/factory' import {Subscribe} from '../../services/signalr' import {MessageService} from '../../services/api' @@ -55,7 +55,7 @@ export default function ActiveMessagesOnline({idWell}) { } useEffect(() => { - updateFromWebApiWrapperAsync( + invokeWebApiWrapperAsync( async () => { const messages = await MessageService.getMessages(idWell, 0, 4) handleReceiveMessages(messages) diff --git a/src/pages/TelemetryView/index.jsx b/src/pages/TelemetryView/index.jsx index 991bfad..9e6bc1d 100644 --- a/src/pages/TelemetryView/index.jsx +++ b/src/pages/TelemetryView/index.jsx @@ -10,7 +10,7 @@ import {UserOfWells} from './UserOfWells' import LoaderPortal from '../../components/LoaderPortal' import {Subscribe} from '../../services/signalr' import {DataService} from '../../services/api' -import {updateFromWebApiWrapperAsync} from '../../components/factory' +import {invokeWebApiWrapperAsync} from '../../components/factory' import '../../styles/message.css' @@ -149,7 +149,7 @@ export default function TelemetryView({idWell}) { } useEffect(() => { - updateFromWebApiWrapperAsync( + invokeWebApiWrapperAsync( async () => { const data = await DataService.getData(idWell, null, chartInterval) handleReceiveDataSaub(data) diff --git a/src/pages/Well.jsx b/src/pages/Well.jsx index e9e54ff..c9ba159 100644 --- a/src/pages/Well.jsx +++ b/src/pages/Well.jsx @@ -3,7 +3,7 @@ import { FolderOutlined, FundViewOutlined } from "@ant-design/icons"; import { Link, Redirect, Route, Switch, useParams } from "react-router-dom"; import TelemetryView from "./TelemetryView"; import Messages from "../pages/Messages"; -import Report from "../pages/Report"; +import Report from "./Report"; import Archive from "../pages/Archive"; import Analysis from "../pages/Analysis"; import WellAnalysis from "../pages/WellAnalysis"; diff --git a/src/pages/WellStat.jsx b/src/pages/WellStat.jsx index cfa5a32..1ffa927 100644 --- a/src/pages/WellStat.jsx +++ b/src/pages/WellStat.jsx @@ -2,7 +2,7 @@ import LoaderPortal from '../components/LoaderPortal' import { useState, useEffect } from "react"; import {makeColumn, makeColumnsPlanFact, RegExpIsFloat} from '../components/factory' import {WellSectionService} from '../services/api' -import {updateFromWebApiWrapperAsync} from '../components/factory' +import {invokeWebApiWrapperAsync} from '../components/factory' import { EditableTable } from '../components/EditableTable'; import { Input } from 'antd' @@ -50,7 +50,7 @@ export default function WellStat({idWell}){ } useEffect(() => { - updateFromWebApiWrapperAsync( + invokeWebApiWrapperAsync( async () => { const paginationContainer = await WellSectionService.getAll(idWell, 0, 1024) addKeysAndUpdateStateData(paginationContainer.items) @@ -60,7 +60,7 @@ export default function WellStat({idWell}){ } ,[idWell]) const onAdd = (item) => { - updateFromWebApiWrapperAsync( + invokeWebApiWrapperAsync( async () => { const updatedItems = await WellSectionService.insert(idWell, [item]) const newItems = [...items, ...updatedItems] @@ -71,7 +71,7 @@ export default function WellStat({idWell}){ } const onEdit = (item) => { - updateFromWebApiWrapperAsync( + invokeWebApiWrapperAsync( async () => { const updatedItem = await WellSectionService.update(idWell, item.id, item) const newItems = [...items] @@ -84,7 +84,7 @@ export default function WellStat({idWell}){ } const onDelete = (item) =>{ - updateFromWebApiWrapperAsync( + invokeWebApiWrapperAsync( async () => { await WellSectionService.delete(idWell, [item.id]) const newItems = [...items]