Автоматизация отдела доставки с помощью PHP и JavaScript

Данный скрипт легко установить на свой хостинг, поддерживающий PHP, или использовать локально с помощью эмуляторов PHP типа Denwer. Вы сможете при помощи открытого API Яндекс.Карт составлять оптимальный маршрут для своих курьеров, будете знать требуемое время и общий километраж.

На написание данной статьи меня сподвигнул этот стартап:

Вспомнил, что когда то давно, когда у меня были свои водители для доставки по Ростов-на-Дону, сделал тогда себе нехитрый скрипт (php + javascript) для составления оптимального плана доставки, который при необходимости легко разделить на нескольких водителей.

Скачиваете дистрибутив (php + javascript):

И заливаете все содержимое к себе на сайт в отдельную папку, скажем в папку route, далее в адресной строке браузера набираете ваш_сайт.ru/route/, появится такое окно:

Загружаете csv файл c кодировкой utf-8, его в excel можно сделать, нажав "сохранить как" и выбрав там "Текст CSV(.csv)".

В этом списке должно быть всего два поля, полный адрес (включая город) и время стоянки по адресу в минутах. Первой записью должен быть адрес вашего склада, остальные адреса в произвольном порядке. Я например такой список формировал автоматом своей crm.

Нажав кнопку "найти оптимальный маршрут", вы через минуту работы javascript кода получите такой результат:

Ниже будет список оптимальной последовательности адресов:

Можно кликнуть по ссылке "открыть маршрут" и в режиме навигатора начать двигаться по адресам.

Этим скриптом я также начислял водителям компенсацию за использование их автомобиля, заранее рассчитав с конкретным водителем стоимость одного км пробега, исходя из расхода топлива по городу и стоимости планового ТО.

0
92 комментария
Написать комментарий...
Артем Таранов

2к18 который мы заслужили:
* Код в зипке
* Denwer
* Инструкция как получить csv в нужной кодировке
---
К автору претензий никаких, понятно что он не разработчик, и что его творение решает бизнес-задачу и это хорошо. Просто забавно :)

Ответить
Развернуть ветку
Денис Демидов
Автор

Не стреляйте в музыканта, играю как умею )))

Ответить
Развернуть ветку
7 комментариев
rayslava

* Никак пререквезитов
* Не нужно ставить ноду
* Не нужны тайные знания по запуску
* Просто распаковал и работает

Да эта программа лучше, чем 95% творений сегодняшних "профессиональных программистов"

Ответить
Развернуть ветку
Денис Демидов
Автор

Да и давно это было, дата последней правки 26.06.2013, но работает, тока проверял.

Ответить
Развернуть ветку
Евгений Захарченко

это был сарказм? тогда расскажите как правильно и модно.
1) код в зипке. в чем здесь подвох. я в "облаках" не летаю. и на github не выкладываю.
2) денвер - обычный локальный сервер как и другие. буквально на днях обработал на нем базу ФИАС, а это несколько гигобайт.
3) Это проблема бесконечна. win, koi, utf
Я брал на себя работу по обслуживанию сайтов. это не забавно и это 2к18

Ответить
Развернуть ветку
5 комментариев
Chyvakoff

Клавиша с 0 на клавиатуре отвалилась?

Ответить
Развернуть ветку
Роман Сопов

Denwer ещё жив??? о_О

Ответить
Развернуть ветку
Василий Водокачкин

А я каждый раз вспоминаю другого Денвера:

Ответить
Развернуть ветку
Денис Демидов
Автор

Сайт работает
http://www.denwer.ru/
А что сейчас лучше для эмуляции сервака на локалке?

Ответить
Развернуть ветку
18 комментариев
Денис Демидов
Автор

У меня живет )))
Пока справляется, зачем менять?

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Василий Пупкин

тут скорее всего придется яндексу заплатить еще
https://tech.yandex.ru/maps/commercial/

Ответить
Развернуть ветку
1 комментарий
Денис Демидов
Автор

Я не против))) пилите стартап и выкладывайте отчет))

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Egor Gulyaev

Exel- это как excel, но только короче

Ответить
Развернуть ветку
Денис Демидов
Автор

Спасибо)), поправил.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Kondin Dmitriy

Что же вы так сразу исходники на стол, архивчики...
Надо было пилит презу, считать рынок и заявку во фри, пару лямов не лишние! )

Ответить
Развернуть ветку
Денис Демидов
Автор

Непутевый)))
Но вообще такой скрипт напишит любой программист за пару часава, а вот на всякие фри нужно посевные брать вместе с бизнес ангелом.
Вообще удивлен что статья с простым скриптом стала такой популярной, тут с месяц наверное обмозговывал вот эту:
https://vc.ru/future/45632-pochemu-tramp-priblizhaet-bezuslovnyy-bazovyy-dohod-a-putin-otdalyaet-i-prichem-tut-internet-torgovlya
И эффект в разы меньше, а эту вчера за час накатал, включая проверку самого скрипта, так как давно им не пользовался.

Ответить
Развернуть ветку
Nikolay Kenig

У меня тоже похожее есть.
На досуге создал сервис Доставки dostavka23.ru Но я его счас не использую :)
Пользователь( которому нужно например перевезти плюшки и вкусняшки ) ставит точки откуда и куда вести груз и ставит цену которую готов заплатить. При помощи яндекса рисуется маршрут. Ну а исполнитель (например газелька) выбирает лучшие заказы и перевозит. Все довольны :)

Ответить
Развернуть ветку
Артём Лисовский

что-то пошло не так видимо.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Денис Демидов
Автор

Как вариант, посмотреть как javascript работает)))

Ответить
Развернуть ветку
Максим Федоров

Почему-то никто не сказал про Composer, почему библиотека распространяется вне ракетного менеджера?

