forked from ddrilling/asb_cloud_front
Removed WellStats' filters config from Table to WellStats
This commit is contained in:
parent
e063fac9ad
commit
f6e896d8f3
@ -74,17 +74,6 @@ export const makeColumnsPlanFact = (title:string|any, key:string|string[], colum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const maxPrefix = "isMax"
|
|
||||||
const minPrefix = "isMin"
|
|
||||||
|
|
||||||
export const makeFilterMinMaxFunction = (key: string | number) => (filterValue: string | number,
|
|
||||||
dataItem: any) =>
|
|
||||||
filterValue === "max"
|
|
||||||
? dataItem[maxPrefix + key]
|
|
||||||
: filterValue === "min"
|
|
||||||
? dataItem[minPrefix + key]
|
|
||||||
: false
|
|
||||||
|
|
||||||
export const makeFilterTextMatch = (key: string | number) => (filterValue: string | number, dataItem: any) =>
|
export const makeFilterTextMatch = (key: string | number) => (filterValue: string | number, dataItem: any) =>
|
||||||
dataItem[key] === filterValue
|
dataItem[key] === filterValue
|
||||||
|
|
||||||
@ -118,20 +107,20 @@ export const makeTextColumn = (title: any, dataIndex: any, filters: any, sorter:
|
|||||||
...other
|
...other
|
||||||
})
|
})
|
||||||
|
|
||||||
export const makeNumericColumn = (title: any, dataIndex: any, filters: any, width: string) => ({
|
export const makeNumericColumn = (title: any, dataIndex: any, filters: any, filterDelegate: (key: string | number) => any, width: string) => ({
|
||||||
title: title,
|
title: title,
|
||||||
dataIndex: dataIndex,
|
dataIndex: dataIndex,
|
||||||
key: dataIndex,
|
key: dataIndex,
|
||||||
filters: filters,
|
filters: filters,
|
||||||
onFilter: makeFilterMinMaxFunction(dataIndex),
|
onFilter: filterDelegate ? filterDelegate(dataIndex) : null,
|
||||||
sorter: makeNumericSorter(dataIndex),
|
sorter: makeNumericSorter(dataIndex),
|
||||||
width: width
|
width: width
|
||||||
})
|
})
|
||||||
|
|
||||||
export const makeNumericColumnPlanFact = (title: any, dataIndex: any, filters: any, width: string) =>
|
export const makeNumericColumnPlanFact = (title: any, dataIndex: any, filters: any, filterDelegate: (key: string | number) => any, width: string) =>
|
||||||
makeGroupColumn( title, [
|
makeGroupColumn( title, [
|
||||||
makeNumericColumn('п', dataIndex + 'Plan', filters, width),
|
makeNumericColumn('п', dataIndex + 'Plan', filters, filterDelegate, width),
|
||||||
makeNumericColumn('ф', dataIndex + 'Fact', filters, width),
|
makeNumericColumn('ф', dataIndex + 'Fact', filters, filterDelegate, width),
|
||||||
])
|
])
|
||||||
|
|
||||||
type PaginationContainer = {
|
type PaginationContainer = {
|
||||||
|
@ -6,7 +6,8 @@ import {
|
|||||||
makeTextColumn,
|
makeTextColumn,
|
||||||
makeNumericColumnPlanFact
|
makeNumericColumnPlanFact
|
||||||
} from "../../components/Table";
|
} from "../../components/Table";
|
||||||
import { calcAndUpdateStatsBySections } from "./index";
|
import { calcAndUpdateStatsBySections, makeFilterMinMaxFunction } from "./functions";
|
||||||
|
|
||||||
|
|
||||||
const filtersMinMax = [
|
const filtersMinMax = [
|
||||||
{
|
{
|
||||||
@ -62,29 +63,33 @@ const ModalWindowButton = ({
|
|||||||
const columns = [
|
const columns = [
|
||||||
makeTextColumn("скв №", "caption"),
|
makeTextColumn("скв №", "caption"),
|
||||||
makeTextColumn("Секция", "sectionType", filtersSectionsType),
|
makeTextColumn("Секция", "sectionType", filtersSectionsType),
|
||||||
makeNumericColumnPlanFact("Глубина", "sectionWellDepth", filtersMinMax),
|
makeNumericColumnPlanFact("Глубина", "sectionWellDepth", filtersMinMax, makeFilterMinMaxFunction),
|
||||||
makeNumericColumnPlanFact(
|
makeNumericColumnPlanFact(
|
||||||
"Продолжительность",
|
"Продолжительность",
|
||||||
"sectionBuildDays",
|
"sectionBuildDays",
|
||||||
filtersMinMax
|
filtersMinMax,
|
||||||
|
makeFilterMinMaxFunction
|
||||||
), //Цикл строительства
|
), //Цикл строительства
|
||||||
makeNumericColumnPlanFact("МСП", "sectionRateOfPenetration", filtersMinMax),
|
makeNumericColumnPlanFact("МСП", "sectionRateOfPenetration", filtersMinMax, makeFilterMinMaxFunction),
|
||||||
makeNumericColumnPlanFact(
|
makeNumericColumnPlanFact(
|
||||||
"Рейсовая скорость",
|
"Рейсовая скорость",
|
||||||
"sectionRouteSpeed",
|
"sectionRouteSpeed",
|
||||||
filtersMinMax
|
filtersMinMax,
|
||||||
|
makeFilterMinMaxFunction
|
||||||
),
|
),
|
||||||
makeNumericColumnPlanFact("Спуск КНБК", "sectionBhaDownSpeed", filtersMinMax), //Скорость спуска КНБК
|
makeNumericColumnPlanFact("Спуск КНБК", "sectionBhaDownSpeed", filtersMinMax, makeFilterMinMaxFunction), //Скорость спуска КНБК
|
||||||
makeNumericColumnPlanFact("Подъем КНБК", "sectionBhaUpSpeed", filtersMinMax), //Скорость подъема КНБК
|
makeNumericColumnPlanFact("Подъем КНБК", "sectionBhaUpSpeed", filtersMinMax, makeFilterMinMaxFunction), //Скорость подъема КНБК
|
||||||
makeNumericColumnPlanFact(
|
makeNumericColumnPlanFact(
|
||||||
"Скорость спуска ОК",
|
"Скорость спуска ОК",
|
||||||
"sectionCasingDownSpeed",
|
"sectionCasingDownSpeed",
|
||||||
filtersMinMax
|
filtersMinMax,
|
||||||
|
makeFilterMinMaxFunction
|
||||||
),
|
),
|
||||||
makeNumericColumnPlanFact(
|
makeNumericColumnPlanFact(
|
||||||
"НПВ, сут",
|
"НПВ, сут",
|
||||||
"nonProductiveTime",
|
"nonProductiveTime",
|
||||||
filtersMinMax,
|
filtersMinMax,
|
||||||
|
makeFilterMinMaxFunction,
|
||||||
"70px"
|
"70px"
|
||||||
),
|
),
|
||||||
{
|
{
|
||||||
@ -143,26 +148,22 @@ export default function ClusterSections({ clusterData }) {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let rows = [];
|
let rows = [];
|
||||||
|
|
||||||
clusterData.statsWells?.forEach((el) => {
|
clusterData.statsWells?.forEach((well) => {
|
||||||
el.sections.forEach((section) => {
|
well.sections.forEach((section) => {
|
||||||
let row = {
|
let row = {
|
||||||
key: el.caption + section.id,
|
key: well.caption + section.id,
|
||||||
id: el.caption + section.id,
|
id: well.caption + section.id,
|
||||||
caption: el.caption,
|
caption: well.caption,
|
||||||
sectionType: section.caption,
|
sectionType: section.caption,
|
||||||
sectionWellDepthPlan: section.plan.wellDepthEnd,
|
sectionWellDepthPlan: section.plan.wellDepthEnd,
|
||||||
sectionWellDepthFact: section.fact.wellDepthEnd,
|
sectionWellDepthFact: section.fact.wellDepthEnd,
|
||||||
sectionBuildDaysPlan: (
|
sectionBuildDaysPlan: (
|
||||||
Math.abs(
|
(new Date(section.plan.end) - new Date(section.plan.start)) /
|
||||||
new Date(section.plan.start) - new Date(section.plan.end)
|
(1000 * 60 * 60 * 24)
|
||||||
) /
|
|
||||||
(1000 * 60 * 60 * 24)
|
|
||||||
).toFixed(2),
|
).toFixed(2),
|
||||||
sectionBuildDaysFact: (
|
sectionBuildDaysFact: (
|
||||||
Math.abs(
|
(new Date(section.fact.end) - new Date(section.fact.start)) /
|
||||||
new Date(section.fact.start) - new Date(section.fact.end)
|
(1000 * 60 * 60 * 24)
|
||||||
) /
|
|
||||||
(1000 * 60 * 60 * 24)
|
|
||||||
).toFixed(2),
|
).toFixed(2),
|
||||||
sectionRateOfPenetrationPlan: section.plan.rop.toFixed(2),
|
sectionRateOfPenetrationPlan: section.plan.rop.toFixed(2),
|
||||||
sectionRateOfPenetrationFact: section.fact.rop.toFixed(2),
|
sectionRateOfPenetrationFact: section.fact.rop.toFixed(2),
|
||||||
@ -176,7 +177,7 @@ export default function ClusterSections({ clusterData }) {
|
|||||||
sectionCasingDownSpeedFact: section.fact.casingDownSpeed.toFixed(2),
|
sectionCasingDownSpeedFact: section.fact.casingDownSpeed.toFixed(2),
|
||||||
nonProductiveTimePlan: section.plan.nonProductiveHours.toFixed(2),
|
nonProductiveTimePlan: section.plan.nonProductiveHours.toFixed(2),
|
||||||
nonProductiveTimeFact: section.fact.nonProductiveHours.toFixed(2),
|
nonProductiveTimeFact: section.fact.nonProductiveHours.toFixed(2),
|
||||||
companies: el.companies,
|
companies: well.companies,
|
||||||
};
|
};
|
||||||
|
|
||||||
rows.push(row);
|
rows.push(row);
|
||||||
|
@ -8,7 +8,7 @@ import {
|
|||||||
makeNumericColumn,
|
makeNumericColumn,
|
||||||
makeNumericColumnPlanFact
|
makeNumericColumnPlanFact
|
||||||
} from "../../components/Table";
|
} from "../../components/Table";
|
||||||
import { calcAndUpdateStatsBySections } from "./index";
|
import { calcAndUpdateStatsBySections, makeFilterMinMaxFunction } from "./functions";
|
||||||
import { invokeWebApiWrapperAsync } from '../../components/factory';
|
import { invokeWebApiWrapperAsync } from '../../components/factory';
|
||||||
import { WellOperationStatService } from '../../services/api';
|
import { WellOperationStatService } from '../../services/api';
|
||||||
import ChartDepthToDay from '../../components/charts/ChartDepthToDay';
|
import ChartDepthToDay from '../../components/charts/ChartDepthToDay';
|
||||||
@ -91,29 +91,29 @@ export default function ClusterWells({ clusterData }) {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let tableData = clusterData.statsWells?.map((el) => {
|
let tableData = clusterData.statsWells?.map((well) => {
|
||||||
return {
|
return {
|
||||||
key: el.id,
|
key: well.id,
|
||||||
id: el.id,
|
id: well.id,
|
||||||
caption: el.caption,
|
caption: well.caption,
|
||||||
wellType: el.wellType,
|
wellType: well.wellType,
|
||||||
factStart: new Date(el.total.fact.start).toLocaleString(),
|
factStart: new Date(well.total.fact.start).toLocaleString(),
|
||||||
factEnd: new Date(el.total.fact.end).toLocaleString(),
|
factEnd: new Date(well.total.fact.end).toLocaleString(),
|
||||||
periodPlan: (
|
periodPlan: (
|
||||||
new Date(el.total.plan.start) - new Date(el.total.plan.end) /
|
(new Date(well.total.plan.end) - new Date(well.total.plan.start)) /
|
||||||
(1000 * 60 * 60 * 24)
|
(1000 * 60 * 60 * 24)
|
||||||
).toFixed(2),
|
).toFixed(2),
|
||||||
periodFact: (
|
periodFact: (
|
||||||
new Date(el.total.fact.start) - new Date(el.total.fact.end) /
|
(new Date(well.total.fact.end) - new Date(well.total.fact.start)) /
|
||||||
(1000 * 60 * 60 * 24)
|
(1000 * 60 * 60 * 24)
|
||||||
).toFixed(2),
|
).toFixed(2),
|
||||||
rateOfPenetrationPlan: el.total.plan.rop.toFixed(2),
|
rateOfPenetrationPlan: well.total.plan.rop.toFixed(2),
|
||||||
rateOfPenetrationFact: el.total.fact.rop.toFixed(2),
|
rateOfPenetrationFact: well.total.fact.rop.toFixed(2),
|
||||||
routeSpeedPlan: el.total.plan.routeSpeed.toFixed(2),
|
routeSpeedPlan: well.total.plan.routeSpeed.toFixed(2),
|
||||||
routeSpeedFact: el.total.fact.routeSpeed.toFixed(2),
|
routeSpeedFact: well.total.fact.routeSpeed.toFixed(2),
|
||||||
notProductiveTimePlan: el.total.plan.nonProductiveHours.toFixed(2),
|
notProductiveTimePlan: well.total.plan.nonProductiveHours.toFixed(2),
|
||||||
notProductiveTimeFact: el.total.fact.nonProductiveHours.toFixed(2),
|
notProductiveTimeFact: well.total.fact.nonProductiveHours.toFixed(2),
|
||||||
companies: el.companies,
|
companies: well.companies,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -129,10 +129,10 @@ export default function ClusterWells({ clusterData }) {
|
|||||||
makeNumericColumn("начало", "factStart"),
|
makeNumericColumn("начало", "factStart"),
|
||||||
makeNumericColumn("окончание", "factEnd"),
|
makeNumericColumn("окончание", "factEnd"),
|
||||||
]),
|
]),
|
||||||
makeNumericColumnPlanFact("Продолжительность", "period", filtersMinMax),
|
makeNumericColumnPlanFact("Продолжительность", "period", filtersMinMax, makeFilterMinMaxFunction),
|
||||||
makeNumericColumnPlanFact("МСП", "rateOfPenetration", filtersMinMax),
|
makeNumericColumnPlanFact("МСП", "rateOfPenetration", filtersMinMax, makeFilterMinMaxFunction),
|
||||||
makeNumericColumnPlanFact("Рейсовая скорость", "routeSpeed", filtersMinMax),
|
makeNumericColumnPlanFact("Рейсовая скорость", "routeSpeed", filtersMinMax, makeFilterMinMaxFunction),
|
||||||
makeNumericColumnPlanFact("НПВ, сут", "notProductiveTime", filtersMinMax),
|
makeNumericColumnPlanFact("НПВ, сут", "notProductiveTime", filtersMinMax, makeFilterMinMaxFunction),
|
||||||
{
|
{
|
||||||
title: "График глубина-день",
|
title: "График глубина-день",
|
||||||
render: (_, item) => <Button onClick={()=> {
|
render: (_, item) => <Button onClick={()=> {
|
||||||
|
44
src/pages/Cluster/functions.jsx
Normal file
44
src/pages/Cluster/functions.jsx
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
const maxPrefix = "isMax"
|
||||||
|
const minPrefix = "isMin"
|
||||||
|
|
||||||
|
export const makeFilterMinMaxFunction = (key) => (filterValue,
|
||||||
|
dataItem) =>
|
||||||
|
filterValue === "max"
|
||||||
|
? dataItem[maxPrefix + key]
|
||||||
|
: filterValue === "min"
|
||||||
|
? dataItem[minPrefix + key]
|
||||||
|
: false
|
||||||
|
|
||||||
|
export const calcAndUpdateStats = (data, keys) => {
|
||||||
|
let mins = {}
|
||||||
|
let maxs = {}
|
||||||
|
|
||||||
|
keys.forEach((key) => {
|
||||||
|
maxs[key] = Number.MIN_VALUE
|
||||||
|
mins[key] = Number.MAX_VALUE
|
||||||
|
})
|
||||||
|
|
||||||
|
data.forEach((item) => {
|
||||||
|
keys.forEach((key) => {
|
||||||
|
if (mins[key] > item[key]) mins[key] = item[key]
|
||||||
|
|
||||||
|
if (maxs[key] < item[key]) maxs[key] = item[key]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
for (let i = 0; i < data.length; i++) {
|
||||||
|
keys.forEach((key) => {
|
||||||
|
data[i][maxPrefix + key] = data[i][key] === maxs[key]
|
||||||
|
data[i][minPrefix + key] = data[i][key] === mins[key]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const calcAndUpdateStatsBySections = (data, keys) => {
|
||||||
|
const sectionTypes = new Set()
|
||||||
|
data.forEach((item) => sectionTypes.add(item.sectionType))
|
||||||
|
sectionTypes.forEach(sectionType => {
|
||||||
|
const filteredBySectionData = data.filter((item) => item.sectionType === sectionType)
|
||||||
|
calcAndUpdateStats(filteredBySectionData, keys)
|
||||||
|
})
|
||||||
|
}
|
@ -9,42 +9,6 @@ import { WellOperationStatService } from "../../services/api";
|
|||||||
|
|
||||||
const { Content } = Layout;
|
const { Content } = Layout;
|
||||||
|
|
||||||
const maxPrefix = "isMax"
|
|
||||||
const minPrefix = "isMin"
|
|
||||||
|
|
||||||
export const calcAndUpdateStats = (data, keys) => {
|
|
||||||
let mins = {}
|
|
||||||
let maxs = {}
|
|
||||||
|
|
||||||
keys.forEach((key) => {
|
|
||||||
maxs[key] = Number.MIN_VALUE
|
|
||||||
mins[key] = Number.MAX_VALUE
|
|
||||||
})
|
|
||||||
|
|
||||||
data.forEach((item) => {
|
|
||||||
keys.forEach((key) => {
|
|
||||||
if (mins[key] > item[key]) mins[key] = item[key]
|
|
||||||
|
|
||||||
if (maxs[key] < item[key]) maxs[key] = item[key]
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
for (let i = 0; i < data.length; i++) {
|
|
||||||
keys.forEach((key) => {
|
|
||||||
data[i][maxPrefix + key] = data[i][key] === maxs[key]
|
|
||||||
data[i][minPrefix + key] = data[i][key] === mins[key]
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const calcAndUpdateStatsBySections = (data, keys) => {
|
|
||||||
const sectionTypes = new Set()
|
|
||||||
data.forEach((item) => sectionTypes.add(item.sectionType))
|
|
||||||
sectionTypes.forEach(sectionType => {
|
|
||||||
const filteredBySectionData = data.filter((item) => item.sectionType === sectionType)
|
|
||||||
calcAndUpdateStats(filteredBySectionData, keys)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function Cluster() {
|
export default function Cluster() {
|
||||||
let { idClaster, tab } = useParams();
|
let { idClaster, tab } = useParams();
|
||||||
|
Loading…
Reference in New Issue
Block a user