bind('orderPackageCommoditiesService', OrderPackageCommoditiesService::class); } public function createdByOrder($order) { $orderPackageCommoditiesService = app('orderPackageCommoditiesService'); $actAllocationCount = OracleActAllocationDetails::query()->where('OrderNo', $order['code'])->count(); $orderHeader = OracleDOCOrderHeader::query()->where('OrderNo', $order['code'])->first(); $orderDetailCount = OracleDOCOrderDetail::query()->where('OrderNo', $order['code'])->count(); $logistic_number = null; if ($actAllocationCount == 0) { // 通过oracle Order Detail $logistic_number = $orderHeader['soreference5']; if ($orderDetailCount == 0) {return null;} if ($logistic_number == null || $logistic_number == '*') { return null; } try { $orderPackage = OrderPackage::query()->create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]); $orderPackageCommoditiesService->basedOnOracleDetailsStore($orderHeader['orderno'], $orderPackage); LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹orderPackage'. json_encode($orderPackage)); } catch (\Exception $e) { LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹orderPackage失败'.$e->getMessage().$e->getTraceAsString()); } } else if ($actAllocationCount > 0) { $count = OracleActAllocationDetails::query()->where('OrderNo', $order['code'])->whereNull('picktotraceid')->count(); if ($count > 0) { // 快递单号为空 if (($orderHeader['soreference5'] ?? false) && $orderHeader['soreference5'] == '*') { return null; } $logistic_number = $orderHeader['soreference5']; try { $orderPackage = OrderPackage::query()->create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]); $orderPackageCommoditiesService->basedOnOracleDetailsStore($order, $orderPackage); LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹orderPackage'. json_encode($orderPackage)); } catch (\Exception $e) { LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹orderPackage失败'.$e->getMessage().$e->getTraceAsString()); } } else { $ActAllocationDetails = OracleActAllocationDetails::query()->where('orderno', $order['code'])->get(); foreach ($ActAllocationDetails as $detail) { $logistic_number = $detail['picktotraceid']; if ($logistic_number == null || $logistic_number == '*') { $logistic_number = $orderHeader['soreference5']; if ($logistic_number == null || $logistic_number == '*') {return null;} $orderPackage = OrderPackage::query()->where(['order_id' => $order['id'], 'logistic_number' => $logistic_number])->first(); if($orderPackage){continue;} try { $orderPackage = OrderPackage::query()->create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]); $orderPackageCommoditiesService->basedOnActAllocationDetailsStoreByOrderNo($order['code'], $orderPackage); LogService::log(__METHOD__,__FUNCTION__,'创建订单orderPackage'.json_encode($orderPackage)); } catch (\Exception $e) { LogService::log(__METHOD__,__FUNCTION__,'创建订单orderPackage失败'.json_encode($e->getMessage()).json_encode($e->getTraceAsString())); } continue; } $orderPackage = OrderPackage::query()->where('order_id' , $order['id'])->where('logistic_number' , $logistic_number)->first(); if ($orderPackage) {continue;} try { $orderPackage = OrderPackage::query()->create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]); $orderPackageCommoditiesService->basedOnActAllocationDetailsStore($orderPackage); LogService::log(__METHOD__,__FUNCTION__,'创建订单'.json_encode($orderPackage)); } catch (\Exception $e) { LogService::log(__METHOD__,__FUNCTION__,'创建订单orderPackage失败'.json_encode($e->getMessage()).json_encode($e->getTraceAsString())); } } } }else{ $this->updateOrderPackageInfo($order); } return OrderPackage::with(['commodities' => function ($query) { return $query->with(['commodity']); }])->get(); } public function updateOrderPackageInfo(Order $order) { $orderHeader = OracleDOCOrderHeader::where('orderNo', $order['code'])->first(); if ($orderHeader['oracleBASCode_codename_c'] == $order['wam_status']) { return; } $orderPackages = OrderPackage::where('order_id', $order['id'])->get(); $orderPackageCommodities = OrderPackageCommodities::with('commodity')->whereIn('order_package_id', data_get($orderPackages, '*.id'))->get(); $actAllocationDetails = OracleActAllocationDetails::where('orderNo', $order['client_code'])->get(); if (count($orderPackageCommodities) < count($actAllocationDetails)) { $actAllocationDetails = $actAllocationDetails->reject(function($value,$key) use (&$orderPackageCommodities){ $bool = false; $count = 0; $orderPackageCommodities->reject(function($value1,$key1)use($value,&$bool,$count){ if($count>0){return false;} if($value1->commodity['sku'] == $value['sku'] && $value1['amount'] == intval($value['qty']) ){ $bool = true; $count++; return true; }else{ return false; } }); return $bool; }); } $orderPackageCommoditiesService = app('orderPackageCommoditiesService'); $orderPackageCommoditiesService->basedOnActAllocationDetail($order, $orderHeader, $actAllocationDetails); $order['wam_status'] = $orderHeader['oracleBASCode_codename_c']; $order->save(); } /** * @param string $logistic_number * @param array $values * @return OrderPackage $package */ public function firstOrCreate($logistic_number, array $values){ /** @var OrderPackage $package */ $package = OrderPackage::query()->where('logistic_number','=',$logistic_number)->first(); if ($package)return $package; /** @var OrderService */ $order = app('orderService')->logisticNumberCreateOrder($logistic_number); if ($order)$values["order_id"] = $order->id; $values["logistic_number"] = $logistic_number; /** @var OrderPackage $package */ $package = OrderPackage::query()->create($values); return $package; } public function createExceptionPaginate($paginate){ return OrderPackage::query()->select('id','status','logistic_number','measuring_machine_id','weighed_at','weight','length','width','height','bulk','paper_box_id') ->where('status','上传异常')->orWhere('status','测量异常')->orderBy('created_at','DESC') ->paginate($paginate); } public function issueExceptionPaginate($paginate){ return OrderPackage::query()->select('id','logistic_number','created_at','batch_number','batch_rule') ->where('status','下发异常')->orWhere('status','记录异常') ->orWhere('status','已上传异常')->orderBy('created_at','DESC') ->paginate($paginate); } }