From 094c1749e36a7ed5bd70768fafd8f441a3b0bcae Mon Sep 17 00:00:00 2001 From: andrei Date: Mon, 7 Oct 2024 21:29:58 +0500 Subject: [PATCH] ._. --- src/api.jsx | 30 ++++++++++++++++++ src/pages/DeliveryOrderDetails.jsx | 49 ++++++++++++++++++++---------- 2 files changed, 63 insertions(+), 16 deletions(-) diff --git a/src/api.jsx b/src/api.jsx index eb24087..0480fd9 100755 --- a/src/api.jsx +++ b/src/api.jsx @@ -560,3 +560,33 @@ export const calculateTotalOrder = async (deadline, robotsCount) => { throw error; } }; + +export const updateDeliveryOrderRoute = async ( + deliveryOrderId, + estimatedRouteTime, + route +) => { + console.log({ + estimated_route_time_in_minutes: estimatedRouteTime, + route: route, + }); + try { + const response = await axios.put( + `${API_URL}/delivery-orders/${deliveryOrderId}/route`, + { + estimated_route_time_in_minutes: estimatedRouteTime, + route: route, + }, + { + headers: { + Authorization: `Bearer ${getAuthToken()}`, + "Content-Type": "application/json", + }, + } + ); + return response.data; + } catch (error) { + console.error("Ошибка при обновлении маршрута подзаказа:", error); + throw error; + } +}; diff --git a/src/pages/DeliveryOrderDetails.jsx b/src/pages/DeliveryOrderDetails.jsx index f9ed2ef..5dd3027 100644 --- a/src/pages/DeliveryOrderDetails.jsx +++ b/src/pages/DeliveryOrderDetails.jsx @@ -1,5 +1,9 @@ import React, { useState, useEffect } from "react"; -import { getDeliveryAccessories, getDeliveryOrderDetails } from "../api.jsx"; +import { + getDeliveryAccessories, + getDeliveryOrderDetails, + updateDeliveryOrderRoute, +} from "../api.jsx"; import { useParams } from "react-router-dom"; import { getCoordinates } from "../geocoder.jsx"; import { useNavigate } from "react-router-dom"; @@ -28,7 +32,7 @@ const DeliveryOrderDetails = () => { const [route, setRoute] = useState([]); const [totalCost, setTotalCost] = useState(0); const [truckCount, setTruckCount] = useState(0); - const [truckName, settruckName] = useState(""); + const [truckName, setTruckName] = useState(""); const navigate = useNavigate(); useEffect(() => { @@ -42,7 +46,7 @@ const DeliveryOrderDetails = () => { ); setTotalCost(deliveryOrderDetails.price); setTruckCount(deliveryOrderDetails.count_trucks); - settruckName(deliveryOrderDetails.truck_name); + setTruckName(deliveryOrderDetails.truck_name); const accessories = await getDeliveryAccessories(deliveryOrderId); setDeliveryAccessories(accessories); @@ -65,23 +69,36 @@ const DeliveryOrderDetails = () => { const fullCoordinates = [...coords, DELIVERY_CITY]; - if (fullCoordinates.length > 1) { - const waypoints = fullCoordinates - .map(({ longitude, latitude }) => `${longitude},${latitude}`) - .join(";"); + if ( + !deliveryOrderDetails.route || + deliveryOrderDetails.estimated_route_time_in_minutes === null + ) { + if (fullCoordinates.length > 1) { + const waypoints = fullCoordinates + .map(({ longitude, latitude }) => `${longitude},${latitude}`) + .join(";"); - const routeUrl = `https://router.project-osrm.org/route/v1/driving/${waypoints}?overview=full`; + const routeUrl = `https://router.project-osrm.org/route/v1/driving/${waypoints}?overview=full`; - const response = await fetch(routeUrl); - const data = await response.json(); + const response = await fetch(routeUrl); + const data = await response.json(); - if (data.routes && data.routes.length > 0) { - const geometry = data.routes[0].geometry; - const decodedRoute = polyline.decode(geometry); - setRoute(decodedRoute); - const duration = data.routes[0].duration; - console.log(`Время в пути: ${duration / 60} минут`); + if (data.routes && data.routes.length > 0) { + const geometry = data.routes[0].geometry; + const decodedRoute = polyline.decode(geometry); + setRoute(decodedRoute); + const duration = data.routes[0].duration; + + await updateDeliveryOrderRoute( + deliveryOrderId, + duration / 60, + decodedRoute + ); + } } + } else { + const decodedRoute = deliveryOrderDetails.route; + setRoute(decodedRoute); } } catch (error) { if (error.response && error.response.status === 401) {