TUsers = $ST['dbpf'].'_users'; $this->TStudents = $ST['dbpf'].'_students'; $this->TTeachers = $ST['dbpf'].'_teachers'; $this->TGrupp = $ST['dbpf'].'_grupp'; $this->TFakultets = $ST['dbpf'].'_faculties'; $this->DB = $DB; $this->DIRupload = 'upload'; $this->DIRstudents = 'students_xlsx'; } function info(){ $SYS = new class_SYSTEM(); $out = '

Выгрузка студентов

'; $url = 'https://eios.mkgtu.ru/integration/api.php?step=students_get_all&format='; $out .= '
'; $out .= '
'; $out .= '

JSON формат:

'; $out .= '

CSV формат:

'; $out .= '
'; $out .= '
'; $data['dir'] = 'upload/students/'; $out .= $SYS->info_last_files($data); $out .= '
'; $out .= '
'; $out .= '

Выгрузка преподавателей

'; $url = 'https://eios.mkgtu.ru/integration/api.php?step=prepods_get_all&format='; $out .= '
'; $out .= '
'; $out .= '

JSON формат:

'; $out .= '

CSV формат:

'; $out .= '
'; $out .= '
'; $data['dir'] = 'upload/prepods/'; $out .= $SYS->info_last_files($data); $out .= '
'; $out .= '
'; $out .= '

Выгрузка групп

'; $url = 'https://eios.mkgtu.ru/integration/api.php?step=grupp_get_all&format='; $out .= '
'; $out .= '
'; $out .= '

JSON формат:

'; $out .= '

CSV формат:

'; $out .= '
'; $out .= '
'; $data['dir'] = 'upload/grupp/'; $out .= $SYS->info_last_files($data); $out .= '
'; $out .= '
'; return $out; } function get_students($data){ $out = array(); $sql = 'SELECT u.guid, u.fio, u.email, u.phone, u.email,s.num_grupp,s.kod_podgotovki,g.specialnost,g.kurs,g.sokr,g.fo,g.year_start,f.name FROM '.$this->TUsers.' as u, '.$this->TStudents.' as s, '.$this->TGrupp.' as g, '.$this->TFakultets.' as f WHERE s.id_user=u.id AND s.id_grupp=g.id AND g.id_facult=f.id AND g.year_start>='.(date('Y')-5).' ORDER BY u.fio'; $rez = $this->DB->QUR_SEL($sql); //echo '
'.print_r($rez,1).'
'; if(!$rez['err']&&$rez['kol']){ foreach($rez['rez'] as $k => $v){ $out[] = $v; } } $data['items'] = $out; $data['dir'] = 'students'; $data['head'] = array( 'guid'=>array('name' => 'GUID','type'=>'string'), 'fio'=>array('name' => 'ФИО','type'=>'string'), 'email'=>array('name' => 'Емаил','type'=>'string'), 'phone'=>array('name' => 'Телефон','type'=>'string'), 'sokr'=>array('name' => 'Группа','type'=>'string'), 'num_grupp'=>array('name' => 'Подгруппа','type'=>'string'), 'kurs'=>array('name' => 'Курс','type'=>'string'), 'fo'=>array('name' => 'ФО','type'=>'string'), 'year_start'=>array('name' => 'Год начала','type'=>'string'), 'kod_podgotovki'=>array('name' => 'Код подготовки','type'=>'string'), 'specialnost'=>array('name' => 'Специальность','type'=>'string'), 'name'=>array('name' => 'Факультет','type'=>'string') ); //echo '
'.print_r($data,1).'
'; $SYS = new class_SYSTEM(); $SYS->format($data); } function get_prepods($data){ $out = array(); $sql = 'SELECT u.guid, u.fio, u.email, u.phone, u.email,t.zvanie,t.dolgnost,t.stepen,t.fakultet,t.kafedra FROM '.$this->TUsers.' as u, '.$this->TTeachers.' as t WHERE t.id_user=u.id AND t.status=1 ORDER BY u.fio'; $rez = $this->DB->QUR_SEL($sql); //echo '
'.print_r($rez,1).'
'; exit(); if(!$rez['err']&&$rez['kol']){ foreach($rez['rez'] as $k => $v){ $out[] = $v; } } $data['items'] = $out; $data['dir'] = 'prepods'; $data['head'] = array( 'guid'=>array('name' => 'GUID','type'=>'string'), 'fio'=>array('name' => 'ФИО','type'=>'string'), 'email'=>array('name' => 'Емаил','type'=>'string'), 'phone'=>array('name' => 'Телефон','type'=>'string'), 'zvanie'=>array('name' => 'Звание','type'=>'string'), 'dolgnost'=>array('name' => 'Должность','type'=>'string'), 'stepen'=>array('name' => 'Степень','type'=>'string'), 'fakultet'=>array('name' => 'Факультет','type'=>'string'), 'kafedra'=>array('name' => 'Кафедра','type'=>'string') ); //echo '
'.print_r($data,1).'
'; $SYS = new class_SYSTEM(); $SYS->format($data); } function get_grupp($data){ $out = array(); $sql = 'SELECT g.sokr,g.fo,g.kurs,g.specialnost,g.year_start,f.name FROM '.$this->TGrupp.' as g, '.$this->TFakultets.' as f WHERE g.id_facult=f.id ORDER BY g.sokr'; $rez = $this->DB->QUR_SEL($sql); //echo '
'.print_r($rez,1).'
'; exit(); if(!$rez['err']&&$rez['kol']){ foreach($rez['rez'] as $k => $v){ $out[] = $v; } } $data['items'] = $out; $data['dir'] = 'grupp'; $data['head'] = array( 'sokr'=>array('name' => 'Группа','type'=>'string'), 'fo'=>array('name' => 'ФО','type'=>'string'), 'kurs'=>array('name' => 'Курс','type'=>'string'), 'specialnost'=>array('name' => 'Специальность','type'=>'string'), 'year_start'=>array('name' => 'Год начала','type'=>'string'), 'name'=>array('name' => 'Факультет','type'=>'string') ); //echo '
'.print_r($data,1).'
'; $SYS = new class_SYSTEM(); $SYS->format($data); } function HTML(){ GLOBAL $WorkDIR; $CHPU = new class_CHPU($WorkDIR); $URLS = $CHPU->uri(); $smartyC = new class_smarty(); $smarty = $smartyC->config(__DIR__.'\..\tpl'); $view = 'all'; $url= $WorkDIR.'/students/'; $out = array('name'=>'Студенты ВУЗа','body'=>''); if(isset($_POST['ajdes'])){ header('Content-Type: application/json; charset=utf-8'); $out=array(); if($_POST['ajdes']=='students_check'){ $data = json_decode($_POST['json'],1); $out = $this->student_check($data);//TODO переделать } echo json_encode($out); exit(); } if (isset($_POST['upload0'])){ $pi = pathinfo($_FILES['file0']['name'],PATHINFO_EXTENSION ); //print_r($pi);exit(); if(mb_strtolower($pi)=='xlsx'||mb_strtolower($pi)=='xls') { $cSystem = new class_SYSTEM(); $file = $cSystem->uploadfile('file0', 'students_xlsx', 1); $smarty->assign('file', $file); if (!$file['err']) { //$rez = $this->parse_xls($file['path'] . $file['file']); //if($rez['err']==0) { // $view = 'one'; // $smarty->assign('PLAN', $rez); // $smarty->assign('view', $view); // $out['body'] = $smarty->fetch('page_shahtplan.html'); // return $out; //}else{ // $view = 'all'; // $smarty->assign('uplmes',$rez['file']); //} } else { $rez = array(); } }else{ $view = 'all'; $smarty->assign('uplmes','Файл должен быть Excel формата!'); } } if($URLS[1]=='update_grupp'){ $view = 'update_grupp'; $file = $URLS[2]; $items = $this->file_update_grupp($file); $smarty->assign('items', $items); } if($URLS[1]=='update'){ $view = 'update'; $file = $URLS[2]; $items = $this->file_update($file); $smarty->assign('items', $items); } if($URLS[1]=='check'){ $view = 'check'; $file = $URLS[2]; $items = $this->file_check($file); $smarty->assign('items', $items); } if($URLS[1]=='parse'){ $view = 'parse'; $file = $URLS[2]; $items = $this->file_parse($file); $smarty->assign('items', $items); } if(!isset($URLS[1])||$URLS[1]=='all') { $items = $this->files_scan(); $smarty->assign('items', $items); } $smarty->assign('url',$url); $smarty->assign('view',$view); $out['body'] = $smarty->fetch('page_students.html'); return $out; } /** * Определение шапки файла! * @param $tr * @return array */ function file_parse_HEAD($tr){ $out = array(); //ШАпка такая должна быть //[5] => Array ( // [0] => № п/п // [1] => GUID // [2] => ФИО // [3] => Номер зачетной книжки // [4] => Эл.почта // [5] => Факультет // [6] => Курс // [7] => Группа // [8] => Код специальности // [9] => Форма обучения // [10] => Основа обучения // [11] => СНИЛС // [12] => Телефон //) $head = array('№ п/п','GUID','ФИО','Номер зачетной книжки','Эл.почта','Факультет','Курс','Группа','Код специальности','Форма обучения','Основа обучения','СНИЛС','Телефон'); //echo '
'.print_r($head,1).'
'; //echo '
'.print_r($tr,1).'
'; if($head == $tr){ $out['head']=1; }else{ $out['head']=0; $kol = 0; foreach($tr as $k => $v){ if (in_array($v,$head)) $kol++; } if($kol>8) $out['head']=1; } return $out; } /** * Работа с файлом JSON от ексель * @param $des (string) save get * @param $data (array) * @return array */ function file_parse_JSON($des,$data=array()){ $out = array(); if($des=='save'){ if(isset($data['file'])){ $pi = pathinfo($data['file']); $file_json = $pi['dirname'].'/'.$pi['filename'].'.json'; file_put_contents($file_json,json_encode($data,JSON_UNESCAPED_UNICODE)); $out['err']=0; $out['file_json']=$file_json; }else{ $out['err']=1; $out['file_json']=''; } } if($des=='get'){ if(isset($data['file'])){ $pi = pathinfo($data['file']); $file_json = $pi['dirname'].'/'.$pi['filename'].'.json'; if(file_exists($file_json)){ $out['err']=0; $out['data']=json_decode(file_get_contents($file_json),1); }else{ $out['err']=1; $out['msg']='файла нет '.$file_json; $out['data']=array(); } }else{ $out['err']=1; $out['msg']='Не указан файл'; $out['data']=array(); } } return $out; } /** * XLS - JSON перевод * @param $file * @return array|mixed * @throws PHPExcel_Reader_Exception */ function file_parse($file){ $out = array(); $file_cur = $this->DIRupload.'/'.$this->DIRstudents.'/'.$file; $out['file'] = $file_cur; $dan = $this->file_parse_JSON('get',$out); if(!$dan['err']){ $out = $dan['data']; $out['err'] = 0; }else{ if(file_exists($file_cur)) { require_once 'PHPExcel.php'; try { $excel = PHPExcel_IOFactory::load('./' . $file_cur); //print_r($excel); //if (count($excel)) { //перебираем файлы эксель, в начале - листы foreach ($excel->getWorksheetIterator() as $worksheet) { $lists[] = $worksheet->toArray(); } $isHead = 0; if (count($lists)) { foreach ($lists as $nList => $list) { foreach ($list as $tr => $row) { if ($isHead == 1) {//шапка была надо хранить данные foreach ($row as $td => $val) { $out['items'][$nList][$tr][$td] = trim(str_replace('¶','',$val)); } } if ($isHead == 0) {//определим когда начнется шапка $tmp = $this->file_parse_HEAD($row); if ($tmp['head'] == 1) $isHead = 1; } } } //echo '
'.print_r($out,1).'
'; //exit(); $out['rez'] = $this->file_parse_JSON('save', $out); } else { $out['err'] = 1; $out['msg'] = 'Не смогли определить листы'; } //} else { // $out['err'] = 1; // $out['msg'] = 'Не смогли открыть файл'; //} } catch (PHPExcel_Reader_Exception $e) { $out['err'] = 1; $out['msg'] = $e->getMessage(); } } else { $out['err'] = 1; $out['msg'] = 'Не нашли файл'; } } return $out; } /** * Запись и получение из кэша результата проверки * @param $file (string) * @param $data (array) * @return array|mixed */ function file_check_cache($file,$data=array()){ $out=array(); if(count($data)){//Сохраняем file_put_contents($file,json_encode($data,JSON_UNESCAPED_UNICODE)); }else{ if(file_exists($file)){ $out = json_decode(file_get_contents($file),1); } } return $out; } /** * Проверка 1С с базой ЭИОС * @param $file * @return array|mixed */ function file_check($file){ $out = array(); $file_cur = $this->DIRupload.'/'.$this->DIRstudents.'/'.$file; $pi = pathinfo($file_cur); $file_cache = $pi['dirname'].'/'.$pi['filename'].'_checks.json'; $cache = $this->file_check_cache($file_cache); //удалим файлы результатов обработки! $file_double = $pi['dirname'].'/'.$pi['filename'].'_report_double.csv'; if(file_exists($file_double)) unlink($file_double); $file_change = $pi['dirname'].'/'.$pi['filename'].'_report_change.csv'; if(file_exists($file_change)) unlink($file_change); if(!count($cache)) {//Если нет кэша проверяем $out['file'] = $file_cur; $dan = $this->file_parse_JSON('get', $out); if (!$dan['err']) { $out = $dan['data']; $out['err'] = 0; foreach ($out['items'][0] as $k => $data) { $out['items'][0][$k]['check'] = $this->student_check($data); } $this->file_check_cache($file_cache, $out);//Записываем в кэш } else { $out = $dan; $out['file'] = $file_cur; } }else{ $out = $cache; } return $out; } /** * Обновление в ЭИОС данных по группам из 1С * @param $file * @return array */ function file_update_grupp($file){ $out = array(); $out['err']=0; $out['msg']=''; $fo = array('Очная'=>'ОФО','Заочная'=>'ЗФО','Очно-заочная'=>'ОЗФО',); $file_cur = $this->DIRupload.'/'.$this->DIRstudents.'/'.$file; $pi = pathinfo($file_cur); //$file_change = $pi['dirname'].'/'.$pi['filename'].'_report_change.csv'; //if(!file_exists($file_change)) { $file_cache = $pi['dirname'] . '/' . $pi['filename'] . '_checks.json'; $cache = $this->file_check_cache($file_cache); if (count($cache)) { //Array( // [file] => upload/students_xlsx/1_studentovKolledzh.xls // [items] => Array( [0] => Array( // [6] => Array( // [0] => 1 [1] => c96d4d7a-3834-11ed-9365-b42e9988bf39 // [2] => Абазова Дженет Мухарбиевна [3] => // [4] => Abazovadzanet@mail.com [5] => // [6] => 2 [7] => Ф-21 (2022-2 025) // [8] => 33.02.01 [9] => Очная форма обучения // [10] => Бюджетное финансирование [11] => 173-754-501 84 // [12] => +7-964-910-29-24 // [check] => Array( [err] => 0 // [rez] => Array( [0] => Array( // [id] => 31625 [data_c] => 1671107883 // [data_u] => 1682601476 [email] => Abazovadzanet@mail.com // [pass] => c8db8e6e6f171bfa85c51d2bbf140f42 // [status] => 0 [fio] => Абазова Дженет Мухарбиевна // [foto] => [high_school] => 0 // [phone] => +7-964-910-29-24 // [polis] => [snils] => 173-754-501 84 // [guid] => c96d4d7a-3834-11ed-9365-b42e9988bf39 // [grupp] => Array( // [0] => Array( // [id] => 2529 [sokr] => колледж Ф-11 // [fo] => ОФО [year_start] => 2022 // [num_zach] => [num_grupp] => // ) // ) // ) // ) // [html] => Кол-во:1 // [proc] => 100 // ) //) foreach ($cache['items'][0] as $k => $student) { $nocheck = array(); if (isset($student['check']) && count($student['check']['rez'])) { foreach ($student['check']['rez'] as $kc => $check) { //if($check['email']!=$student[4]) // $nocheck[]=array('pole'=>'email', 'val_yes'=>$student[4], 'val_no'=>$check['email'], 'id_user'=>$check['id']); if ($check['fio'] != $student[2]) $nocheck[] = array('pole' => 'fio', 'val_yes' => $student[2], 'val_no' => $check['fio'], 'id_user' => $check['id']); if ($check['phone'] != $student[12]) $nocheck[] = array('pole' => 'phone', 'val_yes' => $student[12], 'val_no' => $check['phone'], 'id_user' => $check['id']); if ($check['snils'] != $student[11]) $nocheck[] = array('pole' => 'snils', 'val_yes' => $student[11], 'val_no' => $check['snils'], 'id_user' => $check['id']); if ($check['guid'] != $student[1]) $nocheck[] = array('pole' => 'guid', 'val_yes' => $student[1], 'val_no' => $check['guid'], 'id_user' => $check['id']); if ($check['grupp'][0]['sokr'] != $student[7]) $nocheck[] = array('pole' => 'student.id_grupp', 'val_yes' => $student[7], 'val_no' => $check['grupp'][0]['sokr'], 'grupp_id' => $check['grupp'][0]['id'], 'id_user' => $check['id']); if ($check['grupp'][0]['fo'] != $fo[$student[9]]) $nocheck[] = array('pole' => 'grupp.fo', 'val_yes' => $fo[$student[9]], 'val_no' => $check['grupp'][0]['fo'], 'grupp_id' => $check['grupp'][0]['id'], 'id_user' => $check['id']); } } $student['no_check'] = $nocheck; //echo '
'.print_r($student,1).'
'; if (count($nocheck) && count($student['check']['rez']) > 1) {//ДВОЙНЫЕ ПОЛЬЗОВАТЕЛИ! //$this->student_report($cache['file'], $student, 'report_double'); } else {//Есть несоответствия у одного ПОЛЬЗОВАТЕЛЯ! if (!count($nocheck)) { //студент одинаковый с 1С } else { //$sqls = $this->student_update($nocheck); ////Array([sql] => Array([0] => UPDATE acs_users SET `phone`="+7 (953) 102-20-54",`snils`="166-858-612 24",`guid`="9297b991-22d8-11ed-935b-b42e9988bf39" WHERE id=27171 LIMIT 1) //if (count($sqls) && isset($sqls['sql'])) { // foreach ($sqls['sql'] as $ks => $vsql) { // $rezs = $this->DB->QUR($vsql); // if (!$rezs['err']) { // $student['check']['rez'][0]['rep'] = 'ОК'; // $student['check']['rez'][0]['sql'] = $vsql; // } else { // $student['check']['rez'][0]['rep'] = $rezs['rep']; // $student['check']['rez'][0]['sql'] = $vsql; // } // } // //$student['check']['rez'][]['sql'] = '"'.implode('";"'.$sqls).'"'; // //echo '
'.print_r($sqls,1).'
';exit(); // //echo '
'.print_r($student,1).'
';exit(); // $this->student_report($cache['file'], $student, 'report_change'); //} } } if($k>20) echo '
'.print_r($student,1).'
'; if($k>25) exit(); } //надо удалить файл кэша!!! //unlink($file_cache); } else { $out['err'] = 1; $out['msg'] = 'Нет файла ' . $file_cache; } //}else{ // $out['err'] = 1; // $out['msg'] = 'Уже отрабатывали такой файл'; //} return $out; } //Обновление в ЭИОС данных из 1С function file_update($file){ $out = array(); $out['err']=0; $out['msg']=''; $file_cur = $this->DIRupload.'/'.$this->DIRstudents.'/'.$file; $pi = pathinfo($file_cur); $file_change = $pi['dirname'].'/'.$pi['filename'].'_report_change.csv'; if(!file_exists($file_change)) { $file_cache = $pi['dirname'] . '/' . $pi['filename'] . '_checks.json'; $cache = $this->file_check_cache($file_cache); if (count($cache)) { //Array( // [file] => upload/students_xlsx/1_studentovKolledzh.xls // [items] => Array( [0] => Array( // [6] => Array( // [0] => 1 [1] => c96d4d7a-3834-11ed-9365-b42e9988bf39 // [2] => Абазова Дженет Мухарбиевна [3] => // [4] => Abazovadzanet@mail.com [5] => // [6] => 2 [7] => Ф-21 (2022-2 025) // [8] => 33.02.01 [9] => Очная форма обучения // [10] => Бюджетное финансирование [11] => 173-754-501 84 // [12] => +7-964-910-29-24 // [check] => Array( [err] => 0 // [rez] => Array( [0] => Array( // [id] => 31625 [data_c] => 1671107883 // [data_u] => 1682601476 [email] => Abazovadzanet@mail.com // [pass] => c8db8e6e6f171bfa85c51d2bbf140f42 // [status] => 0 [fio] => Абазова Дженет Мухарбиевна // [foto] => [high_school] => 0 // [phone] => +7-964-910-29-24 // [polis] => [snils] => 173-754-501 84 // [guid] => c96d4d7a-3834-11ed-9365-b42e9988bf39 // [grupp] => Array( // [0] => Array( // [id] => 2529 [sokr] => колледж Ф-11 // [fo] => ОФО [year_start] => 2022 // [num_zach] => [num_grupp] => // ) // ) // ) // ) // [html] => Кол-во:1 // [proc] => 100 // ) //) foreach ($cache['items'][0] as $k => $student) { $nocheck = array(); if (isset($student['check']) && count($student['check']['rez'])) { foreach ($student['check']['rez'] as $kc => $check) { //if($check['email']!=$student[4]) // $nocheck[]=array('pole'=>'email', 'val_yes'=>$student[4], 'val_no'=>$check['email'], 'id_user'=>$check['id']); if ($check['fio'] != $student[2]) $nocheck[] = array('pole' => 'fio', 'val_yes' => $student[2], 'val_no' => $check['fio'], 'id_user' => $check['id']); if ($check['phone'] != $student[12]) $nocheck[] = array('pole' => 'phone', 'val_yes' => $student[12], 'val_no' => $check['phone'], 'id_user' => $check['id']); if ($check['snils'] != $student[11]) $nocheck[] = array('pole' => 'snils', 'val_yes' => $student[11], 'val_no' => $check['snils'], 'id_user' => $check['id']); if ($check['guid'] != $student[1]) $nocheck[] = array('pole' => 'guid', 'val_yes' => $student[1], 'val_no' => $check['guid'], 'id_user' => $check['id']); } } //echo '
'.print_r($student,1).'
'; if (count($nocheck) && count($student['check']['rez']) > 1) {//ДВОЙНЫЕ ПОЛЬЗОВАТЕЛИ! $this->student_report($cache['file'], $student, 'report_double'); } else {//Есть несоответствия у одного ПОЛЬЗОВАТЕЛЯ! if (!count($nocheck)) { //студент одинаковый с 1С } else { $sqls = $this->student_update($nocheck); //Array([sql] => Array([0] => UPDATE acs_users SET `phone`="+7 (953) 102-20-54",`snils`="166-858-612 24",`guid`="9297b991-22d8-11ed-935b-b42e9988bf39" WHERE id=27171 LIMIT 1) if (count($sqls) && isset($sqls['sql'])) { foreach ($sqls['sql'] as $ks => $vsql) { $rezs = $this->DB->QUR($vsql); if (!$rezs['err']) { $student['check']['rez'][0]['rep'] = 'ОК'; $student['check']['rez'][0]['sql'] = $vsql; } else { $student['check']['rez'][0]['rep'] = $rezs['rep']; $student['check']['rez'][0]['sql'] = $vsql; } } //$student['check']['rez'][]['sql'] = '"'.implode('";"'.$sqls).'"'; //echo '
'.print_r($sqls,1).'
';exit(); //echo '
'.print_r($student,1).'
';exit(); $this->student_report($cache['file'], $student, 'report_change'); } } } } //надо удалить файл кэша!!! unlink($file_cache); } else { $out['err'] = 1; $out['msg'] = 'Нет файла ' . $file_cache; } }else{ $out['err'] = 1; $out['msg'] = 'Уже отрабатывали такой файл'; } return $out; } /** * Формирвоание файла отчета по обновлению пользователей! * @param $file * @param $data * @return void */ function student_report($file,$data,$file_pref='report_double'){ $head = array(0=>'№', 1 => 'GUID',2 => 'ФИО',3 => 'Номер зачетной книжки',4 => 'Эл.почта',5 => 'Факультет',6 => 'Курс',7 => 'Группа',8 => 'Код специальности',9 => 'Форма обучения',10 => 'Основа обучения',11 => 'СНИЛС',12 => 'Телефон',13=>'Система',14=>'Результат ДБ','15'=>'Запрос ДБ'); $pi = pathinfo($file); $file_report = $pi['dirname'].'/'.$pi['filename'].'_'.$file_pref.'.csv'; if(!file_exists($file_report)) { file_put_contents($file_report,chr(0xEF).chr(0xBB).chr(0xBF)); file_put_contents($file_report,'"'.implode('";"',$head).'"'.PHP_EOL,FILE_APPEND); } $data_eios = $data['check']['rez']; unset($data['check']); $data_1c = $data; file_put_contents($file_report,'"'.implode('";"',$data_1c).'";"1С"'.PHP_EOL,FILE_APPEND); foreach ($data_eios as $k => $v){ if(!isset($v['grupp'])) $v['grupp'][0]=array('num_zach'=>'','sokr'=>'','fo'=>''); if(!isset($v['rep'])) $v['rep']=''; if(!isset($v['sql'])) $v['sql']=''; $str = array(0=>$v['id'], 1 => $v['guid'],2 => $v['fio'],3 => $v['grupp'][0]['num_zach'],4 => $v['email'],5 => '',6 => '',7 => $v['grupp'][0]['sokr'],8 => '',9 => $v['grupp'][0]['fo'],10 => '',11 => $v['snils'],12 => $v['phone'],13=>'ЭИОС',14=>$v['rep'],'15'=>$v['sql']); file_put_contents($file_report,'"'.implode('";"',$str).'"'.PHP_EOL,FILE_APPEND); } } /** * подготавливаем обновление записи в ЭИОС пользователя * @return void */ function student_update($data){ $out = array(); if(count($data)){ //Array( // [0] => Array( [pole] => phone [val_yes] => +7 (953) 102-20-54 [val_no] => [id_user] => 27171) // [1] => Array( [pole] => snils [val_yes] => 166-858-612 24 [val_no] => [id_user] => 27171) // [2] => Array( [pole] => guid [val_yes] => 9297b991-22d8-11ed-935b-b42e9988bf39 [val_no] => [id_user] => 27171 ) //) $WH=array(); foreach($data as $k => $v){ if($v['val_yes']!=''){//не затираем то что есть у пользователя! $WH[$v['id_user']][] = '`'.$v['pole'].'`="'.$this->DB->rescape($v['val_yes']).'"'; } } if(count($WH)){ foreach($WH as $id_user => $wh){ $out['sql'][] = 'UPDATE acs_users SET '.implode(',',$wh).' WHERE id='.$id_user.' LIMIT 1'; } } } return $out; } function student_check($data){ $out = array(); $out['err']=1; $out['rez']=array(); $out['html']='Кол-во:0'; $filter=array(); //0 - № п/п 1 - GUID 2 - ФИО 3 - Номер зачетной книжки //4 - Эл.почта 5 - Факультет 6 - Курс 7 - Группа //8 - Код специальности 9 - Форма обучения 10 - Основа обучения 11 - СНИЛС //12 - Телефон //acs_users: id, data_c, data_u, email, pass, status, fio, foto, high_school, phone, polis, snils, guid //acs_students: id, data_c, data_u, id_grupp, id_user, status, num_zach, num_grupp, kod_podgotovki, id_newgrupp //acs_grupp: id, data_c, data_u, specialnost, kurs, sokr, fo, id_teacher, id_facult, year_start if($data['1']!='') {//проверим по GUID $filter['where'][] = 'guid="' . trim($data['1']) . '"'; $rez = $this->users_get($filter); if (count($rez)) { $out['err'] = 0; $out['rez'] = $rez['users']; $out['proc'] = 100; $out['html'] = 'Кол-во:' . count($rez['users']); } } if(!count($out['rez'])&&trim($data['2'])!=''){//проверим по ФИО unset($filter['where']); $filter['where'][] = 'fio="' . trim($data['2']) . '"'; $rez = $this->users_get($filter); if (count($rez)) { $out['err'] = 0; $out['rez'] = $rez['users']; $out['proc'] = 90; $out['html'] = 'Кол-во:' . count($rez['users']); } } if(!count($out['rez'])&&trim($data['11'])!=''){//проверим по СНИЛС unset($filter['where']); $filter['where'][] = 'snils="' . trim($data['11']) . '"'; $rez = $this->users_get($filter); if (count($rez)) { $out['err'] = 0; $out['rez'] = $rez['users']; $out['proc'] = 80; $out['html'] = 'Кол-во:' . count($rez['users']); } } if(count($out['rez'])){ foreach($out['rez'] as $k => $v) { //Array( [id] => 31625 [data_c] => 1671107883 [data_u] => 1682601476 [email] => Abazovadzanet@mail.com [pass] => c8db8e6e6f171bfa85c51d2bbf140f42 [status] => 0 [fio] => Абазова Дженет Мухарбиевна [foto] => [high_school] => 0 [phone] => +7-964-910-29-24 [polis] => [snils] => 173-754-501 84 [guid] => c96d4d7a-3834-11ed-9365-b42e9988bf39 ) $sql = 'SELECT gr.id,gr.sokr,gr.fo,gr.year_start,st.num_zach, st.num_grupp FROM acs_grupp as gr, acs_students as st WHERE st.id_user='.$v['id'].' AND st.id_grupp=gr.id'; $rez = $this->DB->QUR_SEL($sql); //$out['rez'][$k]['grupp_sql'] = $sql; if(!$rez['err']&&$rez['kol']) { foreach ($rez['rez'] as $key => $val) { $out['rez'][$k]['grupp'][] = $val; } } } } return $out; } function json_1c_to_eios($file){ $out = array(); $out1 = array(); $dir = $this->DIRupload.'/'.$this->DIRstudents.'/'; $file_cur = $dir.$file; $pi = pathinfo($file_cur); $file_json = $pi['dirname'].'/'.$pi['filename'].'.json'; if(file_exists($file_json)) { $out['err'] = 1; $out['rez'] = array(); $out['html'] = 'Кол-во:0'; $filter = array(); $students = json_decode(file_get_contents($file_json),1); foreach ($students['items'][0] as $k => $data) { $file_cache = 'upload/students_xlsx/1c_students/'.$data[0].'_'.$data[2].'.json'; if(file_exists('upload/students_xlsx/'.$data[0].'_'.$data[2].'.json')) unlink('upload/students_xlsx/'.$data[0].'_'.$data[2].'.json'); if(!file_exists($file_cache)) { $out['fio'] = $data[2]; $out['data'] = $data; //0 - № п/п 1 - GUID 2 - ФИО 3 - Номер зачетной книжки //4 - Эл.почта 5 - Факультет 6 - Факультет GUID 7 - Курс 8 - Группа //9 - Группа GUID 10 - Код специальности 11 - Форма обучения 12 - Основа обучения 13 - СНИЛС //14 - Телефон //acs_users: id, data_c, data_u, email, pass, status, fio, foto, high_school, phone, polis, snils, guid //acs_students: id, data_c, data_u, id_grupp, id_user, status, num_zach, num_grupp, kod_podgotovki, id_newgrupp //acs_grupp: id, data_c, data_u, specialnost, kurs, sokr, fo, id_teacher, id_facult, year_start if ($data['1'] != '') {//проверим по GUID $filter['where'][] = 'guid="' . trim($data['1']) . '"'; $rez = $this->users_get($filter); if (count($rez)) { $out['err'] = 0; $out['rez'] = $rez['users']; $out['proc'] = 100; $out['html'] = 'Кол-во:' . count($rez['users']); } } if (!count($out['rez']) && trim($data['2']) != '') {//проверим по ФИО unset($filter['where']); $filter['where'][] = 'fio="' . trim($data['2']) . '"'; $rez = $this->users_get($filter); if (count($rez)) { $out['err'] = 0; $out['rez'] = $rez['users']; $out['proc'] = 90; $out['html'] = 'Кол-во:' . count($rez['users']); } } if (!count($out['rez']) && trim($data['13']) != '') {//проверим по СНИЛС unset($filter['where']); $filter['where'][] = 'snils="' . trim($data['13']) . '"'; $rez = $this->users_get($filter); if (count($rez)) { $out['err'] = 0; $out['rez'] = $rez['users']; $out['proc'] = 80; $out['html'] = 'Кол-во:' . count($rez['users']); } } if (count($out['rez'])) { foreach ($out['rez'] as $k => $v) { $sql = 'SELECT gr.id,gr.sokr,gr.fo,gr.year_start,st.num_zach, st.num_grupp FROM acs_grupp as gr, acs_students as st WHERE st.id_user=' . $v['id'] . ' AND st.id_grupp=gr.id'; $rez = $this->DB->QUR_SEL($sql); //$out['rez'][$k]['grupp_sql'] = $sql; if (!$rez['err'] && $rez['kol']) { foreach ($rez['rez'] as $key => $val) { $out['rez'][$k]['grupp'][] = $val; } } } } //$out1[] = array('fio'=>$data,'rez'=>$out['rez']); file_put_contents($file_cache, json_encode($out, JSON_UNESCAPED_UNICODE)); $this->grupp_create_1c(array('name'=>$data[8],'guid'=>$data[9],'kurs'=>$data[7],'code_spec'=>$data[10],'fo'=>$data[11],'id_grupp'=>0)); $out['err'] = 1; $out['rez'] = array(); $out['html'] = 'Кол-во:0'; $out['data'] = array(); } } } //теперь смотрим в каждый файл и решаем что делать $dir_jsons = 'upload/students_xlsx/1c_students/'; $files = scandir($dir_jsons); foreach($files as $k => $file_json)if($file_json!='.'&&$file_json!='..'){ $file_cur = $dir_jsons.$file_json; $this->json_1c_to_eios_cheksfile($file_cur); } return $out1; } /** * Проверяем файл с ЭИОС и обновляем * @param $file * @return void */ function json_1c_to_eios_cheksfile($file){ $out=array(); $stud_data = json_decode(file_get_contents($file),1); if(isset($stud_data['rez'])&&count($stud_data['rez'])) {//проверим данные $SETs = array(); if ($stud_data['data'][1] != '' && $stud_data['data'][1] != $stud_data['rez'][0]['guid']) $SETs[] = 'guid="' . $stud_data['data'][1] . '"'; if ($stud_data['data'][13] != '' && $stud_data['data'][13] != $stud_data['rez'][0]['snils']) $SETs[] = 'snils="' . $stud_data['data'][13] . '"'; if ($stud_data['data'][14] != '' && $stud_data['data'][14] != $stud_data['rez'][0]['phone']) $SETs[] = 'phone="' . $stud_data['data'][14] . '"'; if(count($SETs)){ $sql = 'UPDATE acs_users SET '.implode(', ',$SETs).' WHERE id='.$stud_data['rez'][0]['id']; $rez = $this->DB->QUR($sql); } }else{//добавим пользователя $fio1 = explode(' ',mb_strtolower($stud_data['data'][2])); $fio1_0_fl = mb_substr($fio1[1],0,1); $insert=false; $sql = 'SELECT * FROM acs_users WHERE fio LIKE "%'.$fio1[0].' '.$fio1_0_fl.'%" AND guid=""'; $rez = $this->DB->QUR_SEL($sql); if(!$rez['err']&&$rez['kol']){ echo $stud_data['data'][0].':'.$stud_data['fio'].PHP_EOL; print_r($rez); $update=false; if(count($rez['rez'])==1){ $rezi = $rez['rez'][0]; if($rezi['snils']!='' && $rezi['snils'] == $stud_data['data'][13]) $update=true; $phone1 = substr(preg_replace("/[^0-9]/", '', $stud_data['data'][14]),1); $phone2 = substr(preg_replace("/[^0-9]/", '', $rezi['phone']),1); if($phone1!=''&&$phone1==$phone2) $update=true; $fio1_2 = levenshtein($stud_data['data'][2],$rezi['fio']); if($fio1_2<=3) $update=true; } if($update==true){ if ($stud_data['data'][1] != '' && $stud_data['data'][1] != $rezi['guid']) $SETs[] = 'guid="' . $stud_data['data'][1] . '"'; if ($stud_data['data'][2] != '' && $stud_data['data'][2] != $rezi['fio']) $SETs[] = 'fio="' . $stud_data['data'][2] . '"'; if ($stud_data['data'][13] != '' && $stud_data['data'][13] != $rezi['snils']) $SETs[] = 'snils="' . $stud_data['data'][13] . '"'; if ($stud_data['data'][14] != '' && $stud_data['data'][14] != $rezi['phone'] && $stud_data['data'][14]!='<Не заполнен>') $SETs[] = 'phone="' . preg_replace("/[^0-9]/", '', $stud_data['data'][14]) . '"'; if(count($SETs)){ $sql = 'UPDATE acs_users SET '.implode(', ',$SETs).' WHERE id='.$rezi['id']; echo $sql.PHP_EOL; //$rez = $this->DB->QUR($sql); } } echo 'GUID: ' . $stud_data['data'][1] . ' ; Email:' . $stud_data['data'][4] . '; Группа: ' . $stud_data['data'][8] . '; Снилс: ' . $stud_data['data'][13] . '; Тел: ' . $stud_data['data'][14] . '; ' . PHP_EOL. PHP_EOL; }else $insert=true; $insert==false; if($insert==true) { if ($stud_data['data'][4] != '') $email = $stud_data['data'][4]; else { $email = $this->translit_email($fio1[0]) . '_' . mt_rand(10, 99) . '@student.mkgtu.ru'; } $pass = $this->gen_password_NEW1(); $sql = 'INSERT INTO acs_users VALUES(0,' . time() . ',' . time() . ',"' . $email . '","' . $this->passw_generate($pass) . '",0,"' . $this->DB->rescape($stud_data['data'][2]) . '","",1,"' . $this->DB->rescape($stud_data['data'][14]) . '","","' . $this->DB->rescape($stud_data['data'][13]) . '","' . $this->DB->rescape($stud_data['data'][1]) . '");'; //echo $sql.PHP_EOL; $rez = $this->DB->QUR($sql); if(!$rez['err']){ $tmp = array(); $tmp[] = date('H:i d.m.Y'); $tmp[] = $stud_data['data'][2]; $tmp[] = $stud_data['data'][3]; $tmp[] = $stud_data['data'][5]; $tmp[] = $stud_data['data'][8]; $tmp[] = $stud_data['data'][7]; $tmp[] = $stud_data['data'][10]; $tmp[] = $stud_data['data'][11]; $tmp[] = $pass; //$out[] = $tmp; file_put_contents('/home/admin/web/eios.mkgtu.ru/public_html/integration/upload/students_xlsx/inserts.csv','"'.implode('";"',$tmp).'";'.PHP_EOL,FILE_APPEND); } } //print_r($stud_data); //exit(); //Array( [err] => 1 // [rez] => Array() // [fio] => Ашуров Джамал Айяр // [data] => Array( // [0] => 1,020 // [1] => f695edeb-78f7-11ec-9a9c-1c6f6580f598 // [2] => Ашуров Джамал Айяр // [3] => 18002048 // [4] => // [5] => Экологический факультет // [6] => 3055eae1-5f16-11ec-80b4-a0369f032517 // [7] => Пятый // [8] => ПБ-51 // [9] => a87f6e88-b994-11ec-937d-f8cc6e370458 // [10] => 20.05.01 // [11] => Очная // [12] => Бюджетная основа // [13] => 161-691-700 69 // [14] => 9182229458 // [15] => 7/24/2023 12:00:00 AM // ) // [proc] => 90 //) } //{"err":0, "fio":"Ашинов Адам Юрьевич", //"rez":[{ "id":"22471", // "email":"ashinov.adam@bk.ru", "fio":"Ашинов Адам Юрьевич", // "phone":"+7-961-829-29-30", "polis":"", // "snils":"146-399-261 00", "guid":"05c6fa6d-4049-11e2-bcec-001cc0873e09", // "grupp":[{ // "id":"2520","sokr":"ТМО(м)-21","fo":"ОФО", // "year_start":"2022","num_zach":"","num_grupp":"0" // }] //}], //"data":["1,000", 0 - № п/п // "05c6fa6d-4049-11e2-bcec-001cc0873e09", 1 - GUID // "Ашинов Адам Юрьевич", 2 - ФИО // "22001125", 3 - Номер зачетной книжки // "", 4 - Эл.почта // "Технологический факультет", 5 - Факультет // "d4e5054d-5f00-11ec-80b4-a0369f032517", 6 - Факультет GUID // "Второй", 7 - Курс // "ТМО(м)-21", 8 - Группа // "51e3aee9-b1af-11ec-937c-f8cc6e370458", 9 - Группа GUID // "15.04.02", 10 - Код специальности // "Очная", 11 - Форма обучения // "Бюджетная основа", 12 - Основа обучения // "146-399-261 00", 13 - СНИЛС // "", 14 - Телефон // "10\/1\/2023 12:00:00 AM"], //"proc":90} } function translit_email($st) { $a = array_merge(array_combine(preg_split('//u', "абвгдеёзийклмнопрстуфхцьыэАБВГДЕЁЗИЙКЛМНОПРСТУФХЦЬЫЭabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"), preg_split('//u', "abvgdeeziyklmnoprstufhc_ieABVGDEEZIYKLMNOPRSTUFHC'IEabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_")), array("ж" => "zh", "ч" => "ch", "ш" => "sh", "щ" => "shch", "ъ" => "", "ю" => "yu", "я" => "ya", "Ж" => "Zh", "Ч" => "Ch", "Ш" => "Sh", "Щ" => "Shch", "Ъ" => "", "Ю" => "Yu", "Я" => "Ya")); $r = preg_split('//u', $st); $out = ''; foreach ($r as $v) { if (isset($a[$v])){ $out .= $a[$v]; } } return $out; } function gen_password_NEW1($length = 8){ $password = ''; $arr = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', '*', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', '!', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' ); for ($i = 0; $i < $length; $i++) { $password .= $arr[random_int(0, count($arr) - 1)]; } return $password; } function passw_generate($passw){ //include_once 'ps01salt.php'; return md5('MkGTU_'.$passw.'$_2010!'); } /** * Создание групп из 1С * @param $data * @return void */ function grupp_create_1c($data){ if($data['fo']=='Очная') $fo='ОФО'; if($data['fo']=='Заочная') $fo='ЗФО'; if($data['fo']=='Очно-заочная') $fo='ОЗФО'; if(date('m')>8) $year_start=date('Y'); else $year_start=date('Y')-1; //Таблица: acs_grupp_1c: id, name, guid, kurs, code_spec, fo, id_grupp $sql = 'SELECT id,id_grupp FROM acs_grupp_1c WHERE guid="'.$this->DB->rescape($data['guid']).'"'; $rez = $this->DB->QUR_SEL($sql); if(!$rez['err']&&$rez['kol']){ if($rez['rez'][0]['id_grupp']==0){ } }else{ $data['id_grupp'] = 0; $sql = 'SELECT id FROM acs_grupp WHERE sokr="'.$this->DB->rescape($data['name']).'" AND fo="'.$fo.'" AND year_start='.$year_start; $rez = $this->DB->QUR_SEL($sql); if(!$rez['err']&&$rez['kol']) $data['id_grupp'] = $rez['rez'][0]['id']; $sql = 'INSERT INTO acs_grupp_1c VALUES(0,"'.$this->DB->rescape($data['name']).'","'.$this->DB->rescape($data['guid']).'","'.$this->DB->rescape($data['kurs']).'","'.$this->DB->rescape($data['code_spec']).'","'.$this->DB->rescape($data['fo']).'",'.$data['id_grupp'].')'; $rez = $this->DB->QUR($sql); } } /** * Сканируем все файлы в системе и отображаем * @return array */ function files_scan(){ $out = array(); $dir = $this->DIRupload.'/'.$this->DIRstudents.'/'; $files = scandir($dir); $cSystem = new class_SYSTEM(); foreach($files as $k => $file) if($file!='.'&&$file!='..'){ $file_cur = $dir.$file; $tmp=array(); $pi = pathinfo($file_cur); if($pi['extension']=='xls'||$pi['extension']=='xlsx') { $tmp['file'] = $file_cur; $tmp['pi'] = $pi; $tmp['data_m'] = filemtime($file_cur); $tmp['data_c'] = filectime($file_cur); $tmp['size'] = $cSystem->human_filesize(filesize($file_cur)); $file_json = $pi['dirname'].'/'.$pi['filename'].'.json'; $tmp['is_json']=0; if(file_exists($file_json)) $tmp['is_json']=1; $file_checks = $pi['dirname'].'/'.$pi['filename'].'_checks.json'; $tmp['is_checks']=0; if(file_exists($file_checks)) $tmp['is_checks']=1; $file_csv = $pi['dirname'].'/'.$pi['filename'].'_report_double.csv'; $tmp['is_csv_double']=0; if(file_exists($file_csv)) { $tmp['is_csv_double']=1; $tmp['file_csv_double']=$file_csv; } $file_csv = $pi['dirname'].'/'.$pi['filename'].'_report_change.csv'; $tmp['is_csv_change']=0; if(file_exists($file_csv)) { $tmp['is_csv_change']=1; $tmp['file_csv_change']=$file_csv; } $out[] = $tmp; } } return $out; } /** * Получение пользователей * @param $filters (array) where(array) where_conc order(array) limit * @return array */ function users_get($filters=array()){ $out = array(); $WHERE = ''; $WHERE_CONC=' AND '; if(isset($filters['where_conc'])) $WHERE_CONC=$filters['where_conc']; if(isset($filters['where'])){ $tmp=array(); foreach($filters['where'] as $k => $v){ $tmp[] = $v; } $WHERE = ' WHERE '.implode($WHERE_CONC,$tmp); } $ORDER = ''; if(isset($filters['order'])){ $tmp=array(); foreach($filters['order'] as $k => $v){ $tmp[] = $v; } $ORDER = ' ORDER BY '.implode(', ',$tmp); } $LIMIT = ''; if(isset($filters['limit'])){ $LIMIT = $filters['limit']; } $sql = 'SELECT * FROM '.$this->TUsers.$WHERE.$ORDER.$LIMIT; $rez = $this->DB->QUR_SEL($sql); //$out['sql'] = $sql; if(!$rez['err']&&$rez['kol']) { foreach ($rez['rez'] as $key => $val) { $out['users'][] = $val; } } return $out; } }