| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <?php
- namespace App\Services;
- use App\OracleActAllocationDetails;
- use App\OracleDOCOrderDetail;
- use App\OracleDOCOrderHeader;
- use App\Order;
- use App\OrderPackage;
- use App\OrderPackageCommodities;
- class OrderPackageService
- {
- public function __construct()
- {
- app()->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);
- }
- }
|