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м. Время окончания:
- -
- -
Нормативное время на одну операцию по подготовке ствола скважины к наращиванию:
- -
Нормативное время на одну операцию по наращиванию:
- -
Фактическое время проработок при подготовке ствола скважины к наращиванию.:
- -
Фактическое время наращиваний:
- -
- -
Бурение:
- -
Промывка:
- -
Наращивание:
- -
Проработка:
- -
Расширка:
- -
Ремонт:
- -
КНБК:
- -
СПО:
- -
ПЗР:
- -
ПВО:
- -
ПГР:
- -
ГИС:
- -
ОЗЦ:
- -
Тех.работы:
- -
Снятие замера:
- -
Цементирование:
- -
Простой:
- -
НПВ:
- -
- -
Режимы бурения на роторе:
- -
Режимы бурения на слайде:
- -
Количество метров пробуренных в роторе за отчетный период:
- -
Количество часов бурения в роторе за отчетный период:
- -
Средний диф. перепад в роторе за отчетный период:
- -
Количество метров пробуренных в слайде за отчетный период:
- -
Время бурения в роторе за отчетный период:
- -
Средний диф. перепад в слайде за отчетный период:
- -
Плановая МСП за секцию:
- -
Общее время бурения за секцию:
- -
Общая проходка за секцию:
- -
Количество наращиваний за отчетный период:
- -
Отклонение относительно ГГД:
- -
Указываются все причины, которые влияют на снижение МСП.:
- -
- -
ФИО Мастера буровой:
- -
ФИО супервайзера:
- -
-
- - {/* + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + -
+
+ + +
+ + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - +
+
-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +