Сервисы Денис Демидов
6 479

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

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

В закладки

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

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

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

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

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

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

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

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

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

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

#автоматизация_доставки #php #javascript #интернет_магазины #курьеры #открытое_по #логистика

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Денис Демидов", "author_type": "self", "tags": ["\u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0435_\u043f\u043e","\u043b\u043e\u0433\u0438\u0441\u0442\u0438\u043a\u0430","\u043a\u0443\u0440\u044c\u0435\u0440\u044b","\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442_\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u044b","\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f_\u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438","php","javascript"], "comments": 87, "likes": 78, "favorites": 150, "is_advertisement": false, "subsite_label": "services", "id": 46186, "is_wide": false, "is_ugc": true, "date": "Thu, 20 Sep 2018 21:22:04 +0300" }
{ "id": 46186, "author_id": 50686, "diff_limit": 1000, "urls": {"diff":"\/comments\/46186\/get","add":"\/comments\/46186\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/46186"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 200396 }

87 комментариев 87 комм.

Популярные

По порядку

Написать комментарий...
42

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

Ответить
30

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

Ответить
0

Ваш пример очень показателен. Еще много болей в процессах, которые не решены.
Например, я обнаружил что брать билет Самара-Бангкок выгоднее на 7тыс с носа если брать Самара-Внуково, такси, Домодедово-Бангкок. Возможно случайный читатель расскажет мне есть ли сервис, который умеет делать такое автоматом и не только в России, был бы благодарен. А пока приходится перебирать сотни вариантов, чтобы немного сэкономить, когда разница во времени не столь велика и критична.

Ответить
0

я вот все хотел сделать, нашел даже где данные по-белому взять, накидал прототипчик. да не уверен все, это ж с авиасейлз конкурировать всякими. оно мне надо?)

Ответить
1

Конечно надо, тока где лям другой баксов на раскрутку взять :((

Ответить
0

Если это единственная киллер фича то ее отследят и внедрят до того, как ваш проект станет хотя бы минимально конкурентным.

Ответить
1

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

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

Ответить
0

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

Ответить
0

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

Ответить
–1

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

Ответить
0

1. Потому что это моветон -- у всех современных пыхеров есть композер и через него стаятся библиотеки и также удаляются -- зачем возиться с зипами? файлами в нем и т.д... инструкции по установке еще искать и разгребать вот это все, мы же не в нулевых...

2. Ну понятное дело -- сервер же сервер, язык есть язык программиирования, но еще раз уточню -- в популярном сообществе есть разного уровня программисты и некоторые из команд, видеть такое -- блин, это просто гигиена, работаешь с таким Г -- потянешь его в другую работу, не дай бог в командную

В целом ваши замечания конечно понятны -- зачем делать так, если и так работает...
Но тут много разработчиков из другого поколения, а также много разработчиков из других языков, которые за такие поделки ОБОСНОВАННО думают, что у нас в языке плодится лишай

Ответить
0

Я ж без притензий.
Я хочу узнать как должен быть выглядить готовый продукт? В рамках топика
Как нужно выкладовать в паблиш, что бы потом тебя не загнобили

Ответить
0

На гитхаб выкладывайте и дело с концом. Кому надо, тот разберётся, а остальные и так найдут к чему придраться.

Ответить
0

Подождите. Я правильно понимаю, что вы здесь устраиваете сеанс стоматологии для бесплатного коня? Напишите как правильно, поделитесь с другими бесплатно, и тогда будем обсуждать.

Ответить
0

Какашка и в виде вылепленного коня не нужна никому.
Наличие какашки и публичное мнение о том, что какашка = какашка не является поводом для написания чего-либо :)

Ответить
4

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

Ответить
4

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

Ответить
14

OpenServer

Ответить
0

Спасибо, почитаю

Ответить
1

Лучше денвера. Давно под виндой именно под ним

Ответить
0

А чем конкретно лучше? Что там посмотреть в первую очередь?

Ответить
3

Это уже тяжелая техника для девелоперов )))

Ответить
1

скорее наоборот) просто чуть лучше надо разбираться чем две кнопки. три-четыре

Ответить
0

Докер - хорошо, но может напугать, да)

Хотя скачивание правильного образа и запуск - реально пара кликов

Ответить
0

Спасибо, чем он лучше чем denwer?
Он правда так устарел что нельзя им пользоваться?
У меня вроде справляется, или там нет чего-то сверхудобного?

Ответить
0

Ну - версии софта поновее, это существенно. Например, на некоторых хостингах нет php5 уже

Ответить
1

У меня есть проект, где адская смесь из 4.4 и 5.0, на 5.2 уже варнинги сыплятся.

Ответить
0

Для кода то - да, миграция на старшие версии софта - всегда риск breaking change словить. Я имел ввиду в основном, что если на хостингах свежие версии php, желательно и на них тестировать скрипты.

Но, вроде, php semver не исповедует - там вообще хз как версионирование сделано. Впрочем, я не в курсе!