Ответить
Развернуть ветку
Сергей Бондаренко

Видимо потому что человек не является разработчиком и просто бесплатно поделился тем, что делал для себя по-быстрому, а дареному коню в зубы не смотрят.

Ответить
Развернуть ветку
Пользователь Удален

Почему все написали про composer но никто не взял и не сделал как надо)

Ответить
Развернуть ветку
Никита Евдокимов

Денис, спасибо за статью!

Ответить
Развернуть ветку
Денис Демидов
Автор

Пожалуйста

Ответить
Развернуть ветку
Sam Beckett

Эмулятор PHP Deneer, ясно-понятно

Ответить
Развернуть ветку
Денис Демидов
Автор

Denwer! Правильнее конечно было написать локальный сервер (Apache, PHP, MySQL, Perl и т.д.)

Ответить
Развернуть ветку
8 комментариев
Василий Пупкин

мне вот нужно разбить N адресов с временными окнами на несколько машин, а у вас только на одну, Как бы допилить ваш скрипт

VRP with Time Windows, VRPTW
http://rain.ifmo.ru/cat/view.php/theory/unsorted/vrp-2006

Задачи маршрутизации транспорта (VRP) лежат на пересечении двух хорошо изученных задач.
- Задача коммивояжера (Traveling Salesman Problem, TSP)
- Задача об упаковке рюкзака (Bin Packing Problem, BPP)

Пока нашел решение на C (используется алгоритм имитации отжига)
https://github.com/radkasprzak/VRPTW_simulated_annealing

Ответить
Развернуть ветку
Денис Демидов
Автор

Берите мой скрипт и допиливайте, заодно поправите свой javascript, можно вообще так поправить, что будет голый javascript без необходимости php и эмуляции сервера, можно будет на компе использовать через браузер.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Денис Демидов
Автор

Это к этим ребятам:
https://vc.ru/services/45973-transportnye-kompanii-do-sih-por-planiruyut-marshruty-na-bumage-ili-v-excel-fayle?ref=vc.ru
А если у вас пара-тройка курьеров, то этого скрипта хватит с головой, особенно если его прикрутить напрямую к своей crm, чтоб без всяких csv файлов

Ответить
Развернуть ветку
Denis Kiselev

Хорошая задача для многофакторной процедурной оптимизации!

Вам бы найти людей, кто шарит в таком классе задач, и можно съэкономить на SAP

Ответить
Развернуть ветку
1 комментарий
Глеб Шубин

Денис, я прочитал Вашу статью на тему безусловного базового дохода. Меня заинтересовала эта тема. Могу ли я задать Вам пару вопросов в вк? Надеюсь Вы ответите)

Ответить
Развернуть ветку
Денис Демидов
Автор

Я в вк не бываю, тут пишите

Ответить
Развернуть ветку
4 комментария
Mikhail Zakaluzhnyy

а скриптик то не работает.... бегунок моргает, но дальше не проходит

Ответить
Развернуть ветку
Денис Демидов
Автор

Сегодня вообще походу трабла с яндекс картами, у меня сейчас на сайте не работает даже определение города через их api, так что все норм, починят и будет работать

Ответить
Развернуть ветку
3 комментария
Денис Демидов
Автор

Вчера проверял работает, много адресов загружаете? Пишите их как указано в примере?
На всякий случай еще и в яндексе авторизуйтесь, все таки через их API работа основная идет.

Ответить
Развернуть ветку
Денис Демидов
Автор

Сколько адресов пробовали? Чем больше адресов, тем больше javascript работает на вашей машине перебирая разные варианты. Интернет нормальный еще нужен. Также попробуйте браузер другой, хотя я вчера даже на эксплорере 11 пробовал, на нем если что работает то потом 100% и на других будет работать.

Ответить
Развернуть ветку
Денис Демидов
Автор

Скриншоты которые в статье, именно вчера и сделал в ходе тестирования.

Ответить
Развернуть ветку
Денис Демидов
Автор

Сейчас еще раз сам проверил и правда, не работает, яндекс данные не отдает, может у них там что-то ремонтируют, думаю поправят и он заработает, так как использует открытый API яндекс.карт

Ответить
Развернуть ветку
Evgeny Latyshev

Денис, а подобная автоматизация с Гуглом может работать? не пробовали?

Ответить
Развернуть ветку
Денис Демидов
Автор

Даже не знаю, не разбирался с API гугловских карт

Ответить
Развернуть ветку
Георгий Рыбаков

Вопрос хоть и не мне, попробую ответить. У Google есть Directions API. (https://developers.google.com/maps/documentation/directions/intro#DirectionsRequests) Через него можно прокладывать маршруты между точками, в т.ч. и оптимальные (при указании optimize:true). Это относится к автомобильным, пешеходным и прочим. Из ограничений: количество запросов в сутки на ключ ограничено (при бесплатном использовании). Из плюшек: есть либы для работы под все основные ЯП.

Когда девушка работала по этой теме, запилил решение на Django + bootstrap/jQuery. Интересовали пешие сотрудники (полевые), поэтому тогда остановился именно на API от Google. Расчет маршрутов по дням (в разные дни - разные маршруты), вывод времени перемещения между точками и расстояние). Расчет как от заданной (первой) начальной точки, так и автоперебор для определения стартовых точек (с привязкой к ближайшим станциям метро).

Можно посмотреть: http://mroute.pythonanywhere.com, логопасс: tanya:tanya (если при расчете будет падать - не пугаться, проблемы с адресами - есть нюансы).

Репо открыто: https://github.com/grybakov/MerchRoutes, по аналогии можно запилить под свое.

Ответить
Развернуть ветку
89 комментариев
Раскрывать всегда