import { useParams } from "react-router-dom"; import { Link } from "react-router-dom"; import { useState, useEffect } from "react"; import { Table, Tag, Button, Modal } from "antd"; import { makeTextColumn, makeGroupColumn, makeNumericColumn, makeNumericColumnPlanFact } from "../../components/Table"; import { calcAndUpdateStatsBySections, makeFilterMinMaxFunction } from "./functions"; import { invokeWebApiWrapperAsync } from '../../components/factory'; import { WellOperationStatService } from '../../services/api'; import ChartDepthToDay from '../../components/charts/ChartDepthToDay'; const filtersMinMax = [ { text: "min", value: "min", }, { text: "max", value: "max", }, ]; const filtersWellsType = [ { text: "Наклонно-направленная", value: "Наклонно-направленная", }, { text: "Горизонтальная", value: "Горизонтальная", }, ]; export default function ClusterWells({ clusterData }) { let { id } = useParams(); const [wellsStat, setWellsStat] = useState([]); const [selectedWellId, setSelectedWellId] = useState(0); const [isModalVisible, setIsModalVisible] = useState(false) const [dataPlan, setDataPlan] = useState([]); const [dataFact, setDataFact] = useState([]); const [dataForecast, setDataForecast] = useState([]); useEffect(() => { if (selectedWellId > 0) { invokeWebApiWrapperAsync( async () => { const operations = await WellOperationStatService.getTvd(selectedWellId); const planData = operations.map(el => { return {key: el.plan?.id, depth: el.plan?.wellDepth, date: el.plan?.startDate} }).filter(el => el.key) setDataPlan(planData) const factData = operations.map(el => { return {key: el.fact?.id, depth: el.fact?.wellDepth, date: el.fact?.startDate} }).filter(el => el.key) setDataFact(factData) const predictData = operations.map(el => { return {key: el.predict?.id, depth: el.predict?.wellDepth, date: el.predict?.startDate} }).filter(el => el.key) setDataForecast(predictData) }, null, `Не удалось загрузить операции по скважине "${selectedWellId}"`, ); } }, [selectedWellId]); const closeModal = () => { setIsModalVisible(false) } calcAndUpdateStatsBySections(wellsStat ?? [], [ "factStart", "factEnd", "periodPlan", "periodFact", "rateOfPenetrationPlan", "rateOfPenetrationFact", "routeSpeedPlan", "routeSpeedFact", "notProductiveTime", ]); useEffect(() => { let tableData = clusterData.statsWells?.map((well) => { return { key: well.id, id: well.id, caption: well.caption, wellType: well.wellType, factStart: new Date(well.total.fact.start).toLocaleString(), factEnd: new Date(well.total.fact.end).toLocaleString(), periodPlan: ( (new Date(well.total.plan.end) - new Date(well.total.plan.start)) / (1000 * 60 * 60 * 24) ).toFixed(2), periodFact: ( (new Date(well.total.fact.end) - new Date(well.total.fact.start)) / (1000 * 60 * 60 * 24) ).toFixed(2), rateOfPenetrationPlan: well.total.plan.rop.toFixed(2), rateOfPenetrationFact: well.total.fact.rop.toFixed(2), routeSpeedPlan: well.total.plan.routeSpeed.toFixed(2), routeSpeedFact: well.total.fact.routeSpeed.toFixed(2), notProductiveTimePlan: well.total.plan.nonProductiveHours.toFixed(2), notProductiveTimeFact: well.total.fact.nonProductiveHours.toFixed(2), companies: well.companies, }; }); setWellsStat(tableData); }, [id, clusterData]); const columns = [ makeTextColumn("скв №", "caption", null, null, (_, item) => ( {item.caption} )), makeTextColumn("Тип скв.", "wellType", filtersWellsType), makeGroupColumn("Фактические сроки", [ makeNumericColumn("начало", "factStart"), makeNumericColumn("окончание", "factEnd"), ]), makeNumericColumnPlanFact("Продолжительность", "period", filtersMinMax, makeFilterMinMaxFunction), makeNumericColumnPlanFact("МСП", "rateOfPenetration", filtersMinMax, makeFilterMinMaxFunction), makeNumericColumnPlanFact("Рейсовая скорость", "routeSpeed", filtersMinMax, makeFilterMinMaxFunction), makeNumericColumnPlanFact("НПВ, сут", "notProductiveTime", filtersMinMax, makeFilterMinMaxFunction), { title: "График глубина-день", render: (_, item) => , }, { title: "Таблица по операциям", render: (_) => , }, { title: "Подрядчики", key: "companies", dataIndex: "companies", render: (item) => item.map((company) => {company.caption}), }, ]; return (
record.id} /> ); }