Ответить
0

Спасибо, но пока не сталкивался что чего то у денвера не хватает, но все равно попробую.

Ответить
0

Да не принципиально - использование нового софта - это своеобразный фетиш ИТ индустрии. Часть - просто дань трендам или "ну так же лучше"

Ответить
0

А еще над женщинами смеемся )))

Ответить
1

MAMP лёгок в настройке и установке 👌🏻

Ответить
1

Реально легко и без заморочек - OpenServer, установили закинули проект в папку domains и все работает. А если нужно прямо по феншую то сейчас модно Docker, только на первых порах с ним много мороки - пока разберётесь как он устроен зима наступит))

Ответить
0

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

Ответить
2

Четко. ЗБС. Теперь в облако и продавать небольшим организациям в аренду.

Ответить
3

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

Ответить
0

Как вариант, сделать бесплатным и монетезировать рекламой, вроде лицензия яндекса это позволяет))

Ответить
1

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

Ответить
1

В облако сильно дорого станет - АПИ для построения маршрута у Яндекса бесплатно для очень небольшого количества запросов.

Ответить
3

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

Ответить
0

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

Ответить
0

Это как facebook и the facebook.

Ответить
2

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

Ответить
0

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

Ответить
2

Скачал на всякий случай. Какой случай? Не знаю...но автор красава, всё красиво расписал с картинками, объяснил, выложил, просто молодец пацан!

Ответить
0

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

Ответить
2

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

Ответить
0

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

Ответить
1

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

Ответить
2

Пожалуйста

Ответить
0

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

Ответить
2

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

Ответить
1

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

Ответить
1

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

Ответить
0

Да, потому что в серьезной статье такие ляпы недопустимы, сразу снижается уровень доверия к автору.

Ответить
3

Кто сказал что она серьезна? Просто выложил в свободный доступ свой скрипт, без претензий на серьезность.
Не вам про серьезность говорить, вы в своем комменте Denwer назвали Deneer....

Ответить
–5

Не путайте опечатку с телефона с некомпетентностью. А несерьезные статьи тогда лучше на одноклассниках выкладывайте

Ответить
4

Ну ты нудный, как тебя бабы терпят?

Ответить
–8

Давайте со всем этим говном все же на одноклассники идите, там ваша ЦА

Ответить
2

По моему это дно, ставить минус тому, с кем дискутируешь.

Ответить
–6

Ты удивишься, но плюсы и минусы для тго и существуют.

Ответить
0

Ты себя снова сам назвал днищем?

Отрадно. :3

Ответить
1

мне вот нужно разбить 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

Ответить
0

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

Ответить
0

Это конечно всё хорошо, но в доставке реальность много подводных камней. К примеру 80 водителей и все работают только по определенным зонам, в среднем на каждого приходится 12 заказов, так же возможна не только доставка и но забор груза, нужно учитывать грузовую вместительность, так как товар от чайника до ванны. Так же возможны критерии оптимизации как сокращение расхода топлива или пробега и тп. Мы пробовали множество систем, реальный результат показал только SAP...

Ответить
0

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

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

Ответить
0

Когда у тебя 80 одновременно работающих водителей, то экономия на SAP выглядит как экономия на спичках.

Ответить
0

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

Ответить
0

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

Ответить
1

Я учусь в Кубанском Государственном Технологическом Университете на факультете экономики, управления и бизнеса. У нас временами проходят конференции на которых студенты могут выступать. Поскольку мне понравилась данная тема, я решил выступить с ней на конференции. Вы не будете против, если я возьму часть материала из вашей статьи? Никакого монетизирования информации не будет, так как денежных вознаграждений на конференциях нет.

Ответить
1

Без проблем, если сможете монетизировать то я буду только рад за вас)))

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

Ответить
0

Если будут какие то вопросы по статье, то только рад буду помочь, пишите прям в самой статье про БОД, мне как автору приходят уведомления о новом комментарии если он был написан в корне или в ответ на мой коммент.

Ответить
0

Хорошо) Спасибо большое)

Ответить
0

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

Ответить
0

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

Ответить
0

будем ждать яндекс))))))

Ответить
1

С основного домена у меня так и не заработало, загрузил этот же скрипт на другой домен и все работает без проблем!
Яндекс выборочно отключает запросы с сайтов которые ему не подходят.

Обязательно надо чтоб ваш сервис был открыт для всех, если вы в htaccess заблокируете свободный доступ, то яндекс забанит вас, у них это четко в соглашении прописано.
Надо чтоб робот яндекс легко мог убедиться что ваш доступ в открытом доступе, так что через htaccess не блокируйте его, лучше имена скриптов длинные и менять их регулярно.

Ответить
0

ага, может после статьи у них там что-то поломалось )))
У меня на https://avtogsm.ru/ даже вывод телефона в шапке в зависимости от города не работает, тоже через api яндекс карт сделано.

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Компания отказалась от email
в пользу общения при помощи мемов
Подписаться на push-уведомления