Exemplo n.º 1
0
 public function workflowSave(Request $request)
 {
     $data = $request->all();
     DB::beginTransaction();
     try {
         $condition = array('ID' => $data['ID']);
         $objwf['NAME'] = $data['NAME'];
         $objwf['INTRO'] = $data['INTRO'];
         if ($data['ADD'] == 1) {
             $objwf['ISRUN'] = 'no';
         }
         $objwf['DATA'] = $data['KEY'];
         $objwf['ID'] = $data['ID'];
         $objwf['STATUS'] = 1;
         //\DB::enableQueryLog ();
         $tmWorkflow = TmWorkflow::updateOrCreate($condition, $objwf);
         //\Log::info ( \DB::getQueryLog () );
         $dom_xml = simplexml_load_string($data['KEY']);
         $cells = $dom_xml->xpath('//mxCell[@vertex = 1]/parent::*');
         $id_tasknew = array();
         foreach ($cells as $cell) {
             $objwf_task = [];
             $task = $cell->attributes();
             $objwf_task['ID'] = (int) $task['task_id'];
             $id_tasknew[] = $objwf_task['ID'];
             $objwf_task['WF_ID'] = $tmWorkflow->ID;
             if (isset($task['isbegin'])) {
                 $objwf_task['NAME'] = 'Begin';
                 $objwf_task['ISBEGIN'] = 1;
             }
             if (isset($task['isend'])) {
                 $objwf_task['NAME'] = 'End';
                 $objwf_task['ISBEGIN'] = -1;
             }
             if (isset($task['task_data']) && $task['task_data']) {
                 $param = json_decode($task['task_data']);
                 $cell_style = $cell->children()[0]->attributes()['style'];
                 if (strpos($cell_style, 'style_plus') !== false) {
                     $param->task_code = 'NODE_COMBINE';
                 } else {
                     if (strpos($cell_style, 'rhombus') !== false) {
                         $param->task_code = 'NODE_CONDITION';
                     }
                 }
                 $objwf_task['NAME'] = addslashes($param->name);
                 $objwf_task['RUNBY'] = addslashes($param->runby);
                 $objwf_task['USER'] = addslashes($param->user);
                 $objwf_task['TASK_GROUP'] = addslashes($param->task_group);
                 $objwf_task['TASK_CODE'] = addslashes($param->task_code);
             }
             if (isset($task['task_config'])) {
                 $objwf_task['TASK_CONFIG'] = $task['task_config'];
             }
             $objwf_task['NODE_CONFIG'] = '';
             if (isset($task['next_task_config'])) {
                 $objwf_task['NEXT_TASK_CONFIG'] = str_replace('NaN,', '', $task['next_task_config']);
             }
             if (isset($task['prev_task_config'])) {
                 $objwf_task['PREV_TASK_CONFIG'] = str_replace('NaN,', '', $task['prev_task_config']);
             }
             $conTask = array('ID' => $objwf_task['ID']);
             //\DB::enableQueryLog ();
             TmWorkflowTask::updateOrCreate($conTask, $objwf_task);
             //\Log::info ( \DB::getQueryLog () );
         }
         $ids_task = $this->getIdTaskByWf($data['ID']);
         $m = count($ids_task);
         for ($i = 0; $i < $m; $i++) {
             if (!in_array($ids_task[$i]['ID'], $id_tasknew)) {
                 //$objwf_task->Delete($ids_task[$i]);
                 TmWorkflowTask::where(['ID' => $ids_task[$i]['ID']])->delete();
             }
         }
     } catch (\Exception $e) {
         \Log::info($e->getMessage());
         DB::rollback();
     }
     DB::commit();
     return response()->json($tmWorkflow->ID);
 }