This commit is contained in:
Андрей Дувакин 2024-10-07 21:29:58 +05:00
parent e36d654615
commit 094c1749e3
2 changed files with 63 additions and 16 deletions

View File

@ -560,3 +560,33 @@ export const calculateTotalOrder = async (deadline, robotsCount) => {
throw error; 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;
}
};

View File

@ -1,5 +1,9 @@
import React, { useState, useEffect } from "react"; 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 { useParams } from "react-router-dom";
import { getCoordinates } from "../geocoder.jsx"; import { getCoordinates } from "../geocoder.jsx";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
@ -28,7 +32,7 @@ const DeliveryOrderDetails = () => {
const [route, setRoute] = useState([]); const [route, setRoute] = useState([]);
const [totalCost, setTotalCost] = useState(0); const [totalCost, setTotalCost] = useState(0);
const [truckCount, setTruckCount] = useState(0); const [truckCount, setTruckCount] = useState(0);
const [truckName, settruckName] = useState(""); const [truckName, setTruckName] = useState("");
const navigate = useNavigate(); const navigate = useNavigate();
useEffect(() => { useEffect(() => {
@ -42,7 +46,7 @@ const DeliveryOrderDetails = () => {
); );
setTotalCost(deliveryOrderDetails.price); setTotalCost(deliveryOrderDetails.price);
setTruckCount(deliveryOrderDetails.count_trucks); setTruckCount(deliveryOrderDetails.count_trucks);
settruckName(deliveryOrderDetails.truck_name); setTruckName(deliveryOrderDetails.truck_name);
const accessories = await getDeliveryAccessories(deliveryOrderId); const accessories = await getDeliveryAccessories(deliveryOrderId);
setDeliveryAccessories(accessories); setDeliveryAccessories(accessories);
@ -65,23 +69,36 @@ const DeliveryOrderDetails = () => {
const fullCoordinates = [...coords, DELIVERY_CITY]; const fullCoordinates = [...coords, DELIVERY_CITY];
if (fullCoordinates.length > 1) { if (
const waypoints = fullCoordinates !deliveryOrderDetails.route ||
.map(({ longitude, latitude }) => `${longitude},${latitude}`) deliveryOrderDetails.estimated_route_time_in_minutes === null
.join(";"); ) {
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 response = await fetch(routeUrl);
const data = await response.json(); const data = await response.json();
if (data.routes && data.routes.length > 0) { if (data.routes && data.routes.length > 0) {
const geometry = data.routes[0].geometry; const geometry = data.routes[0].geometry;
const decodedRoute = polyline.decode(geometry); const decodedRoute = polyline.decode(geometry);
setRoute(decodedRoute); setRoute(decodedRoute);
const duration = data.routes[0].duration; const duration = data.routes[0].duration;
console.log(`Время в пути: ${duration / 60} минут`);
await updateDeliveryOrderRoute(
deliveryOrderId,
duration / 60,
decodedRoute
);
}
} }
} else {
const decodedRoute = deliveryOrderDetails.route;
setRoute(decodedRoute);
} }
} catch (error) { } catch (error) {
if (error.response && error.response.status === 401) { if (error.response && error.response.status === 401) {