data = $data; $this->type = $type; $this->site = $site ?? '91451322MA5P9JNKXA'; $this->device_id = $device_id; } /** * Execute the job. * * @return void */ public function handle() { try{ $epc = $this->data; $type = $this->type;//1 入库 2 出库 $order_number = []; foreach ($epc as $value){ $str = @hex2bin($value); $str = ltrim($str, "\x00");// 代0字符串 $str = str_replace(chr(26), '', $str); //过滤CRTL-Z字符 if(! empty($str) && substr($str, 0, 2) === "BZ"){ if(! in_array($str, $order_number)) $order_number[] = $str; // 十六进制字符串转回原来字符串 } } file_put_contents('record_door_data.txt',date("Y-m-d H:i:s",time())."原数据:".json_encode($epc) . "解析后:" . json_encode($order_number) .PHP_EOL.'start'.PHP_EOL,8); if(empty($order_number)) return; $this->zs($type,$order_number); //输出信息 测试 $this->echoMessage(new ConsoleOutput()); }catch (\Exception $exception){ file_put_contents('record_door_error.txt',date("Y-m-d H:i:s",time()).json_encode($this->data) . PHP_EOL.$exception->getMessage()."line" . $exception->getLine().PHP_EOL,8); } } //测试-------------------------------------- public function getDeviceStateCs($data){ if(empty($data)) return []; list($status,$token) = ClearDataService::getTokenCs(); if(! $status) return []; $site = $this->site; $url = "http://121.36.142.167:7774/jbl/api/module-data/device/device/diy/machine_code_list"; $post = [ 'machine_code_list' => $data, ]; $header = ["Authorization: Bearer {$token}","Content-Type:application/json","Site:{$site}"]; $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',json_encode($post)); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $json, CURLOPT_HTTPHEADER => $header, )); $response = curl_exec($curl); curl_close($curl); file_put_contents('record_door_result_cs.txt',date('Y-m-d H:i:s'). PHP_EOL . $response .PHP_EOL.'getDoorState'.PHP_EOL,8); $result = json_decode($response,true); if(empty($result)) return false; $first = $result[0]; return $first['status']; } public function productionReceiptCs($data){ list($status,$token) = ClearDataService::getTokenCs(); if(! $status) return; $site = $this->site; $url = "http://121.36.142.167:7774/jbl/api/module-data/box_orders/box_orders/diy/production_receipt"; $post = [ 'defective_order_no_list' => $data, ]; $header = ["Authorization: Bearer {$token}","Content-Type:application/json","Site:{$site}"]; $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',json_encode($post)); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $json, CURLOPT_HTTPHEADER => $header, )); $response = curl_exec($curl); curl_close($curl); file_put_contents('record_door_result_cs.txt',date('Y-m-d H:i:s'). PHP_EOL . $response .PHP_EOL.'in_opt'.PHP_EOL,8); $return = json_decode($response,true); if(! empty($return['data'])){ $expire_time = 10; $key = $this->device_id . InOutOptionService::OrderKeyQueueIn; Redis::set($key, json_encode($return['data'])); Redis::expire($key, $expire_time); } } public function getDispatchListCs($data){ if(empty($data)) return []; list($status,$token) = ClearDataService::getTokenCs(); if(! $status) return []; $site = $this->site; $url = "http://121.36.142.167:7774/jbl/api/module-data/box_orders/box_orders/diy/defective_order_no_list"; $post = [ 'defective_order_no_list' => $data, ]; $header = ["Authorization: Bearer {$token}","Content-Type:application/json","Site:{$site}"]; $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',json_encode($post)); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $json, CURLOPT_HTTPHEADER => $header, )); $response = curl_exec($curl); curl_close($curl); file_put_contents('record_door_result_cs.txt',date('Y-m-d H:i:s'). PHP_EOL . $response .PHP_EOL.'getlist'.PHP_EOL,8); return json_decode($response,true); } public function completionOrdersCs($data,$type){ list($status,$token) = ClearDataService::getTokenCs(); if(! $status) return; $site = $this->site; $device_id = $this->device_id; //组织数据 $main_dtl = $orderNo = []; if($type == 1){ $opt = InOutOptionService::OrderKeyQueueIn; $url = 'http://121.36.142.167:7774/jbl/api/module-data/production_receipt/production_receipt'; $dynamicFormId = "473758926009479168"; $showModelId = "473761325902147584"; foreach ($data as $value){ if(empty($value['box_orders']['delivery_status'])){ $main_dtl[] = [ "product_code"=> $value['brand_code'], "product_title"=> $value['product_title'], "product_size"=> $value['product_size'], "color"=> $value['color'], "color_two"=> $value['color_two'], "product_unit_title"=> $value['product_unit_title'], "product_unit"=> $value['product_unit'], "color_code"=> $value['color_code'], "color_code_two"=> $value['color_code_two'], "in_num"=> $value['box_num'], ]; if(! in_array($value['box_orders']['defective_order_no'], $orderNo)) $orderNo[] = $value['box_orders']['defective_order_no']; } } $datas = [ 'production_receipt' => [ 'production_receipt_no' => null, 'in_out_type' => 'RK007', 'box_title' => 'WH05001', 'in_time' => gmdate("Y-m-d\TH:i:s.000\Z"), 'status' => "NOT_APPROVED", ], 'production_receipt_dtl' => $main_dtl ]; }else{ $opt = InOutOptionService::OrderKeyQueueOut; $url = 'http://121.36.142.167:7774/jbl/api/module-data/picking_out/picking_out'; $dynamicFormId = "473763313217908736"; $showModelId = "473771977253269504"; foreach ($data as $value){ if(empty($value['box_orders']['delivery_status'])){ $main_dtl[] = [ "product_code"=> $value['brand_code'], "product_title"=> $value['product_title'], "product_size"=> $value['product_size'], "color"=> $value['color'], "color_two"=> $value['color_two'], "product_unit_title"=> $value['product_unit_title'], "product_unit"=> $value['product_unit'], "color_code"=> $value['color_code'], "color_code_two"=> $value['color_code_two'], "in_num"=> $value['box_num'], ]; if(! in_array($value['box_orders']['defective_order_no'], $orderNo)) $orderNo[] = $value['box_orders']['defective_order_no']; } } $datas = [ 'picking_out' => [ 'picking_out_no' => null, 'in_out_type' => 'CK010', 'box_title' => 'WH05001', 'out_time' => gmdate("Y-m-d\TH:i:s.000\Z"), 'status' => "NOT_APPROVED", ], 'picking_out_product' => $main_dtl ]; } if(! empty($main_dtl)){ //有产品 $post = [ "bizTypeEk" => "LOWCODE", "bizId" => -1, "data" => $datas, "dynamicFormId" => $dynamicFormId, "showModelId" => $showModelId ]; } //组织数据------ file_put_contents('record_door_result_cs.txt',date('Y-m-d H:i:s'). PHP_EOL . json_encode($post) .PHP_EOL.'post'.PHP_EOL,8); $header = ["Authorization: Bearer {$token}","Content-Type:application/json","Site:{$site}"]; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode($post), CURLOPT_HTTPHEADER => $header, )); $response = curl_exec($curl); curl_close($curl); $result = json_decode($response,true); if(! empty($result['createdDate'])) { $expire_time = 10; $key = $device_id . $opt; Redis::set($key, json_encode($orderNo)); Redis::expire($key, $expire_time); } file_put_contents('record_door_result_cs.txt',date('Y-m-d H:i:s'). PHP_EOL . $response .PHP_EOL.'create'.PHP_EOL,8); } public function cs($type,$order_number){ //获取是否开启通道门 $bool = $this->getDeviceStateCs([$this->device_id]); if(! $bool) { file_put_contents('record_door_result.txt',date("Y-m-d H:i:s",time()).'door_not_open'.PHP_EOL,8); return; } if($type == 1){ //入库 $this->productionReceiptCs($order_number); }else{ //出库 //获取包装单产品 $dispatchList = $this->getDispatchListCs($order_number); if(empty($dispatchList) || empty($dispatchList['data'])) { file_put_contents('record_door_result.txt',date("Y-m-d H:i:s",time()).'getlist_end'.PHP_EOL,8); return; } $this->completionOrdersCs($dispatchList['data'],$type); } } //测试-------------------------------------- //正式-------------------------------------- public function getDeviceState($data){ if(empty($data)) return []; list($status,$token) = ClearDataService::getToken(); if(! $status) return []; $site = $this->site; $url = "http://122.112.250.253:7774/jbl/api/module-data/device/device/diy/machine_code_list"; $post = [ 'machine_code_list' => $data, ]; $header = ["Authorization: Bearer {$token}","Content-Type:application/json","Site:{$site}"]; $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',json_encode($post)); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $json, CURLOPT_HTTPHEADER => $header, )); $response = curl_exec($curl); curl_close($curl); file_put_contents('record_door_result.txt',date('Y-m-d H:i:s'). PHP_EOL . $response .PHP_EOL.'getDoorState'.PHP_EOL,8); $result = json_decode($response,true); if(empty($result)) return false; $first = $result[0]; return $first['status']; } public function productionReceipt($data){ list($status,$token) = ClearDataService::getToken(); if(! $status) return; $site = $this->site; $url = "http://122.112.250.253:7774/jbl/api/module-data/box_orders/box_orders/diy/production_receipt"; $post = [ 'defective_order_no_list' => $data, ]; $header = ["Authorization: Bearer {$token}","Content-Type:application/json","Site:{$site}"]; $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',json_encode($post)); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $json, CURLOPT_HTTPHEADER => $header, )); $response = curl_exec($curl); curl_close($curl); file_put_contents('record_door_result.txt',date('Y-m-d H:i:s'). PHP_EOL . $response .PHP_EOL.'in_opt'.PHP_EOL,8); $return = json_decode($response,true); if(! empty($return['data'])){ $expire_time = 10; $key = $this->device_id . InOutOptionService::OrderKeyQueueIn; Redis::set($key, json_encode($return['data'])); Redis::expire($key, $expire_time); } } public function getDispatchList($data){ if(empty($data)) return []; list($status,$token) = ClearDataService::getToken(); if(! $status) return []; $site = $this->site; $url = "http://122.112.250.253:7774/jbl/api/module-data/box_orders/box_orders/diy/defective_order_no_list"; $post = [ 'defective_order_no_list' => $data, ]; $header = ["Authorization: Bearer {$token}","Content-Type:application/json","Site:{$site}"]; $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',json_encode($post)); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $json, CURLOPT_HTTPHEADER => $header, )); $response = curl_exec($curl); curl_close($curl); file_put_contents('record_door_result.txt',date('Y-m-d H:i:s'). PHP_EOL . $response .PHP_EOL.'getlist'.PHP_EOL,8); return json_decode($response,true); } public function completionOrders($data,$type){ list($status,$token) = ClearDataService::getToken(); if(! $status) return; $site = $this->site; $device_id = $this->device_id; //组织数据 $main_dtl = $orderNo = []; if($type == 1){ $opt = InOutOptionService::OrderKeyQueueIn; $url = 'http://122.112.250.253:7774/jbl/api/module-data/production_receipt/production_receipt'; $dynamicFormId = "473758926009479168"; $showModelId = "473761325902147584"; foreach ($data as $value){ if(empty($value['box_orders']['delivery_status'])){ $main_dtl[] = [ "product_code"=> $value['brand_code'], "product_title"=> $value['product_title'], "product_size"=> $value['product_size'], "color"=> $value['color'], "color_two"=> $value['color_two'], "product_unit_title"=> $value['product_unit_title'], "product_unit"=> $value['product_unit'], "color_code"=> $value['color_code'], "color_code_two"=> $value['color_code_two'], "in_num"=> $value['box_num'], ]; if(! in_array($value['box_orders']['defective_order_no'], $orderNo)) $orderNo[] = $value['box_orders']['defective_order_no']; } } $datas = [ 'production_receipt' => [ 'production_receipt_no' => null, 'in_out_type' => 'RK007', 'box_title' => 'WH05001', 'in_time' => gmdate("Y-m-d\TH:i:s.000\Z"), 'status' => "NOT_APPROVED", ], 'production_receipt_dtl' => $main_dtl ]; }else{ $opt = InOutOptionService::OrderKeyQueueOut; $url = 'http://122.112.250.253:7774/jbl/api/module-data/picking_out/picking_out'; $dynamicFormId = "473763313217908736"; $showModelId = "473771977253269504"; foreach ($data as $value){ if(empty($value['box_orders']['delivery_status'])){ $main_dtl[] = [ "product_code"=> $value['brand_code'], "product_title"=> $value['product_title'], "product_size"=> $value['product_size'], "color"=> $value['color'], "color_two"=> $value['color_two'], "product_unit_title"=> $value['product_unit_title'], "product_unit"=> $value['product_unit'], "color_code"=> $value['color_code'], "color_code_two"=> $value['color_code_two'], "in_num"=> $value['box_num'], ]; if(! in_array($value['box_orders']['defective_order_no'], $orderNo)) $orderNo[] = $value['box_orders']['defective_order_no']; } } $datas = [ 'picking_out' => [ 'picking_out_no' => null, 'in_out_type' => 'CK010', 'box_title' => 'WH05001', 'out_time' => gmdate("Y-m-d\TH:i:s.000\Z"), 'status' => "NOT_APPROVED", ], 'picking_out_product' => $main_dtl ]; } if(! empty($main_dtl)){ //有产品 $post = [ "bizTypeEk" => "LOWCODE", "bizId" => -1, "data" => $datas, "dynamicFormId" => $dynamicFormId, "showModelId" => $showModelId ]; }else{ file_put_contents('record_door_result.txt',date('Y-m-d H:i:s'). PHP_EOL . "no_products" .PHP_EOL.'post'.PHP_EOL,8); } //组织数据------ file_put_contents('record_door_result.txt',date('Y-m-d H:i:s'). PHP_EOL . json_encode($post) .PHP_EOL.'post'.PHP_EOL,8); $header = ["Authorization: Bearer {$token}","Content-Type:application/json","Site:{$site}"]; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode($post), CURLOPT_HTTPHEADER => $header, )); $response = curl_exec($curl); curl_close($curl); $result = json_decode($response,true); if(! empty($result['createdDate'])) { $expire_time = 10; $key = $device_id . $opt; Redis::set($key, json_encode($orderNo)); Redis::expire($key, $expire_time); } file_put_contents('record_door_result.txt',date('Y-m-d H:i:s'). PHP_EOL . $response .PHP_EOL.'create'.PHP_EOL,8); } public function zs($type,$order_number){ //获取是否开启通道门 $bool = $this->getDeviceState([$this->device_id]); if(! $bool) { file_put_contents('record_door_result.txt',date("Y-m-d H:i:s",time()).'door_not_open'.PHP_EOL,8); return; } if($type == 1){ //入库 $this->productionReceipt($order_number); }else{ //出库 //获取包装单产品 $dispatchList = $this->getDispatchList($order_number); if(empty($dispatchList) || empty($dispatchList['data'])) { file_put_contents('record_door_result.txt',date("Y-m-d H:i:s",time()).'getlist_end'.PHP_EOL,8); return; } $this->completionOrders($dispatchList['data'],$type); } } //正式-------------------------------------- protected function echoMessage(OutputInterface $output) { $output->writeln($this->data); } }