2018-04-01 Избыточное Решение
Нарушено правило: Не нужно решать простую задачу слишком хорошо с запасом на будущее.
Постановка задачи: Добавить проверку, если было более 3 FATAL задач обращений в тех.поддержку то создать задачу для проведения аудита клиента руками разработчика.
Ошибка: Решено слишком сложно и избыточно.
Как надо делать: Можно сделать в один два селекта и просто создание задачи и запускать срипт раз в мес.
Неверное решение
#!/usr/bin/php <?php /** * Created by PhpStorm. * User: * Date: 23.03.18 * Time: 16:58 * Запускается раз в месяц по cron 1 числа и находит сервера с FATAL задачами. * Если на сервере больше 3 FATAL за месяц создается задача на аудит сервера */ require_once('/var/www/vcrm/carbon/utils/osv_lib2.php'); require_once('/var/www/vcrm/rest/ticket_for_alarm_patch.php'); $clients = sqlexec("SELECT DISTINCT vtiger_account.accountid AS accountid, cf_regnumber, cf_regproduct, accountname FROM vtiger_potential INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_potential.potentialid AND vtiger_crmentity.deleted =0 INNER JOIN vtiger_potentialscf ON vtiger_potential.potentialid = vtiger_potentialscf.potentialid INNER JOIN vtiger_account ON vtiger_potential.related_to=vtiger_account.accountid INNER JOIN vtiger_invoice i ON vtiger_account.accountid=i.accountid AND invoicedate > DATE_SUB(NOW(),INTERVAL 1 YEAR) WHERE sales_stage='Closed Won' AND cf_regproduct NOT LIKE '%4-SoftRouter%' AND cf_regproduct NOT LIKE '%illing4%' AND cf_regproduct NOT LIKE '%ASR%' AND cf_regproduct NOT LIKE '%NAS%' AND cf_regproduct NOT LIKE '%ICS25' AND accountname NOT LIKE '%carbonsoft%' AND cf_regsupport NOT LIKE '%Без поддержки%' ORDER BY accountname, cf_regproduct, cf_regbranch"); function search_tasks_by_title($client, $title, $interval, $status = 0) { $sql = "select tcf.ticketid, vtt.title from vtiger_ticketcf tcf inner join vtiger_troubletickets t ON t.ticketid=tcf.ticketid JOIN vtiger_crmentity ce ON ce.crmid=tcf.ticketid JOIN vtiger_troubletickets vtt ON vtt.ticketid = tcf.ticketid WHERE t.parent_id = {$client[accountid]} AND t.title LIKE '%$title%' AND ce.deleted=0 AND tcf.cf_regnom = '" . $client[cf_regnumber] . "' AND ce.createdtime > DATE_SUB(NOW(),INTERVAL $interval DAY)"; if ($status == 1) { $sql = $sql . " AND t.STATUS != 'Closed' AND t.STATUS != 'Подтверждение закрытия' AND tcf.cf_chernovik = '" . $client[cf_chernovik] . "'"; } else { $sql = $sql . "AND t.title NOT LIKE '%аудит сервера%'"; } $open_tickets = sqlexec($sql); return $open_tickets; } foreach ($clients as $client) { $open_ticket_fatal = search_tasks_by_title($client, 'FATAL', 30); if (count($open_ticket_fatal) >= 3) { $date = new DateTime(); $date = $date->format("y:m:d h:i:s"); $carbon_client = array(); $carbon_client['accountid'] = '200678'; $carbon_client['cf_chernovik'] = $client['cf_regnumber']; $open_ticket_fatal_exist = search_tasks_by_title($carbon_client, "Провести аудит сервера", 30, 1); if (!empty($open_ticket_fatal_exist)) { echo($date . " Заявка на аудит сервера уже существует \n"); echo($date . " https://crm.carbonsoft.ru/t/" . $open_ticket_fatal_exist[0]['ticketid'] . "\n"); continue; } $description = ''; echo($date . " Нужно создать заявку на аудит сервера " . $client['cf_regnumber'] . "\n"); $title = "FATAL Провести аудит сервера " . $client['accountname']; foreach ($open_ticket_fatal as $ticket) { $description .= $ticket['title'] . " https://crm.carbonsoft.ru/t/" . $ticket['ticketid'] . "\n"; } $alarm['user_email'] = 'reductor.sup.head@carbonsoft.ru'; $alarm['title'] = iconv('utf-8', 'utf-8//IGNORE', $title); $alarm['description'] = $description; $alarm['cf_chernovik'] = $client['cf_regnumber']; rest_ticket_create($alarm); } }
Правильное достаточное решение:
#!/usr/bin/php <?php /** * Запускается раз в месяц по cron 1 числа и находит сервера с FATAL задачами. * Если на сервере больше 3 FATAL за месяц создается задача на аудит сервера * Проходим по всем регномерам и ишем более 3 FATAL заявок за последний месяц */ require_once('/var/www/vcrm/carbon/utils/osv_lib2.php'); require_once('/var/www/vcrm/rest/ticket_for_alarm_patch.php'); $regnums = sqlexec("SELECT cf_regnom FROM vtiger_ticketcf INNER JOIN vtiger_troubletickets ON vtiger_ticketcf.ticketid = vtiger_troubletickets.ticketid INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_ticketcf.ticketid INNER JOIN vtiger_account ON vtiger_account.accountid = vtiger_troubletickets.parent_id WHERE vtiger_troubletickets.title LIKE '%FATAL%' AND vtiger_crmentity.deleted=0 AND vtiger_crmentity.createdtime > DATE_SUB(NOW(),INTERVAL 30 DAY) AND cf_regnom != '' AND vtiger_ticketcf.cf_viddeyatel_nosti LIKE '%Поддержка%' GROUP BY cf_regnom HAVING COUNT(vtiger_ticketcf.ticketid) > 3"); foreach ($regnums as $regnum) { $alarm['user_email'] = "reductor.sup.head@carbonsoft.ru"; $alarm['regnumber'] = $regnum['cf_regnom']; $alarm['title'] = "Провести аудит сервера {$regnum['cf_regnom']}"; rest_ticket_create($alarm); }
Прочитал правила разработки как не надо делать 2018-04-01 избыточное решение |
Yes(39) No(0) Clear Yes: No: |
~~OWNERAPPROVE~~
Обсуждение