import { Link } from "react-router-dom"; import { useState } from "react"; import { Table, Tag, Button, Modal } from "antd"; import { LineChartOutlined, ProfileOutlined } from "@ant-design/icons"; import { makeTextColumn, makeGroupColumn, makeColumn, makeNumericColumnPlanFact, makeDateSorter } from "../../components/Table"; import { calcAndUpdateStatsBySections, makeFilterMinMaxFunction } from "./functions"; import { invokeWebApiWrapperAsync } from '../../components/factory'; import { WellOperationStatService } from '../../services/api'; import ChartDepthToDay from '../../components/charts/ChartDepthToDay'; import WellOperationsTable from './WellOperationsTable' const filtersMinMax = [ { text: "min", value: "min", }, { text: "max", value: "max", }, ]; const filtersWellsType = []; export default function ClusterWells({clusterData}) { const [isTVDModalVisible, setIsTVDModalVisible] = useState(false) const [isOpsModalVisible, setIsOpsModalVisible] = useState(false) const [tvdDataPlan, setTvdDataPlan] = useState([]); const [tvdDataFact, setTvdDataFact] = useState([]); const [tvdDataForecast, setTvdDataForecast] = useState([]); const [wellOperations, setWellOperations] = useState([]); const getOperations = (wellId) => { invokeWebApiWrapperAsync( async () => { const operations = await WellOperationStatService.getTvd(wellId); setWellOperations(operations) const tvdPlanData = operations.map(el => { return {key: el.caption, depth: el.plan?.wellDepth, date: el.plan?.startDate} }).filter(el => el.key) setTvdDataPlan(tvdPlanData) const tvdFactData = operations.map(el => { return {key: el.caption, depth: el.fact?.wellDepth, date: el.fact?.startDate} }).filter(el => el.key) setTvdDataFact(tvdFactData) const tvdPredictData = operations.map(el => { return {key: el.caption, depth: el.predict?.wellDepth, date: el.predict?.startDate} }).filter(el => el.key) setTvdDataForecast(tvdPredictData) }, null, `Не удалось загрузить операции по скважине "${wellId}"`, ); } let tableData = clusterData.statsWells?.map((well) => { if (!filtersWellsType.some((el) => el.text === well.wellType)) filtersWellsType.push({ text: well.wellType, value: well.wellType, }); return { key: well.caption, id: well.id, caption: well.caption, wellType: well.wellType, factStart: well.total?.fact?.start, factEnd: well.total?.fact?.end, periodPlan: ( (new Date(well.total?.plan?.end) - new Date(well.total?.plan?.start)) / (1000 * 60 * 60 * 24) ), periodFact: ( (new Date(well.total?.fact?.end) - new Date(well.total?.fact?.start)) / (1000 * 60 * 60 * 24) ), rateOfPenetrationPlan: well.total?.plan?.rop, rateOfPenetrationFact: well.total?.fact?.rop, routeSpeedPlan: well.total?.plan?.routeSpeed, routeSpeedFact: well.total?.fact?.routeSpeed, notProductiveTimePlan: well.total?.plan?.nonProductiveHours, notProductiveTimeFact: well.total?.fact?.nonProductiveHours, companies: well.companies, }; }); calcAndUpdateStatsBySections(tableData ?? [], [ "factStart", "factEnd", "periodPlan", "periodFact", "rateOfPenetrationPlan", "rateOfPenetrationFact", "routeSpeedPlan", "routeSpeedFact", "notProductiveTime", ]); const columns = [ makeTextColumn("скв №", "caption", null, null, (_, item) => ({item.caption ?? '-'} )), makeTextColumn("Тип скв.", "wellType", filtersWellsType, null, (text) => text ?? '-' ), makeGroupColumn("Фактические сроки", [ makeColumn("начало", "factStart", { sorter: makeDateSorter('factStart'), render: (dateString) => !Number.isNaN(new Date(dateString).getTime()) ? new Date(dateString).toLocaleString() : '-' } ), makeColumn("окончание", "factEnd", { sorter: makeDateSorter('factEnd'), render: (dateString) => !Number.isNaN(new Date(dateString).getTime()) ? new Date(dateString).toLocaleString() : '-' } ), ]), makeNumericColumnPlanFact( "Продолжительность", "period", filtersMinMax, makeFilterMinMaxFunction, (number) => (!Number.isNaN(number) && number !== undefined) ? number.toFixed(2) : '-'), makeNumericColumnPlanFact( "МСП", "rateOfPenetration", filtersMinMax, makeFilterMinMaxFunction, (number) => (!Number.isNaN(number) && number !== undefined) ? number.toFixed(2) : '-'), makeNumericColumnPlanFact( "Рейсовая скорость", "routeSpeed", filtersMinMax, makeFilterMinMaxFunction, (number) => (!Number.isNaN(number) && number !== undefined) ? number.toFixed(2) : '-'), makeNumericColumnPlanFact( "НПВ, сут", "notProductiveTime", filtersMinMax, makeFilterMinMaxFunction, (number) => (!Number.isNaN(number) && number !== undefined) ? number.toFixed(2) : '-'), { title: "TVD", render: (value) => , align: 'center' }, { title: "Операции", render: (value) => , align: 'center' }, { title: "Подрядчики", key: "companies", dataIndex: "companies", render: (item) => item?.map((company) => {company.caption}) ?? '-', }, ]; return (
record.caption} /> setIsTVDModalVisible(false)} width={1500} footer={null} > setIsOpsModalVisible(false)} width={1500} footer={null} > ); }