From 0337c7746b83ccf16b330eb436c3b52324698b1a Mon Sep 17 00:00:00 2001 From: JunaBD <99616690+JunaBD@users.noreply.github.com> Date: Wed, 27 Jul 2022 11:44:24 +0500 Subject: [PATCH 1/4] change daily report --- ReportEditor.jsx | 499 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 499 insertions(+) create mode 100644 ReportEditor.jsx diff --git a/ReportEditor.jsx b/ReportEditor.jsx new file mode 100644 index 0000000..827469d --- /dev/null +++ b/ReportEditor.jsx @@ -0,0 +1,499 @@ +import { DatePicker, Descriptions, Divider, Form, Input, InputNumber, Modal, Select, Space, Table } from 'antd' +import { memo, useCallback, useEffect, useState } from 'react' +import moment from 'moment' + +import { useIdWell } from '@asb/context' +import LoaderPortal from '@components/LoaderPortal' +import { invokeWebApiWrapperAsync } from '@components/factory' +import { makeColumn, makeGroupColumn } from '@components/Table' +import { DailyReportService } from '@api' +import { Tabs } from 'antd' + + + +const { Item: RawItem } = Form +const { Summary } = Table +const { TabPane } = Tabs; + +const onChange = (key) => { + console.log(key); +}; + +const Item = memo(({ style, ...other }) => ) + +const table1Columns = [ + makeGroupColumn('Отчётный период', [ + makeColumn('От (дата, время)', 'dateStart', { width: 200, render: (_, { disabled, onChange, checkIsDateBusy }) => ( + + + + )}), + ]), + makeGroupColumn('Забой за отчётный период, м', [ + makeColumn('От', 'depthStart', { width: 200, render: () => ( + + + + )}), + makeColumn('До', 'depthEnd', { width: 200, render: () => ( + + + + )}), + ]) +] + +const cellData = { + width: 200, + render: (name) => ( + + + + ) +} + +const table2Columns = [ + makeColumn('Работа модулей САУБ', 'label', { width: 400 }), + makeColumn('Часов:', 'hours', cellData), + makeColumn('Метров:', 'meters', cellData), +] + +const table2Data = [ + { key: '1', label: 'АПД (автоматическая подача долота), ч/м:', hours: 'workTimeSAUB', meters: 'penetrationSAUB' }, + { key: '2', label: 'Спин Мастер (осцилляция), ч/м:', hours: 'workTimeSpinMaster', meters: 'penetrationSpinMaster' }, + { key: '3', label: 'Торк Мастер (демпфирование), ч/м:', hours: 'workTimeTorkMaster', meters: 'penetrationTorkMaster' }, +] + +const table3Columns = [ + makeGroupColumn('Бурение в роторе (за отчётный период) с использованием САУБ-1', [ + makeColumn('Проходка', 'sinking', cellData), + makeColumn('Часы бурения', 'hours', cellData), + makeColumn('Среднее диф. Давление', 'pressure', cellData), + ]), +] + +const table3Data = [{ key: '', sinking: 'penetrationInRotor', hours: 'numberDrillingHours', pressure: 'avgDiffDropRotor' }] + +const table4Columns = [ + makeGroupColumn('Бурение в слайде (за отчётный период) с использованием САУБ-1', [ + makeColumn('Проходка', 'sinking', cellData), + makeColumn('Часы бурения', 'hours', cellData), + makeColumn('Среднее диф. Давление', 'pressure', cellData), + ]), +] + +const table4Data = [{ key: '', sinking: 'penetrationInSlide', hours: 'drillingTimeInRotor', pressure: 'avgDiffPressureSlide' }] + +const table6Columns = [ + makeGroupColumn('БЕЗМЕТРАЖНЫЕ РАБОТЫ', [ + makeColumn('Подготовка ствола скважины к наращиванию', 'l_label', { colSpan: 2, width: 200 }), + makeColumn('', 'l_value', { colSpan: 0, ...cellData }), + makeColumn('Наращивание', 'r_label', { colSpan: 2, width: 200 }), + makeColumn('', 'r_value', { colSpan: 0, ...cellData }), + ]), +] + +const table6Data = [{ + key: '1', + l_label: 'Норматив на одну операцию, (мин):', + r_label: 'Норматив на одну операцию, (мин):', + l_value: 'standardTimeBarrelPreparation', + r_value: 'standardTimeExtension' +}, { + key: '2', + l_label: 'Проработка при бур, факт (ч):', + r_label: 'Наращивание, факт (ч):', + l_value: 'actualTimeBarrelPreparation', + r_value: 'actualTimeExtension' +}] + +const table6Summary = () => ( + + + Краткие причины: доп проработки при переходе из слайда в ротор, в середине свечи. + + + Краткие причины: нехватка пальцев на обоих руках у первого помощника бурильщика. + + +) + +const table2Summary = () => ( + + МСЕ, колличество запусков, раз: + + + + + + +) + +export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDateBusy }) => { + const [form] = Form.useForm() + const [isInvalid, setIsInvalid] = useState(false) + const [isLoading, setIsLoading] = useState(false) + + const idWell = useIdWell() + + const setFields = useCallback((data) => form.setFieldsValue(data ? { + ...data, + rotorDrillingModes: Array.isArray(data.rotorDrillingModes) ? data.rotorDrillingModes ?? [] : [], + slideDrillingModes: Array.isArray(data.slideDrillingModes) ? data.slideDrillingModes ?? [] : [], + reportDate: moment.utc(data.reportDate).local(), + } : {}), [form]) + + useEffect(() => setFields(data), [data, setFields]) + + const onFormChange = useCallback(async () => await form.validateFields() + .then(() => setIsInvalid(false)) + .catch(() => setIsInvalid(true)) + , [form]) + + const onFormFinish = useCallback((formData) => invokeWebApiWrapperAsync( + async () => { + if (data) + await DailyReportService.update(idWell, data.reportDate, formData) + else + await DailyReportService.add(idWell, formData) + onDone?.(formData) + form.resetFields() + }, + setIsLoading, + 'Не удалось сохранить суточный рапорт', + 'Сохранение суточного рапорта', + ), [data, onDone, idWell, form]) + + const onDateChange = useCallback((date) => invokeWebApiWrapperAsync( + async () => { + if (data) return + const newData = await DailyReportService.getOrGenerate(idWell, date.format('YYYY-MM-DD') + 'Z') + if (checkIsDateBusy(moment(newData.reportDate))) + throw new Error('Рапорт на данную дату уже существует') + setFields(newData) + }, + setIsLoading, + (e) => `Не удалось загрузить автозаполняемые данные для нового рапорта: ${e}`, + 'Получение автозаполняемых данных суточного рапорта', + ), [idWell, data, setFields, checkIsDateBusy]) + + return ( + Суточная сводка бурения скважины № {data?.wellName} куст № {data?.clusterName} : + <>Новая cуточная сводка бурения скважины + } + onOk={form.submit} + okButtonProps={{ + disabled: isInvalid, + loading: isLoading, + }} + > + +
+ + + +
Имя скважины:
+ + +
Имя кластера:
+ + +
Заказчик:
+ + +
Подрядчик:
+ + +
Дата рапорта:
+ + +
Глубина забоя на дату начала интервала:
+ + +
Глубина забоя на дату окончания интервала:
+ + +
Глубина забоя по стволу на окончание отчетного периода:
+ + +
Глубина забоя по вертикали на дату окончания отчетного периода:
+ + +
Зенитный угол на дату окончания отчетного периода:
+ + +
Азимутальный угол на дату окончания отчетного периода:
+ + +
ФИО бурильщиков:
+ + +
ФИО бурильщиков:
+ + +
Время работы АПД:
+ + +
Время работы спин мастер:
+ + +
Время работы torqueMaster:
+ + +
Количество метров пробуренных с включенным АПД:
+ + +
Количество метров пробуренных с включенным Спин мастер:
+ + +
Количество метров пробуренных с включенным torqueMaster:
+ + +
Количество запусков МСЕ:
+ +
+ +
КНБК описание:
+
Бурение с наращиваниями в инт. 2195-2763м. Время начала:
+
Бурение с наращиваниями в инт. 2195-2763м. Время окончания:
+
Промывка. Время начала:
+
Промывка. Время окончания:
+
Подьем КНБК. Время начала:
+
Подьем КНБК. Время окончания:
+
Спуск КНБК. Время начала:
+
Бурение с наращиваниями в инт. 2763-2850м. Время начала:
+
Бурение с наращиваниями в инт. 2763-2850м. Время окончания:
+ +
+ +
Нормативное время на одну операцию по подготовке ствола скважины к наращиванию:
+ +
Нормативное время на одну операцию по наращиванию:
+ +
Фактическое время проработок при подготовке ствола скважины к наращиванию.:
+ +
Фактическое время наращиваний:
+ +
+ +
Бурение:
+ +
Промывка:
+ +
Наращивание:
+ +
Проработка:
+ +
Расширка:
+ +
Ремонт:
+ +
КНБК:
+ +
СПО:
+ +
ПЗР:
+ +
ПВО:
+ +
ПГР:
+ +
ГИС:
+ +
ОЗЦ:
+ +
Тех.работы:
+ +
Снятие замера:
+ +
Цементирование:
+ +
Простой:
+ +
НПВ:
+ +
+ +
Режимы бурения на роторе:
+ +
Режимы бурения на слайде:
+ +
Количество метров пробуренных в роторе за отчетный период:
+ +
Количество часов бурения в роторе за отчетный период:
+ +
Средний диф. перепад в роторе за отчетный период:
+ +
Количество метров пробуренных в слайде за отчетный период:
+ +
Время бурения в роторе за отчетный период:
+ +
Средний диф. перепад в слайде за отчетный период:
+ +
Плановая МСП за секцию:
+ +
Общее время бурения за секцию:
+ +
Общая проходка за секцию:
+ +
Количество наращиваний за отчетный период:
+ +
Отклонение относительно ГГД:
+ +
Указываются все причины, которые влияют на снижение МСП.:
+ +
+ +
ФИО Мастера буровой:
+ +
ФИО супервайзера:
+ +
+
+ + {/* + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + */} + + + + ) +}) + +export default ReportEditor From e771fbba998d6b157c072aaba27d687b1a499ee1 Mon Sep 17 00:00:00 2001 From: JunaBD <99616690+JunaBD@users.noreply.github.com> Date: Wed, 27 Jul 2022 12:03:18 +0500 Subject: [PATCH 2/4] carry reporteditor --- ReportEditor.jsx | 499 ------------------ .../Reports/DailyReport/ReportEditor.jsx | 210 +++++++- 2 files changed, 207 insertions(+), 502 deletions(-) delete mode 100644 ReportEditor.jsx diff --git a/ReportEditor.jsx b/ReportEditor.jsx deleted file mode 100644 index 827469d..0000000 --- a/ReportEditor.jsx +++ /dev/null @@ -1,499 +0,0 @@ -import { DatePicker, Descriptions, Divider, Form, Input, InputNumber, Modal, Select, Space, Table } from 'antd' -import { memo, useCallback, useEffect, useState } from 'react' -import moment from 'moment' - -import { useIdWell } from '@asb/context' -import LoaderPortal from '@components/LoaderPortal' -import { invokeWebApiWrapperAsync } from '@components/factory' -import { makeColumn, makeGroupColumn } from '@components/Table' -import { DailyReportService } from '@api' -import { Tabs } from 'antd' - - - -const { Item: RawItem } = Form -const { Summary } = Table -const { TabPane } = Tabs; - -const onChange = (key) => { - console.log(key); -}; - -const Item = memo(({ style, ...other }) => ) - -const table1Columns = [ - makeGroupColumn('Отчётный период', [ - makeColumn('От (дата, время)', 'dateStart', { width: 200, render: (_, { disabled, onChange, checkIsDateBusy }) => ( - - - - )}), - ]), - makeGroupColumn('Забой за отчётный период, м', [ - makeColumn('От', 'depthStart', { width: 200, render: () => ( - - - - )}), - makeColumn('До', 'depthEnd', { width: 200, render: () => ( - - - - )}), - ]) -] - -const cellData = { - width: 200, - render: (name) => ( - - - - ) -} - -const table2Columns = [ - makeColumn('Работа модулей САУБ', 'label', { width: 400 }), - makeColumn('Часов:', 'hours', cellData), - makeColumn('Метров:', 'meters', cellData), -] - -const table2Data = [ - { key: '1', label: 'АПД (автоматическая подача долота), ч/м:', hours: 'workTimeSAUB', meters: 'penetrationSAUB' }, - { key: '2', label: 'Спин Мастер (осцилляция), ч/м:', hours: 'workTimeSpinMaster', meters: 'penetrationSpinMaster' }, - { key: '3', label: 'Торк Мастер (демпфирование), ч/м:', hours: 'workTimeTorkMaster', meters: 'penetrationTorkMaster' }, -] - -const table3Columns = [ - makeGroupColumn('Бурение в роторе (за отчётный период) с использованием САУБ-1', [ - makeColumn('Проходка', 'sinking', cellData), - makeColumn('Часы бурения', 'hours', cellData), - makeColumn('Среднее диф. Давление', 'pressure', cellData), - ]), -] - -const table3Data = [{ key: '', sinking: 'penetrationInRotor', hours: 'numberDrillingHours', pressure: 'avgDiffDropRotor' }] - -const table4Columns = [ - makeGroupColumn('Бурение в слайде (за отчётный период) с использованием САУБ-1', [ - makeColumn('Проходка', 'sinking', cellData), - makeColumn('Часы бурения', 'hours', cellData), - makeColumn('Среднее диф. Давление', 'pressure', cellData), - ]), -] - -const table4Data = [{ key: '', sinking: 'penetrationInSlide', hours: 'drillingTimeInRotor', pressure: 'avgDiffPressureSlide' }] - -const table6Columns = [ - makeGroupColumn('БЕЗМЕТРАЖНЫЕ РАБОТЫ', [ - makeColumn('Подготовка ствола скважины к наращиванию', 'l_label', { colSpan: 2, width: 200 }), - makeColumn('', 'l_value', { colSpan: 0, ...cellData }), - makeColumn('Наращивание', 'r_label', { colSpan: 2, width: 200 }), - makeColumn('', 'r_value', { colSpan: 0, ...cellData }), - ]), -] - -const table6Data = [{ - key: '1', - l_label: 'Норматив на одну операцию, (мин):', - r_label: 'Норматив на одну операцию, (мин):', - l_value: 'standardTimeBarrelPreparation', - r_value: 'standardTimeExtension' -}, { - key: '2', - l_label: 'Проработка при бур, факт (ч):', - r_label: 'Наращивание, факт (ч):', - l_value: 'actualTimeBarrelPreparation', - r_value: 'actualTimeExtension' -}] - -const table6Summary = () => ( - - - Краткие причины: доп проработки при переходе из слайда в ротор, в середине свечи. - - - Краткие причины: нехватка пальцев на обоих руках у первого помощника бурильщика. - - -) - -const table2Summary = () => ( - - МСЕ, колличество запусков, раз: - - - - - - -) - -export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDateBusy }) => { - const [form] = Form.useForm() - const [isInvalid, setIsInvalid] = useState(false) - const [isLoading, setIsLoading] = useState(false) - - const idWell = useIdWell() - - const setFields = useCallback((data) => form.setFieldsValue(data ? { - ...data, - rotorDrillingModes: Array.isArray(data.rotorDrillingModes) ? data.rotorDrillingModes ?? [] : [], - slideDrillingModes: Array.isArray(data.slideDrillingModes) ? data.slideDrillingModes ?? [] : [], - reportDate: moment.utc(data.reportDate).local(), - } : {}), [form]) - - useEffect(() => setFields(data), [data, setFields]) - - const onFormChange = useCallback(async () => await form.validateFields() - .then(() => setIsInvalid(false)) - .catch(() => setIsInvalid(true)) - , [form]) - - const onFormFinish = useCallback((formData) => invokeWebApiWrapperAsync( - async () => { - if (data) - await DailyReportService.update(idWell, data.reportDate, formData) - else - await DailyReportService.add(idWell, formData) - onDone?.(formData) - form.resetFields() - }, - setIsLoading, - 'Не удалось сохранить суточный рапорт', - 'Сохранение суточного рапорта', - ), [data, onDone, idWell, form]) - - const onDateChange = useCallback((date) => invokeWebApiWrapperAsync( - async () => { - if (data) return - const newData = await DailyReportService.getOrGenerate(idWell, date.format('YYYY-MM-DD') + 'Z') - if (checkIsDateBusy(moment(newData.reportDate))) - throw new Error('Рапорт на данную дату уже существует') - setFields(newData) - }, - setIsLoading, - (e) => `Не удалось загрузить автозаполняемые данные для нового рапорта: ${e}`, - 'Получение автозаполняемых данных суточного рапорта', - ), [idWell, data, setFields, checkIsDateBusy]) - - return ( - Суточная сводка бурения скважины № {data?.wellName} куст № {data?.clusterName} : - <>Новая cуточная сводка бурения скважины - } - onOk={form.submit} - okButtonProps={{ - disabled: isInvalid, - loading: isLoading, - }} - > - -
- - - -
Имя скважины:
- - -
Имя кластера:
- - -
Заказчик:
- - -
Подрядчик:
- - -
Дата рапорта:
- - -
Глубина забоя на дату начала интервала:
- - -
Глубина забоя на дату окончания интервала:
- - -
Глубина забоя по стволу на окончание отчетного периода:
- - -
Глубина забоя по вертикали на дату окончания отчетного периода:
- - -
Зенитный угол на дату окончания отчетного периода:
- - -
Азимутальный угол на дату окончания отчетного периода:
- - -
ФИО бурильщиков:
- - -
ФИО бурильщиков:
- - -
Время работы АПД:
- - -
Время работы спин мастер:
- - -
Время работы torqueMaster:
- - -
Количество метров пробуренных с включенным АПД:
- - -
Количество метров пробуренных с включенным Спин мастер:
- - -
Количество метров пробуренных с включенным torqueMaster:
- - -
Количество запусков МСЕ:
- -
- -
КНБК описание:
-
Бурение с наращиваниями в инт. 2195-2763м. Время начала:
-
Бурение с наращиваниями в инт. 2195-2763м. Время окончания:
-
Промывка. Время начала:
-
Промывка. Время окончания:
-
Подьем КНБК. Время начала:
-
Подьем КНБК. Время окончания:
-
Спуск КНБК. Время начала:
-
Бурение с наращиваниями в инт. 2763-2850м. Время начала:
-
Бурение с наращиваниями в инт. 2763-2850м. Время окончания:
- -
- -
Нормативное время на одну операцию по подготовке ствола скважины к наращиванию:
- -
Нормативное время на одну операцию по наращиванию:
- -
Фактическое время проработок при подготовке ствола скважины к наращиванию.:
- -
Фактическое время наращиваний:
- -
- -
Бурение:
- -
Промывка:
- -
Наращивание:
- -
Проработка:
- -
Расширка:
- -
Ремонт:
- -
КНБК:
- -
СПО:
- -
ПЗР:
- -
ПВО:
- -
ПГР:
- -
ГИС:
- -
ОЗЦ:
- -
Тех.работы:
- -
Снятие замера:
- -
Цементирование:
- -
Простой:
- -
НПВ:
- -
- -
Режимы бурения на роторе:
- -
Режимы бурения на слайде:
- -
Количество метров пробуренных в роторе за отчетный период:
- -
Количество часов бурения в роторе за отчетный период:
- -
Средний диф. перепад в роторе за отчетный период:
- -
Количество метров пробуренных в слайде за отчетный период:
- -
Время бурения в роторе за отчетный период:
- -
Средний диф. перепад в слайде за отчетный период:
- -
Плановая МСП за секцию:
- -
Общее время бурения за секцию:
- -
Общая проходка за секцию:
- -
Количество наращиваний за отчетный период:
- -
Отклонение относительно ГГД:
- -
Указываются все причины, которые влияют на снижение МСП.:
- -
- -
ФИО Мастера буровой:
- -
ФИО супервайзера:
- -
-
- - {/* - - - - - - -
- - - -
- - - - - -
- - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */} - - - - ) -}) - -export default ReportEditor diff --git a/src/pages/Reports/DailyReport/ReportEditor.jsx b/src/pages/Reports/DailyReport/ReportEditor.jsx index 6e3c1b8..827469d 100644 --- a/src/pages/Reports/DailyReport/ReportEditor.jsx +++ b/src/pages/Reports/DailyReport/ReportEditor.jsx @@ -7,10 +7,17 @@ import LoaderPortal from '@components/LoaderPortal' import { invokeWebApiWrapperAsync } from '@components/factory' import { makeColumn, makeGroupColumn } from '@components/Table' import { DailyReportService } from '@api' +import { Tabs } from 'antd' + const { Item: RawItem } = Form const { Summary } = Table +const { TabPane } = Tabs; + +const onChange = (key) => { + console.log(key); +}; const Item = memo(({ style, ...other }) => ) @@ -198,8 +205,205 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate form={form} onFinish={onFormFinish} onChange={onFormChange} + > - + + + +
Имя скважины:
+ + +
Имя кластера:
+ + +
Заказчик:
+ + +
Подрядчик:
+ + +
Дата рапорта:
+ + +
Глубина забоя на дату начала интервала:
+ + +
Глубина забоя на дату окончания интервала:
+ + +
Глубина забоя по стволу на окончание отчетного периода:
+ + +
Глубина забоя по вертикали на дату окончания отчетного периода:
+ + +
Зенитный угол на дату окончания отчетного периода:
+ + +
Азимутальный угол на дату окончания отчетного периода:
+ + +
ФИО бурильщиков:
+ + +
ФИО бурильщиков:
+ + +
Время работы АПД:
+ + +
Время работы спин мастер:
+ + +
Время работы torqueMaster:
+ + +
Количество метров пробуренных с включенным АПД:
+ + +
Количество метров пробуренных с включенным Спин мастер:
+ + +
Количество метров пробуренных с включенным torqueMaster:
+ + +
Количество запусков МСЕ:
+ +
+ +
КНБК описание:
+
Бурение с наращиваниями в инт. 2195-2763м. Время начала:
+
Бурение с наращиваниями в инт. 2195-2763м. Время окончания:
+
Промывка. Время начала:
+
Промывка. Время окончания:
+
Подьем КНБК. Время начала:
+
Подьем КНБК. Время окончания:
+
Спуск КНБК. Время начала:
+
Бурение с наращиваниями в инт. 2763-2850м. Время начала:
+
Бурение с наращиваниями в инт. 2763-2850м. Время окончания:
+ +
+ +
Нормативное время на одну операцию по подготовке ствола скважины к наращиванию:
+ +
Нормативное время на одну операцию по наращиванию:
+ +
Фактическое время проработок при подготовке ствола скважины к наращиванию.:
+ +
Фактическое время наращиваний:
+ +
+ +
Бурение:
+ +
Промывка:
+ +
Наращивание:
+ +
Проработка:
+ +
Расширка:
+ +
Ремонт:
+ +
КНБК:
+ +
СПО:
+ +
ПЗР:
+ +
ПВО:
+ +
ПГР:
+ +
ГИС:
+ +
ОЗЦ:
+ +
Тех.работы:
+ +
Снятие замера:
+ +
Цементирование:
+ +
Простой:
+ +
НПВ:
+ +
+ +
Режимы бурения на роторе:
+ +
Режимы бурения на слайде:
+ +
Количество метров пробуренных в роторе за отчетный период:
+ +
Количество часов бурения в роторе за отчетный период:
+ +
Средний диф. перепад в роторе за отчетный период:
+ +
Количество метров пробуренных в слайде за отчетный период:
+ +
Время бурения в роторе за отчетный период:
+ +
Средний диф. перепад в слайде за отчетный период:
+ +
Плановая МСП за секцию:
+ +
Общее время бурения за секцию:
+ +
Общая проходка за секцию:
+ +
Количество наращиваний за отчетный период:
+ +
Отклонение относительно ГГД:
+ +
Указываются все причины, которые влияют на снижение МСП.:
+ +
+ +
ФИО Мастера буровой:
+ +
ФИО супервайзера:
+ +
+
+ + {/* - +
- + */} From b909f0fd03f0dd34d1aafab06ffcfa6d682541c7 Mon Sep 17 00:00:00 2001 From: JunaBD <99616690+JunaBD@users.noreply.github.com> Date: Wed, 27 Jul 2022 12:05:57 +0500 Subject: [PATCH 3/4] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=82=D0=B8=D0=BF=20=D0=B4=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 --- src/pages/Reports/DailyReport/ReportEditor.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Reports/DailyReport/ReportEditor.jsx b/src/pages/Reports/DailyReport/ReportEditor.jsx index 827469d..2ed8a8c 100644 --- a/src/pages/Reports/DailyReport/ReportEditor.jsx +++ b/src/pages/Reports/DailyReport/ReportEditor.jsx @@ -331,7 +331,7 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate
Бурение:
Промывка:
- +
Наращивание:
Проработка:
From 2cc9c0acee070768e9fe2617242b383ff2f5af2c Mon Sep 17 00:00:00 2001 From: JunaBD <99616690+JunaBD@users.noreply.github.com> Date: Sat, 30 Jul 2022 09:31:31 +0500 Subject: [PATCH 4/4] =?UTF-8?q?=D0=B3=D0=BB=D0=BE=D0=B1=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- .../Reports/DailyReport/ReportEditor.jsx | 881 ++++++++++-------- 2 files changed, 511 insertions(+), 372 deletions(-) diff --git a/package.json b/package.json index 4273022..95748c2 100755 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "oug": "npx openapi -i http://46.146.209.148/swagger/v1/swagger.json -o src/services/api", "oug_dev": "npx openapi -i http://46.146.209.148:89/swagger/v1/swagger.json -o src/services/api" }, - "proxy": "http://46.146.209.148:89", + "proxy": "http://46.146.209.148:88", "eslintConfig": { "extends": [ "react-app", diff --git a/src/pages/Reports/DailyReport/ReportEditor.jsx b/src/pages/Reports/DailyReport/ReportEditor.jsx index 2ed8a8c..8b56887 100644 --- a/src/pages/Reports/DailyReport/ReportEditor.jsx +++ b/src/pages/Reports/DailyReport/ReportEditor.jsx @@ -9,44 +9,58 @@ import { makeColumn, makeGroupColumn } from '@components/Table' import { DailyReportService } from '@api' import { Tabs } from 'antd' - - const { Item: RawItem } = Form const { Summary } = Table -const { TabPane } = Tabs; +const { TabPane } = Tabs const onChange = (key) => { - console.log(key); -}; - + console.log(key) +} const Item = memo(({ style, ...other }) => ) const table1Columns = [ makeGroupColumn('Отчётный период', [ - makeColumn('От (дата, время)', 'dateStart', { width: 200, render: (_, { disabled, onChange, checkIsDateBusy }) => ( - - - - )}), + makeColumn('От (дата, время)', 'dateStart', { + width: 200, + render: (_, { disabled, onChange, checkIsDateBusy }) => ( + + + + ), + }), ]), makeGroupColumn('Забой за отчётный период, м', [ - makeColumn('От', 'depthStart', { width: 200, render: () => ( - - - - )}), - makeColumn('До', 'depthEnd', { width: 200, render: () => ( - - - - )}), - ]) + makeColumn('От', 'depthStart', { + width: 200, + render: () => ( + + + + ), + }), + makeColumn('До', 'depthEnd', { + width: 200, + render: () => ( + + + + ), + }), + ]), +] +const names = [ + ['head', ['wellName', 'clusterName','contractor','countLaunchesMSE','customer','bottomholeDepth','verticalDepth','firstDriller','secondDriller','zenithAngle','azimuthAngle','penetrationSAUB','penetrationSpinMaster','penetrationTorkMaster','secondDriller','wellDepthIntervalFinishDate','wellDepthIntervalStartDate','workTimeSAUB','workTimeSpinMaster','workTimeTorkMaster','reportDate']], + ['bha', ['bhaDescription','extensionDrillingOneBegin','extensionDrillingOneFinish','sluiceBegin','sluiceFinish','climbBegin','climbFinish','descentBegin','descentFinish','extensionDrillingTwoBegin','extensionDrillingTwoFinish']], + ['noDrilling', ['actualTimeBarrelPreparation','actualTimeExtension','standardTimeBarrelPreparation','standardTimeExtension']], + ['timeBalance', ['drilling','flushing','building','elaboration','extension','repair','knbk','spo','pzr','pzr','pgr','gis','ozc','engineeringWorks','takingMeasure','cementing','simple','npv']], + ['saub', ['avgDiffDropRotor','avgDiffPressureSlide','declinesReasonsROP','deviationFromTVD','drillingTimeInRotor','declinesReasonsROP','extensionsCount','extensionsCount','penetrationInRotor','penetrationInSlide','rotorDrillingModes','rotorSlidePercent','reductionTimeDrilling','increaseSpeedSection','increaseSpeedDay','sectionDrillingTimeTotal','sectionPenetrationTotal','sectionROPPlan','slideDrillingModes','mspSection']], + ['sign', ['drillingMaster','supervisor']], ] const cellData = { @@ -55,7 +69,15 @@ const cellData = { - ) + ), +} +const Name1 = { + width: 200, + render: (name) => ( + + + + ), } const table2Columns = [ @@ -67,7 +89,12 @@ const table2Columns = [ const table2Data = [ { key: '1', label: 'АПД (автоматическая подача долота), ч/м:', hours: 'workTimeSAUB', meters: 'penetrationSAUB' }, { key: '2', label: 'Спин Мастер (осцилляция), ч/м:', hours: 'workTimeSpinMaster', meters: 'penetrationSpinMaster' }, - { key: '3', label: 'Торк Мастер (демпфирование), ч/м:', hours: 'workTimeTorkMaster', meters: 'penetrationTorkMaster' }, + { + key: '3', + label: 'Торк Мастер (демпфирование), ч/м:', + hours: 'workTimeTorkMaster', + meters: 'penetrationTorkMaster', + }, ] const table3Columns = [ @@ -78,7 +105,9 @@ const table3Columns = [ ]), ] -const table3Data = [{ key: '', sinking: 'penetrationInRotor', hours: 'numberDrillingHours', pressure: 'avgDiffDropRotor' }] +const table3Data = [ + { key: '', sinking: 'penetrationInRotor', hours: 'numberDrillingHours', pressure: 'avgDiffDropRotor' }, +] const table4Columns = [ makeGroupColumn('Бурение в слайде (за отчётный период) с использованием САУБ-1', [ @@ -88,10 +117,12 @@ const table4Columns = [ ]), ] -const table4Data = [{ key: '', sinking: 'penetrationInSlide', hours: 'drillingTimeInRotor', pressure: 'avgDiffPressureSlide' }] +const table4Data = [ + { key: '', sinking: 'penetrationInSlide', hours: 'drillingTimeInRotor', pressure: 'avgDiffPressureSlide' }, +] const table6Columns = [ - makeGroupColumn('БЕЗМЕТРАЖНЫЕ РАБОТЫ', [ + makeGroupColumn('', [ makeColumn('Подготовка ствола скважины к наращиванию', 'l_label', { colSpan: 2, width: 200 }), makeColumn('', 'l_value', { colSpan: 0, ...cellData }), makeColumn('Наращивание', 'r_label', { colSpan: 2, width: 200 }), @@ -99,30 +130,97 @@ const table6Columns = [ ]), ] -const table6Data = [{ - key: '1', - l_label: 'Норматив на одну операцию, (мин):', - r_label: 'Норматив на одну операцию, (мин):', - l_value: 'standardTimeBarrelPreparation', - r_value: 'standardTimeExtension' -}, { - key: '2', - l_label: 'Проработка при бур, факт (ч):', - r_label: 'Наращивание, факт (ч):', - l_value: 'actualTimeBarrelPreparation', - r_value: 'actualTimeExtension' -}] +const table6Data = [ + { + key: '1', + l_label: 'Норматив на одну операцию, (мин):', + r_label: 'Норматив на одну операцию, (мин):', + l_value: 'standardTimeBarrelPreparation', + r_value: 'standardTimeExtension', + }, + { + key: '2', + l_label: 'Проработка при бур, факт (ч):', + r_label: 'Наращивание, факт (ч):', + l_value: 'actualTimeBarrelPreparation', + r_value: 'actualTimeExtension', + }, +] +const table10Columns = [ + makeGroupColumn('', [ + makeColumn('Бурение с наращиваниями в инт. 2195-2763м', 'l_label', { colSpan: 2, width: 200 }), + makeColumn('', 'l_value', { colSpan: 0, ...Name1 }), + makeColumn('Промывка', 'r_label', { colSpan: 2, width: 200 }), + makeColumn('', 'r_value', { colSpan: 0, ...Name1 }), + ]), +] -const table6Summary = () => ( - - - Краткие причины: доп проработки при переходе из слайда в ротор, в середине свечи. - - - Краткие причины: нехватка пальцев на обоих руках у первого помощника бурильщика. - - -) +const table10Data = [ + { + key: '1', + l_label: 'Время начала:', + r_label: 'Время начала', + l_value: 'extensionDrillingOneBegin', + r_value: 'extensionDrillingOneFinish', + }, + { + key: '2', + l_label: 'Время окончания', + r_label: 'Время окончания', + l_value: 'sluiceBegin', + r_value: 'sluiceFinish', + }, +] +const table11Columns = [ + makeGroupColumn('', [ + makeColumn('Подъем КНБК', 'l_label', { colSpan: 2, width: 200 }), + makeColumn('', 'l_value', { colSpan: 0, ...Name1 }), + makeColumn('Спуск КНБК', 'r_label', { colSpan: 2, width: 200 }), + makeColumn('', 'r_value', { colSpan: 0, ...Name1 }), + ]), +] + +const table11Data = [ + { + key: '1', + l_label: 'Время начала:', + r_label: 'Время начала', + l_value: 'climbBegin', + r_value: 'climbFinish', + }, + { + key: '2', + l_label: 'Время окончания', + r_label: 'Время окончания', + l_value: 'descentBegin', + r_value: 'descentFinish', + }, +] +const table12Columns = [ + makeGroupColumn('', [ + makeColumn('Глубины забоя на окончание отчетного периода', 'l_label', { colSpan: 2, width: 200 }), + makeColumn('', 'l_value', { colSpan: 0, ...cellData }), + makeColumn('Углы на дату окончания отчетного периода', 'r_label', { colSpan: 2, width: 200 }), + makeColumn('', 'r_value', { colSpan: 0, ...cellData }), + ]), +] + +const table12Data = [ + { + key: '1', + l_label: 'По стволу:', + r_label: 'По вертикали', + l_value: 'climbBegin', + r_value: 'climbFinish', + }, + { + key: '2', + l_label: 'Зенитный', + r_label: 'Азимутальный', + l_value: 'descentBegin', + r_value: 'descentFinish', + }, +] const table2Summary = () => ( @@ -142,46 +240,69 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate const idWell = useIdWell() - const setFields = useCallback((data) => form.setFieldsValue(data ? { - ...data, - rotorDrillingModes: Array.isArray(data.rotorDrillingModes) ? data.rotorDrillingModes ?? [] : [], - slideDrillingModes: Array.isArray(data.slideDrillingModes) ? data.slideDrillingModes ?? [] : [], - reportDate: moment.utc(data.reportDate).local(), - } : {}), [form]) + const setFields = useCallback( + (data) => + form.setFieldsValue( + data + ? { + ...data.head, + ...data.bha, + ...data.noDrilling, + ...data.timeBalance, + ...data.saub, + ...data.sign, + reportDate: moment.utc(data.head.reportDate).local(), + } + : {} + ), + [form] + ) useEffect(() => setFields(data), [data, setFields]) - const onFormChange = useCallback(async () => await form.validateFields() - .then(() => setIsInvalid(false)) - .catch(() => setIsInvalid(true)) - , [form]) + const onFormChange = useCallback( + async () => + await form + .validateFields() + .then(() => setIsInvalid(false)) + .catch(() => setIsInvalid(true)), + [form] + ) - const onFormFinish = useCallback((formData) => invokeWebApiWrapperAsync( - async () => { - if (data) - await DailyReportService.update(idWell, data.reportDate, formData) - else - await DailyReportService.add(idWell, formData) - onDone?.(formData) - form.resetFields() - }, - setIsLoading, - 'Не удалось сохранить суточный рапорт', - 'Сохранение суточного рапорта', - ), [data, onDone, idWell, form]) + const onFormFinish = useCallback( + (formData) => + invokeWebApiWrapperAsync( + async () => { + console.log(formData) + const payload = Object.fromEntries(names.map(([head, names]) => [head, Object.fromEntries(names.map((name) => [name, formdata[name]]))])) + if (data) await DailyReportService.update(idWell, data.head.reportDate, payload) + else await DailyReportService.add(idWell, payload) + onDone?.(formData) + form.resetFields() + }, + setIsLoading, + 'Не удалось сохранить суточный рапорт', + 'Сохранение суточного рапорта' + ), + [data, onDone, idWell, form] + ) - const onDateChange = useCallback((date) => invokeWebApiWrapperAsync( - async () => { - if (data) return - const newData = await DailyReportService.getOrGenerate(idWell, date.format('YYYY-MM-DD') + 'Z') - if (checkIsDateBusy(moment(newData.reportDate))) - throw new Error('Рапорт на данную дату уже существует') - setFields(newData) - }, - setIsLoading, - (e) => `Не удалось загрузить автозаполняемые данные для нового рапорта: ${e}`, - 'Получение автозаполняемых данных суточного рапорта', - ), [idWell, data, setFields, checkIsDateBusy]) + const onDateChange = useCallback( + (date) => + invokeWebApiWrapperAsync( + async () => { + if (data) return + const newData = await DailyReportService.getOrGenerate(idWell, date.format('YYYY-MM-DD') + 'Z') + if (checkIsDateBusy(moment(newData.reportDate))) + throw new Error('Рапорт на данную дату уже существует') + setFields(newData) + }, + setIsLoading, + (e) => `Не удалось загрузить автозаполняемые данные для нового рапорта: ${e}`, + 'Получение автозаполняемых данных суточного рапорта' + ), + [idWell, data, setFields, checkIsDateBusy] + ) return ( Суточная сводка бурения скважины № {data?.wellName} куст № {data?.clusterName} : - <>Новая cуточная сводка бурения скважины + title={ + data ? ( + <> + Суточная сводка бурения скважины № {data?.wellName} куст № {data?.clusterName} + + ) : ( + <>Новая cуточная сводка бурения скважины + ) } onOk={form.submit} okButtonProps={{ @@ -201,209 +327,8 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate }} > -
- - - -
Имя скважины:
- - -
Имя кластера:
- - -
Заказчик:
- - -
Подрядчик:
- - -
Дата рапорта:
- - -
Глубина забоя на дату начала интервала:
- - -
Глубина забоя на дату окончания интервала:
- - -
Глубина забоя по стволу на окончание отчетного периода:
- - -
Глубина забоя по вертикали на дату окончания отчетного периода:
- - -
Зенитный угол на дату окончания отчетного периода:
- - -
Азимутальный угол на дату окончания отчетного периода:
- - -
ФИО бурильщиков:
- - -
ФИО бурильщиков:
- - -
Время работы АПД:
- - -
Время работы спин мастер:
- - -
Время работы torqueMaster:
- - -
Количество метров пробуренных с включенным АПД:
- - -
Количество метров пробуренных с включенным Спин мастер:
- - -
Количество метров пробуренных с включенным torqueMaster:
- - -
Количество запусков МСЕ:
- -
- -
КНБК описание:
-
Бурение с наращиваниями в инт. 2195-2763м. Время начала:
-
Бурение с наращиваниями в инт. 2195-2763м. Время окончания:
-
Промывка. Время начала:
-
Промывка. Время окончания:
-
Подьем КНБК. Время начала:
-
Подьем КНБК. Время окончания:
-
Спуск КНБК. Время начала:
-
Бурение с наращиваниями в инт. 2763-2850м. Время начала:
-
Бурение с наращиваниями в инт. 2763-2850м. Время окончания:
- -
- -
Нормативное время на одну операцию по подготовке ствола скважины к наращиванию:
- -
Нормативное время на одну операцию по наращиванию:
- -
Фактическое время проработок при подготовке ствола скважины к наращиванию.:
- -
Фактическое время наращиваний:
- -
- -
Бурение:
- -
Промывка:
- -
Наращивание:
- -
Проработка:
- -
Расширка:
- -
Ремонт:
- -
КНБК:
- -
СПО:
- -
ПЗР:
- -
ПВО:
- -
ПГР:
- -
ГИС:
- -
ОЗЦ:
- -
Тех.работы:
- -
Снятие замера:
- -
Цементирование:
- -
Простой:
- -
НПВ:
- -
- -
Режимы бурения на роторе:
- -
Режимы бурения на слайде:
- -
Количество метров пробуренных в роторе за отчетный период:
- -
Количество часов бурения в роторе за отчетный период:
- -
Средний диф. перепад в роторе за отчетный период:
- -
Количество метров пробуренных в слайде за отчетный период:
- -
Время бурения в роторе за отчетный период:
- -
Средний диф. перепад в слайде за отчетный период:
- -
Плановая МСП за секцию:
- -
Общее время бурения за секцию:
- -
Общая проходка за секцию:
- -
Количество наращиваний за отчетный период:
- -
Отклонение относительно ГГД:
- -
Указываются все причины, которые влияют на снижение МСП.:
- -
- -
ФИО Мастера буровой:
- -
ФИО супервайзера:
- -
-
- - {/* + + - - - - -
- - + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + -
+
+ + +
+ + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - +
+
-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +