stationService=null; $this->stationTypeService=null; $this->stationTaskService=null; $this->materialBoxService=null; } function get(array $kvPairs){ ksort($kvPairs); return Cache::remember('stationTaskChild_'.md5(json_encode($kvPairs)), config('cache.expirations.oftenChange'), function ()use($kvPairs) { $query = StationTaskCommodity::query(); foreach ($kvPairs as $column => $value){ if (is_array($value))$query->whereIn($column,$value); else $query->where($column,$value); } return $query->get(); }); } function createByBatches(Collection $batches,Collection $stationTasks_toAttach): Collection { $this->instant($this->stationTaskService,'StationTaskService'); $stationTaskCommodities_listByBatch=new Collection(); $stationTaskCommodities=new Collection(); foreach ($batches as $batch){ $taskCommodities = $this->createByBatch($batch); $stationTaskCommodities= $stationTaskCommodities->merge($taskCommodities); $stationTaskCommodities_listByBatch->push($taskCommodities); } // $stationTaskCommodities=$this->getAndAttachIds($stationTaskCommodities); $this->stationTaskService->registerSubTasks( $stationTasks_toAttach, $stationTaskCommodities_listByBatch); return $stationTaskCommodities; } // function getAndAttachIds($taskCommodities): Collection // { // $md5=is_array($taskCommodities) // ?$md5=md5(json_encode($taskCommodities)):null; // // return Cache::remember( // 'StationTaskCommodity_'.$md5??md5(json_encode($taskCommodities->toArray())) // ,config('cache.expirations.rarelyChange') // ,function()use($taskCommodities){ // $a=data_get($taskCommodities,'*.status'); // $a2=data_get($taskCommodities,'*.station_task_batch_id'); // $a3=data_get($taskCommodities,'*.commodity_id'); // $a4=StationTaskCommodity::query() // ->whereIn('status',data_get($taskCommodities,'*.status')) // ->whereIn('station_task_batch_id',data_get($taskCommodities,'*.station_task_batch_id')) // ->whereIn('commodity_id',data_get($taskCommodities,'*.commodity_id')) // ->get(); // $a5=1; // return StationTaskCommodity::query() // ->whereIn('status',data_get($taskCommodities,'*.status')) // ->whereIn('station_task_batch_id',data_get($taskCommodities,'*.station_task_batch_id')) // ->whereIn('commodity_id',data_get($taskCommodities,'*.commodity_id')) // ->get(); // }); // } function createByBatch(Batch $batch): Collection { $this->instant($this->stationTypeService,'StationTypeService'); $this->instant($this->stationService,'StationService'); $this->instant($this->materialBoxService,'MaterialBoxService'); $stationTaskCommodities_toCreate=new Collection(); $order_ids=data_get($batch['orders'],'*.id'); $orderCommodities=OrderCommodity::query()->with('orderBin')->whereIn('order_id',$order_ids)->get(); foreach ($orderCommodities as $orderCommodity){ $stationType=$this->stationTypeService->getForCommodity(); $station=$this->stationService->getStation_byType($stationType['name']); $materialBox=$this->materialBoxService->firstOrCreate(['code' => $orderCommodity['location']]); $stationTaskMaterialBoxId=StationTaskMaterialBox::query()->where('station_task_batch_id',$batch['id'])->where('material_box_id',$materialBox['id'])->get('id'); $stationTaskCommodities_toCreate->push( new StationTaskCommodity([ 'station_id'=>$station['id'], 'material_box_id'=>$materialBox['id'], 'commodity_id'=>$orderCommodity['commodity_id'], 'amount'=>$orderCommodity['amount'], 'bin_number'=>$orderCommodity['orderBin']['number']??'', 'order_id'=>$orderCommodity['order_id'], 'station_task_batch_id'=>$batch['id'], 'station_task_material_box_id'=>$stationTaskMaterialBoxId, 'status'=>'待处理', ]) ); } return $this->insert($stationTaskCommodities_toCreate->toArray(),true); } function markProcessing($stationTaskCommodity_orCollection) { if (get_class($stationTaskCommodity_orCollection)==StationTaskCommodity::class){ $stationTaskCommodity_orCollection = collect([$stationTaskCommodity_orCollection]); } StationTaskCommodity::query() ->whereIn('id',data_get($stationTaskCommodity_orCollection,'*.id')) ->update(['status'=>'处理中']); } function markProcessed(Collection $stationTaskCommodities){ StationTaskCommodity::query() ->whereIn('id',data_get($stationTaskCommodities,'*.id')) ->update(['status'=>'完成']); } }