| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- <?php
- namespace App\Services;
- use App\Batch;
- use App\OrderCommodity;
- use App\StationTask;
- use App\StationTaskBatch;
- use App\StationTaskCommodity;
- use App\StationTaskMaterialBox;
- use Illuminate\Support\Collection;
- use Illuminate\Support\Facades\Cache;
- use App\Traits\ServiceAppAop;
- class StationTaskCommodityService
- {
- use ServiceAppAop;
- protected $modelClass=StationTaskCommodity::class;
- /** @var StationService $stationService */
- private $stationService;
- /** @var StationTypeService $stationTypeService */
- private $stationTypeService;
- /** @var StationTaskService $stationTaskService */
- private $stationTaskService;
- /** @var MaterialBoxService $materialBoxService */
- private $materialBoxService;
- public function __construct(){
- $this->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'=>'完成']);
- }
- }
|