Беспроводные метки NFC




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

16 Comments

  1. rus128

    все apk можно было выложить в одном архиве за 1 стартмани — ведь это же это не ваша разработка, чтоб зарабатывать на ней?

    Reply
  2. PloAl

    можно было бы

    разработка не моя? а чья тогда?

    Reply
  3. Alien_job

    Отлично! Жаль статья не появилась месяц назад когда телефоны брали, у взятых нет nfc. Спасибо за идею

    Reply
  4. N2

    Александр, а приложение только читает, но не пишет на метки?

    Reply
  5. PloAl

    Да все верно выложенная версия только, читает.

    Писать не проблема.

    Reply
  6. webester

    Интересны NFC с точки зрения, анализа посещения заведения посетителями. Есть постоянный клиент, даем ему карту и делаем скидку, только при ее предъявлении, знаем когда он приходит и когда уходит. Но тут возникает проблема — при уходе нет никакого стимула щелкать картой по ридеру. Хорошо бы где нибудь в зоне выхода считыватель который бы улавливал метку за метр-полтора. То есть, что бы сканер, распознавал карту в кармане клиента. Такие есть, но стоят как вертолет.

    Reply
  7. PloAl

    помню видел код работы с NFC для arduino, возможно там датчик можно как то «разогнать» (увеличить антенну и или напряжение)

    Reply
  8. GreenDragon

    (2) А можно ещё мануал за стартмани выложить?

    Reply
  9. PloAl

    в конце статьи описывал, варианты установки вкратце скачать или 2 *.apk или apk и файл *.cf

    мануал по приложениям *.apk, там буквально одна кнопка для чтения

    в файле конфигурации кода не много и он относительно прост

    Reply
  10. Aleskey_K

    У нас на всём имуществе стоят радиометки.

    Инвентаризация всего кабинета проходит за секунды: зашёл в кабинет, провёл ТСД из угла в угол и все метки уже считаны.

    Reply
  11. rus128

    (2) сорри, я думал — это чьи-то сторонние apk.

    Пригляделся на ваш ник и на имя apk — понял свою ошибку.

    Reply
  12. Гексагон

    (6)Описанная Вами задача, реализуется другой технологией BLE(Bluetooth low energy),»Bluetooth маячки».

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

    Reply
  13. webester

    (12)Какова стоимость одного «маячка» и оборудования которое их будет читать?

    Reply
  14. Гексагон

    (13)Разные бывают, например 9000 тыс рублей «Приемник», сканирует метки в зонах прохода,выхода(если по Вашей задаче) + клиентские метки в среднем 500-1500 рублей(тоже разные бывают)(или можно использовать их смартфоны)+софт

    Reply
  15. PloAl

    на али наклейки NFC ~ 8 руб, пластиковые карты ~19 руб. использованные билеты можно сказать бесплатны

    Reply
  16. andy_zhav

    Тоже реализовали проект с мобильными телефонами с nfc. Так же решили что дешевле будет использовать телефон с nfc, вместо дорогого rfid считывателя. У нас на мобильном телефоне реализовано рабочее место комбайнера в поле и другие мобильные рабочие места.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *