2018-04-01 Избыточное Решение
Различия
Здесь показаны различия между двумя версиями данной страницы.
правила_разработки:как_не_надо_делать:2018-04-01_избыточное_решение [11.04.2018 10:50] admin |
правила_разработки:как_не_надо_делать:2018-04-01_избыточное_решение [20.05.2019 15:18] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | **Нарушено правило:** Не нужно решать простую задачу слишком хорошо с запасом на будущее.\\ | ||
- | **Постановка задачи:** Добавить проверку, если было более 3 FATAL задач обращений в тех.поддержку то создать задачу для проведения аудита клиента руками разработчика.\\ | ||
- | **Ошибка:** Решено слишком сложно и избыточно.\\ | ||
- | **Как надо делать:** Можно сделать в один два селекта и просто создание задачи и запускать срипт раз в мес, пример решения добавят позже.\\ | ||
- | <color #ed1c24>**Неверное решение**</color>\\ | ||
- | <code php> | ||
- | #!/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); | ||
- | } | ||
- | } | ||
- | </code> | ||
- | <color #22b14c>**Правильное достаточное решение:\\**</color> | ||
- | <code php> | ||
- | #!/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['title'] = "Провести аудит сервера {$regnum['cf_regnom']}"; | ||
- | rest_ticket_create($alarm); | ||
- | } | ||
- | </code> | ||
- | /*Не удаляйте эту строку и ниже!*/ | ||
- | {(rater>id=1|name=Прочитал_правила_разработки:как_не_надо_делать:2018-04-01_избыточное_решение|type=vote|trace=user|tracedetails=1)} | ||