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']]); $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'], 'status'=>'待处理' ]) ); } return $this->insert($stationTaskCommodities_toCreate->toArray()); } public function insert(array $taskCommodities): ?Collection { StationTaskCommodity::query()->insert($taskCommodities); 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 markProcessing($stationTaskCommodities) { if (get_class($stationTaskCommodities)==StationTaskCommodity::class){ $stationTaskCommodities = collect($stationTaskCommodities); } StationTaskCommodity::query() ->whereIn('id',data_get($stationTaskCommodities,'*.id')) ->update(['status'=>'处理中']); $this->stationTaskService ->markProcessing_byId( data_get($stationTaskCommodities, '*.station_id') ); } }