MappingStartModel.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. <?php
  2. namespace app\models;
  3. use yii\base\Model;
  4. use Yii;
  5. use yii\web\Controller;
  6. use app\models\MainModel;
  7. use app\models\ProcedureModel;
  8. use app\models\entity\Tasks;
  9. use app\models\ProjectsModel;
  10. use app\models\entity\Accounts;
  11. use app\models\entity\Sections;
  12. use app\models\LocomotiveModel;
  13. use app\models\entity\Tasktypes;
  14. use app\models\logger\LoggerFile;
  15. use app\models\entity\Repairtypes;
  16. use app\models\entity\Projecttypes;
  17. use app\models\entity\AsusgProject;
  18. use app\models\entity\AsusgJobPlan;
  19. use app\models\MappingHandlerModel;
  20. use app\models\entity\AsusgJob2Launch;
  21. use app\models\entity\AsusgProjectType;
  22. use app\models\entity\LocomotiveSeries;
  23. use app\models\entity\ProjectsLocotech;
  24. use app\models\entity\AsusgJob2Command;
  25. class MappingStartModel extends Model
  26. {
  27. // запускается периодически через крон
  28. private $logger;
  29. private $company;
  30. private function initLogger()
  31. {
  32. $log = new LoggerFile();
  33. $this->logger = new MappingHandlerModel($log);
  34. return true;
  35. }
  36. public function actionGetworks($company)
  37. {
  38. $this->initLogger();
  39. $this->company = $company;
  40. $GWparams = [//'url' => 'http://devplatform.digitaldepot.ru:8085/Thingworx/Things/2050UserLibraryExp/Services/my_works',
  41. 'url' => 'http://devplatform.digitaldepot.ru:8085/Thingworx/Things/SMoPPIntegrationLibrary/Services/getUserWorks',
  42. 'param' => '',
  43. 'login' => 'ПройдаковИА',
  44. 'pass' => 'Ip15351112'
  45. ];
  46. // список сотрудников онлайн
  47. $onlineUser = $this->getOnlineMobileUser($company);
  48. if( 0 == count($onlineUser)) {
  49. return 'Нет сотрудников онлайн';
  50. }
  51. //$this->logger->setLog('ID пользователя => ' . (int)$_SESSION["id"]);
  52. $this->logger->setLog( date("Y-m-d H:i:s") . "\n");
  53. $mainModel = new MainModel();
  54. // для каждого сотрудника онлайн запускаем проекты если они еще не запущены
  55. foreach($onlineUser as $user) {
  56. if( '' == $user->uuid and null == $user->uuid) {
  57. continue;
  58. }
  59. $GWparams['param'] = $user->uuid;
  60. $listWorks2 = json_decode($mainModel->curlRequest2($GWparams),true);
  61. //$listWorks2 = $this->prepareListWorks($listWorks2);
  62. $this->logger->setLog('Колличество работ из еипп =>'. count($listWorks2).' для сотрудника =>' . $user->id);
  63. $listIsabsentWorks2 = $this->Getisabsentworksjp($listWorks2); // вновь утвержденный план 1 | вернет список работ кот нет ( в JobPlan )
  64. $listIssetWorks3 = $this->Getissetworksjp($listWorks2);
  65. $this->logger->setLog('Колличество работ из еипп ( нет в jobplan) =>'. count($listIsabsentWorks2));
  66. $this->logger->setLog('Колличество работ из еипп ( есть в jobplan) =>'. count($listIssetWorks3));
  67. $this->logger->setLog('Сверхцикловые');
  68. $addJob2launch2 = $this->addJob2launch2($listIsabsentWorks2,$user);
  69. $this->logger->setLog('Мэппинг');
  70. $addJob2launch3 = $this->addJob2launch3($listIssetWorks3,$user);
  71. $this->logger->setLog("Интеграция сверхцикловых работ прошла без падений!\n=================== НОВАЯ ИТЕРАЦИЯ ==================================\n");
  72. //echo '<pre>';
  73. //var_dump($user->id,$listIsabsentWorks2);
  74. //var_dump($user->id,$listIssetWorks3);
  75. //var_dump($user->id,$listWorks2);
  76. //echo '</pre>';
  77. continue;
  78. }
  79. return true;//$listWorks;
  80. }
  81. public function actionDojob()
  82. {
  83. Yii::$app->db->createCommand('update `accounts_internal` set `last_seen_mobile` = NOW() where id in (351,349,350)')->execute();
  84. }
  85. public function actionDopro()
  86. {
  87. $JobPlanEntitty = AsusgJobplan::find()->where(['name' => 'Тормозное и пневматическое оборудование после ремонта испытать , отрегулировать согласно инструкции'])->one(); // 1204 1567
  88. $jsusgJob2CommandEntity = AsusgJob2Command::find()->where(['asusg_job_id' => $JobPlanEntitty->id])->all();
  89. foreach($jsusgJob2CommandEntity as $job) {
  90. echo '<pre>';
  91. var_dump('3 =>'. $job->id, $job->asusg_job_id);
  92. var_dump('3 =>'. $job->jobplantie->id);
  93. echo '</pre>';
  94. }
  95. exit;
  96. }
  97. public function actionProctest()
  98. {
  99. $procedureModel = new ProcedureModel();
  100. $procedureModel->asusg_build_and_start_project_auto(27,210);
  101. }
  102. public function Getisabsentworksjp( $listWorks = null){
  103. $result = [];
  104. if ( null == $listWorks) {
  105. return false;
  106. }
  107. foreach( $listWorks['data'] as $work) {
  108. $asusgJobPlan = AsusgJobPlan::find()->where(['name' => $work['work_name']])->one();
  109. if ( null == $asusgJobPlan ){
  110. $result[] = $work;
  111. }
  112. }
  113. return $result;
  114. }
  115. public function Getissetworksjp( $listWorks = null){
  116. $result = [];
  117. if ( null == $listWorks) {
  118. return false;
  119. }
  120. foreach( $listWorks['data'] as $work) {
  121. $asusgJobPlan = AsusgJobPlan::find()->where(['name' => $work['work_name']])->one();
  122. if ( null != $asusgJobPlan ){
  123. $result[] = $work;
  124. }
  125. }
  126. return $result;
  127. }
  128. public function getOnlineMobileUser($company){
  129. $result = [];
  130. $accountsEntity = \app\models\entity\Accounts::find()->where(['company' => $company])->all();
  131. foreach ($accountsEntity as $account) {
  132. //var_dump($account->id,'<br>');
  133. $last_seen_mobile = ( null != $account->last_seen_mobile )? new \DateTime($account->last_seen_mobile): $account->last_seen_mobile ;
  134. $online_mobile = $this->OnlineAccountCheck($this->TimeString($last_seen_mobile));
  135. //var_dump(( !$online_mobile ),'<br>');
  136. if ( !$online_mobile ){
  137. continue;
  138. }
  139. $result[] = $account;//['id' => $account->id, 'uuid' => $account->uuid];
  140. }
  141. return $result;
  142. }
  143. public function OnlineAccountCheck($last_seen)
  144. {
  145. $last_seen = date($last_seen);
  146. $time = (time()-strtotime($last_seen));
  147. if ($time <= Yii::$app->params['onlineMobileTimeoutSeconds'])
  148. return true;
  149. return false;
  150. }
  151. public function TimeString($timeobj)
  152. {
  153. if ($timeobj != null)
  154. return $timeobj->format('d.m.Y H:i');
  155. //return date('d.m.Y H:i', $timeobj);
  156. }
  157. public function getProjectType($repairName,$serieName)
  158. {
  159. $result = null;
  160. $repairtypesEntity = Repairtypes::findOne(['name' => $repairName]);
  161. $locomotiveSeriesEntity = LocomotiveSeries::findOne(['name' => $serieName]);
  162. $asusgProjectTypeEntity = AsusgProjectType::findOne(['repair_type' => $repairtypesEntity->id , 'loco_serie_id' => $locomotiveSeriesEntity->id]);
  163. if ( null != $asusgProjectTypeEntity->id ) {
  164. $result = $asusgProjectTypeEntity->id;
  165. }
  166. return $result;
  167. }
  168. public function addJob2launch2($listWorks,$user)
  169. {
  170. foreach ( $listWorks as $work) {
  171. $projtype = $this->getProjectType($work["repair_name"],$work["eq_serie"]);
  172. $let = mb_substr($work["section_lit"], -1);
  173. $resultArr = [];
  174. $asusgJob2LaunchEntity = new AsusgJob2Launch();
  175. $asusgJob2LaunchEntity->asusg_jobplan_id = Yii::$app->params['supercycleplan'];
  176. $asusgJob2LaunchEntity->asusg_employee_id1 = $user->id;
  177. $asusgJob2LaunchEntity->asusg_job_uuid = $work['id_work'];
  178. $asusgJob2LaunchEntity->employees_uuid = $user->id;
  179. $asusgJob2LaunchEntity->section_uuid = $work["section_id"];
  180. $asusgJob2LaunchEntity->asusg_project_id = 0;
  181. $asusgJob2LaunchEntity->job_order = 0;
  182. //$asusgJob2LaunchEntity->asusg_projecttype_id = 0;
  183. $asusgJob2LaunchEntity->asusg_projecttype_id = $projtype;
  184. if (!$asusgJob2LaunchEntity->save()) {
  185. $this->logger->setLog('в Job2launch не добавилась работа => "'. $work['work_name']. '" Добавление работ будет пропущено так как такая запись уже есть.');
  186. continue;
  187. }
  188. $this->logger->setLog('в Job2launch была добавлена работа => "'. $work['work_name'].'"');
  189. $tasktypesEntity = Tasktypes::find()->where(['name' => 'Секция '.$let.', задача','company' => $this->company])->one();
  190. $tasksEntity = new Tasks();
  191. $tasksEntity->parent_id = 0;
  192. $tasksEntity->status = 2;
  193. $tasksEntity->type = $tasktypesEntity->id;
  194. $tasksEntity->assignees_arr = $user->id;
  195. $tasksEntity->created = date("Y-m-d H:i;s");
  196. $tasksEntity->asusg_job_mapped_id = $asusgJob2LaunchEntity->id;
  197. if($tasksEntity->save()) {
  198. $this->logger->setLog('в Tasks была добавлена ЗАДАЧА => "'. $work['work_name'] . '" id => '.$tasksEntity->id);
  199. } else {
  200. $this->logger->setLog('в Tasks была НЕ добавлена ЗАДАЧА => "'. $work['work_name'] . '" id => '.$tasksEntity->id);
  201. }
  202. var_dump($tasksEntity->errors,$user->id); echo '<br>';
  203. $tasksEntity2 = new Tasks();
  204. $tasksEntity2->parent_id = $tasksEntity->id;
  205. $tasksEntity2->status = 2;
  206. $tasksEntity2->priority = 1;
  207. $tasksEntity2->created = date("Y-m-d H:i;s");
  208. $tasksEntity2->type = Yii::$app->params['supercycletype'];
  209. $tasksEntity2->assignees_arr = $user->id;
  210. $tasksEntity2->asusg_job_mapped_id = $asusgJob2LaunchEntity->id;
  211. $tasksEntity2->text = $work["outfit"] . ': ' . $work['work_name'];
  212. $tasksEntity2->mapping_comment = $work["outfit"] . ': ' . $work['work_name'];
  213. if ( $tasksEntity2->save()) {
  214. $this->logger->setLog('в Tasks была добавлена КОМАНДА => "'. $work['work_name'] . '" id => '.$tasksEntity2->id);
  215. } else {
  216. $this->logger->setLog('в Tasks была НЕ добавлена КОМАНДА => "'. $work['work_name'] . '" id => '.$tasksEntity2->id);
  217. }
  218. $projId = $this->generateProject($work);
  219. $tasksEntity->input_id = $projId;
  220. if ($tasksEntity->save()) {
  221. $this->logger->setLog('привязка ЗАДАЧИ ( id = '.$tasksEntity->id.') прошла успешно');
  222. }
  223. $tasksEntity2->input_id = $projId;
  224. $this->logger->setLog('2 =>' .$asusgJob2LaunchEntity->id);
  225. if($tasksEntity2->save()){
  226. $this->logger->setLog('привязка КОМАНДЫ ( id = '.$tasksEntity2->id.') прошла успешно');
  227. }
  228. //echo "<pre>";
  229. //var_dump($tasksEntity2->errors,$tasksEntity->errors);
  230. //echo "</pre>";
  231. }
  232. }
  233. public function addJob2launch3($listWorks,$user)
  234. {
  235. foreach ( $listWorks as $work) {
  236. $projtype = $this->getProjectType($work["repair_name"],$work["eq_serie"]);
  237. $JobPlanEntitty = AsusgJobplan::find()->where(['name' => $work["work_name"]])->one(); // 1204 1567
  238. $jsusgJob2CommandEntity = AsusgJob2Command::find()->where(['asusg_job_id' => $JobPlanEntitty->id, 'asusg_projecttype_id' => $projtype ])->all();
  239. //echo "<pre>";
  240. //var_dump($job->asusgJob2Launch->asusg_project_id);
  241. //var_dump($JobPlanEntitty->id,$jsusgJob2CommandEntity);
  242. //echo "</pre>";
  243. //continue;
  244. $let = mb_substr($work["section_lit"], -1);
  245. $resultArr = [];
  246. $asusgJob2LaunchEntity = new AsusgJob2Launch();
  247. $asusgJob2LaunchEntity->asusg_jobplan_id = $JobPlanEntitty->id;
  248. $asusgJob2LaunchEntity->asusg_employee_id1 = $user->id;
  249. $asusgJob2LaunchEntity->asusg_job_uuid = $work['id_work'];
  250. $asusgJob2LaunchEntity->employees_uuid = $user->id;
  251. $asusgJob2LaunchEntity->section_uuid = $work["section_id"];
  252. $asusgJob2LaunchEntity->asusg_project_id = 0;
  253. $asusgJob2LaunchEntity->job_order = 0;
  254. $asusgJob2LaunchEntity->asusg_projecttype_id = $projtype;
  255. if (!$asusgJob2LaunchEntity->save()) {
  256. $this->logger->setLog('в Job2launch не добавилась работа => "'. $work['work_name']. '" Добавление работ будет пропущено так как такая запись уже есть.');
  257. continue;
  258. }
  259. $this->logger->setLog('в Job2launch была добавлена работа => "'. $work['work_name'].'"');
  260. $tasktypesEntity = Tasktypes::find()->where(['name' => 'Секция '.$let.', задача','company' => $this->company])->one();
  261. $tasksEntity = new Tasks();
  262. $tasksEntity->parent_id = 0;
  263. $tasksEntity->status = 2;
  264. $tasksEntity->type = $tasktypesEntity->id;
  265. $tasksEntity->assignees_arr = $user->id;
  266. $tasksEntity->created = date("Y-m-d H:i;s");
  267. $tasksEntity->asusg_job_mapped_id = $asusgJob2LaunchEntity->id;
  268. if($tasksEntity->save()) {
  269. $this->logger->setLog('в Tasks была добавлена ЗАДАЧА => "'. $work['work_name'] . '" id => '.$tasksEntity->id);
  270. } else {
  271. $this->logger->setLog('в Tasks была НЕ добавлена ЗАДАЧА => "'. $work['work_name'] . '" id => '.$tasksEntity->id);
  272. }
  273. //var_dump($tasksEntity->errors,$user->id); echo '<br>';
  274. $this->logger->setLog(' колво записей => ' . count($jsusgJob2CommandEntity) . 'type => '. gettype($jsusgJob2CommandEntity));
  275. $this->logger->setLog($JobPlanEntitty->id . ' - ' . $projtype );
  276. $arrJ = [];
  277. $countPriority = 1;
  278. foreach($jsusgJob2CommandEntity as $job) {
  279. $this->logger->setLog('3 =>'. $job->jobplantie->id);
  280. $tasksEntity2 = new Tasks();
  281. $tasksEntity2->parent_id = $tasksEntity->id;
  282. $tasksEntity2->status = 2;
  283. $tasksEntity2->priority = $countPriority;
  284. // $tasksEntity2->input_id = $job->asusgJob2Launch->asusg_project_id;
  285. $tasksEntity2->created = date("Y-m-d H:i;s");
  286. $tasksEntity2->type = $job->smopp_cmd_id;//Yii::$app->params['supercycletype'];
  287. $tasksEntity2->assignees_arr = $user->id;
  288. $tasksEntity2->asusg_job_mapped_id = $job->jobplantie->id;
  289. $tasksEntity2->text = $work["outfit"] . ':' . $work['work_name'];
  290. $tasksEntity2->mapping_comment = $work["outfit"] . ': ' . $work['work_name'];
  291. if ( $tasksEntity2->save()) {
  292. $arrJ[] = $tasksEntity2->id;
  293. $this->logger->setLog('в Tasks была добавлена КОМАНДА => "'. $work['work_name'] . '" id => '.$tasksEntity2->id);
  294. } else {
  295. $this->logger->setLog('в Tasks была НЕ добавлена КОМАНДА => "'. $work['work_name'] . '" id => '.$tasksEntity2->id);
  296. }
  297. $countPriority++;
  298. }
  299. $projId = $this->generateProject3($work);
  300. $tasksEntity->input_id = $projId;
  301. if ($tasksEntity->save()) {
  302. $this->logger->setLog('привязка ЗАДАЧИ ( id = '.$tasksEntity->id.') прошла успешно');
  303. }
  304. foreach($arrJ as $job_id) {
  305. $tasksEnt = Tasks::findOne($job_id);
  306. $tasksEnt->input_id = $projId;
  307. if($tasksEnt->save()){
  308. $this->logger->setLog('привязка КОМАНДЫ ( id = '.$tasksEntity2->id.') прошла успешно');
  309. }
  310. }
  311. //$tasksEntity2->input_id = $projId;
  312. //if($tasksEntity2->save()){
  313. // $this->logger->setLog('привязка КОМАНДЫ ( id = '.$tasksEntity2->id.') прошла успешно');
  314. //}
  315. echo "<pre>";
  316. //var_dump($job->asusgJob2Launch->asusg_project_id);
  317. var_dump($tasksEntity2->errors,$tasksEntity->errors);
  318. echo "</pre>";
  319. }
  320. }
  321. public function generateProject($work){
  322. $result = '';
  323. $let = mb_substr($work["section_lit"], -1);
  324. $sectionsEntity = Sections::find()->select(['id', 'diagnostic_map'])
  325. ->where(['locomotive_series' => $work["eq_serie"],'section_number' => mb_substr($work['section_lit'],0,-1),'letter' => $let])
  326. ->one();
  327. $diagnostic_map = $sectionsEntity->diagnostic_map;
  328. if ( null == $sectionsEntity->id) {
  329. $sectionsEntity = new Sections();
  330. $sectionsEntity->locomotive_series = $work["eq_serie"];
  331. $sectionsEntity->section_number = mb_substr($work['section_lit'],0,-1);
  332. $sectionsEntity->section_subnumber = $work["section_num"];
  333. $sectionsEntity->diagnostic_map = $work["section_DK"];
  334. $sectionsEntity->uuid = $work["section_id"];
  335. $sectionsEntity->letter = $let;
  336. if ( $sectionsEntity->save()) {
  337. $this->logger->setLog('в Sections была добавлена новая секция => '. $work["section_num"] . ' id => '.$sectionsEntity->id);
  338. } else {
  339. $this->logger->setLog('в Sections при добавлении секции произошли ошибки => '. count($sectionsEntity->errors) . ' шт.');
  340. }
  341. $diagnostic_map = $sectionsEntity->diagnostic_map;
  342. }
  343. else if( null == $sectionsEntity->diagnostic_map ) {
  344. $sectionsEntity->diagnostic_map = $work['section_DK'];
  345. $sectionsEntity->save();
  346. }
  347. if ($sectionsEntity->diagnostic_map == $work['section_DK'] ) {
  348. $query = "select pl.id from projects_locotech pl
  349. inner join tasks t on pl.id = t.input_id
  350. left join tasktypes tt on t.type = tt.id
  351. where pl.company = " . $this->company . "
  352. and pl.loco_type = '" . $work["eq_serie"] . "'
  353. and pl.loco_number = " . $work["eq_number"] . "
  354. and t.parent_id = 0
  355. and tt.letter like '%" . $let . "%'
  356. and pl.uuid like '%" . $work['repair_name']. ",%'
  357. order by pl.id desc
  358. limit 1";
  359. $projectId = Yii::$app->db->createCommand($query)->queryOne();
  360. $result = $projectId['id'];
  361. $this->logger->setLog('в Sections секция с такой диагностической картой => '. $work['section_DK'] . ' существует. Ид проекта '. $result);
  362. }
  363. if (!$result) {
  364. $projectsLocotech = new ProjectsLocotech();
  365. $projectsLocotech->action = 197 ;
  366. $projectsLocotech->company = $this->company;
  367. $projectsLocotech->status = 2;
  368. $projectsLocotech->loco_type = $work["eq_serie"];
  369. $projectsLocotech->loco_number = $work["eq_number"];
  370. $projectsLocotech->depo ='' ;
  371. $projectsLocotech->depo_service = '';
  372. $projectsLocotech->created = date('Y-m-d H:i:s');
  373. $projectsLocotech->urgent = 0;
  374. $projectsLocotech->uuid = $work['work_name'].":".$work['repair_name'].",".$work["eq_serie"];
  375. $projectsLocotech->save();
  376. $result = $projectsLocotech->id;
  377. $this->logger->setLog('Такого проекта еще не было пришлось создать. Ид проекта => '. $result);
  378. }
  379. //var_dump($result);
  380. return $result;
  381. }
  382. public function generateProject3($work){
  383. $result = '';
  384. $projectsLocotech = new ProjectsLocotech();
  385. $projectsLocotech->action = 197 ;
  386. $projectsLocotech->company = $this->company;
  387. $projectsLocotech->status = 2;
  388. $projectsLocotech->loco_type = $work["eq_serie"];
  389. $projectsLocotech->loco_number = $work["eq_number"];
  390. $projectsLocotech->depo ='' ;
  391. $projectsLocotech->depo_service = '';
  392. $projectsLocotech->created = date('Y-m-d H:i:s');
  393. $projectsLocotech->urgent = 0;
  394. $projectsLocotech->uuid = $work['work_name'].":".$work['repair_name'].",".$work["eq_serie"];
  395. $projectsLocotech->save();
  396. $result = $projectsLocotech->id;
  397. $this->logger->setLog('Такого проекта еще не было пришлось создать. Ид проекта => '. $result);
  398. //var_dump($result);
  399. return $result;
  400. }
  401. }