Динамическое и ситуационное принятие решений




Принцип обмена данными из 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. venger

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

    Также мысль о том, что существуют разные уровни решений. Т.е. можно локально решить кого-то забанить. А можно решать и думать о том, что ситуация сильно «зажата» и стоит немного отпустить вожжи или наоборот, стоит немного ужесточить правила, чтобы придержать разболтавшуюся ситуацию. Это тоже можно включить в функции Совета.

    Reply
  2. O-Planet

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

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

    То, что происходит последнее время на Инфостарте мне не нравится. В том, что происходит, виноват ты и твое окружение. Ты рвешься на трибуну. Если это произойдет — будет еще хуже.

    Reply
  3. O-Planet

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

    Reply
  4. Altair777

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

    Это свойственно для любой системы, которая вышла из равновесия.

    Но для «простых» систем методов восстановления раз, два и обчелся 🙂

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

    «Суха теория, мой друг, а древо жизни пышно зеленеет»

    Reply
  5. Altair777

    (3) > Просто молча минусуем.

    А мы плюсуем, не молча.

    Мы — это те, кто поняли уже давно, что ситуация на ИС достигла критической отметки.

    Reply
  6. venger

    > Это свойственно для любой системы, которая вышла из равновесия.

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

    Reply
  7. venger

    Я пока не вижу для себя смысла быть в Совете или реальной пользы от моего присутствия, т.к. некоторые (далеко не все) товарсчи продолжают провокации, попытки вызвать ответную реакцию и затем обвинить во флуде, вижу у них предвзятое отношение и злобу (скрытую обиду:-), что говорит о мелочности и испорченности таких людей:-) Работать с такими плечом к плечу просто невозможно:-)

    Т.е. на данный момент (я повторюсь, на данный момент, мои мнения динамичны и меняются вместе с ситуацией), я вижу, что смогу реализовать что-то, если принимать решения (речь НЕ о модерации, одного меня не хватит) буду я единолично, с оглядкой и советом с Доржи, а исполнение безусловное, но с возможностью обсуждения будет на модераторах. Лезть в технические вопросы связанные с 1С или развитием портала (программирование) я не буду, а вижу себя третейским судьей по моральным, этическим и социальным вопросам, естественно с оглядкой на Доржи, т.е. его младший помошник, судья модераторов и конфликтов на глобальном уровне. Естественно у Доржи только всегда будет право наложить вето, ну модераторы могут единогласно (т.е. если даже один модератор против, то уже нельзя) вынести мое решение по конкретному вопросу на референдум, т.е. в опрос, опять же, если Доржи не наложит вето и на это. Детали можно уточнить, ведь по каждой мелочи судью не зовут, многие вопросы будут решать сами модераторы, но судья может отменить их действия и наложить вето, а модераторы либо могут обжаловать у Доржи, либо, если Доржи не наложит вето, запустить референдум по этому вопросу. Причем для референдума, модераторы должны совместно подготовить в письменном виде обоснования и я тоже должен его написать со своей стороны свои доводы (это если референдум таки запускается, но не в остальных случаях, хотя и в остальных случаях, если будут возникать вопросы почему, то по мере наличия времени я буду обьяснять почему), народ знакомится с доводами обоих сторон (моими и модераторов, обсуждение доводов запрещено, чтоб избежать вспышок флуда и скандалов), а потом голосует.

    Тем более, что я человек как бы «со стороны», с 1С и средой 1С’ников не связанный, к группировкам не принадлежу и имею волю к тому, чтобы, в случае необходимости, быть объективным как к «своим», так и к «чужим»:-) Обращаюсь к «своим»: «Вы не торопитесь соглашаться, ибо поблажек и выноса решения в пользу «своих» не будет», но и ожидаемости и одинаковости по решениям тоже не ждите, ибо руководствоваться я буду очень многими вещами при принятии решения.

    Изменится ситуация — изменится и мое мнение, учтите это, прежде чем делать выводы:-)

    Reply
  8. Altair777

    (7) > Вы не торопитесь соглашаться, ибо поблажек и выноса решения в пользу «своих» не будет

    я не против, у кого совесть чиста и намерения светлые, бояться нечего 🙂

    Reply
  9. venger

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

    Так что, если кому есть по теме, хоть свои мысли, хоть свою критику, хоть материалы — я буду рад почитать:-) Что порвут не боюсь, ибо хочу развиваться, а не стоять на месте:-)

    Reply
  10. O-Planet

    Дадим шанс Венгеру проявить свою объективность: http://infostart.ru/forum/forum19/topic8972/messages/?PAGEN_1=6

    Reply
  11. GSoft

    Олег, может я чтото и пропустил, не переходи на личности

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

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

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

    Reply
  12. Svetlaya_

    Размножается ветками …

    Reply
  13. GSoft

    да потому что вместо выяснения в одной (раз уж без этого никак нельзя) начинают переносить на все

    Reply
  14. Арчибальд

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

    Reply
  15. vinsentfire

    (2)> То, что происходит последнее время на Инфостарте мне не нравится. В том, что происходит, виноват ты и твое окружение. Ты рвешься на трибуну. Если это произойдет — будет еще хуже.

    (6)> Это свойственно для любой системы, которая вышла из равновесия.

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

    Reply
  16. tango

    (7) «а вижу себя третейским судьей по моральным, этическим и социальным вопросам»

    хм… %))

    однако

    Reply

Leave a Comment

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