From 9443bdafc1be2e8208cd532aca78d732c2ddf0c1 Mon Sep 17 00:00:00 2001 From: KharchenkoVV Date: Wed, 2 Jun 2021 12:47:30 +0500 Subject: [PATCH] =?UTF-8?q?CF2-8:=20=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=BE=D1=82?= =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/pages/Report.jsx | 236 +++++++++++------- src/services/api/services/ReportService.ts | 39 ++- src/services/api/services/TelemetryService.ts | 2 +- 4 files changed, 188 insertions(+), 91 deletions(-) diff --git a/package.json b/package.json index fcc367b..e4bff7c 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "react_test": "react-scripts test", "eject": "react-scripts eject" }, - "proxy": "http://192.168.1.70:5000", + "proxy": "http://0.0.0.0:5000", "eslintConfig": { "extends": [ "react-app", diff --git a/src/pages/Report.jsx b/src/pages/Report.jsx index a55fcd5..cccc2fd 100644 --- a/src/pages/Report.jsx +++ b/src/pages/Report.jsx @@ -1,107 +1,173 @@ -import React from "react"; +import React, { useState, useEffect } from "react"; +import { useParams } from 'react-router-dom'; import { + Form, DatePicker, Radio, - ConfigProvider, Button, Select, - Checkbox, + Table } from 'antd'; import 'moment/locale/ru'; import locale from 'antd/lib/locale/ru_RU'; import moment from "moment"; +import { ReportService } from '../services/api' const { RangePicker } = DatePicker; const { Option } = Select; - - - -// Расширение файла для составленного рапорта -const ExceptionFileChecker = () => { - const [value, setValue] = React.useState(1); - const onChange = e => { - console.log('radio checked', e.target.value); - setValue(e.target.value); - } - - return ( - PDF - LAS - - ) +const initialBegin = moment() +const initialEnd = moment() +const initialStep = 600 +const initialFormat = 1 +let reportDatesRange = { + from: moment("0001-01-01T00:00:00"), + to: moment("9999-12-31T23:59:59.9999999") } -// Выбор периода времени -const PeriodOfTime = () => { - function disabledDate(current) { - return current && current < moment().subtract(3, 'days'); // Наверно, не надо) - } - - return ( - - - - ) -} - -// Выбор содержимого -const ContentSelection = () => { - function onChange(e) { - console.log(`checked = ${e.target.checked}`); - } - - return (<> - Графики - Сообщения - - ) -} - -// Выбор шага графика -const GraphicStep = () => { - function handleChange(value) { - console.log(`selected ${value}`); - } - - return ( - - ) -} // Экспорт рендера -export default function Report(props) { +export default function Report(props) { + + const [rangeDate, setRangeDate] = useState([moment(), moment()]) + const [step, setStep] = useState(initialStep) + const [format, setFormat] = useState(initialFormat) + const [approxPages, setPagesCount] = useState(0) + const [suitableReports, setSuitableReports] = useState([]) + let wellId = useParams().id; + + const columns = [ + { + title: '', + dataIndex: 'reportFormat', + key: 'reportFormat', + }, + { + title: 'Параметры отчета', + dataIndex: 'reportParams', + key: 'reportParams', + }, + { + title: 'Название отчета', + dataIndex: 'reportName', + key: 'reportName', + render: name => {name} + }, + ]; + + let handleReportCreation = async (values) => { + let begin = rangeDate[0].toISOString() + let end = rangeDate[1].toISOString() + let taskId = await ReportService.createReport(wellId, values.step, values.format, begin, end) + }; + + function disabledDate(current) { + return reportDatesRange.From >= current || reportDatesRange.To <= current; + } + + useEffect(()=>{ + async function getRepostSizeAsync() { + let begin = rangeDate[0].toISOString() + let end = rangeDate[1].toISOString() + let approxPagesResponse = await ReportService.getReportSize(wellId, step, format, begin, end) + setPagesCount(approxPagesResponse) + let suitableReportsResponse = await ReportService.getSuitableReportsNames(wellId, step, format, begin, end) + let suitableReports = suitableReportsResponse.map(value => { + return { + reportFormat: value.format, + reportParams: `Дата создания: ${value.date}, Данные от ${value.begin} до ${value.end}, Шаг: ${value.step}`, + reportName: value.name + } + }) + setSuitableReports(suitableReports) + } + + getRepostSizeAsync() + },[rangeDate, step, format]) + + useEffect(()=>{ + async function getDatesRange() { + let response = await ReportService.getReportsDateRange(wellId) + reportDatesRange.from = moment(response.from) + reportDatesRange.to = moment(response.to) + } + + getDatesRange() + },[]) + return (<> -

Рапорт

-
-

Выбор за период времени и расширение файла

- -

Шаг графиков

- -

Содержимое отчёта

- -
- -

*Предполагаемое колличество страниц

-
-
- -
+
+
+ + { + setRangeDate([moment(dateStrings[0]), moment(dateStrings[1])]) + } + } + locale={locale} + showTime + /> + + + + + setFormat(e.target.value)} + style={{marginLeft: '30px'}} + > + + PDF + LAS + + + +
+
+
+

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


+ ) } - -// TODO ограничить датапикер по дате за 3 дня до diff --git a/src/services/api/services/ReportService.ts b/src/services/api/services/ReportService.ts index c7e4b79..3637a24 100644 --- a/src/services/api/services/ReportService.ts +++ b/src/services/api/services/ReportService.ts @@ -10,10 +10,10 @@ export class ReportService { * Создает отчет по скважине с указанными параметрами * @param wellId id скважины * @param stepSeconds шаг интервала - * @param format формат отчета (0-PDF, 1-LASS) + * @param format формат отчета (0-PDF, 1-LAS) * @param begin дата начала интервала * @param end дата окончания интервала - * @returns string Success + * @returns number Success * @throws ApiError */ public static async createReport( @@ -22,7 +22,7 @@ stepSeconds?: number, format?: number, begin?: string, end?: string, -): Promise { +): Promise { const result = await __request({ method: 'POST', path: `/api/well/${wellId}/report`, @@ -57,11 +57,42 @@ reportName?: string, return result.body; } + /** + * Возвращает имена отчетов, хранящихся на диске, + * которые подходят под указанные параметры + * @param wellId id скважины + * @param stepSeconds шаг интервала + * @param format формат отчета (0-PDF, 1-LAS) + * @param begin дата начала интервала + * @param end дата окончания интервала + * @returns string Success + * @throws ApiError + */ + public static async getSuitableReportsNames( +wellId: number, +stepSeconds?: number, +format?: number, +begin?: string, +end?: string, +): Promise> { + const result = await __request({ + method: 'GET', + path: `/api/well/${wellId}/suitableReports`, + query: { + 'stepSeconds': stepSeconds, + 'format': format, + 'begin': begin, + 'end': end, + }, + }); + return result.body; + } + /** * Возвращает прогнозируемое количество страниц будущего отчета * @param wellId id скважины * @param stepSeconds шаг интервала - * @param format формат отчета (0-PDF, 1-LASS) + * @param format формат отчета (0-PDF, 1-LAS) * @param begin дата начала интервала * @param end дата окончания интервала * @returns string Success diff --git a/src/services/api/services/TelemetryService.ts b/src/services/api/services/TelemetryService.ts index 172fa7d..f6dba81 100644 --- a/src/services/api/services/TelemetryService.ts +++ b/src/services/api/services/TelemetryService.ts @@ -31,7 +31,7 @@ requestBody?: TelemetryInfoDto, /** * Принимает данные от разных систем по скважине - * @param uid Уникальный идентификатор отправителя + * @param uid Уникальный идентификатор ��тправителя * @param requestBody Данные * @returns any Success * @throws ApiError