| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- <?php
- namespace App\Services;
- use App\Exceptions\ErrorException;
- use App\Exceptions\PanicException;
- use App\MaterialBox;
- use App\StationTaskMaterialBox;
- use Illuminate\Http\Request;
- use Illuminate\Http\Response;
- use Illuminate\Support\Facades\Http;
- use Ramsey\Collection\Collection;
- class ForeignHaiRoboticsService
- {
- /** @var $stationTaskMaterialBoxService StationTaskMaterialBoxService */
- private $stationTaskMaterialBoxService;
- public function __construct()
- {
- $stationTaskMaterialBoxService=null;
- }
- /**
- * @param string $modeName '输送线入立架'|'立架出至输送线'|'移动立架内位置'|'缓存架入立架'|'立架出至缓存架'
- * @param string $fromLocation
- * @param string $toLocation
- * @param Collection $taskMaterialBoxes
- * @param string $groupId
- * @param int $priority
- * @param int $isSequenced
- * @return array
- */
- private function makeJson_move(
- Collection $taskMaterialBoxes,
- string $modeName,
- string $fromLocation='',
- string $toLocation='',
- $groupId=''
- , $priority=10
- , $isSequenced=1
- ){
- $timestampSuffix = microtime(true);
- $taskMode=(function()use($modeName){
- switch ($modeName){
- case '输送线入立架': return 1;
- case '立架出至输送线': return 2;
- case '移动立架内位置': return 3;
- case '缓存架入立架':
- case '立架出至缓存架': return 6;
- default: throw new \Exception('发至海柔的移料箱请求,模式不存在');
- }
- })();
- $bins=$taskMaterialBoxes->map(function (StationTaskMaterialBox $taskMaterialBox)use($timestampSuffix,$fromLocation,$toLocation){
- return [
- "taskCode" =>$taskMaterialBox['id'],
- "binCode" => $taskMaterialBox['materialBox']['code'],
- "fromLocCode" => $fromLocation??'',
- "toLocCode" => $toLocation??'',
- ];
- });
- return [
- "taskMode" =>$taskMode,
- "bins"=>$bins,
- "groupCode"=>$groupId.$timestampSuffix,
- "priority"=>$priority,
- "sequenceFlag"=>$isSequenced,
- ];
- }
- public function fetchGroup($toLocation, Collection $taskMaterialBoxes, $groupIdPrefix=''): bool
- {
- $dataToPost=$this->makeJson_move(
- $taskMaterialBoxes,
- '立架出至输送线',
- '',
- $toLocation,
- $groupIdPrefix
- );
- $response = Http::post(config('api.haiq.storage.moveBin'),$dataToPost);
- $errMsg=(function()use($response){
- if($response->ok())return '';
- $errMsg = '错误: ';
- if (!$response){
- return $errMsg.'没有返回内容,检查连接或目标服务器';
- }
- switch (((string)$response["code"])[0]){
- case 5: $errMsg.='目标服务器代码错误,请联系对方';break;
- case 4: $errMsg.='权限不足以请求资源,请检查对方服务器规范';break;
- default: $errMsg.='出现未知请求错误';break;
- }
- $responseDetails=' code:'.$response["code"]
- .' header:'.$response->body()
- .' response:'.json_encode($response->headers());
- return $errMsg.$responseDetails;
- })();
- LogService::log(__METHOD__,__FUNCTION__,
- $errMsg??''
- .'请求:'.json_encode($dataToPost)
- .'调用堆栈:'.json_encode(array_slice(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS),0,3))
- );
- return $isSuccess=!$errMsg;
- }
- public function moveBin(){
- }
- public function markBinProcessed(){
- }
- public function taskUpdate(
- // $groupCode,
- $taskCode,
- $updateEventType, //0:task_begin(取货)1:task_end(放货)
- $status, //0:任务成功1:任务失败
- $binCode
- ):bool{
- try{
- if(($failed
- =$status)==1){
- throw new ErrorException('海柔任务失败');
- }
- if($stationTaskMaterialBox
- =(function()use($taskCode,$binCode){
- $stationTaskMaterialBox=StationTaskMaterialBox::query()->find($taskCode);
- if($stationTaskMaterialBox['code']==$binCode)return $stationTaskMaterialBox;
- return null;
- })()){
- throw new ErrorException('发回的料箱和任务号(ID)不匹配');
- };
- if(($isPut
- =$updateEventType)==0){
- $this->stationTaskMaterialBoxService->markHasPut($stationTaskMaterialBox);
- }
- if(($isGet
- =$updateEventType)==1){
- $this->stationTaskMaterialBoxService->markHasTaken($stationTaskMaterialBox);
- }
- }catch (\Exception $e){
- $this->excepted($taskCode, $binCode);
- return false;
- }
- return true;
- }
- // public function markHasPut($taskCode,$binCode):bool{
- // try{
- // //标记料箱进入位置
- //// $taskMaterialBoxesService->markDone();//
- // }catch (\Exception $e){
- // switch ($e->getCode()){
- // case 'taskBinNotMatch';
- // case 'taskGetFailed';
- // }
- // }
- //
- // }
- public function excepted($taskCode,$binCode):bool{
- }
- }
|